EIP-155: 简单的重放攻击保护
Authors | Vitalik Buterin (@vbuterin) |
---|---|
Created | 2016-10-14 |
硬分叉
参数
FORK_BLKNUM
: 2,675,000CHAIN_ID
: 1 (主网)
规范
如果 block.number >= FORK_BLKNUM
并且 CHAIN_ID
可用,那么在计算用于签名的交易哈希时,不是仅仅哈希六个 rlp 编码的元素 (nonce, gasprice, startgas, to, value, data)
,你 应该 哈希九个 rlp 编码的元素 (nonce, gasprice, startgas, to, value, data, chainid, 0, 0)
。如果你这样做,那么签名的 v
必须 设置为 {0,1} + CHAIN_ID * 2 + 35
,其中 {0,1}
是曲线点的 y
值的奇偶性,对于该曲线点,r
是 secp256k1 签名过程中的 x 值。如果你选择只哈希 6 个值,那么 v
仍然像以前一样设置为 {0,1} + 27
。
如果 block.number >= FORK_BLKNUM
并且 v = CHAIN_ID * 2 + 35
或 v = CHAIN_ID * 2 + 36
,那么在计算用于恢复的交易哈希时,不是哈希六个 rlp 编码的元素 (nonce, gasprice, startgas, to, value, data)
,而是哈希九个 rlp 编码的元素 (nonce, gasprice, startgas, to, value, data, chainid, 0, 0)
。当前使用 v = 27
和 v = 28
的现有签名方案仍然有效,并继续按照之前的相同规则运行。
示例
考虑一个交易,其中 nonce = 9
,gasprice = 20 * 10**9
,startgas = 21000
,to = 0x3535353535353535353535353535353535353535
,value = 10**18
,data=''
(空)。
“签名数据” 变为:
0xec098504a817c800825208943535353535353535353535353535353535353535880de0b6b3a764000080018080
“签名哈希” 变为:
0xdaf5a779ae972f972197303d7b574746c7ef83eadac0f2791ad23db92e4c8e53
如果交易使用私钥 0x4646464646464646464646464646464646464646464646464646464646464646
签名,那么 v,r,s 的值变为:
(37, 18515461264373351373200002665853028612451056578545711640558177340181847433846, 46948507304638947509940763649030358759909902576025900602547168820602576006531)
请注意使用 37 代替 27。签名的 tx 将变为:
0xf86c098504a817c800825208943535353535353535353535353535353535353535880de0b6b3a76400008025a028ef61340bd939bc2195fe537567866003e1a15d3c71ff63e1590620aa636276a067cbe9d8997f761aecb703304b3800ccf555c9f3dc64214b297fb1966a3b6d83
理由
这将提供一种发送在以太坊上工作但在 ETC 或 Morden 测试网上不工作的交易的方法。鼓励 ETC 采用此 EIP,但将 CHAIN_ID
替换为不同的值,并且鼓励所有未来的测试网、联盟链和替代以太坊采用此 EIP,并将 CHAIN_ID
替换为唯一值。
链 ID 列表:
CHAIN_ID |
链 |
---|---|
1 | 以太坊主网 |
2 | Morden (已停用), Expanse 主网 |
3 | Ropsten |
4 | Rinkeby |
5 | Goerli |
42 | Kovan |
1337 | Geth 私有链 (默认) |
在 chainid.network 上查找更多链 ID,并为 ethereum-lists/chains 做出贡献。
Citation
Please cite this document as:
Vitalik Buterin (@vbuterin), "EIP-155: 简单的重放攻击保护," Ethereum Improvement Proposals, no. 155, October 2016. [Online serial]. Available: https://eips.ethereum.org/EIPS/eip-155.