Worldcoin恐现「恶性通膨」
详述EIP-7706并梳理最新的Ethereum的Gas机制
2024年5月13日,以太坊(Ethereum)联合创始人Vitalik Buterin在GitHub上发布了EIP(Ethereum Improvement Proposal)-7706提案。该提案旨在对现有的Gas模型进行优化补充,为Calldata引入独立的Gas计算逻辑,并借鉴Blob data的设计理念,采用指数函数模型进行Base fee的动态调整。这一提案的提出,标志着Ethereum的Gas机制正在朝着更加细化、更加高效的方向发展。
为了全面理解EIP-7706的内容和意义,我们有必要对Ethereum的Gas机制进行一次系统梳理。本文将从Ethereum早期的Gas拍卖模型出发,重点介绍EIP-1559和EIP-4844两个里程碑式的提案,并在此基础上深入解析EIP-7706的设计细节。通过这样的梳理,读者不仅可以了解Ethereum Gas机制的发展脉络,也能领略其背后的设计思想和技术考量。
从拍卖到双轨:EIP-1559的诞生
在Ethereum的早期设计中,Gas定价采用了一种简单的拍卖机制。具体而言,交易发起者需要为自己的交易设置一个Gas Price,表示愿意为每单位Gas支付的价格。而矿工在打包交易时,会按照Gas Price的高低来决定交易的优先级。这种"价高者得"的拍卖模式,虽然简单直观,但存在以下几个问题:
交易费用的波动性大:由于交易需求和区块空间供给之间的动态变化,Gas Price往往呈现出大幅波动的特点。这不仅增加了用户的交易成本,也影响了网络的稳定性。
用户体验差:拍卖机制要求用户主动为交易定价,但对于普通用户而言,很难准确评估合理的Gas Price。这就导致了"多付"和"慢确认"的两难境地。
矿工的"敲诈"行为:在拍卖模型下,矿工可能会故意延迟打包低价交易,以诱导用户提高出价。这种"敲诈"行为不利于以太坊的健康发展。
区块链安全问题:当区块奖励降低乃至取消后,单纯依靠交易费用维持PoW共识,将引发51%攻击等一系列安全隐患。
为了解决上述问题,Vitalik等人在2019年4月提出了EIP-1559。该提案引入了Base fee和Priority fee的双轨制,并采用虚拟机自动调整Base fee的创新设计。
在EIP-1559的模型中,Base fee由以下公式决定:
其核心思想是:当上一个区块的Gas使用量高于目标值时,Base fee上调;反之则下调。这个目标值由区块Gas上限决定,通常设为其一半。通过这样的负反馈机制,EIP-1559在动态平衡网络需求和区块空间的同时,也大大提高了费用的可预测性。
值得一提的是,EIP-1559将Base fee的去向从矿工奖励改为了直接销毁。这不仅切断了矿工操纵费用的可能性,也为以太坊带来了通缩效应。
与Base fee并行的是Priority fee,即用户附加的小费。交易发起者可以自由决定小费的数量,以争取更快的打包速度。这部分费用将直接奖励给打包交易的矿工。
EIP-1559于2021年8月伦敦升级中正式上线。它的顺利实施,标志着以太坊的Gas模型迈出了关键一步。然而,随着二层扩容方案的蓬勃发展,新的问题也随之而来。
Rollup带来的新挑战:EIP-4844的设计思路
Rollup是以太坊扩容的重要方向。无论是OP Rollup还是ZK Rollup,都需要将Layer 2的状态数据定期上传到以太坊主链,以实现安全性和最终性的保证。这些数据往往体量较大,如果与普通交易一起竞争区块空间,将带来两个问题:
Rollup数据的成本高企:由于需要频繁上传状态证明,Rollup方案在Gas支出上负担沉重。这反过来限制了其扩容和降费的空间。
主链区块的拥堵加剧:Rollup数据占用了大量区块空间,挤压了普通交易的生存空间。这进一步加剧了"Gas竞争"的激烈程度。
为了缓解这一矛盾,以太坊社区在2022年提出了EIP-4844。该提案的核心,是为Rollup数据引入一种独立的交易类型和定价逻辑。
在EIP-4844的设计中,Rollup数据被称为Blob data。与普通的Calldata不同,Blob data有以下特点:
1.Blob data只在区块头中留下加密承诺,而不直接写入区块内容。这大大节省了存储开销。
2.Blob data拥有独立的Gas定价机制,遵循EIP-1559风格的动态调整,但采用指数函数替代线性函数,以更好地应对流量的波动。
3.Blob data的生命周期较短,一般只需要保留30分钟到1小时。这进一步降低了全节点的存储负担。
Blob data的费用计算公式如下:
上述公式的关键之处在于,当Blob data的使用量超过目标值时,费用曲线呈指数增长,而不是线性增长。这使得网络对Blob data的"敏感度"大大提高,有利于及时遏制Rollup数据的无序膨胀。
有了Blob data这个新的数据类型,Rollup就可以将状态数据打包到专属的交易通道中,而不必与普通交易硬碰硬。这不仅降低了Rollup自身的成本,也缓解了主链的拥堵压力。可以说,EIP-4844为以太坊的二层扩容开辟了一条更加高效、更加可持续的道路。
再细化的探索:EIP-7706对Calldata的优化
在EIP-4844为Rollup数据引入独立定价机制的同时,以太坊社区也在思考:能否对普通交易的Gas模型做进一步的细化和优化?EIP-7706就是这种思路的产物。
EIP-7706的提出,源于对Calldata Gas成本的重新审视。我们知道,在以太坊黄皮书中,每byte的Calldata被定为16 Gas。这个定价已经沿用多年,但在Vitalik看来,它已经不太合理了。
具体而言,Calldata的Gas成本主要由两部分构成:存储开销和计算开销。前者与Calldata的体量线性相关,而后者取决于EVM的处理效率。Vitalik认为,随着EVM性能的提升,计算开销已经大大降低,因此有必要对Calldata的定价进行调整。
EIP-7706的核心思路,是参考EIP-4844对Blob data的处理,为Calldata引入独立的Gas计算逻辑。这个逻辑同样基于EIP-1559的框架,但在一些细节上做了优化。
首先,EIP-7706为Calldata引入了单独的Base fee,其调整公式与Blob data类似,同样采用指数函数:
其次,EIP-7706调整了Calldata的Gas Target,将其从区块Gas上限的1/2调低为1/4。这意味着,即使Calldata的使用量达到Target,也不会触及区块上限,从而为其他类型的交易预留了更多空间。
最后,EIP-7706还优化了Calldata的编码方式。在新的设计中,Calldata将被划分为多个块,每个块分别进行RLP编码。这种做法不仅提高了编码效率,也方便了EVM的并行处理。
下面是Vitalik给出的Calldata编码的示意代码:
通过上述一系列优化,EIP-7706在保证Calldata定价合理性的同时,也为以太坊的长期发展提供了更多想象空间。一方面,它与EIP-4844一起,构成了以太坊Gas模型细化的里程碑;另一方面,它为未来进一步优化Gas机制开辟了新的方向和可能性。
总结与展望
从最初简单的Gas拍卖,到EIP-1559的双轨制;从EIP-4844对Rollup数据的特殊处理,到EIP-7706对Calldata的进一步细化——以太坊的Gas机制在不断演进中日趋成熟和完善。这背后,是以太坊社区对扩容、安全、公平等多重目标的不懈追求。
展望未来,随着以太坊生态的不断发展,Gas模型还将迎来哪些新的挑战和变革?又该如何在效率和公平、创新和稳定之间找到最佳平衡点?这些都是值得我们持续关注和思考的问题。
Vitalik在EIP-7706的结尾写道:"Gas机制的设计空间仍有很大的探索空间,社区应该持开放态度,积极尝试不同的想法和可能性。"这或许是对以太坊Gas机制发展前景最好的展望。在这个不断变化的世界里,唯有保持开放和创新的勇气,以太坊才能拥抱更加光明的未来。
让我们共同期待,在以太坊社区的集体智慧下,Gas机制能够继续朝着更加高效、更加公平、更加可持续的方向发展,为整个区块链行业树立起一座不朽的丰碑。