Web3js
如何使用 web3 javascript API 驗證簽名?
使用 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')
要在可靠合約中進行驗證,請查看此答案。