以太坊,作为全球第二大加密货币和智能合约平台,其每一次协议升级都牵动着整个区块链世界的神经,2021年8月伦敦升级上线的EIP-1559(以太坊改进提案1559)无疑是其中的重头戏,它旨在通过引入基础费用(Base Fee)机制,使网络交易费用更加可预测,并逐步销毁ETH,实现通缩效应,正如任何复杂的软件系统一样,新机制的引入也可能伴随着意想不到的“小插曲”,EIP-1559在上线初期,就曾悄然出现过一个一度未被广泛关注的“Bug”——一个理论上可能导致“负Gas费”的漏洞。
EIP-1559的初衷:更优雅的费用市场
在EIP-1559之前,以太坊采用“拍卖式”的Gas费机制,用户通过提高Gas价格来竞争打包权,在网络拥堵时费用常常飙升至令人咋舌的水平,EIP-1559则引入了一个动态调整的“基础费用”,这部分费用会被直接销毁,用户在此基础上可以附加“小费”(Tip)来激励矿工(现为验证者)。
其核心逻辑是:
- 基础费用(Base Fee):由网络拥堵程度自动调整,区块满时基础费用上升,区块空时下降,这部分费用不归矿工/验证者所有,而是直接销毁。
- 优先费用(Priority Fee,或称Tip):用户自愿支付给矿工/验证者,用于加速交易打包。
- 总Gas费 = 基础费用 + 优先费用。
这一设计旨在为用户提供更透明的费用预估,并减少极端情况下的费用波动。
“负Gas费”Bug的惊现
在EIP-1559上线后不久,社区安全研究员和开发者们发现了一个潜在的逻辑漏洞,这个漏洞与基础费用的计算方式,特别是在极端情况下(如区块利用率极低或某些特定交易组合)可能导致的“负基础费用”有关。
基础费用的调整公式设计为每有一个区块未被填满,基础费用会乘以一个小于1的系数(例如1/2的平方根,约0.707)进行衰减,理论上,如果连续多个区块的利用率都非常低,基础费用会持续下降,趋近于0,但问题在于,这个衰减机制在某些边界条件下,可能因为整数运算或精度处理问题,导致基础费用计算结果为负数。
一旦基础费用变为负数,总Gas费 = 基础费用(负) + 优先费用(正),如果用户设置的优先费用很低,而基础费用的负值绝对值又大于优先费用,那么就会出现总Gas费为负的荒谬情况。
Bug的影响有多大?
幸运的是,这个“负Gas费”Bug在实际中造成的影响极其有限,甚至可以说是微乎其微,原因如下:
- 难以触发:要触发基础费用为负,需要连续多个区块的利用率极低,这在以太坊主网上是相当罕见的情况,以太坊网络即使在不拥堵时,也有足够的交易活动来维持基础费用在正数区间。
- 优先费用的缓冲:用户在发送交易时,通常会设置一个合理的优先费用,即使基础费用因计算误差出现微小的负值,只要优先费用为正,总Gas费仍可能为正,只有当用户设置的优先费用极低,甚至为0时,才有可能出现总Gas费为负。
