Alert Source Discuss
🚧 Stagnant Standards Track: Core

EIP-2029: State Rent A - 状态计数器合约

Authors Alexey Akhunov (@AlexeyAkhunov)
Created 2019-05-15
Discussion Link https://ethereum-magicians.org/t/eip-2029-state-counters-contract-change-a-from-state-rent-v3-proposal/3279

简单概要

一个智能合约被部署在所有以太坊网络上,位于一个预先确定的地址,其代码简单地读取由唯一参数指定的存储中的槽。 之后,这个合约变得“特殊”,因为以太坊开始将状态计数器(交易总数、账户数等)写入该合约。

摘要

这是 State Rent 路线图的一部分。 这个特殊的更改引入了以太坊状态中的一个位置,可以在其中存储各种状态计数器。 此时,最重要的计数器是发生的交易总数,并且该计数器将用于填充新创建的非合约账户的 nonce。 这种填充 nonce 的方式可以确保对被驱逐然后通过向其发送以太币而带回的账户的重放保护。

动机

以太坊目前在状态中没有一个特殊的位置来跟踪状态计数器,例如交易数量或帐户数量。

规范

在区块 A 之前,部署一个具有以下代码的合约: 0x60 0x20 0x60 0x00 0x80 0x80 0x35 0x54 0x90 0x52 0xF3,它对应于以下汇编代码: PUSH1 32 PUSH1 0 DUP1 DUP1 CALLDATALOAD SLOAD SWAP1 MSTORE RETURN 对这个合约的调用接受一个 32 字节的参数 x,并返回存储项 [x] 的值。

此合约使用 CREATE2 操作码部署,以便它在任何网络上都具有相同的地址。

理由

到目前为止,已经考虑了两种替代解决方案:

  1. 扩展以太坊状态的结构以引入更多字段,从而改变状态根的构造方式。 这种方法的主要缺点是它会影响当前与特定状态根构造方式耦合的软件。 特别是它影响到处理从状态根派生的 merkle 证明的软件。
  2. 扩展状态预言机 (EIP-2014)。 在这样的提案下,将有一个具有标准化接口的预编译合约,能够返回计数器的当前值。 但是,此类预言机返回的实际数据并非显式地存在于状态中,并且未进行 Merkelisation。 这意味着当执行快照同步时,所有计数器都需要添加到快照中,因此它们仍然存在于状态中,但隐含地存在。

向后兼容性

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

测试用例

将创建测试用例以确保状态计数器合约正确返回其存储项。

实现

设想的实现是从任何以太坊地址发布的交易,并将导致状态计数器合约的部署。

版权

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

Citation

Please cite this document as:

Alexey Akhunov (@AlexeyAkhunov), "EIP-2029: State Rent A - 状态计数器合约 [DRAFT]," Ethereum Improvement Proposals, no. 2029, May 2019. [Online serial]. Available: https://eips.ethereum.org/EIPS/eip-2029.