Alert Source Discuss
🚧 Stagnant Standards Track: Core

EIP-1681: 临时重放保护

Authors Martin Holst Swende (@holiman)
Created 2019-01-08
Discussion Link https://ethereum-magicians.org/t/temporal-replay-protection/2355

简单总结

本EIP提议为交易添加一个“临时”重放保护,形式为 valid-until 时间戳。 本EIP与 Nick Johnson 和 Konrad Feldmeier 提出的 https://github.com/ethereum/EIPs/pull/599 非常相似,主要区别在于 本EIP基于时钟时间/挂钟时间,而不是区块号。

动机

引入基于时间的交易有效性有几个不同的动机。

  • 如果引入任何形式的灰尘账户清理,例如(https://github.com/ethereum/EIPs/issues/168),则有必要 引入重放保护,例如 https://github.com/ethereum/EIPs/issues/169 。拥有临时重放保护消除了 在状态中更改 nonce 行为的需要,因为交易在用户明确设置的较晚日期之后将不可重放。
  • 在许多情况下,例如在 ICO 期间,很多人都希望他们的交易能够尽快(在几个小时内)被包含进来,或者根本不被包含。目前, 交易会被排队,并且可能需要几天才能执行,这既会给用户带来成本(最终为失败的购买支付 gas 费),也会给网络带来成本(处理大量的交易队列)。
  • 节点实现在保留、丢弃或传播哪些交易方面没有达成共识。在交易上设置 TTL 将更容易从系统中删除过时的交易。

规范

推出将分两个阶段进行,X(硬分叉)和 Y(软分叉)。

在区块 X

  • 向 RLP 编码的交易添加一个可选字段 valid-until,定义为 uint64(与 nonce 相同)。
  • 如果字段存在于交易 t 中,则
    • 仅当 block.timestamp < t.valid-until 时,t 才有资格包含在区块中。

在区块 Y

  • 使 valid-until 成为强制性的,并将任何没有 valid-until 的交易视为无效。

理由

本 EIP 的理由

对于灰尘账户清理用例,

  • 此更改在共识引擎中的侵入性要小得多。
    • 无需维护 ‘highest-known-nonce’ 的共识字段或限制来自发送者的交易数量。
    • 仅触及共识引擎的交易验证部分
    • 其他使用 nonce 的模式可能会产生意想不到的副作用,
      • 例如无法在某些地址创建合约。
      • 更难与离线签名器集成,因为更详细的 nonce 方案需要状态访问才能确定。
      • highest-nonce 这样更复杂的方案会更加困难,因为 highest-known-nonce 将是一个共识结构,在交易执行期间会递增并可能恢复,这需要再增加一个已记录的字段。

挂钟时间的理由

为什么使用挂钟时间而不是区块号,如 https://github.com/ethereum/EIPs/pull/599 中提出的?

  • UTC 时间通常在大多数设置中都可用,即使在离线计算机上也是如此。这意味着即使区块链信息不可用,签署交易的一方也可以生成具有所需属性的交易。
  • 时间和区块号之间的相关性不是固定的;即使“期望”14 秒的区块时间,但这会因网络哈希率和难度炸弹的进展而异。
  • 对于测试网和私有网络,区块号作为时间戳更不可靠。
  • UTC 时间对用户更友好,用户可以更轻松地确定交易的合理结束日期,而不是合适的有效区块数。

向后兼容性

此 EIP 意味着创建交易的所有软件/硬件都需要向交易添加时间戳,否则将无法在区块 Y 之后签署交易。注意:此 EIP 不引入任何最大 valid-until 日期,因此仍然可以创建具有接近无限有效性的交易。

测试用例

待办

实现

目前还没有

安全考虑

最值得注意的安全影响是,存储在纸质备份上的预签名交易将从区块 Y 开始失效。在以下几种情况下可能会使用到

  • 预先生成的单次“引导”交易,例如将用户加入以太坊。有人可以不用给用户一张包含实际以太币的礼品卡,而是给这个人一个预先生成的单次交易,该交易仅在用户主动想要开始使用它时才将这些以太币发送到卡上。
  • 如果用户有一个离线纸钱包,他可能已经预先生成了交易以将价值发送到例如交易所。这样做有时是为了能够在不必经历将纸钱包恢复“生命”的所有步骤的情况下将以太币发送到交易所。

次要的安全影响是,添加时间戳会使交易稍微大一些。

版权

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

Citation

Please cite this document as:

Martin Holst Swende (@holiman), "EIP-1681: 临时重放保护 [DRAFT]," Ethereum Improvement Proposals, no. 1681, January 2019. [Online serial]. Available: https://eips.ethereum.org/EIPS/eip-1681.