Appearance
退回(bounced)消息
当一个合约发送消息时,如果 bounce
标志设置为 true
,那么如果消息未能正确处理,它将退回给发送者。这在你希望确保消息被正确处理并在未处理时恢复更改时非常有用。
注意事项
目前,在 TON 中退回消息的消息体中只有 224 个可用数据位,并且没有任何引用。这意味着你无法从退回消息中恢复太多数据。这是 TON 区块链的一个限制,并将在未来得到修复。Tact 帮助你检查消息是否符合限制,如果不符合,建议使用一个特殊的类型构造器 bounced<T>
来接收退回消息,该构造器会构建一个符合要求限制的消息的部分表示。
退回消息接收器
要接收退回消息,请在你的合约或特性中定义一个 bounced()
接收函数:
solidity
contract MyContract {
bounced(msg: bounced<MyMessage>) {
// ...
}
}
要手动处理退回消息,你可以使用一个处理原始 Slice
的回退定义。注意,这样的接收器将接收你的合约产生的所有退回消息:
solidity
contract MyContract {
bounced(rawMsg: Slice) {
// ...
}
}