EIP-3529: Gas 退款机制

  • Aze
  • 更新于 2024-09-10 10:27
  • 阅读 410

EIP-3529 "Reduction in refunds"(降低退款)提案,是伦敦硬分叉的一部分。EIP-3529由Vitalik Buterin和Martin Swende于2021年4月22日提出

在研究go-ethereum的源代码时,我发现了一个关于gas退款机制的重要变化。这个变化与EIP-3529提案密切相关。

代码分析

在go-ethereum的GitHub仓库中,core/state_transition.go 文件的第454-461行有这样一段代码:

var gasRefund uint64
if !rules.IsLondon {
    // Before EIP-3529: refunds were capped to gasUsed / 2
    gasRefund = st.refundGas(params.RefundQuotient)
} else {
    // After EIP-3529: refunds are capped to gasUsed / 5
    gasRefund = st.refundGas(params.RefundQuotientEIP3529)
}

这段代码清楚地展示了gas退款计算方式的变化:

时期 退款上限 使用参数
伦敦硬分叉之前 已使用gas的一半 params.RefundQuotient
伦敦硬分叉之后(EIP-3529) 已使用gas的五分之一 params.RefundQuotientEIP3529

这个变化引发了我对EIP-3529的关注。

EIP-3529:降低退款

EIP-3529是"Reduction in refunds"(降低退款)提案,是伦敦硬分叉的一部分。

  • 提案者:Vitalik Buterin和Martin Swende
  • 提出日期:2021年4月22日
  • 相关EIP:EIP-2200、EIP-2929和EIP-2930

主要变更

  1. 取消SELFDESTRUCT操作的gas退款
  2. 降低SSTORE操作的gas退款,但仍保持在一定水平
  3. 将交易后的最大gas退款限制在已用gas的五分之一

提案动机

原有的gas退款机制目的是鼓励开发者清理不需要的存储和合约。但这种机制带来了意外问题:

  • 促进了GasToken的出现
    • 优点:能在gas价格波动时提供一些好处
    • 缺点:增加了区块链状态大小,降低了效率
  • 增加了区块大小的变化幅度
    • 潜在问题:理论上可能导致区块gas使用量达到正常限制的两倍

具体修改

  1. SSTORE操作成本调整: SSTORE_CLEARS_SCHEDULE → SSTORE_RESET_GAS + ACCESS_LIST_STORAGE_KEY_COST 总计:4,800 gas

  2. 最大gas退款比例: 1/2 → 1/5

对开发者的影响

  • [ ] GasToken失去了价值
  • [ ] DeFi套利机器人可能需要调整代码,更新gas优化策略
  • [x] 一些常用操作(如防重入锁和ERC20的approve-and-send)仍保持较低的gas成本

总结

通过分析go-ethereum代码,我了解了EIP-3529如何改变以太坊的gas退款机制。这个提案通过降低退款上限,优化了网络安全性和经济模型,同时保持了对存储清理的激励。对开发者而言,这些变化影响了合约设计和gas成本,反映了以太坊不断进化的设计理念。

点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
Aze
Aze
0x758e...1541
Long the bitcoin, short the world.