Alert Source Discuss
🛑 Withdrawn Standards Track: Core

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 限制在 02^52 之间。

动机

当前账户 nonce 被指定为任意长度的无符号整数。在状态见证中处理任意长度的数据并非最佳选择,因此本 EIP 将允许证明以更优化的方式表示 nonce。

此外,这可能对交易格式有利,至少有其他三个提案正在寻求交易格式的一些改进。

最后,这有助于客户端进行微小的优化,因为 nonce 不再需要保存为 256 位数字。

规范

如果 block.number >= FORK_BLOCK,则引入两个新限制:

  1. 认为任何 nonce 超过 2^52 的交易无效。
  2. 当账户 nonce 为 2^52 时,CREATE 指令应以异常中止的方式终止。

理由

  1. 任何 nonce 都不太可能达到或超过建议的限制。如果有人想通过外部交易达到该限制,则至少需要花费 21000 * (2^64-1) = 387_381_625_547_900_583_915_000 gas。

  2. 必须注意的是,过去在 Morden 测试网中,每个新帐户的起始 nonce 均为 2^20,以便区分来自主网的交易。 自 EIP-155 引入了一种使用链标识符的更优雅方式以来,这种重放保护模式已经过时。

  3. 大多数客户端已经认为 nonce 字段为 64 位,例如 go-ethereum。

  4. 所有 <= 2^52 的整数值都可以在 64 位浮点数中编码,而不会有任何精度损失,从而使该值易于在仅支持浮点数的语言中使用。

向后兼容性

虽然这是一个重大更改,但不应看到任何实际效果:

  1. 当前状态下没有任何帐户的 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.