调试与排查
调试 OXN 交易和调试以太坊大体一致——同样的 gas 概念、同样的 revert、同样的事件日志——只有一个大转折:revert reason 是加密的。交易失败时你无法从外部读取错误消息。本页覆盖实战调试手册。
读取 revert reason
以太坊上: require(false, "not authorized") revert 时,区块浏览器在交易详情里显示 "not authorized"。
OXN 上: 同样的调用 revert 时 reason 加密。浏览器看到密文。只有提交交易的调用者能解密错误。
怎么看到真实原因
用持有会话密钥的 wrapped provider:
try {
await token.transfer(recipient, amount, { gasLimit: 500_000n });
} catch (err) {
console.log(err.reason); // "not authorized"——被 wrapped provider 解密
console.log(err.data); // 完整 error 对象
}
如果调用者是你自己的客户端(通常是),你有密钥。如果调用者是用户,而你要从你这边调试他的失败,你没有密钥——只能向用户要错误信息,或者自己复现失败。
调试用户报告的失败
用户报告"交易失败",你的选项:
- 让用户查钱包。 MetaMask / OXN Wallet 会显示解密后的 revert reason(他是调用者)。
- 用同样的输入复现。 从自己的地址用同样参数签一次调用看会 revert 什么。
- 加更好的链上断言。 自定义 error(
error NotAuthorized(address caller);)带结构化字段比字符串更好识别。