Beim Wiederherstellen der Adresse (web3.eth.accounts.recover) wird die Adresse des Unterzeichners der Nachricht nicht zurückgegeben

Ich schreibe einen Test für eine Funktion in meinem Smart Contract, der versucht zu überprüfen, ob eine Nachricht vom Unterzeichner stammt. Ich verwende derzeit web3.eth.accounts.sign, um meine Nachricht mit dem senderKonto zu signieren. Ich verwende dann den Antwort-Hash ( signedMessage), um meine Adresse wiederherzustellen.

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)

Folgendes gibt das Terminal für mein console.log aus:

sender:  0x627306090abaB3A6e1400e9345bC60c78a8BEf57
recoveredAddress:  0x170e85941BAeE85CFEA0cAd2EDf798DC5C287AA1

Warum unterscheidet sich die wiederhergestellte Adresse von der Absenderadresse?

BEARBEITEN: Das Problem, das ich hatte, war, dass ich den öffentlichen Schlüssel zum Signieren meiner Nachricht verwendet habe. Ich hätte einen privaten Schlüssel verwenden sollen.

Danke für das Posten der Lösung. Sie könnten eine Antwort mit dem korrigierten Code posten und Ihre eigene Antwort für den Gewinn akzeptieren.

Antworten (1)

Das Problem, das ich hatte, war, dass ich den öffentlichen Schlüssel zum Signieren meiner Nachricht verwendete. Ich hätte einen privaten Schlüssel verwenden sollen.

Da Sie aus einem öffentlichen Schlüssel keinen privaten Schlüssel erhalten können, habe ich online nach einem Paar aus privatem Schlüssel und öffentlichem Schlüssel gesucht und den Wert für meinen Test hartcodiert.