Post-Dispatch Hooks
Post-dispatch hooks允许开发人员配置额外的源链行为,通过邮箱分发消息内容。
这允许开发人员在维护一致的单次调用邮箱接口的同时,集成第三方/本地桥,作出额外的链承诺,或要求自定义费用。
IPostDispatchHook
Interface
Post Dispatch
除了通过邮箱发送的message
之外,postDispatch
函数还接收一个metadata
参数。metadata
参数从dispatch
调用通过未修改的Mailbox传递。这允许开发人员将任何上下文传递给钩子。
- Solidity
function postDispatch(
bytes calldata metadata,
bytes calldata message
) external payable;
如果'postDispatch'函数收到的付款不足,它可能会回滚。
Quote Dispatch (Fees)
通常在postDispatch
中收取费用,以支付目的地链交易提交和安全配置等成本。要接收相应postDispatch
调用的报价,可以查询quoteDispatch
函数。
- Solidity
function quoteDispatch(
bytes calldata metadata,
bytes calldata message
) external view returns (uint256);
邮箱有一个quoteDispatch
函数,用于返回成功调用dispatch
所需的总费用。
转到实现钩子指南这里
覆盖默认钩子元数据
为了覆盖默认的元数据,有一个dispatch
重载,它接受一个可选的metadata
参数。
info
Hooks目前期望使用StandardHookMetadata
library格式化元数据。
- Solidity
function dispatch(
uint32 destinationDomain,
bytes32 recipientAddress,
bytes calldata messageBody,
bytes calldata hookMetadata
) external payable override returns (bytes32) {
自定义的metadata
将被传递给所需钩子的quoteDispatch
和postDispatch
函数,然后再传递给默认钩子的postDispatch
函数。
示例
StandardHookMetadata
Library
origin:
destination:
body:
- Solidity
- CosmWasm
- Sealevel
// send message from alfajores to fuji TestRecipient
IMailbox mailbox = IMailbox("0xEf9F292fcEBC3848bF4bB92a96a04F9ECBb78E59");
mailbox.dispatch{value: msg.value}(
43113,
"0x00000000000000000000000044a7e1d76fD8AfA244AdE7278336E3D5C658D398",
bytes("Hello, world"),
StandardHookMetadata.overrideGasLimit(200000)
);
🚧 Coming soon! 🚧
🚧 Coming soon! 🚧
自定义钩子和元数据
在实现了上面的接口之后,你可以通过在我们的邮箱中重载的dispatch
调用来覆盖钩子元数据中的默认钩子:
- Solidity
function dispatch(
uint32 destinationDomain,
bytes32 recipientAddress,
bytes calldata messageBody,
bytes calldata metadata,
IPostDispatchHook hook
) public payable virtual returns (bytes32) {
示例
origin:
destination:
body:
- Solidity
- CosmWasm
- Sealevel
// send message from alfajores to fuji TestRecipient
IMailbox mailbox = IMailbox("0xEf9F292fcEBC3848bF4bB92a96a04F9ECBb78E59");
IPostDispatchHook merkleTree = IPostDispatchHook("0x221FA9CBaFcd6c1C3d206571Cf4427703e023FFa");
mailbox.dispatch(
43113,
"0x00000000000000000000000044a7e1d76fD8AfA244AdE7278336E3D5C658D398",
bytes("Hello, world"),
"0x", // empty metadata
merkleTree
);
🚧 Coming soon! 🚧
🚧 Coming soon! 🚧