Jetton Transfers

The ton.assets.jetton_transfers contains jetton transfers identified from ton.raw.messages with the opcode 0x0f8a7ea5.

This model does not include internal transfers and transfer notifications to prevent duplicate volume counts (read more Ton and Jetton Wallet Communication below for context).

This table is in Beta

  • There may be unaccounted edge cases involving jetton transfers that do not involve transfer

All address fields used in this table will be in Hex format and upper casing

  • There are up to 5 equivalent addresses for a given address on Ton.

  • Example of Hex address: 0:B113A994B5024A16719F69139328EB759596C38A25F59028B146FECDC3621DFE

Asynchronous and Non-Atomic Transactions in TON

The TON blockchain operates differently from many other blockchains, particularly in how it handles transactions.

Two key characteristics of TON transactions are their asynchronous and non-atomic nature:

Asynchronous Transactions:

In TON, when a transaction is initiated, it isn't immediately complete. Instead, it triggers a series of message-passing events between smart contracts. These messages are processed in subsequent blocks, which means the full execution of a transaction can span multiple blocks.

Implications:

  • The final state of a transaction isn't known immediately after it's sent.

  • There can be a delay between when a transaction is initiated and when it's fully executed.

Non-Atomic Transactions:

Atomicity in database systems means that a transaction is treated as a single, indivisible unit that either completes entirely or not at all. In TON, transactions are not atomic. This means that a single logical operation (like a token transfer) might involve multiple separate steps that can be partially completed.

Implications:

  • A transaction can partially succeed or fail.

  • Some effects of a transaction can occur while others don't.

  • Error handling and state management become more complex.

Jetton Wallets Communication

For Jetton (TON's equivalent of ERC20) transfers, this asynchronous and non-atomic nature manifests as follows:

  1. The initial transfer operation is just the first step of the transfer

  2. This triggers an internal transfer between two Jetton wallets.

  3. To confirm a successful transfer, we must check that this internal transfer has occurred.

In our Jetton Transfers, we check that there is a corresponding internal_transfer message that has succeded. This will be represented by succcess = true

Table Columns

Unique Key: unique_id

ColumnDescription

from_address

Address that initiated the transfer [Bob's Wallet]

from_jetton_address

Jetton address of the user that initiated the transfer [Bob's Jetton Wallet]

to_address

Address that received the transfer [Alice's wallet]

Note: to_jetton_address included in our schema, this field is not present in the decoded transfer payload.

jetton_master

Jetton master address in hex. This is the token contract equivalent (like ERC20) on TON.

token_name

Name of the token

token_symbol

Symbol of the token

amount_str

Amount of the token in string format

amount

Amount of the token in float format

raw_amount_str

The unnormalized amount of the token in string format

raw_amount

The unnormalized amount of the token in float format

response_destination

Response destination of the transfer [Joe's wallet address]

forward_ton_amount

Forward TON amount of the transfer

forward_payload

Forward payload of the transfer

block_timestamp

Timestamp of the block that contains the transfer

utime

Timestamp of the transfer

hash

Message hash of the transfer

created_lt

Logical time of the transfer

masterchain_seqno

Sequence number on the masterchain

seqno

Sequence number on the workchain

shard

Shard of the transfer

workchain

Workchain of the transfer

bounce

Bounce of the transfer

bounced

Bounced of the transfer

tokens_updated_at

Timestamp of the last update of the token

created_at

Timestamp of the creation of the transfer

updated_at

Timestamp of the last update of the transfer

changed_since_full_refresh

Whether the transfer has changed since the last full refresh

Last updated