Alert Source Discuss
🛑 Withdrawn Standards Track: Core

EIP-3332: MEDGASPRICE 操作码

Authors Justice Hudson (@jchancehud)
Created 2021-03-05
Discussion Link https://ethereum-magicians.org/t/medgasprice-opcode-eip/5480

简要总结

一个用于获取父区块的 median gas price 的操作码。

摘要

添加 MEDGASPRICE (0x46) 操作码,该操作码返回父区块的 median gas price。

动机

随着 rollups 作为扩展以太坊的核心机制的出现,存在许多常见的交易可能被抢跑。 Optimistic rollups 依赖于 fraud proofs 的提交来维持其系统的完整性。因此,提交 fraud proofs 的参与者通常会获得经济奖励。这就产生了一种简单的抢跑策略,即观察 mempool 中 fraud proof 的提交,并以更高的 gas price 复制这些交易以获取奖励。这种抢跑者不独立执行验证,并降低其他人执行验证的积极性。为交易强制执行 gas price 上限的机制可以有效地防御此类抢跑攻击。

考虑一个想要实现先到先得机制的智能合约。这种机制必须克服 gas price 市场中固有的 pay-to-win 性质。为交易强制执行最大 gas price 取决于以下事实:相同 gas price 的交易通常由以太坊矿工以先进先出的方式处理。合约目前设置最大 gas price 的选择很少:

  • 以当前 gas price 的合理费率设置一个常量值
  • 允许个人或一组人随着时间的推移调整最大 gas price

可能会构建更精细的方案,但所有方案都将涉及在链上存储 gas price 信息,从而增加交易数量并花费 Ether。

给定一个 median gas price 操作码,合约可以将最大 gas price 设置为最后一个区块 gas price 的函数。这可以使用如下策略轻松实现:

// 假设 block.medgasprice 绑定到 MEDGASPRICE (0x46)

function submitFraudProof(bytes calldata proof) public {
  require(tx.gasprice <= maxGasPrice());
  // 处理 fraud proof 并提供奖励(如果有效)
}

function maxGasPrice() public view returns (uint) {
  return 3 * block.medgasprice;
}

给定上述合约实现,客户端只需调用 maxGasPrice 来确定提交 fraud proof 时要使用的 gas price。此特定实现允许使用最多为最后一个区块 median gas price 的 3 倍。

向前兼容性

EIP-1559 计划以多种方式改变费用市场。最值得注意的是创建了一个被销毁的 base fee。在这种情况下,“inclusion fee”仍然作为总费用的一部分存在。考虑以下两种情况:

区块大小正在增加(所有可用 gas 正在被消耗)

在这种情况下,inclusion fee 将存在竞标争夺,以激励矿工包含交易。 median gas price 运算符仍然有用,因为攻击者可以提供高 inclusion fee 来篡改诚实的交易。

区块大小正在减小(有剩余 gas 可用)

在这种情况下,攻击者可以指定高 inclusion fee 以激励矿工在区块中尽早包含他们的交易。矿工有动力这样做,因为首先包含昂贵的交易可以降低发生 revert(和部分退款)的风险。

鉴于这两种情况,此 EIP 在 EIP-1559 的上下文中似乎是相关的。

在 EIP-1559 之后,MEDGASPRICE (0x46) 应返回上一个区块的 median effective_gas_price

实现上述策略需要 EIP-3198。通过包含 BASEFEE (0x48),合约可以从 effective_gas_price 中减去 base_fee_per_gas,以确定为交易支付的每个 gas 的 inclusion fee,从而实现上限。

规范

如果 block.number >= TBD,则添加一个新的操作码 MEDGASPRICE (0x46)

将父区块的 median gas price 推送到堆栈上。

Op Input Output Cost
0x46 0 1 8

理由

访问当前的 gas price 经济情况允许合约实现更强大和自动化的逻辑,围绕可接受的交易 gas price。

命名说明

选择名称 MEDGASPRICE 是因为网络的 median gas price 只能从最新的完整区块计算。因此,正在执行的交易应期望 median gas price 从上一个区块计算得出。

向后兼容性

没有已知的向后不兼容性问题。

安全注意事项

通过设置交易 gas price 的上限来防止抢跑的策略有一些注意事项:

  1. 它依赖于矿工的公正性。重新排序具有相同 gas price 的交易是破坏此策略的一种简单方法。
  2. MEDGASPRICE (0x46) 返回的值可能在区块之间快速波动。如果交易没有立即包含,则可能会失败(如果 gas price 下降)或容易受到抢跑的影响(如果 gas price 增加)。

版权

CC0 下放弃版权和相关权利。

Citation

Please cite this document as:

Justice Hudson (@jchancehud), "EIP-3332: MEDGASPRICE 操作码 [DRAFT]," Ethereum Improvement Proposals, no. 3332, March 2021. [Online serial]. Available: https://eips.ethereum.org/EIPS/eip-3332.