Before diving into the TAC Proxy development itself,
we recommend getting familiar with concepts such as Message Flow (this page),
Proxy Functions,
and Fee Management.
RoundTrip Messages
RoundTrip messages follow this flow:- 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.
Decoding the Header
Asset Handling in Messages
Token Assets
Tokens are automatically transferred to your contract before your function is called:What’s Next?
Now that you understand the message flow, learn how to implement the core proxy function logic:Proxy Functions
Build the core logic that processes cross-chain calls and arguments