Wie parse ich ABI aus dem Vertragscode?

Bei Verwendung der web3 JS-Bibliothek gibt es Hooks, um eine Transaktion anhand ihres Hashs ( web3.eth.getTransaction()) zu erfassen, der eine inputEigenschaft enthält, die die Datennutzlast der Transaktion darstellt. Die ersten vier Bytes davon sind der Funktionsselektor, der ein Fragment eines Hashs ist.

Die Frage ist, wie kann man feststellen, welche Funktion aufgerufen wurde? Hashes können nicht rückwärts verarbeitet werden, daher müssen wir die Liste der Funktionssignaturen für diesen Vertrag (auch bekannt als Vertrags-ABI) ableiten.

Web3 hat die web3.eth.getCode(txnHash)Methode, die den Hex-Code für einen Vertrag erhalten kann, aber kann das in eine ABI des Vertrags geparst werden?

Oder ist es unmöglich, die ABI abzuleiten, ohne den Quellcode des Vertrages zu haben?

Wie man den ABI ableitet, ohne den Quellcode des Vertrags zu haben, ist ein Duplikat von ethereum.stackexchange.com/questions/1437/…

Antworten (1)

Hier ist eine Datenbank mit Zuordnungen von den Funktionen zu den Funktionssignaturen - https://www.4byte.directory/ . Beachten Sie, dass der Server zeitweise „Server Error (500)“ zurückgibt.

Einige weitere Informationen zu diesem Dienst: Ethereum Function Signature Database – Datenbank von 4-Btye-Funktionssignaturen zu ihren menschenlesbaren Gegenstücken .

Die einzige Möglichkeit, die Funktion abzuleiten, wenn der Quellcode nicht bekannt ist, besteht also darin, einfach eine Regenbogentabelle möglicher Signaturen zu führen?
Ja, wie Sie sagten, können die "Hashes nicht rückwärts bearbeitet werden".