Я пытаюсь использовать библиотеку OpenZeppelin ECRecovery для проекта, над которым работаю.
К сожалению, я не совсем понимаю, как это работает, и для этого нет документации.
Допустим, я хочу подписать сообщение «привет». Сначала я хеширую это:
msg = web3.sha3('hello');
Затем я подписываю его, используя web3.eth.sign и метамаску.
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: (хотя я даже не знаю, что представляют собой эти значения, так как в документации по солидности нет абсолютно никакой информации)
var r = sig.substr(0,66);
var s = "0x" + sig.substr(66,64);
Но оба имеют длину 66 и тоже терпят неудачу.
Кто-нибудь когда-либо использовал их библиотеку и может мне помочь?
Его длина составляет 132, но у вас есть 2 для префикса «0x», тогда у вас есть 130 шестнадцатеричных символов, которые представляют 130/2 = 65 байтов, как и ожидалось. Вы должны убедиться, что отправляете их в виде массива байтов.
Тьяден Хесс