Web3js

如何使用 web3 javascript API 驗證簽名?

  • August 23, 2021

使用 javascript web3 API,我可以創建這樣的簽名

> web3.eth.sign(eth.coinbase, "0xdeadbeef")
"0xd3fe64b6f0920593cc4afb1321d592ae91e25fe1a0216e9002a4a6580fb2698c5ec62491c62557b8cc8f64533a5097b3ffb68208952b30cb27ed0a56ae21682201"

現在我想驗證簽名是否正確;在契約中這樣做已經在其他地方記錄,但我正在尋找一種方法來使用web3. (如何才能做到這一點?

web3尚不支持此功能,但它可能會隨 web3 1.0 一起提供

與此同時,您可以使用 ethereumjs-utils ecrecover功能。請注意,此函式預計v位於 {27, 28} 中,並且由於您的簽名來自 geth,(因為它還沒有返回規範格式的簽名)您必須添加27到您的v.

sgn給定雜湊消息的簽名msg,您可以像這樣使用 ethereumjs-util 庫:

r = utils.toBuffer(sgn.slice(0,66))
s = utils.toBuffer('0x' + sgn.slice(66,130))
v = utils.toBuffer('0x' + sgn.slice(130,132))
m = utils.toBuffer(msg)
pub = utils.ecrecover(m, v, r, s)
adr = '0x' + utils.pubToAddress(pub).toString('hex')

要在可靠合約中進行驗證,請查看此答案

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