我正在努力让web3.personal.ecRecover工作。 这是我的设置:
Chrome使用Remix IDE
MetaMask注入web3.js
现在我在Chrome开发者控制台中尝试以下命令:
msg = web3.sha3('Schoolbus')
web3.eth.sign(web3.eth.accounts[0], msg , function(error, result){
if(!error)
console.log(result)
else
console.error(error);
})
返回:
0xd030d9a04df643f62a1502b017f51c41a659268091abbd20e2de97b935724d7c
现在我设置:
signature = "0x36f32cbd6133ce6be7efa4cb73ff3f9ddf9b7db3ba15fa543ab0a93d04a96c102693739f946f2d89eca9030b4c8e01bb6fada1c23f05b6a4956dd63deaf187501b"
并尝试:
web3.personal.ecRecover(msg,signature, function(error, result){
if(!error)
console.log(result)
else
console.error(error);
})
并获得:
0xcc3f70c6caa9fee58bab68f292bdf3132c3c9ae2
显然这不是我用过的公共地址(即web3.eth.accounts [0])
有任何改进此代码的建议吗? 谢谢!
取值
答案 0 :(得分:1)
您应该使用web3.personal.sign
代替web3.eth.sign
https://web3js.readthedocs.io/en/1.0/web3-eth-personal.html#sign
答案 1 :(得分:1)
解决了几个小时后,我终于找到了一个可行的解决方案。
使用web3.eth.accounts.recover代替使用web3.eth.personal.eccover
const Web3 = require('web3');
const web3 = new Web3(new Web3.providers.HttpProvider('http://node.expanse.tech'));
let test = {
address: web3.eth.accounts[0],
msg: "this is a test",
sig: "0x689f9d5718e3a4ecb643d27742c60bde7bee66a596a4593ae00ca853b8c6ea5d1ffb5b72112b053ccdcb31c4640f90bfb47b543e644437c6b23cd5f24f4e83b41b",
version: "2"
}
let key = web3.eth.accounts.recover(test.msg, test.sig);
console.log(key)