Gerrad Zhang
Gas:世界计算机的计价系统

Gas:世界计算机的计价系统

上一篇留了一个问题:执行每条操作码都有定价——凭什么 ADD 一个价、SSTORE 另一个价?谁定的?本文讲清 Gas 的三重意义(计量资源、防滥用与停机问题、定价市场)、费用公式 gasUsed × gasPrice 与 EIP-1559 的 base fee 燃烧机制,用一个手算例子把 gwei 换算走通,并解释 blob(EIP-4844)如何把 L2 费用打下来两三个数量级。

Gerrad Zhang
世界计算机
2 min read

引言:执行有了,账单怎么开?

上一篇(EVM 深度解析)结尾按下了不表的那个问题,这一篇正面回答:执行每条操作码都有定价——凭什么 ADD 一个价、SSTORE 另一个价?谁定的价?怎么防止一笔交易把全网节点拖死?

一句话:去中心化的世界里没有免费的 CPU 时间。EVM 是上千个节点各自重放执行的引擎,任何一次计算都要在这上千台机器上同时发生——所以计算必须计价,而且必须由发起人付费。这个计价系统就是 Gas

把 Gas 讲清楚需要回答三个问题:它为什么存在(三重意义)、一笔交易的费用到底怎么算(公式 + EIP-1559)、以及这套计价体系最近一次大变化——blob 如何把 Layer2 的费用打下来两三个数量级。


Gas 的三重意义

一、计量单位:给「计算」定刻度

Gas 的第一重身份是一个计量单位。每条操作码都有协议规定的固定 Gas 消耗:算术指令一个价、读存储另一个价、写存储贵得多。一笔交易执行完,所有操作码的 Gas 消耗加总,就是这笔交易的 gasUsed——它度量的不是钱,而是计算量

这解释了为什么转账和调用合约的费用不一样:普通 ETH 转账不碰 EVM 存储,固定消耗 21000 gas;一笔复杂的合约调用要执行成百上千条操作码、读写多个存储槽位,gasUsed 自然高出几个量级。你在为计算付费,而不是为转账金额付费——转 0.01 ETH 和转 100 ETH,Gas 一分不差。

二、防滥用:用计价解决停机问题

第二重身份是安全机制。EVM 是图灵完备的——理论上可以写无限循环。计算机科学里这叫停机问题(Halting Problem):不存在通用算法能在执行前判断一段程序是否终将停止。中心化系统不怕这个:操作系统超时杀进程就行。但以太坊的每笔交易要被上千个节点同时重放执行——如果一笔 while (true) 的交易不花钱,所有节点都会被永久拖进死循环,整个网络瘫痪。

Gas 的解法优雅而暴力:交易发起时先预缴一笔 Gas 上限(gasLimit),执行过程中燃料单调递减,归零则强制中断——不管程序跑到哪一行。

你发起交易,预缴 Gas 上限 = 50000


  执行操作码流,Gas 余额不断扣减:
    CALLDATALOAD   − 3        余额 49997
    SLOAD          − 2100     余额 47897
    SSTORE         − 更多     余额 ...

        ├── 余额 > 0 且执行完毕 → 成功,多预缴的部分退还

        └── 余额归零、程序没跑完 → OUT OF GAS
            状态回滚,已扣的 Gas 不退(节点白干了也要收钱)

三、定价市场:区块空间是稀缺资源

第三重身份是市场机制。每个区块能装下的交易总量有上限(以 Gas 计),区块空间是稀缺资源。谁的交易先被打包?答案是谁付得高谁先走——Gas 单价(gasPrice)就是你对验证者的报价。

于是 Gas 把三件事统一成一个机制:度量计算(防资源滥用)+ 限制执行(防死循环)+ 竞价排序(分配稀缺的区块空间)。而 gasPrice 的具体定价方式,在 2021 年发生过一次重要重构——EIP-1559。


费用怎么算:公式与 EIP-1559

基础公式

交易费用 = gasUsed × gasPrice

gasUsed   :这笔交易实际消耗的 Gas 量(计算量)
gasPrice  :你愿意为每单位 Gas 支付的单价,单位是 gwei

EIP-1559(EIP1559 ,2021 年伦敦升级)把 gasPrice 拆成了两部分——base fee(基础费)+ priority fee(优先费)

一笔交易的费用构成拆解(EIP-1559 之后)

  你在钱包里设置的 Max Fee(单价上限)
  ┌───────────────────────────────────────────┐
  │  Base Fee(基础费)                        │
  │  · 协议根据网络拥堵自动调节,你不能设       │
  │  · 目标区块利用率 50%:堵了升、闲了降       │
  │  · 这部分被「燃烧」永久销毁,验证者拿不到   │
  │ ├─────────────────────────────────────────┤
  │  Priority Fee(优先费,即小费)            │
  │  · 你自己设,直接给打包交易的验证者         │
  │  · 想插队就给高一点,不急可给最低           │
  └───────────────────────────────────────────┘

  实付费用(ETH)= gasUsed × (baseFee + priorityFee)

两个关键设计:

**Base fee 由算法决定,不由人决定。**每个区块按固定公式调节(单区块变化幅度有约 12.5% 的上限):区块持续超过 50% 目标利用率,base fee 逐块上升把需求挤出;低于目标,逐块下降吸引需求回来。这是一个负反馈控制器——拥堵自动定价,不需要任何人拍板。

**Base fee 被燃烧销毁。**这部分费用不归验证者,而是直接从流通中移除。它同时干掉了旧机制的痼疾:此前用户付的 gasPrice 全归矿工,矿工有动机在链下私下返佣抢客(MEV 相关论述见研究报告),燃烧机制让「定价权」收归协议——验证者只能挣小费和区块奖励,不能靠哄抬基础费获利。


gwei 换算:手算一遍

gasPrice 的单位是 gwei ——1 gwei = 10⁻⁹ ETH。为什么需要这么小的单位?因为一笔交易的费用是 ETH 的小数点后好几位的量级,直接用 ETH 报价太别扭。

手算一笔(以下均为示例值,用于演示换算,非实时行情):

场景:一笔普通 ETH 转账

  gasUsed   = 21000        (协议对普通转账的固定定价)
  gasPrice  = 8 gwei       (示例值:落在主网「个位数到几十 gwei」
                            的常见波动区间内)

第一步:算出总 gwei
  21000 × 8 = 168000 gwei

第二步:换算成 ETH
  1 gwei = 10⁻⁹ ETH
  168000 × 10⁻⁹ = 0.000168 ETH

第三步:换算法币量级
  假设 ETH 价格约 $3000(示例值)
  0.000168 × 3000 ≈ $0.50 —— 约半美元

同样这笔转账放到 Layer2 (Arbitrum/Base)上,Gas 单价往往不足 0.01 gwei——即便 gasUsed 相近,费用也要低三个数量级左右。为什么 L2 能便宜这么多?答案的最后一环是 blob。


blob:L2 费用是怎么被打下来的

先看 Rollup 的成本结构:交易在 L2 链下执行(这部分很便宜),但每一批交易的数据必须发布回以太坊主网,由主网的数据可用性保证安全。Dencun 升级之前,这些数据塞在普通交易的 calldata 里发布——按主网 Gas 全价计价,L2 费用的大头全在这。

Blob (EIP-4844)改变了计价方式:主网开辟一块独立的、按 blob gas 单独计价的数据空间,Rollup 把批次数据放进去。两个关键差异:

  • 单独计价:blob 的价格与主网交易拥堵脱钩——主网再堵,blob 市场未必堵,L2 的数据成本不再被主网活动绑架
  • 自动过期:blob 数据只保留约 18 天后被删除——验证可用性不需要永久存储,安全模型不需要,成本自然更低

结果就是本站研究报告的口径:以太坊主网 Gas 通常在个位数到几十 gwei 波动(Dencun 升级后长期低于 10 gwei),L2(Arbitrum/Base)往往不足 0.01 gwei,费用差距可达 1000 倍;而 blob 本身使 L2 的数据发布费用降低 10-100 倍。


总结:计价有了,规则由谁写?

这一篇把世界计算机的计费系统拆开了:

  • Gas 的三重意义:计量资源(gasUsed 度量计算量)、防滥用(预缴燃料 + 归零即停,用计价解决停机问题)、定价市场(竞价分配稀缺的区块空间)
  • 费用公式:gasUsed × (baseFee + priorityFee);base fee 由协议按 50% 目标利用率自动调节并燃烧销毁,priority fee 是给验证者的小费
  • gwei 换算:21000 gas × 8 gwei = 0.000168 ETH(示例值),一笔主网转账约半美元的量级
  • blob(EIP-4844)为 Rollup 数据开辟单独计价、自动过期的存储空间,把 L2 费用打下来 10-100 倍,主网与 L2 差距可达 1000 倍

但留一个更深的问题:到目前为止,我们讲的都是「交易的执行规则」——转账怎么计价、区块怎么装满。可这些规则本身是程序:余额检查、nonce 递增、费用扣除……它们是谁写的?普通用户能不能也往链上放一段自己的程序,让全网节点替你执行?

能。这就是智能合约——下一篇文章的主角,也是「世界计算机」从记账机器变成可编程平台的最后一块拼图。

相关文章:

Comments

Link copied to clipboard!