Aptos 的 gas 价随状态用量调整:global storage gas 的纪元曲线与存储费分工 图 1
Aptos 的 gas 价随状态用量调整:global storage gas 的纪元曲线与存储费分工 · 图 1

很多链的手续费是”用户出价、市场出清”,Aptos 在出价之外还挂了一层随链上状态用量浮动的价格:global storage gas 按全局存储里”有多少条目、多少字节”两维利用率,在每个纪元边界上调或下调读写与写入的单价,并且这份调整要到下一个纪元才生效。本文按官方 Move 参考文档与 aptos-core 源码讲清这条曲线怎么组成、为什么一个纪元才更新一次,以及它和按绝对值收取的存储费怎么分工。

费用分三层:执行气、IO 气、存储费

交易费用三个维度的抽象分层示意

官方文档把一笔 Aptos 交易的费用拆成几个维度:指令执行花执行气,读写状态花 IO 气,把数据永久写进链上状态则付存储费。前两者以气单位乘以用户报价结算;存储费按 APT 的绝对定价收取,官方说法是让永久存储的成本不随网络瞬时负载下的气单价起落。存储费还配了删除返还:一个存储槽位被删除时,按其生命周期内付过的存储费退还,文档写明当前配置是全额返还。用户能主动控制的是报价:出块者从内存池挑交易时优先高价,但块内执行顺序由系统决定——报价买到的是进下一个块的优先被选中权,不是块内的排位。

global storage gas:随利用率浮动的单价

真正与费用市场不同的一层在 storage_gas 模块。官方文档描述,全局存储的气价每个纪元随总用量浮动,利用率分两个维度:全局存储里的”条目”数量与字节数量。条目指带 key 属性、被移入全局存储的资源以及 Table 条目。价格作用在六种操作上——条目与字节各自的读、创建、写——每种操作设最低与最高两个端点,当前纪元的利用率落在曲线上决定下一纪元单价。

曲线形状有违直觉:文档举例说若字节维度利用率停在半程,按字节读取只收最低价再加上高低点差额的约百分之一——用量过半,价格几乎没动。设计意图是把常态区间留足余量,逼近容量上限的尾部区间价格才快速上抬,让状态拥挤的代价集中显现在空间真正稀缺之后。要划清边界:这条曲线只负责重新定价,不会主动拒绝写入;交易能否落盘还受气量上限等其他规则约束,具体函数与端点值以官方文档和链上数值为准。

一个纪元只更新一次:定价用的是上一段用量

这套价表在链上再配置时根据纪元初观测到的利用率重算,服务的是随后整个纪元。官方文档坦承这意味着价表数据比理想状态落后一个纪元,换来的是虚拟机不必在每笔交易时重新加载气参数,整个纪元内的费用可预测、可复算。对开发者和用户,这等于把”全局写费涨了”变成一个可以提前观察、但不太可能突然跳变的事件:先看到利用率爬升,再在纪元边界看到下一段价表更新。

在源码层面(aptos-core 的 gas schedule 模块),参数以发布版本号为界演进,源码用形如 RELEASE_V1_XX 的版本区间标注每个取值的适用范围,创世初值与代码并存,因此核对某个参数在何时生效应当查仓库,而不是拿今天的数值倒推历史。

为谁而设:一段不需要治理动作的涨价预告

这套机制把状态拥挤本身变成了价格信号:重度写入的应用推高利用率,下一纪元全链的读写单价一起抬升,连没参与写入的应用也跟着变贵。它比紧急治理调费温和,也不需要任何投票;但颗粒度是全局的——它不区分是谁把状态写挤的,所有参与者按同一张价表被动响应聚合用量。对用户,这意味着”今天手续费变了”与”网络拥堵了”未必是同一件事:先分清是交易层报价竞争,还是存储利用率越过了曲线拐点。链上资源用量的动态数值本文不写死,核验入口是官方文档与节点查询。

风险提示:本文仅为机制解释,不构成投资建议;费用与参数以官方文档及使用时的链上数值为准。