原作者 : @Web3 马里奥
介绍 :Vitalik 在 2024 年 5 月 13 日发布了 EIP-7706 提案,提出对现有 Gas 模型的补充解决方案,将 calldata 的 gas 计算分离出来,并定制类似 Blob gas 的基础费用定价机制,进一步降低 L2 的运行成本。相关提案需要追溯到 2022 年 2 月提出的 EIP-4844,距今已久。因此查阅了相关资料,希望对最新的以太坊 Gas 机制做一个总结,方便大家快速了解。
目前支持的以太坊 Gas 模型 — EIP-1559 和 EIP-4844
在最初的设计中,以太坊采用了简单的拍卖机制来为交易费定价,即需要用户主动为自己的交易竞标,也就是设定 gas 价格。通常情况下,由于用户支付的交易费将归矿工所有,因此矿工会根据经济最优原则和竞标价格来决定交易的打包顺序。注意,这是忽略了 MEV 的。当时核心开发人员认为这种机制面临以下四个问题:
-
交易费水平波动与交易共识成本的不匹配:对于活跃的区块链来说,有足够的交易打包需求,这意味着区块很容易被填满,但这往往也意味着整体费用波动极大。例如,当平均 Gas Price 为 10 Gwei 时,网络接受一个区块中另一笔交易的边际成本是平均 Gas Price 为 1 Gwei 时的 10 倍,这是不可接受的。
-
给用户带来不必要的延迟:由于每个区块的硬性 gas 限制,以及历史交易量的自然波动,交易通常要等待几个区块才能被纳入,这对于整个网络来说是低效的;即没有放松机制允许一个区块变大而下一个区块变小以适应逐块需求的差异。
-
定价效率低下:简单的拍卖机制导致公平价格发现效率低下,用户很难给出合理的价格,这意味着在很多情况下,用户需要支付高昂的费用。
-
没有区块奖励的区块链将是不稳定的:当取消挖矿带来的区块奖励,采用纯费用模型时,可能会造成很多不稳定性,比如激励窃取交易费用的姊妹区块的挖矿,开放更强大的自私挖矿攻击媒介等。
直到 EIP-1559 的提出和实施,Gas 模型才有了第一次迭代。EIP-1559 由 Vitalik 等核心开发人员于 2019 年 4 月 13 日提出,并于 2021 年 8 月 5 日在伦敦升级中被采纳。该机制摒弃了拍卖机制,采用 Base fee 和 Priority fee 双重定价模型,其中 Base fee 会通过建立的数学模型,根据父区块产生的 gas 消耗量和一个浮动递归的 gas 目标之间的关系进行量化计算。直观的效果就是,如果前一个区块的 gas 消耗量超过预定的 gas 目标,则增加 Base fee,如果低于 gas 目标,则降低 Base fee。这样可以更好地反映供需关系,让合理 gas 的预测更加准确,避免误操作导致 Gas Price 飞涨,因为 Base fee 的计算是系统直接决定的,而不是用户自由指定的。具体代码如下:
可以看出,当parent_gas_used大于parent_gas_target时,会将当前块的base fee与前一个块的base fee加上一个offset值进行比较,offset值是parent_base_fee的最大值乘以上一个块的总gas fee相对于gas target的offset与gas target的模数乘以一个常数与1,反之逻辑类似。
另外,Base fee 不会再作为奖励分配给矿工,而是直接销毁,这样 ETH 的经济模型处于通缩状态,有利于价值的稳定。另一方面,Priority fee 相当于用户给予矿工的奖励,可以自由定价,这在一定程度上让矿工的排序算法可以得到一定程度的重复利用。
随着时间的推移到 2021 年,Rollup 的发展也逐渐向好。我们知道无论是 OP Rollup 还是 ZK Rollup,都意味着 L2 数据压缩之后的部分证明数据需要通过 calldata 上传到链上才能实现数据可用性(Data Availability)或者直接交给链上验证。这就使得这些 Rollup 方案在维护 L2 的最终性时面临着较大的 gas 成本,而这些成本最终都会转嫁到用户身上。因此当时使用大多数 L2 协议的成本并没有想象中那么低。
与此同时,以太坊还面临着区块空间竞争的困境。我们知道每个区块都有一个 Gas Limit,也就是说当前区块中所有交易的 Gas 消耗总量不能超过这个值。按照目前的 Gas Limit 30000000 来算,理论上就有 30,000,000 / 16 = 1,875,000 字节的限制,其中 16 表示 EVM 需要消耗 16 单位的 Gas 来处理每个 calldata 字节,也就是说单个区块能够承载的最大数据大小约为 1.79 MB。L2 排序器生成的 Rollup 相关数据通常体积较大,这会与其他主链用户的交易确认产生竞争,导致单个区块中能够打包的交易数量更少,进而影响主链的 TPS。
为了解决这个困境,核心开发人员在2022年2月5日提出了EIP-4844提案,并在2024年Q2月初Dencun升级后实施。该提案提出了一种新的交易类型,称为Blob Transaction。与传统的Transaction类型相比,Blob Transaction的核心思想是增加一种新的数据类型,即Blob数据。与calldata类型不同的是,blob数据不能被EVM直接访问,而只能访问其哈希,也称为VersionedHash。此外,还有两点伴随的设计,第一,与普通交易相比,blob交易的GC周期更短,从而保证区块数据不会过于臃肿,第二,blob数据有原生的Gas机制。整体效果和EIP-1559类似,但在数学模型上选择了自然指数函数,使其在处理交易规模波动时更加稳定,因为自然指数函数的斜率也是自然指数函数。这意味着,无论此时网络交易规模处于什么状态,当交易规模快速飙升时,blob gas 基础费用会反应得更充分,从而有效抑制交易活跃度。同时该函数还有一个重要特点,当横轴为 0 时,函数值为 1。
base_fee_per_blob_gas = MIN_BASE_FEE_PER_BLOB_GAS * e**(excess_blob_gas / BLOB_BASE_FEE_UPDATE_FRACTION)
其中,MIN_BASE_FEE_PER_BLOB_GAS 和 BLOB_BASE_FEE_UPDATE_FRACTION 是两个常量,excess_blob_gas 由父块中 blob gas 总消耗量与一个 TARGET_BLOB_GAS_PER_BLOCK 常量之间的差值决定。当 blob gas 总消耗量超过目标值,即差值为正,e**(excess_blob_gas / BLOB_BASE_FEE_UPDATE_FRACTION) 大于 1,则 base_fee_per_blob_gas 变大,反之则变小。
这样,一些只想利用以太坊共识能力存储某些大规模数据保证可用性的场景,就可以在不挤压区块交易打包容量的情况下,以低成本执行。以 Rollup 排序器为例,可以通过 blob transaction 将 L2 的关键信息封装到 blob 数据中,通过 EVM 中精妙的设计,通过 versionedHash 实现链上验证的逻辑。
需要注意的是,TARGET_BLOB_GAS_PER_BLOCK 和 MAX_BLOB_GAS_PER_BLOCK 的当前设置对主网施加了限制,即每个区块的目标为 3 个 blob(0.375 MB),每个区块的限制为 6 个 blob(0.75 MB)。这些初始限制旨在尽量减少此 EIP 对网络造成的压力,并且随着网络在更大区块上表现出可靠性,预计这些限制将在未来升级中增加。
进一步完善执行环境 gas 消耗模型 – EIP-7706
理清了现在的以太坊 Gas 模型之后,我们再来看看 EIP-7706 提案的目标和实现细节,该提案由 Vitalik 于 2024 年 5 月 13 日提出,与 Blob 数据类似,该提案剥离了另一个特殊数据字段即 calldata 对应的 Gas 模型,并优化了相应的代码实现逻辑。
原则上,calldata 的基础费用计算逻辑与 EIP-4844 中 blob data 的基础费用相同,均采用指数函数,根据父块中实际 gas 消耗值与目标值的偏差,计算当前基础费用的缩放比例。
值得注意的是,这里有一个新的参数设计,LIMIT_TARGET_RATIOS=[2, 2, 4],其中 LIMIT_TARGET_RATIOS[0] 表示执行操作类 Gas 的目标比例,LIMIT_TARGET_RATIOS[1] 表示 Blob 数据类 Gas 的目标比例,LIMIT_TARGET_RATIOS[2] 表示 calldata 类 Gas 的目标比例。这个向量用来计算父块中三种 gas 对应的 gas 目标值。计算逻辑如下,即用 LIMIT_TARGET_RATIOS 来划分 gas 限制:
gas_limits的设置逻辑如下:
gas_limits[ 0 ] 必须遵循现有的调整公式
gas_limits[ 1 ] 必须等于 MAX_BLOB_GAS_PER_BLOCK
gas_limits[ 2 ] 必须等于 gas_limits[ 0 ] // CALLDATA_GAS_LIMIT_RATIO
我们知道当前的 gas_limits[ 0 ] 为 30000000,而 CALLDATA_GAS_LIMIT_RATIO 预设为 4,也就是说当前 calldata 的 gas 目标大约为 30000000 // 4 // 4 = 1875000。按照当前 calldata gas 计算逻辑,每个非零 Byte 消耗 16 Gas,零 Byte 消耗 4 Gas。假设某个 calldata 中非零和零 Byte 的分布都是各 50%,则处理 1 Byte 的 calldata 平均需要 10 Gas。因此当前 calldata gas 目标应该对应 187500 字节的 calldata 数据,约为当前平均使用量的两倍。
这样做的好处是大大降低了 calldata 达到 gas limit 的概率,并且通过经济模型,让 calldata 的使用量保持在一个相对恒定的状态,同时也防止了 calldata 的滥用。这样设计的原因是为了给 L2 的发展扫清障碍,而有了 blob data,sorter 的成本又进一步降低。
本文来源于网络:EIP-7706 详解及以太坊最新 Gas 机制
相关:预计 5 月份 3 种看涨山寨币将超越比特币 (BTC)
简言之,鉴于币安币的持续盘整和即将创下新高,它有望成为表现最佳的资产之一。PEPE 在过去三个月中已经实现了 585% 的增长,但仍可能再上涨 41%。Tron (TRX) 刚刚在日线图上避免了死亡交叉,为其进一步增长提供了空间和机会。比特币 (BTC) 是世界上最大的加密货币,但有时,即使是山寨币也能超越王者币的表现。BeInCrypto 分析了哪三种山寨币有可能在 5 月份超越 BTC。币安币 (BNB) 仍在竞争中币安币价格已盘整一个半月以上,试图收于 $640 上方。然而,山寨币未能……