该文本详细阐述了以太坊 Spurious Dragon 硬分叉(EIP-607)引入的交易签名和恢复机制的变更。为防止跨链重放攻击,引入了 CHAIN_ID,并规定当 block.number 达到特定高度时,交易哈希将包含九个RLP编码元素,且签名中的 v 值将根据 CHAIN_ID 进行调整,同时兼容旧的签名方案。
FORK_BLKNUM: 2,675,000CHAIN_ID: 1 (主网)如果 $block.number \ge FORK\_BLKNUM$ 且 CHAIN_ID 可用,那么在为签名目的计算交易哈希时,你应该哈希九个 RLP 编码元素 (nonce, gasprice, startgas, to, value, data, chainid, 0, 0),而不是仅哈希六个 RLP 编码元素 (nonce, gasprice, startgas, to, value, data)。如果你这样做,则签名的 $v$ 必须设置为 $\{0,1\} + CHAIN\_ID * 2 + 35$,其中 $\{0,1\}$ 是 secp256k1 签名过程中曲线点 $y$ 值的奇偶性,对于该曲线点,$r$ 是 $x$-value。如果你选择只哈希 6 个值,那么 $v$ 将继续像以前一样设置为 $\{0,1\} + 27$。
如果 $block.number \ge FORK\_BLKNUM$ 且 $v = CHAIN\_ID * 2 + 35$ 或 $v = CHAIN\_ID * 2 + 36$,那么在为恢复目的计算交易哈希时,哈希九个 RLP 编码元素 (nonce, gasprice, startgas, to, value, data, chainid, 0, 0),而不是哈希六个 RLP 编码元素 (nonce, gasprice, startgas, to, value, data)。当前使用 $v = 27$ 和 $v = 28$ 的签名方案仍然有效,并继续按照以前的规则运行。
考虑一笔交易,其中 $nonce = 9$,$gasprice = 20 \times 10^9$,$startgas = 21000$,to = 0x3535353535353535353535353535353535353535,$value = 10^{18}$,data='' (空)。
“签名数据”变为:
0xec098504a817c800825208943535353535353535353535353535353535353535880de0b6b3a764000080018080
“签名哈希”变为:
0xdaf5a779ae972f972197303d7b574746c7ef83eadac0f2791ad23db92e4c8e53
如果交易使用私钥 0x4646464646464646464646464646464646464646464646464646464646464646 进行签名,则 $v, r, s$ 值变为:
(37, 18515461264373351373200002665853028612451056578545711640558177340181847433846, 46948507304638947509940763649030358759909902576025900602547168820602576006531)
注意使用 37 而不是 27。签名的交易将变为:
0xf86c098504a817c800825208943535353535353535353535353535353535353535880de0b6b3a76400008025a028ef61340bd939bc2195fe537567866003e1a15d3c71ff63e1590620aa636276a067cbe9d8997f761aecb703304b3800ccf555c9f3dc64214b297fb1966a3b6d83
这将提供一种在 Ethereum 上工作但不在 ETC 或 Morden 测试网上工作的交易发送方式。鼓励 ETC 采用此 EIP,但将 CHAIN_ID 替换为不同的值;同时,鼓励所有未来的测试网、联盟链和 alt-etherea 采用此 EIP,并将 CHAIN_ID 替换为唯一值。
CHAIN_ID |
链 |
|---|---|
| 1 | Ethereum 主网 |
| 2 | Morden (已废弃), Expanse 主网 |
| 3 | Ropsten |
| 4 | Rinkeby |
| 5 | Goerli |
| 42 | Kovan |
| 1337 | Geth 私有链 (默认) |
在 chainid.network 上查找更多 Chain ID,并为 ethereum-lists/chains 做出贡献。
- 原文链接: github.com/nerolation/EI...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!