亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

eth.sign 與 eth.accounts.sign 創建不同的符號

eth.sign 與 eth.accounts.sign 創建不同的符號

小怪獸愛吃肉 2023-08-18 16:43:58
當我使用 web3.eth.sign() 方法和 web3.eth.accounts.sign() 方法簽署字符串時。兩個簽名的結果值不同。我不知道為什么這兩個結果不同。我正在使用最新的 web3.js。私鑰來自metamask。這是我的代碼await ethereum.enable();web3 = new Web3(web3.currentProvider);let accounts = await web3.eth.getAccounts();let msg = "sign this message"let prefix = "\x19Ethereum Signed Message:\n" + msg.lengthlet msgHash1 = web3.utils.sha3(prefix+msg)let sig1 = await web3.eth.sign(msgHash1, accounts[0]);let privateKey = "0xcfb51f3737044cb4bfb49cbb10ae67d79ee81523d7065e95972cc23ed914e95e"let sigObj = await web3.eth.accounts.sign(msgHash1, privateKey)let sig2 = sigObj.signature;console.log(sig1)console.log(sig2)這就是結果。
查看完整描述

3 回答

?
慕的地8271018

TA貢獻1796條經驗 獲得超4個贊

源代碼?顯示,區別在于web3.eth.accounts.sign在簽名之前對消息進行前綴和哈希處理。


在您的示例中傳遞msg而不是msgHashto eth.accounts.sign:


所以這個簽名:


const msg = 'hello world'

const { signature } = await web3.eth.accounts.sign(msg, privateKey)

將產生與散列消息相同的簽名eth.sign:


const msg = 'hello world'

const msgHash = web3.eth.accounts.hashMessage(msg)

const signature = await web3.eth.sign(accounts[0], msgHash)


查看完整回答
反對 回復 2023-08-18
?
滄海一幻覺

TA貢獻1824條經驗 獲得超5個贊

web3.eth.sign并?web3.eth.accounts.sign在 web3.js v1.3.4 中生成相同的簽名。

如果我錯了,請糾正我,似乎在幕后web3.eth.sign調用,web3.eth.accounts.sign


查看完整回答
反對 回復 2023-08-18
?
函數式編程

TA貢獻1807條經驗 獲得超9個贊

簡而言之,這是設計使然(據我所知),以防止將簽名的以太坊交易解釋為其他數據(例如元交易,由智能合約邏輯驗證)。


查看完整回答
反對 回復 2023-08-18
  • 3 回答
  • 0 關注
  • 166 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號