Alert Source Discuss
🚧 Stagnant Standards Track: Core

EIP-2031: 状态租金 B - 网络交易计数器

Authors Alexey Akhunov (@AlexeyAkhunov)
Created 2019-05-15
Discussion Link https://ethereum-magicians.org/t/eip-2031-net-transaction-counter-change-b-from-state-rent-v3-proposal/3283
Requires EIP-2029

简单总结

以太坊开始跟踪其状态中的交易数量(目前,仅跟踪此更改引入之后的交易数量,因此 它被称为网络交易计数)。 这是通过递增特殊合约(称为状态计数器合约 (EIP-2029))中的存储槽来完成的。

摘要

它是状态租金路线图的一部分。这个特殊的更改使得任何以太坊交易都会递增交易计数器,这是 状态计数器合约 中的一个特殊存储槽。 该计数器将用于填充新创建的非合约账户的 nonce。这种填充 nonce 的方式确保了对被驱逐然后通过向其发送以太币而恢复的账户的重放保护。

动机

以太坊目前在状态中没有一个特殊的地方来跟踪交易数量。

规范

一个新的字段,位置为 0(这意味着它驻留在状态计数器合约的存储槽 0 中,并且可以通过调用该合约并提供 32 个零字节的参数来读取),被添加到状态计数器合约中。它最终将包含 txCount,即到目前为止处理的交易总数。 在区块 B 之后,或在状态计数器合约部署之后(以先到者为准),在每次交易后,字段 txCount 都会递增。更新 txCount 意味着更新状态计数器合约在位置 0 的存储。这些更改永远不会被回滚。

基本原理

对于被驱逐然后通过向其发送以太币而恢复的账户的重放保护,提出了两个主要替代方案:

  1. 时间重放保护。新账户(以及那些被恢复的账户)的 nonce 仍然为零,但引入了一个新的 valid-until 字段,使得 在该字段中指定的时间之后,交易的包含无效。然而,这具有不希望的副作用,即账户 nonce 不仅用于重放保护,还用于计算已部署合约的地址(由 CREATE2 创建的合约除外)。
  2. 将新账户(以及那些被恢复的账户)的 nonce 设置为取决于当前区块号的某个值。这种方法需要提出 一个任意参数,即区块中的最大交易数量,以便新的 nonce 永远不会与现有的 nonce 发生冲突。 这目前主要是一个私有网络的问题,因为它们可能在一个区块中拥有更多的交易。

向后兼容性

此更改不向后兼容,需要硬分叉才能激活。

测试用例

测试用例将从参考实现中生成。

实现

将有概念验证实现来改进和澄清规范。

版权

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

Citation

Please cite this document as:

Alexey Akhunov (@AlexeyAkhunov), "EIP-2031: 状态租金 B - 网络交易计数器 [DRAFT]," Ethereum Improvement Proposals, no. 2031, May 2019. [Online serial]. Available: https://eips.ethereum.org/EIPS/eip-2031.