跳到主要内容

Explorer 调试

调试失败的消息

当消息处理失败时,您会在页面顶部看到消息状态显示为"Error",并且页面右上角会说明消息无法处理的原因。

从 Alfajores 到 Base Goerli 的失败交易。

如果您的消息未能传递,可能是由于以下几个因素。

无效的目标链

如果中继客户端不知道目标域标识符(uint32),他们将无法传递您的消息。请参考文档了解已知域及向这些目标发送消息时使用的规范标识符。

无效的接收者

如果接收者地址(bytes32)不是实现了 IMessageRecipient 的合约地址,中继器将无法传递您的消息。

// SPDX-License-Identifier: MIT OR Apache-2.0
pragma solidity >=0.6.11;

interface IMessageRecipient {
function handle(
uint32 _origin,
bytes32 _sender,
bytes calldata _message
) external payable;
}
注意

EVM 地址(address)必须用零左填充才能符合要求。请参考 TypeCasts 库中的 pure addressToBytes32 工具函数,以及消息发送部分的其他详细信息。

无法处理

如果消息接收者的 IMessageRecipient.handle() 函数的 gas 估算失败,中继器将无法传递消息。中继器会继续估算消息传递所需的 gas,因为状态变化可能会使之前无法传递的消息变得可以成功传递。

由验证者签名但中继器无法处理的交易异常示例。

信息

如果您有此行为无法满足的用例,请在 Discord 上联系我们加入 Discord

资金不足

资金不足的消息意味着为传递此消息所做的跨链 gas 支付不足。

中继器使用目标链上的 eth_estimateGas RPC 来确定中继消息的绝对成本。如果这个数额超过了在源链上支付的总 gas 数额,中继器通常会拒绝传递消息。

您可以手动支付跨链 gas来解决这个问题。

使用 Etherscan

您也可以查看目标链上接收者的 Etherscan 页面,但请注意处理交易不会像您通常想象的那样出现在交易列表中。这是因为中继器实际上是调用 Mailbox 合约,然后 Mailbox 合约再调用接收者的 handle 函数。因此,您会在 Internal Txns 标签下找到处理的证据