La recuperación de la dirección (web3.eth.accounts.recover) no devuelve la dirección del firmante del mensaje

Estoy escribiendo una prueba para una función en mi contrato inteligente que intenta verificar que un mensaje proviene del firmante. Actualmente estoy usando web3.eth.accounts.signpara firmar mi mensaje con la sendercuenta. Luego uso el hash de respuesta ( signedMessage) para recuperar mi dirección.

const sender = accounts[0]

const message = web3.utils.soliditySha3('hello-world')
const signedMessage = await web3.eth.accounts.sign(message, sender)

const {signature, messageHash, v, r, s} = signedMessage

const recoveredAddress = await web3.eth.accounts.recover({
  messageHash: messageHash,
  v: v,
  r: r,
  s: s
})

console.log("sender: ", sender)
console.log("recoveredAddress: ", recoveredAddress)

Esto es lo que está generando el terminal para mi console.log:

sender:  0x627306090abaB3A6e1400e9345bC60c78a8BEf57
recoveredAddress:  0x170e85941BAeE85CFEA0cAd2EDf798DC5C287AA1

¿Por qué la dirección recuperada es diferente de la dirección del remitente?

EDITAR: El problema que estaba teniendo era que estaba usando la clave pública para firmar mi mensaje. Debería haber estado usando una clave privada.

Gracias, por publicar la solución. Puede publicar una respuesta con el código corregido y aceptar su propia respuesta para ganar.

Respuestas (1)

El problema que estaba teniendo era que estaba usando la clave pública para firmar mi mensaje. Debería haber estado usando una clave privada.

Como no se puede obtener una clave privada de una clave pública, busqué en línea un par de clave privada/clave pública y codifiqué el valor para mi prueba.