Butter Network
Github
  • 🌈About Butter Network
  • 🔥ZK Light Client
    • Understanding Light Client
    • Refactored ZK Light Client
  • 🔥Omnichain Development
    • Omnichain Isomorphism
    • More Possibilities
  • 🌈Butter Omnichain Messaging Integration
    • Introduction
    • Integration Guide
      • Message
      • Message with Ton
      • CALLDATA
      • Message And Relay
    • Contract Interface
    • Fee
    • Deployed Contracts
    • 👨‍💻API for Omnichain Message
      • GET Message History by Source Address
      • GET Message Info by Id
      • GET Message Info by Source Hash
  • 🔥Butter Bridge Integration
    • Integration Guide
    • Contract Interface
    • Fee
    • Deployed Contracts
  • 💰Butter Swap Integration
    • Introduction
    • 🟢Integration Guide
      • Contract Interface
      • Fee
    • Deployed Contracts
      • v2.1
    • 👩‍💻API for Routing
      • Integration Guide
      • GET /route
      • GET /swap
      • GET /routeAndSwap
      • GET /supportedChainList
      • GET /findToken
      • 🔴Error Code List
    • 👨‍💻API for Swap Data
      • GET Swap History by Source Hash
      • GET Swap History by Source Address
      • GET Swap Info by Order ID
      • GET Supported Chain Detail List
      • GET Supported Token Detail List
  • 💰Butter Swap User Guide
    • 🫂User Guide
  • Butter Swap SDK
    • Install
    • Config SDK
    • Request Routes
    • Execute Route
    • Others
  • Butter Swap Widget
    • Usage
  • 📢Resources
    • 🏠Website
    • 🫂Telegram
    • 📄X
Powered by GitBook
On this page
  • Messaging with Ton Network
  • Chain Id and Contract
  • Ton Network message out
  • Message to Ton Network
  1. Butter Omnichain Messaging Integration
  2. Integration Guide

Message with Ton

PreviousMessageNextCALLDATA

Last updated 5 months ago

Messaging with Ton Network

Chain Id and Contract

Check 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 to 1 if processed on MAP Relay Chain).

  • msgType indicates different message, MESSAGE (set to 1) or CALLDATA (set to 0, deprecated, not supported on TON Network).

  • target is the contract address where the message will be executed upon reaching the target chain

  • payload is the data intended for cross-chain transmission.

  • gasLimit is the maximum gas limit allowed for execution on the target chain.

data example

parameter
data

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

data example

parameter
data

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()

And check here.

🌈
Contract
MessageData