Estoy tratando de usar la biblioteca OpenZeppelin ECRecovery para un proyecto en el que estoy trabajando.
Desafortunadamente, no entiendo completamente cómo funciona y no hay documentación para ello.
Digamos que quiero firmar el mensaje 'hola'. Primero lo hago hash:
msg = web3.sha3('hello');
Luego lo firmo usando web3.eth.sign y metamask.
web3.eth.sign(web3.eth.accounts[0], msg, (err, res) => {
sig = res;
})
La firma devuelta es:
0xebb853cf9818c590e428bfa2b793b23e975d978bfefbb8aff164a282786c3eda0054113161b1a72f29f371a35b9a378413d689e49addcea34a8a617270c2bc951c
En el código de la biblioteca dice:
// Check the signature length
if (sig.length != 65) {
return (address(0));
}
Entonces, si llamo a la función con el hash y la firma anterior, fallará porque esta firma tiene una longitud de 132.
También pensé en usar el valor r o s de la firma solo dividiéndolo en JavaScript: (aunque ni siquiera sé qué representan estos valores, ya que no hay absolutamente ninguna información en la documentación de solidez)
var r = sig.substr(0,66);
var s = "0x" + sig.substr(66,64);
Pero ambos tienen una longitud de 66 y también fallan.
¿Alguien ha usado alguna vez su biblioteca y me puede ayudar?
Su longitud es 132 pero tiene 2 para el prefijo '0x', entonces tiene 130 caracteres hexadecimales que representan 130/2 = 65 bytes como se esperaba. Debe asegurarse de enviarlos como una matriz de bytes.
tjaden hess