Alert Source Discuss
🚧 Stagnant Standards Track: Core

EIP-3300: 逐步取消退款

Authors William Morriss (@wjmelements)
Created 2020-02-26
Discussion Link https://ethereum-magicians.org/t/eip-3300-phase-out-refunds/5434

简单总结

逐步取消 SSTORESELFDESTRUCT gas 退款。

摘要

此 EIP 将定义一个区块,在该区块中 SSTORESELFDESTRUCT 退款将开始减少。 退款将线性递减,以加速的速度侵蚀此类退款的隐式价值。

动机

退款增加了区块弹性,因此区块 gas 目标可以超过矿工设定的数量高达 2 倍。 这可能会导致矿工犹豫是否增加区块 gas 目标。

退款,无论是否代币化,对持有者都很有价值,尤其是在拥塞期间。 如果必须删除退款,那么其价值的逐渐变化对 gas 市场的破坏性将小于突然取消。 退款消耗将继续进行,尤其是在拥塞期间,并且可以从状态中清除退款。 由需求驱动的退款创建将随着退款效率的下降而自然减少。 随着退款价值接近激活成本,退款的隐式价值将接近于零,但在拥塞期间,它们将被清除。

与补偿和清理相比,此更改对协议开发人员来说工作量更少,同时可能仍然可以实现清理。

规范

参数:

  • FORK_BLOCK_NUM: EIP-3300 激活区块
  • REFUND_DECAY_STEP: 1 gas
  • REFUND_DECAY_FREQUENCY: 100 个区块

计算:

  • REFUND_DECAY: REFUND_DECAY_STEP * ceil((block.number + 1 - FORK_BLOCK_NUM) / REFUND_DECAY_FREQUENCY)

在此 EIP 激活的区块上,并且每 REFUND_DECAY_FREQUENCY 个区块再次激活,所有 gas 退款(包括 SELFDESTRUCTSSTORE)将减少 REFUND_DECAY_STEP,直到 0。 当前差异称为 REFUND_DECAY,应从每个 gas 退款中减去。

对于具有取消先前退款的退款删除的 gas 成本体系,退款计数器不能为负的不变量将通过将这些删除的大小减少 REFUND_DECAY 来保持,直到 0。

EIP-2929

截至 EIP-2929 的退款如下:

  • SELFDESTRUCT 为 24000
  • SSTORE_RESET_GAS - SLOAD_GAS (5000 - 100)
  • SSTORE_SET_GAS - SLOAD_GAS (20000 - 100)
  • SSTORE_SET_GAS - SLOAD_GAS (20000 - 100)
  • SSTORE_CLEARS_SCHEDULE (15000)

每个退款将减少当前的 REFUND_DECAY

还有一种情况是从退款计数器中删除 SSTORE_CLEARS_SCHEDULE。 该删除也将减少 REFUND_DECAY_STEP 直到 0,从而保持非负退款计数器不变量。

理由

持久化的退款将在低于其激活成本之前变得毫无价值。 一旦退款毫无价值,就可以通过另一个硬分叉将其删除,而无需等待 0。 指定的减少速率当前将需要 (24000-5000) * 100 = 1,900,000 个区块用于 SELFDESTRUCT,以及 (15000-5000) * 100 = 1,000,000 个区块用于 SSTORE。 目前,这个时间范围大约为一年,应该有足够的灵活性来消耗剩余的退款。

向后兼容性

此提案破坏了 gas 退款,gas 退款有助于区块弹性。 这样做的效果是 gas 价格波动性增加:更高的高点和更低的低点。

由于退款计数器与 gas 计数器分开,因此区块到区块的 gas 更改不会破坏 eth_estimateGas

版权

通过 CC0 放弃版权及相关权利。

Citation

Please cite this document as:

William Morriss (@wjmelements), "EIP-3300: 逐步取消退款 [DRAFT]," Ethereum Improvement Proposals, no. 3300, February 2020. [Online serial]. Available: https://eips.ethereum.org/EIPS/eip-3300.