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 sender
Konto 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.
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.
Rob Hitchens