Chains

TON (The Open Network)

The TEP-2 user-friendly form in either base64 alphabet: 36 bytes, a bounceable or non-bounceable tag, one of the two workchains that exist, and the CRC16 verified.
IDton24 / 36ton · TON
Chain / TON

TON (The Open Network)

"ton""TON (The Open Network)"

Symbol
TON · 9 decimals
Coin type
607
CAIP-2
ton:-239
Checks
address · txid
fields set 5 / 9

Network

CAIP-2ton:-239
Magicnone
PoWnone
RPCnone
Explorertonscan.org

Access

Createcreate("ton")
ResolvegetChain("ton")
CLIchains info ton
Tryplayground with a sample address

Address format

The TEP-2 user-friendly form: 36 bytes in unpadded base64, so exactly 48 characters. Wallets emit the URL-safe alphabet with - and _, the standard one with + and / is in circulation too, and both pass. The first byte is the tag, 0x11 for bounceable (EQ…) or 0x51 for non-bounceable (UQ…). A set testnet flag is rejected the way Bitcoin's testnet versions are. The second byte is the workchain, 0x00 for the basechain or 0xff for the masterchain, the only two that exist. Both live inside one network, so neither is the CAIP-2 reference: that's the network's global_id, -239 on mainnet, the id TON Connect and WalletConnect pass around.

The last two bytes are the CRC16-XModem of the 34 before them, and they're verified: one character off fails, which is what TEP-2 puts the checksum there for. The raw workchain:hex form isn't accepted, because wallets and explorers exchange the friendly one.

ts
import { getChain } from "@agntn/chains";

const chain = getChain("ton");
chain.assertAddress("EQCxE6mUtQJKFnGfaROTKOt1lZbDiiX1kCixRv7Nw2Id_sDs"); // returned unchanged
chain.type; // "ton"
chain.caip2; // "ton:-239"

Spellings

ton, TON (The Open Network). The key is ton, the rest resolve through getChain.