EIP-3338: 将账户 nonce 限制为 2^52
Authors | Micah Zoltu (@MicahZoltu), Alex Beregszaszi (@axic) |
---|---|
Created | 2021-03-07 |
Discussion Link | https://ethereum-magicians.org/t/eip-2681-limit-account-nonce-to-2-64-1/4324 |
摘要
将账户 nonce 限制在 0
和 2^52
之间。
动机
当前账户 nonce 被指定为任意长度的无符号整数。在状态见证中处理任意长度的数据并非最佳选择,因此本 EIP 将允许证明以更优化的方式表示 nonce。
此外,这可能对交易格式有利,至少有其他三个提案正在寻求交易格式的一些改进。
最后,这有助于客户端进行微小的优化,因为 nonce 不再需要保存为 256 位数字。
规范
如果 block.number >= FORK_BLOCK
,则引入两个新限制:
- 认为任何 nonce 超过
2^52
的交易无效。 - 当账户 nonce 为
2^52
时,CREATE
指令应以异常中止的方式终止。
理由
-
任何 nonce 都不太可能达到或超过建议的限制。如果有人想通过外部交易达到该限制,则至少需要花费
21000 * (2^64-1) = 387_381_625_547_900_583_915_000
gas。 -
必须注意的是,过去在 Morden 测试网中,每个新帐户的起始 nonce 均为
2^20
,以便区分来自主网的交易。 自 EIP-155 引入了一种使用链标识符的更优雅方式以来,这种重放保护模式已经过时。 -
大多数客户端已经认为 nonce 字段为 64 位,例如 go-ethereum。
-
所有 <= 2^52 的整数值都可以在 64 位浮点数中编码,而不会有任何精度损失,从而使该值易于在仅支持浮点数的语言中使用。
向后兼容性
虽然这是一个重大更改,但不应看到任何实际效果:
- 当前状态下没有任何帐户的 nonce 超过该值。截至 2020 年 11 月,帐户
0xea674fdde714fd979de3edf0f56aa9716b898ec8
负责的最高帐户 nonce 约为 2900 万。
安全注意事项
没有。
版权
版权和相关权利已通过 CC0 放弃。
Citation
Please cite this document as:
Micah Zoltu (@MicahZoltu), Alex Beregszaszi (@axic), "EIP-3338: 将账户 nonce 限制为 2^52 [DRAFT]," Ethereum Improvement Proposals, no. 3338, March 2021. [Online serial]. Available: https://eips.ethereum.org/EIPS/eip-3338.