🚧 Stagnant
Standards Track: Core
EIP-1681: 临时重放保护
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.