Skip to content

退回(bounced)消息

当一个合约发送消息时,如果 bounce 标志设置为 true,那么如果消息未能正确处理,它将退回给发送者。这在你希望确保消息被正确处理并在未处理时恢复更改时非常有用。

注意事项

目前,在 TON 中退回消息的消息体中只有 224 个可用数据位,并且没有任何引用。这意味着你无法从退回消息中恢复太多数据。这是 TON 区块链的一个限制,并将在未来得到修复。Tact 帮助你检查消息是否符合限制,如果不符合,建议使用一个特殊的类型构造器 bounced<T> 来接收退回消息,该构造器会构建一个符合要求限制的消息的部分表示。

退回消息接收器

要接收退回消息,请在你的合约特性中定义一个 bounced() 接收函数

solidity
contract MyContract {
    bounced(msg: bounced<MyMessage>) {
        // ...
    }
}

要手动处理退回消息,你可以使用一个处理原始 Slice 的回退定义。注意,这样的接收器将接收你的合约产生的所有退回消息:

solidity
contract MyContract {
    bounced(rawMsg: Slice) {
        // ...
    }
}