我正在尝试将OpenZeppelin ECRecovery库用于我正在进行的一个项目。
不幸的是,我不完全理解它是如何工作的,也没有任何文档。
假设我想签个‘你好’的信息。首先,我将其分解为:
msg = web3.sha3('hello');然后,我使用web3.eth.sign和元and对其进行签名。
web3.eth.sign(web3.eth.accounts[0], msg, (err, res) => {
sig = res;
})返回的签名是:
0xebb853cf9818c590e428bfa2b793b23e975d978bfefbb8aff164a282786c3eda0054113161b1a72f29f371a35b9a378413d689e49addcea34a8a617270c2bc951c
在图书馆代码中写着:
// Check the signature length
if (sig.length != 65) {
return (address(0));
}因此,如果我用散列和上面的签名调用函数,它将失败,因为这个签名的长度为132。
我还考虑使用签名的r或S值,只需在JavaScript中分割它:(尽管我甚至不知道这些值代表什么,因为在solidity文档中绝对没有任何信息)
var r = sig.substr(0,66);
var s = "0x" + sig.substr(66,64);但两者都有66的长度,同时也失败了。
有没有人用过他们的图书馆来帮我?
发布于 2018-05-19 20:15:22
它的长度是132,但是前缀'0x‘有2个,那么就有130个十六进制字符,它们表示130/2 =65个字节。您必须确保将它们作为字节数组发送。
https://ethereum.stackexchange.com/questions/48907
复制相似问题