Bounced messages
When a contract sends a message with the flag bounce
set to true
, and if the message isn’t processed properly, it will bounce back to the sender. This is useful when you want to ensure that the message has been processed properly and, if not, revert the changes.
Caveats
Currently, bounced messages in TON have only 224 usable data bits in the message body and don’t have any references. This means that you can’t recover much of the data from the bounced message. This is a limitation of the TON blockchain and will be fixed in the future. Tact helps you to check if your message fits the limit, and if it doesn’t, suggests using a special type constructor bounced<M>
for the bounced message receiver, which constructs a partial representation of the message that fits within the required limits.
Bounced message receiver
To receive a bounced message, define a bounced()
receiver function in your contract or a trait:
contract MyContract { bounced(msg: bounced<MyMessage>) { // ... }}
To process bounced messages manually, you can use a fallback definition that handles a raw Slice
directly. Note that such a receiver will get all the bounced messages produced by your contract:
contract MyContract { bounced(rawMsg: Slice) { // ... }}