Abrufen der ursprünglichen Nachricht aus einer ETH-Transaktion

Wenn jemand ETH einfach von einer Adresse zu einer anderen sendet und davon ausgeht, dass diese Person keine benutzerdefinierte Nachricht in die Transaktion einfügt, was genau ist dann die Nachricht, die im Netzwerk gesendet wird, um die Transaktion zu signieren?

Beim Lesen der Grundlagen zur Funktionsweise der Nachrichtensignatur habe ich festgestellt, dass die folgende Methode und Formel verwendet wird:

sign(keccak256("\x19Ethereum Signed Message:\n" + len(message) + message)))

... aber wenn der Unterzeichner keine Nachricht enthält und nur ETH sendet oder vielleicht nur MetaMask verwendet, um Geld zu senden, was genau wird die Nachricht?

(Nebenbemerkung: Eine Transaktionsdecodierung zeigt, dass das Feld „Daten“ einfach „0x“ ist, aber nicht sicher ist, ob dieses Datenfeld auch mit der Nachricht selbst korreliert ist oder nicht).

Antworten (1)

Alle Ethereum-Transaktionen enthalten ein dataFeld. Dieses Feld kann sein

  • Leer

  • Eine Nutzlast zum Aufrufen einer Smart-Contract-Funktion

  • Jede vom Benutzer gegebene Nachricht

Die Payload im Datenfeld ist separat zum Signieren einer Nachricht. Eine signierte Nachricht kann wie E-Mail und CopyPaste Offchain übertragen werden und muss nicht Teil einer Transaktion sein.

Wenn es leer ist, enthält es immer noch das Präfix „\x19Ethereum Signed Message:\n“, das als Teil der rohen Transaktionsdaten eingebettet ist?
Nein. Worauf Sie sich beziehen, ist die Nachrichtensignierungspräambel und ihr Zweck ist es, signierte Ethereum-Transaktionen von signierten Ethereum-Nachrichten zu unterscheiden (kann nicht denselben Hash haben).