Ethereumjs
ethereumjs 的 ecrecover 方法中的 chainId 參數有什麼意義?
的參數
ecrecover()
是:
- msgHash
- 在
- r
- s
- 鏈 ID
前四個對我來說非常直接,但最後一個 - chainId…. 那一個有什麼意義?
在查看原始碼時,我看到如果 chainId 為 0,則從簽名的最後一個字節中減去 27,如果結果不是 0 或 1,則
ecrecover
拋出異常。我想整個 27 件事是https://eth.wiki/json-rpc/API#eth_signeth_sign
中討論的 RPC 方法的一部分,但這並沒有真正給我任何見解……有任何想法嗎?
ChainId 用作簡單的重放攻擊保護。在倫敦分叉之後,chainId 是強制性的,必須用於簽署交易,否則節點將不接受它。
此EIP-155描述瞭如何將 chainId 添加到簽名中以及為什麼。
簽名的 v必須設置為**{0,1} + CHAIN_ID * 2 + 35**其中 {0,1} 是曲線點的 y 值的奇偶校驗,其中 r 是 secp256k1 簽名過程中的 x 值