EIP-3529: Gas 退款机制
在研究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
主要变更
- 取消SELFDESTRUCT操作的gas退款
- 降低SSTORE操作的gas退款,但仍保持在一定水平
- 将交易后的最大gas退款限制在已用gas的五分之一
提案动机
原有的gas退款机制目的是鼓励开发者清理不需要的存储和合约。但这种机制带来了意外问题:
- 促进了GasToken的出现
- 优点:能在gas价格波动时提供一些好处
- 缺点:增加了区块链状态大小,降低了效率
- 增加了区块大小的变化幅度
- 潜在问题:理论上可能导致区块gas使用量达到正常限制的两倍
具体修改
-
SSTORE操作成本调整: SSTORE_CLEARS_SCHEDULE → SSTORE_RESET_GAS + ACCESS_LIST_STORAGE_KEY_COST 总计:4,800 gas
-
最大gas退款比例: 1/2 → 1/5
对开发者的影响
- [ ] GasToken失去了价值
- [ ] DeFi套利机器人可能需要调整代码,更新gas优化策略
- [x] 一些常用操作(如防重入锁和ERC20的approve-and-send)仍保持较低的gas成本
总结
通过分析go-ethereum代码,我了解了EIP-3529如何改变以太坊的gas退款机制。这个提案通过降低退款上限,优化了网络安全性和经济模型,同时保持了对存储清理的激励。对开发者而言,这些变化影响了合约设计和gas成本,反映了以太坊不断进化的设计理念。
版权声明
本文仅代表作者观点,不代表区块链技术网立场。
本文系作者授权本站发表,未经许可,不得转载。
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。