gpt4 book ai didi

javascript - eth.sign vs eth.accounts.sign 创建不同的符号

转载 作者:行者123 更新时间:2023-12-04 17:23:29 28 4
gpt4 key购买 nike

当我使用 web3.eth.sign() 方法和 web3.eth.accounts.sign() 方法对字符串进行签名时。两个签名的结果值不同。我不知道为什么这两个结果不同。
我正在使用最新的 web3.js。私钥来自元掩码。
这是我的代码

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.length
let 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)
这就是结果。
enter image description here

最佳答案

source code表明区别在于 web3.eth.accounts.sign在签名之前对消息进行前缀和哈希处理。
在您的示例中,传入 msg而不是 msgHasheth.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)

关于javascript - eth.sign vs eth.accounts.sign 创建不同的符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64910864/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com