Solidity unterstützt die txHash-Variable noch nicht, wurde aber bei EIP 901 https://github.com/ethereum/EIPs/issues/901 angefordert . Wie könnte ich in der Zwischenzeit den txHash einer Transaktion mit dem Solidity-Code im Smart Contract berechnen? Ich denke, txHash basiert auf einem Keccak-Hashing des msg.sender und wahrscheinlich der Nonce der Anfrage, oder? Gibt es eine kanonische Formel für die Ethereum txHash-Berechnung? Vielen Dank!
Es ist nicht möglich.
Der TXHash ist keccak256(signedTransaction)
.
Diese keccak256-Funktion ist als Solidity-Funktion verfügbar http://solidity.readthedocs.io/en/v0.4.21/units-and-global-variables.html
Sie müssten also konstruieren, signedTransaction
da dieser Wert nicht der Solidität ausgesetzt ist, vgl. https://stackoverflow.com/questions/49803424/how-can-we-access-rlp-encoded-signed-raw-transaction-in-solidity
Die Bestandteile von signedTransaction
sind
Wert 3 ist nicht direkt verfügbar, aber Sie können das aktuelle verbleibende Gas an jedem Punkt Ihrer Codeausführung abrufen und daraus berechnen, wie viel verfügbar war, als die Ausführung gestartet wurde. Die Werte 1, 7, 8 und 9 (die Nonce- und die Signaturwerte) sind nicht mit Solidity verfügbar, noch sind sie mit Assemblercode verfügbar (der inline in Solidity-Quellcodedateien geschrieben werden kann). Damit lässt sich dein Problem leider nicht lösen.
Siehe auch: Haben die Kontrakte von Ethereum Zugriff auf die Nonce der Blöcke?
Gemäß dem Geth-Quellcode (Datei core/types/transactions
) und diesem Medienbeitrag wird der Hash einer Transaktion durch den Keccak-256-Bit-Hashing der rlp-Codierung aller Felder einer Transaktion angegeben, wie in diesem Bild 1 gezeigt .
Um die Transaktionsfunktion zu berechnen, müssen Sie daher in der Lage sein:
Wenn Sie sich die EVM-Spezifikation ( Yellow Paper , Anhang H) ansehen, können Sie sehen, dass der erste Punkt sehr einfach ist, tatsächlich entspricht er der SHA3 (0x20)
Anweisung. Es ist weder die RLP-Kodierung aller Felder einer Transaktion noch eine RLP-Kodierungsanweisung im EVM-Anweisungssatz angegeben, aber es ist möglich, sie zu berechnen ( Yellow Paper , Anhang B), vorausgesetzt, der Absender hat genügend Gas zur Verfügung. Schließlich gibt es keine Anweisung, auf alle Felder zuzugreifen. Insbesondere kann ich die EVM-Anweisungen für den Zugriff nicht finden:
v
undr