跳转到内容

回退消息

当智能合约发送一个消息,并且标志 bounce 设置为 true 时,这时如果消息未被正确处理,它将回退给发送者。 这在您想确保消息已正确处理时很有用,且如果消息没有被正确处理——将会回退更改。

注意事项

目前,在 TON 中被回退的消息在消息体中仅有 224 个可用数据位,且不包含任何引用。 这意味着您无法从被回退的消息中恢复大部分数据。 这是目前 TON 区块链的局限性,将来会得到修复。 Tact能够帮助您检查消息是否符合限制,如果不符合,它会建议为回退消息的接收者使用特殊的类型构造器bounced<T>,该构造器会生成符合要求限制的一部分消息。

回退消息接收器

要接收被回退的消息,您需要定义一个 bounced() 接收函数 在你的 智能合约 或者一个 特性 当中:

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

要手动处理被回退的消息,您可以使用一个回退定义,直接处理原始的 Slice。 请注意,这样的接收器将获得由您的智能合约产生的**“所有”**被回退的消息:

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