为何NEAR交易实际消耗的Gas可高于附加的Gas额度?
造成该现象的技术原因
这是NEAR协议Gas计费规则的正常表现,两个显示数值的统计口径完全不同:
- 浏览器标注的附加1 Tgas,仅指用户为合约Wasm代码执行部分单独分配的Gas额度,覆盖的是合约自定义逻辑运行、合约自身状态读写的可变消耗。
- 一笔交易从被节点接收、打包进区块到最终确认,有大量协议层强制执行的固定流程,这部分流程的Gas消耗是协议预设的保底值,和用户给合约附加的Gas额度无关,无论合约逻辑多简单都不会免除:
- 交易签名验签、发送方账户权限与余额校验
- 交易数据的序列化、反序列化处理
- 交易执行后的状态根更新、交易回执生成与全网同步
- 基础的状态存储操作固定成本
- 当前NEAR测试网的参数下,单笔函数调用交易的固定基础开销约为4 Tgas。示例中的计数器递减合约逻辑极简单,本身执行仅消耗不足0.1 Tgas,加上4 Tgas的固定保底开销,总消耗就会达到约5 Tgas,和观察到的数值一致。
- 交易能正常执行的原因是:节点在预扣Gas时会自动把协议层的基础保底开销计入总预扣额度,不会因为用户只给合约逻辑附加了1 Tgas就直接判定Gas不足。
内容的提问来源于stack exchange,提问作者chadoh
相关产品推荐
相关产品推荐

