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是"Reduction in refunds"(降低退款)提案,是伦敦硬分叉的一部分。
原有的gas退款机制目的是鼓励开发者清理不需要的存储和合约。但这种机制带来了意外问题:
SSTORE操作成本调整: SSTORE_CLEARS_SCHEDULE → SSTORE_RESET_GAS + ACCESS_LIST_STORAGE_KEY_COST 总计:4,800 gas
最大gas退款比例: 1/2 → 1/5
通过分析go-ethereum代码,我了解了EIP-3529如何改变以太坊的gas退款机制。这个提案通过降低退款上限,优化了网络安全性和经济模型,同时保持了对存储清理的激励。对开发者而言,这些变化影响了合约设计和gas成本,反映了以太坊不断进化的设计理念。
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!