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