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();relayindicates whether message processing is required on MAP Relay Chain (set to1if processed on MAP Relay Chain).msgTypeindicates different message,MESSAGE(set to1) orCALLDATA(set to0, deprecated, not supported on TON Network).targetis the contract address where the message will be executed upon reaching the target chainpayloadis the data intended for cross-chain transmission.gasLimitis 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:
1360104473493505testnet:
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