摘要: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 交易看起来是「一棵树」而不是一笔交易的原因,下面用截图说明。

每个钱包都是合约:看一个钱包页

TON 链怎么运作:分片、Jetton 与钱包地址格式-程序旅途
图1:Tonviewer 中文界面的钱包页:地址 UQAXT3HB…AmVZ,余额 0.704 GRAM (prev. TON),代币 6.86 USD₮,合同类型 wallet_v5r1,下方灰字 0:174…93302 是原始地址(数值为截图时数据)

几个要点:

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

地址格式:raw、EQ 与 UQ

TON 链怎么运作:分片、Jetton 与钱包地址格式-程序旅途
图2:TON 官方文档 Internal address formats:依据 TEP-2,内部地址有 raw 和 user-friendly 两种等价格式;raw 格式为 workchain_id:account_id,-1 是主链、0 是 basechain(界面为英文)

按官方文档和 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 转账为什么是一棵交易树

TON 链怎么运作:分片、Jetton 与钱包地址格式-程序旅途
图3:Tonviewer 交易页:事件概览列出 7 USD₮ 转入、合约部署、6.86 与 0.14 USD₮ 两笔转出和一笔 NFT 发送;交易树从 Wallet Signed External 开始,经 Jetton Transfer、Jetton Internal Transfer、Jetton Notify 逐级传递,底部 Internal message 显示 OpCode Jetton Transfer 0x0f8a7ea5(截图时数据)

这是 2026-09-26 14:29(UTC+8)确认的一次操作。「事件概览」是浏览器归纳后的结果;「交易树」才是链上真实发生的东西,每个圆圈是一个账户上的一笔交易,每条边是一条消息:

  1. Wallet Signed External:用户钱包签名后,从链外发给自己钱包合约的外部消息,这是整棵树唯一的起点。
  2. Jetton Transfer:用户钱包合约 A 向自己的 USDT Jetton 钱包 B 发内部消息,附带 0.55 GRAM 用来支付后续各步的手续费。
  3. Jetton Internal Transfer:B 扣减余额,向收款方的 Jetton 钱包 C 发消息,C 增加余额。收款方如果还没有 Jetton 钱包,这一步会自动部署一个(事件概览里的「合约部署」)。
  4. Jetton Notify:C 通知它的主人 D「你收到了代币」,并转交附带的 GRAM;D 是一个收到通知后会继续执行逻辑的合约,于是又分出两笔 Jetton 转账和一笔 NFT 转移。
  5. 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:主合约 + 每人一个钱包合约

TON 链怎么运作:分片、Jetton 与钱包地址格式-程序旅途
图4:Tonviewer 上的 USD₮ Jetton 主合约 EQCxE6mU…Id_sDs:合同类型 jetton_master,持有人约 345 万(截图时数据)

Jetton 标准(TEP-74)把代币拆成两类合约:

  • Jetton master(主合约):保存名称、小数位、总量等元数据,负责铸造,并能根据「主人地址」算出对应的 Jetton 钱包地址。认准代币要看的就是主合约地址,USDT 在 TON 上的主合约是 EQCxE6mUtQJKFnGfaROTKOt1lZbDiiX1kCixRv7Nw2Id_sDs。
  • Jetton wallet(代币钱包):每个持有者一个,只记录这一个人的余额。转账是两个 Jetton 钱包之间直接发消息,主合约并不参与。
TON 链怎么运作:分片、Jetton 与钱包地址格式-程序旅途
图5:上图交易中新部署的 Jetton 钱包 EQBmMucg…:合同类型 jetton_wallet_governed,页面同时列出它所属的 Jetton 主账户和持有者地址 EQCtea5o…(截图时余额为 0,代币已被转出)

这样设计避免了「一个大合约存所有人余额」的热点,符合分片架构;代价是转账要多几跳消息、每一跳都要付手续费,所以发 Jetton 时钱包会预留一些 GRAM 作为 forward 费用,多余部分再退回。校验一个 Jetton 钱包是否真的属于某个代币,就看它的「Jetton 主账户」是不是官方主合约地址。

手续费由哪些部分组成

TON 的交易费用原生币 GRAM 支付,官方文档把它拆成几类:计算费(gas)、消息转发费(forward fee,截图 Internal message 里的 Forward Fee 字段)、以及账户的存储费(合约占用链上存储要按时间付「租金」,余额长期为零的合约可能被冻结)。各项单价是网络配置参数,会被链上治理调整,本文不给固定数字,以浏览器显示的实际扣费为准。

自己核对一笔 TON 转账的步骤

  1. 打开 Tonviewer,右上角语言切到中文,搜索地址或交易哈希。
  2. 钱包页先看合同类型和 Active 状态,确认是你用的钱包版本。
  3. 进入交易页,在「事件概览」看结论,在「交易树」看每一跳是否成功。
  4. 代币转账点开 Jetton 钱包,核对「Jetton 主账户」是官方主合约。
  5. 给交易所充值时,确认 Memo / Comment 与交易所要求一致。

需要一个支持 TON 的自托管钱包的话,欧易 Web3 钱包也支持 TON 网络,创建时可填推荐码 CHENGXULVTU,步骤见 欧易 Web3 钱包怎么用。从交易所往 TON 提 USDT 前,先看 币安 USDT 提现怎么选网络。

相关阅读

说明:钱包、交易和合约数据均为 2026-09-26 截图时的数值;地址格式依据 TON 官方文档与 TEP-2,Jetton 机制依据 TEP-74。本文不构成任何投资建议。