eth.sign 与 eth.accounts.sign 创建不同的符号

juu*_*Jay 5 javascript ethereum web3js

当我使用 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.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)
Run Code Online (Sandbox Code Playgroud)

这就是结果。 在此输入图像描述

小智 1

简而言之,这是设计使然(据我所知),以防止将签名的以太坊交易解释为其他数据(例如元交易,由智能合约逻辑验证)。

更多相关详细信息: https://ethereum.stackexchange.com/questions/35425/web3-js-eth-sign-vs-eth-accounts-sign-making- Different-signatures