EIP-2035: 无状态客户端 - 重新定价SLOAD和SSTORE以支付区块证明
Authors | Alexey Akhunov (@AlexeyAkhunov) |
---|---|
Created | 2019-05-16 |
Discussion Link | https://ethereum-magicians.org/t/eip-2035-stateless-clients-repricing-sload-and-sstore-to-pay-for-block-proofs/3284 |
简短概要
EVM 操作码 SLOAD
和 SSTORE
的 gas 成本增加,以适应额外的带宽,这些带宽用于传播与区块头和区块体一起的区块证明,如此处所述。
摘要
它是状态租金路线图的一部分。 这个特定更改为以太坊引入区块证明做准备(目前的理解是它们可以在不进行硬分叉的情况下引入)。 区块证明的引入允许任何希望接收它们的以太坊节点处理区块中的交易,而无需访问以太坊状态。 执行所需的所有信息(以及有效性证明)都体现在区块证明中。 在大多数以太坊节点中,它将加速区块处理并减少此类处理的内存占用。 然而,对于矿工节点,将有更多工作要做,以构建和传输区块证明。 因此,引入了额外的费用(支付给矿工)。 在第一阶段,只有合约存储将由区块证明覆盖。 这意味着以太坊节点仍然需要访问状态中的帐户,但是区块证明将使访问合约存储以执行交易成为可选。 因此,只有 SSTORE
和 SLOAD
操作码受到影响。
动机
有经验分析表明 SLOAD
操作码目前在执行延迟方面定价过低,因为它会添加到区块处理中。 假设是由于数据库访问的延迟。 在相同的分析中,不考虑 SSTORE
,因为它对数据库访问的影响可以(并且在许多实现中)延迟到区块结束。 无状态客户端处理合约存储将在很大程度上消除该延迟,因为不需要数据库访问。 相反,带宽消耗会增加。 有经验分析(未发布,但将会发布)表明 1 个未缓存的 SSTORE
或 SLOAD
最多向区块证明添加 1 kB。 按照目前的数据传输成本(每字节 68 gas),这转化为两个操作的 gas 成本增加 69k gas。 然而,鉴于 EIP-2028 中的提案,增加幅度可以小得多。
规范
目前不是很正式,但将通过更多研究和原型设计来形式化。 当访问的存储槽(由 SLOAD
读取或由 SSTORE
写入)在同一交易期间之前未被访问(由另一个 SLOAD
或 SSTORE
)时,操作 SLOAD
和 SSTORE
的 Gas 增加 X
gas。
未来的变体(在实现合约大小总计核算之后将有可能实现)正在研究中,其中增加的量根据合约存储的大小而变化,即,对于较小合约的 SLOAD
和 SSTORE
将更便宜。
理由
EIP-1884 试图增加 SLOAD
的 gas 成本,但使用了不同的理由(动机中描述的执行延迟)。 此 EIP 可能会增加 SLOAD
的成本,因此部分(因为 EIP-1884 还提出了其他增加)取代 EIP-1884。
EIP-2028 描述了可用于确定数据传输 gas 成本的模型。 这很重要,因为在无状态客户端机制中,SSTORE
和 SLOAD
操作会增加要传输的数据(以及验证证明的计算)。
主要的替代设计是与合约存储大小成比例的租金,但不幸的是,这会引入严重的影响 漏洞问题,到目前为止,解决方案似乎是以某种方式重新设计和重写智能合约,使其不易受到攻击。 然而,这种方法可能会在非技术(生态系统)层面非常昂贵。
向后兼容性
此更改不向后兼容,需要激活硬分叉。
此更改可能还会对已部署的合约产生不利影响。 预计在此 EIP 和
EIP-2026(帐户的租金预付款)之后,将建议提高 gas 限制。 这可以在一定程度上缓解 EIP 的不利影响。 最麻烦的情况是那些假设 SLOAD
和
SSTORE
的某些 gas 成本并在其内部 gas 计算中对其进行硬编码的合约。 对于其他人,与合约交互的成本
存储将上升,并可能使某些基于此类交互的 dApp 变得不可行。 这是一种权衡,以避免更大的不利影响,即与合约存储大小成比例的租金。 然而,需要更多的研究来更全面地
分析潜在的影响合约。
测试用例
测试用例将从参考实现中生成。
实现
将有一个概念验证实现来细化和澄清规范。
版权
在 CC0 下放弃版权及相关权利。
Citation
Please cite this document as:
Alexey Akhunov (@AlexeyAkhunov), "EIP-2035: 无状态客户端 - 重新定价SLOAD和SSTORE以支付区块证明 [DRAFT]," Ethereum Improvement Proposals, no. 2035, May 2019. [Online serial]. Available: https://eips.ethereum.org/EIPS/eip-2035.