Ethereumjs

ethereumjs 的 ecrecover 方法中的 chainId 參數有什麼意義?

  • February 13, 2022

的參數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 值

引用自:https://ethereum.stackexchange.com/questions/121499