用web3.eth.sign对数据进行签名,但用ecrecover无法验证,何解?

想要验证一下ecrecover方法如何还原对数据进行签名的地址,于是在web3js中:

let msg = document.getElementById("msgToSign").value;
let keccakMsg = web3.utils.keccak256(msg);
let signedMsg = await web3.eth.sign(keccakMsg,accounts[0]);
  console.log(signedMsg);

我输入字符串”abc“,用解锁的钱包进行签名,在metamask中确实可以看到,abc被散列成0x4e03657aea45a94fc7d47ba826c8d667c0d1e6e33a64a036ec44f58fa12d6c45 ,正符合网上最常见的那个案例里给出的值。

然而得到sign结果之后,我对sign结果进行了vrs切片,在solidity里面:

addr = ecrecover(hash, v, r, s);

却只能返回0x0地址,无法返回我实际签名的地址。

请问问题出在哪里呢?

请先 登录 后评论

1 个回答

stirlingx - 去中心化搬砖工
请先 登录 后评论
  • 2 关注
  • 0 收藏,5893 浏览
  • jimmy 提出于 2021-08-24 10:32