3 回答

TA貢獻(xiàn)1796條經(jīng)驗(yàn) 獲得超4個(gè)贊
源代碼?顯示,區(qū)別在于web3.eth.accounts.sign
在簽名之前對消息進(jìn)行前綴和哈希處理。
在您的示例中傳遞msg而不是msgHashto eth.accounts.sign:
所以這個(gè)簽名:
const msg = 'hello world'
const { signature } = await web3.eth.accounts.sign(msg, privateKey)
將產(chǎn)生與散列消息相同的簽名eth.sign:
const msg = 'hello world'
const msgHash = web3.eth.accounts.hashMessage(msg)
const signature = await web3.eth.sign(accounts[0], msgHash)

TA貢獻(xiàn)1824條經(jīng)驗(yàn) 獲得超5個(gè)贊
web3.eth.sign
并?web3.eth.accounts.sign
在 web3.js v1.3.4 中生成相同的簽名。
如果我錯(cuò)了,請糾正我,似乎在幕后web3.eth.sign
調(diào)用,web3.eth.accounts.sign

TA貢獻(xiàn)1807條經(jīng)驗(yàn) 獲得超9個(gè)贊
簡而言之,這是設(shè)計(jì)使然(據(jù)我所知),以防止將簽名的以太坊交易解釋為其他數(shù)據(jù)(例如元交易,由智能合約邏輯驗(yàn)證)。
添加回答
舉報(bào)