新指令介绍,用于计算廉价手 续费
新指令介绍,用于计算廉价手续费
提示
此更新已在测试网激活,预计将于4月在主网激活。此更新的预览版本可在@ton-community/sandbox@0.16.0-tvmbeta.3、@ton-community/func-js@0.6.3-tvmbeta.3与@ton-community/func-js-bin@0.4.5-tvmbeta.3包中找到。
此更新通过Config8 version >= 6进行激活。
c7
c7 元组从 14 个元素扩展到 16 个元素:
- 14:元组,包含一些作为 cell slice 的配置参数。如果配置中没有该参数,则其值为空。
- 0: 来自
ConfigParam 18的StoragePrices条目。不是整个 dict,而只是与当前时间相对应的一个 StoragePrices 条目。 - 1:
ConfigParam 19(global id). - 2:
ConfigParam 20(mc gas prices). - 3:
ConfigParam 21(gas prices). - 4:
ConfigParam 24(mc fwd fees). - 5:
ConfigParam 25(fwd fees). - 6:
ConfigParam 43(size limits).
- 0: 来自
- 15: "due payment" - 当前存储费债务( nanotons )。Asm 操作码:
DUEPAYMENT。 - 16: "precompiled gas usage" - 当前合约的 gas 用量(如果是预编译合约,请参阅 ConfigParam 45),否则为空。Asm 操作码:
GETPRECOMPILEDGAS。
需要到期支付,以便合约能够正确评估存储费用。
需要进行到期支付,合约才能正确评估存储费用:当信息以默认(可跳转)模式发送到智能合约时,存储费用会被扣除(或添加到包含存储费用相关债务的到期支付字段),之前的信息值会添加到余额中。因此,如果合约在处理完信息后,以 mode=64 发送 gas 超量信息,这就意味着如果合约余额为 0,下一笔交易的存储费就会开始在 due_payment 中累积(而不是从收到的信息中扣除)。这样债务就会无声无息地累积,直到账户冻结。DUEPAYMENT 允许开发者明确记账/扣留存储佣金,从而防止出现任何问题。