web3.personal.ecRecover 不起作用

Posted

技术标签:

【中文标题】web3.personal.ecRecover 不起作用【英文标题】:web3.personal.ecRecover doesn't work 【发布时间】:2018-04-01 21:51:21 【问题描述】:

我正在尝试让 web3.personal.ecRecover 工作。 这是我的设置:

使用 Remix IDE 的 Chrome

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])

有任何改进此代码的建议吗? 谢谢!

S

【问题讨论】:

【参考方案1】:

在搞砸了几个小时后,我终于找到了一个可行的解决方案。

不要使用 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)

【讨论】:

克里斯托弗!克里斯托弗弗兰科!我爱你 【参考方案2】:

您应该使用web3.personal.sign 而不是web3.eth.sign https://web3js.readthedocs.io/en/1.0/web3-eth-personal.html#sign

【讨论】:

支持。 medium.com/metamask/…

以上是关于web3.personal.ecRecover 不起作用的主要内容,如果未能解决你的问题,请参考以下文章

时光不老我们不散这句话是啥意思 时光不老我们不散这句话解释

C语言 不允许使用不完整的类型

时光不老,我们不散的下一句是啥?

C语言 不允许使用不完整的类型

时光不老,我们不散珍惜友情的说说

时光不老我们不散,天不会不蓝,我不会不在。