Message with Ton
Messaging with Ton Network
Chain Id and Contract
Check Contract here.
Ton Testnet contract
kQDJdptC1nHSC9XUR2q5fSFIY8hAHqZYqfoZRF01Y6joXYfJ
Ton Network message out
Call message out
slice bridge_addr = <bridge address>;
;; message out body
cell body = begin_cell()
.store_uint(0x136a3529, 32) ;; op::message_out
.store_uint(0, 64) ;; queryId
.store_uint(0, 8) ;; relay, 0 or 1
.store_uint(0, 8) ;; msgType, 1 for message
.store_uint(56, 64) ;; toChain, eg. 56 for bnb
.storeAddress(<initiator_address>) ;; initiator
.store_slice(<target>) ;; target address
.store_uint(200000000, 64) ;; gasLimit
.store_ref(<payload>) ;; payload, custom data
).end_cell();
;; internal message
cell msg = begin_cell()
.store_uint(0x18, 6)
.store_slice(bridge_addr)
.store_coins(50000000) ;; 0.05 TON for fees
.store_uint(0, 1 + 4 + 4 + 64 + 32 + 1 + 1)
.store_slice(body)
.end_cell();
relay
indicates whether message processing is required on MAP Relay Chain (set to1
if processed on MAP Relay Chain).msgType
indicates different message,MESSAGE
(set to1
) orCALLDATA
(set to0
, deprecated, not supported on TON Network).target
is the contract address where the message will be executed upon reaching the target chainpayload
is the data intended for cross-chain transmission.gasLimit
is the maximum gas limit allowed for execution on the target chain.
data example
relay
0
msgType
1
MESSAGE
toChain
11155111
Sepolia chain id
initiator
0x00f723e983d1cfc0da138b9046e03ca500dbe8a23e12b960c415ad423615180ecb
The raw address 0:f723e983d1cfc0da138b9046e03ca500dbe8a23e12b960c415ad423615180ecb
of
EQD3I-mD0c_A2hOLkEbgPKUA2-iiPhK5YMQVrUI2FRgOy4LB
target
0x8c8afd3ff50c4D8e0323815b29E510a77D2c41fd
Executor contract on Sepolia
gasLimit
300000
payload
0x96a296d224f285c6...
Message to Ton Network
Sending a omni-chain message to TON is the same as sending messages to other chains. You can directly encode the assembled MessageData
and then call transferOut
to send the omni-chain message. It is essential to ensure that the message data payload is a message that can be recognized by TON.
bytes memory messageData = abi.encode(MessageData({}));
function transferOut(
uint256 toChain,
bytes memory messageData,
address feeToken
) external payable returns (bytes32);
Here, toChain
is the TON Network chain id:
mainnet:
1360104473493505
testnet:
1360104473493506
And check MessageData here.
data example
toChain
1360104473493506
TON Testnet chain id
relay
0
msgType
1
MESSAGE
target
0x002bffbd154f9e738634d618e0c8f4928531e3f85c475fc934461f2ccf18bfe5e5
The raw address 0:2bffbd154f9e738634d618e0c8f4928531e3f85c475fc934461f2ccf18bfe5e5
of
UQAr_70VT55zhjTWGODI9JKFMeP4XEdfyTRGHyzPGL_l5cHA
gasLimit
50000000
send 0.05 TON as gas fee
payload
0x96a296d224f285c6...
Execute on Ton Network
On ton network, will send an mapo_execute(0xa5b6af5b)
message to the target contract.
begin_cell()
.store_op(op::mapo_execute)
.store_query_id(query_id)
.store_uint(1, 64) ;; from chain id
.store_uint(56, 64) ;; to chain id
.store_slice(sender_address) ;; sender address
.store_uint(2, 256) ;; order id
.store_ref(begin_cell().end_cell()) ;; message
.end_cell()
Last updated