RoundTrip Messages
If a TON → TAC call is reverted on the EVM side after tokens have been
bridged, a rollback transaction is created to send the bridged assets back to
the originating TON wallet.To guarantee this behavior, the call must be
treated (and paid) as a RoundTrip. The SDK sets messages to RoundTrip by
default, so on revert (e.g., slippage), funds will be returned automatically.
- TON user sends transaction with assets and function call
- TAC proxy receives the call and processes it
- TAC proxy sends result assets back to the same TON user
If you expect the TAC-side transaction may revert and assets need to be bridged back to TON, you must pay fees as for a RoundTrip message.
By default, the SDK treats all messages as RoundTrip, so even if a revert occurs (e.g., due to slippage), the funds will be returned to the original TON user because the RoundTrip fee was already paid.
Message Processing
When a TON user interacts with your EVM contract:- User submits a transaction on TON with target contract, function name, and arguments
- Assets (if any) are bridged to TAC and transferred to your proxy contract
- CrossChainLayer calls your proxy function with TAC header and arguments
- Your contract can optionally send assets back to TON using
_sendMessageV1()
TAC Header Structure
Every cross-chain call includes a TAC header with verified information about the original TON transaction:Header Field Details
shardsKey: Links related cross-chain operations together. Use this in your response messages to maintain the connection. timestamp: The block timestamp from the original TON transaction. Useful for time-based logic or debugging. operationId: Unique identifier for this specific cross-chain operation. Use for logging and tracking. tvmCaller: The TON user’s wallet address. !!! Important !!! It is always base64 mainnet bounceable format and starts with “EQ”. This is your authenticated user identity - treat it likemsg.sender
in regular Ethereum contracts.
extraData: For now it’s always a zero-bytes array and not used.