Ethereum web3.personal.ecRecover不';行不通

Ethereum web3.personal.ecRecover不';行不通,ethereum,web3js,web3,Ethereum,Web3js,Web3,我想让web3.personal.ecRecover开始工作。 这是我的设置: 使用混音IDE的Chrome 注入web3.js的元掩码 现在,我正在Chrome开发控制台中尝试以下命令: msg = web3.sha3('Schoolbus') web3.eth.sign(web3.eth.accounts[0], msg , function(error, result){ if(!error) console.log(result) else

我想让web3.personal.ecRecover开始工作。 这是我的设置:

  • 使用混音IDE的Chrome

  • 注入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])

有什么建议可以改进这个代码吗? 谢谢


您应该使用
web3.personal.sign
而不是
web3.eth.sign

在花了几个小时胡思乱想之后,我终于找到了一个有效的解决方案

不要使用web3.eth.personal.ecRecover,而是使用web3.eth.accounts.recover

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)


它得到了支持。克里斯托弗!克里斯托弗·弗兰科!我爱你