一条消息触发的不止一次收费
TON 的账本不像以太坊那样在交易起点一次性结清。它的智能合约体系由一串互相触发的消息构成:用户向入口合约发一条外部消息,入口合约可能再向金库、池子发出内部消息,每一跳都是一个独立事务、一份独立账单。官方文档把这笔总账拆成与执行阶段对齐的几类:存储费在 storage 阶段收,计算费在 compute 阶段收,转发费与动作费在 action 和 bounce 阶段收,import 费则在外部消息开始驱动合约执行时收取。一笔事务的总费用就是这几段之和。理解了分段,才能理解 TON 上”一条消息的代价”从来不是一个数。
价格由谁定:验证者投票写进链上配置
每段费用的单价都不是用户说了算。官方文档写明费率水平由验证者投票确定,落进区块链配置的参数表:存储费价格挂配置参数 18,计算费价格挂参数 20 与 21(分别对应工作链与主链),转发、import 与动作费挂参数 24 与 25。用户端能选择的是让合约多干活(多用 gas),不能自行出价——文档原话是网络配置定义 gas 价格、用户无法覆盖。这跟以太坊”自己抬 gwei 抢位置”的直觉完全不同:TON 的费用市场是配置驱动的公共定价,拥堵时你能改的是调用结构,不是单价。
存储费:按比特和格子的时长租金
TON 的状态单元是 cell(格子)与 bit(比特)。存储费的基础量是账户状态的规模:basic_price = 账户bits × bit_price + 账户cells × cell_price,实际收取时按距上次付费的时长折算:storage_fee = ceil(basic_price × time_delta / 2^16)。两个细节值得注意。一是去重规则:文档明确,被多条分支重复引用的相同子树按一份计费,复用不重复收租——默克尔结构共享在这里直接变成账单折扣。二是欠费后果:文档的合约开发指南把 freeze_due_limit 当作欠费冻结的阈值口径(示例代码注明主网该值为 0.1 Gram,并提醒换网络前必须核对目标链配置),账户余额跌破这条线后合约进入冻结状态,官方给出了链上解冻工具的路径。对长期挂在链上的账户(比如代收款地址),存储费是一笔按时间摊销的持有成本,而不是按次成本。

计算费:起步价加超量段的阶梯
所有计算按 gas 计量,TVM 指令通常有固定 gas 标价。计费结构是”包起步价、超量按档”:每次合约调用至少为 flat_gas_limit 这么多 gas 买单,起步部分固定收 flat_gas_price;用得更多时,超出部分按配置里的 gas_price 折算并除以 65536 累加。这套结构对小调用给了一个地板价(再省的调用也付起步费),对重计算给了线性上探——定价目标是让轻交易有底线成本、重交易按比例买单。gas 用尽而没执行完,调用以 out-of-gas 收场,费用照收,这是所有虚拟机共同的坑。
转发费与动作费:一条消息的运费怎么分
内部消息要付转发费。公式分两层:先按消息体的尺寸算体费 bodyFwdFee = priceForCells × (cells − 1) + priceForBits × (bits − bitsInRoot),再叠一个固定起步价:fwdFee = lumpPrice + ceil(bodyFwdFee / 2^16)。根格子被从体费里剔出去,官方文档的解释是根格主要装消息头,由 lumpPrice 统一覆盖——所以大消息多出的费用几乎全部来自实际载荷。转发费不是全给一个环节:其中按比例划出的动作费(action fee,按 fwd_fee × first_frac / 2^16 取整)归消息出发分片的验证者,其余归目的分片验证者;动作费只存在于内部消息。从 Global Version 4 起,尝试发送但失败的 SENDMSG 动作还要按消息尺寸缴纳与 cell 数成比例的罚金——发不出去不等于白试。外部消息进入合约执行一侧则有 import 费,结构与转发费镜像、起步逻辑相同。
组合起来的工程后果
分段账单在设计端有两个直接后果。第一,入口合约必须替整条消息链预检:文档要求接收外部消息的合约确认随消息附带的 Gram 足够覆盖链路上所有合约的存储、计算与转发费用,因为钱花出去就撤不回,链路中途一个合约缺钱会让整串事务失败。第二,成本随跳数与消息尺寸线性叠加:同一笔业务拆成更多跳、传更大消息,账单结构就变——这也是 TON 生态做批量、压缩与”一次调用尽量走完”的原因。把四类费用对齐到四个收钱阶段之后,排查一笔 TON 调用为什么贵,就从玄学变成逐段对账:是状态太大交了存储费,还是调用太深交了起步价,还是消息链太长付了一串转发费。
风险提示:费率参数与冻结阈值随链上配置由验证者投票调整,本文口径以 TON 官方文档记载为准;示例数值不构成成本承诺,也不构成投资建议。
发表评论
还没有评论,来说两句吧。
评论区为展示样式,提交不会被处理。