Alert Source Discuss
Standards Track: Core

EIP-155: 简单的重放攻击保护

Authors Vitalik Buterin (@vbuterin)
Created 2016-10-14

硬分叉

Spurious Dragon

参数

  • FORK_BLKNUM: 2,675,000
  • CHAIN_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 + 35v = CHAIN_ID * 2 + 36,那么在计算用于恢复的交易哈希时,不是哈希六个 rlp 编码的元素 (nonce, gasprice, startgas, to, value, data),而是哈希九个 rlp 编码的元素 (nonce, gasprice, startgas, to, value, data, chainid, 0, 0)。当前使用 v = 27v = 28 的现有签名方案仍然有效,并继续按照之前的相同规则运行。

示例

考虑一个交易,其中 nonce = 9gasprice = 20 * 10**9startgas = 21000to = 0x3535353535353535353535353535353535353535value = 10**18data='' (空)。

“签名数据” 变为:

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.