摘要:TON 采用主链+工作链+动态分片架构,合约之间靠异步消息通信。本文用 Tonviewer 中文界面的真实钱包、交易树和 USDT Jetton 合约,讲清 Jetton 转账流程、EQ/UQ 地址格式与 bounceable 的含义。
TON(The Open Network)和以太坊、BNB Chain 这类 EVM 链的设计思路很不一样:它是多链 + 动态分片架构,每个账户都是智能合约,合约之间靠异步消息通信;代币标准 Jetton 也不是「一个合约记所有人余额」,而是每个持有者一个独立的 Jetton 钱包合约。本文用 Tonviewer(有简体中文界面)上的真实钱包、交易树和 USDT 合约页,把分片、消息、Jetton 和地址格式逐个讲清。不涉及任何代币行情。
先说一个 2026 年的变化:TON 链的原生币在 2026 年 6 月 15 日由 Toncoin 更名为 Gram(GRAM),链仍叫 TON,余额和地址 1:1 不变,所以下面截图里的余额显示为「GRAM (prev. TON)」。任何声称「需要把 TON 兑换/升级成 GRAM」的链接都是骗局,无需任何操作。
架构:主链、工作链与分片链
- Masterchain(主链,workchain -1):保存网络配置、验证者集合,以及所有分片链最新区块的哈希。某个分片区块被主链区块引用后,才算最终确认。
- Workchain(工作链):协议允许多条规则不同的工作链并存,目前用户和普通合约都在 basechain(workchain 0)。
- Shardchain(分片链):每条工作链会按负载动态拆分成多个分片,负载高时分裂、降低后合并。账户按地址前缀落到对应分片,所以同一时间不同账户的交易可以在不同分片里并行处理。
这种设计换来的是横向扩展能力,代价是跨账户操作是异步的:A 合约给 B 合约发消息,B 的处理可能发生在另一个分片、更晚的区块里。这正是 TON 交易看起来是「一棵树」而不是一笔交易的原因,下面用截图说明。
每个钱包都是合约:看一个钱包页

几个要点:
- 合同类型 wallet_v5r1:TON 上没有以太坊那种「外部账户」,钱包本身就是一个部署在链上的合约,有 v3、v4、v5(W5)等版本。同一个助记词在不同版本下会得到不同的地址,导入钱包后发现余额为 0,常见原因就是版本选错了。
- Active:合约已部署。新钱包第一次向外发送交易时才会部署合约,在此之前它处于未初始化状态,但可以收款。
- 0:174…:这是同一地址的 raw 格式,冒号前的 0 表示 basechain。
地址格式:raw、EQ 与 UQ

按官方文档和 TEP-2:
- Raw 格式:
workchain_id:account_id,account_id 是 256 位十六进制,由合约初始代码和数据(StateInit)的哈希推出。链上合约内部使用这种格式。 - User-friendly 格式:48 个 base64url 字符(36 字节),依次包含 1 字节 flag(是否 bounceable、是否测试网)、1 字节 workchain、32 字节 account_id 和 2 字节 CRC16 校验。所以同一个地址的开头会变:主网 bounceable 以 EQ 开头,主网 non-bounceable 以 UQ 开头,测试网对应 kQ / 0Q。
| 前缀 / 形式 | 含义 | 常见用途 |
|---|---|---|
| 0:… / -1:… | raw 格式,冒号前为工作链 | 开发、合约内部 |
| EQ… | 主网,bounceable | 合约地址(如 Jetton 主合约) |
| UQ… | 主网,non-bounceable | 钱包 App 展示的个人收款地址 |
| kQ… / 0Q… | 测试网 bounceable / non-bounceable | 测试网,主网不要用 |
例如 EQCtea5oIFumwWWFTRhQANVDBHtZEP3YCkGIC_A5UBj9IgrT 和 UQCtea5oIFumwWWFTRhQANVDBHtZEP3YCkGIC_A5UBj9IlcW 是同一个地址,只有 flag 和末尾校验位不同。bounceable 的含义是:如果目标合约不存在或处理失败,资金会随「弹回」消息退回发送方。向还没部署的新钱包转账时用 bounceable,钱会被弹回,所以钱包对个人地址默认显示 UQ 形式。
交易所充值 TON 链资产时通常还要求填写 Memo / Comment(备注),因为很多交易所所有用户共用一个充值地址,靠备注区分用户。漏填备注是 TON 充值不到账的高频原因。
一笔 USDT 转账为什么是一棵交易树

这是 2026-09-26 14:29(UTC+8)确认的一次操作。「事件概览」是浏览器归纳后的结果;「交易树」才是链上真实发生的东西,每个圆圈是一个账户上的一笔交易,每条边是一条消息:
- Wallet Signed External:用户钱包签名后,从链外发给自己钱包合约的外部消息,这是整棵树唯一的起点。
- Jetton Transfer:用户钱包合约 A 向自己的 USDT Jetton 钱包 B 发内部消息,附带 0.55 GRAM 用来支付后续各步的手续费。
- Jetton Internal Transfer:B 扣减余额,向收款方的 Jetton 钱包 C 发消息,C 增加余额。收款方如果还没有 Jetton 钱包,这一步会自动部署一个(事件概览里的「合约部署」)。
- Jetton Notify:C 通知它的主人 D「你收到了代币」,并转交附带的 GRAM;D 是一个收到通知后会继续执行逻辑的合约,于是又分出两笔 Jetton 转账和一笔 NFT 转移。
- Excess:各环节用剩的 GRAM 以 excesses 消息退回。
底部 Internal message 里的 amount: "6860000" 就是 6.86 USD₮:TON 上的 USDT 是 6 位小数。Created lt 是逻辑时间(logical time),TON 用它来给同一账户上的消息和交易排序。
实用结论:在 TON 上看到「确认交易」只代表这棵树已处理完,但树里可能有个别分支失败(圆圈旁的感叹号标记)。核对转账时,要点进具体那条 Jetton Internal Transfer / Jetton Notify,确认收款方 Jetton 钱包确实入账,而不是只看第一笔。
Jetton:主合约 + 每人一个钱包合约

Jetton 标准(TEP-74)把代币拆成两类合约:
- Jetton master(主合约):保存名称、小数位、总量等元数据,负责铸造,并能根据「主人地址」算出对应的 Jetton 钱包地址。认准代币要看的就是主合约地址,USDT 在 TON 上的主合约是
EQCxE6mUtQJKFnGfaROTKOt1lZbDiiX1kCixRv7Nw2Id_sDs。 - Jetton wallet(代币钱包):每个持有者一个,只记录这一个人的余额。转账是两个 Jetton 钱包之间直接发消息,主合约并不参与。

这样设计避免了「一个大合约存所有人余额」的热点,符合分片架构;代价是转账要多几跳消息、每一跳都要付手续费,所以发 Jetton 时钱包会预留一些 GRAM 作为 forward 费用,多余部分再退回。校验一个 Jetton 钱包是否真的属于某个代币,就看它的「Jetton 主账户」是不是官方主合约地址。
手续费由哪些部分组成
TON 的交易费用原生币 GRAM 支付,官方文档把它拆成几类:计算费(gas)、消息转发费(forward fee,截图 Internal message 里的 Forward Fee 字段)、以及账户的存储费(合约占用链上存储要按时间付「租金」,余额长期为零的合约可能被冻结)。各项单价是网络配置参数,会被链上治理调整,本文不给固定数字,以浏览器显示的实际扣费为准。
自己核对一笔 TON 转账的步骤
- 打开 Tonviewer,右上角语言切到中文,搜索地址或交易哈希。
- 钱包页先看合同类型和 Active 状态,确认是你用的钱包版本。
- 进入交易页,在「事件概览」看结论,在「交易树」看每一跳是否成功。
- 代币转账点开 Jetton 钱包,核对「Jetton 主账户」是官方主合约。
- 给交易所充值时,确认 Memo / Comment 与交易所要求一致。
需要一个支持 TON 的自托管钱包的话,欧易 Web3 钱包也支持 TON 网络,创建时可填推荐码 CHENGXULVTU,步骤见 欧易 Web3 钱包怎么用。从交易所往 TON 提 USDT 前,先看 币安 USDT 提现怎么选网络。
相关阅读
- Solana 为什么快:PoH、账户模型与交易费怎么看
- 比特币 UTXO 模型是什么:看懂一笔交易的输入、输出与找零
- 欧易 Web3 钱包怎么用:创建、导入与转账基础图解
- 币安 USDT 提现怎么选网络:TRC20/ERC20/BEP20 对照与步骤
说明:钱包、交易和合约数据均为 2026-09-26 截图时的数值;地址格式依据 TON 官方文档与 TEP-2,Jetton 机制依据 TEP-74。本文不构成任何投资建议。
