Lesen von Transaktionsdaten vom Knoten

Ich bin mit einem Ethereum-Knoten verbunden (auf dem Geth läuft), den ich verwalte, und ich kann mich mit RPC mit ihm verbinden. Ich kann nach der Ausgabe von web3 im Terminal zugreifen geth console. Ich kann auf die RPC-Funktionsaufrufe zugreifen und sie ausführen, wie in der Dokumentation hier aufgeführt . Ich muss zwischen verschiedenen Bibliotheken wie webpy und web3.js wechseln, also sollte eine Implementierung in beiden in Ordnung sein.

Bei einem Transaktions-Hash kann ich die Transaktionsdetails abrufen, beispielsweise mit web3.eth.getTransaction(transaction_hash). Aber alle Details, die ich bekomme, umfassen nur: hash, input, nonce, from, to, transaction_index, value, v, r, s.

Was mich interessiert, ist, wie diese Website auf die restlichen ausführlichen Details darüber zugreift, wie viele Token übertragen wurden. Genauer gesagt, wie können wir (bei gegebener Absender- und Vertragsadresse, die an einer Transaktion beteiligt sind) den Wert der übertragenen Token lesen, dh den Wertparameter des Funktionsaufrufs ?

Eine Momentaufnahme solcher Details von der oben genannten Website. ( Wie findet man den Token-Transfer heraus , wie im Bild unten gezeigt)

Geben Sie hier die Bildbeschreibung ein

Kommt es aus dem Eingabefeld? Wenn ja, wie interpretiert man das Hex auf tatsächliche Werte und die aufgerufene Funktion?

Antworten (2)

Sie hören höchstwahrscheinlich auf die Ereignisse , die von jedem Smart Contract generiert werden, und indizieren sie in ihrer lokalen Datenbank.

Die standardmäßigen ERC20-kompatiblen Smart Contracts generieren Transfer()bei jeder Transaktion ein Ereignis. Wenn Sie alle von einem Smart Contract generierten Ereignisse überwachen möchten, können Sie Ihren Client bei allEvents abonnieren

Um auf den Namen der aufgerufenen Funktion, den Namen der Parameter der Funktion, die Typen der Parameter (uint256, Adresse usw.) und den Wert dieser Parameter zuzugreifen, müssen Sie das Feld "Eingabedaten" dekodieren .

Eine einfache Möglichkeit, die Eingabedaten zu decodieren, besteht darin, einen bereits gebauten Decoder wie ethereum-input-data-decoder zu verwenden .

Ereignisse sind kein zuverlässiger Weg, um auf diese Daten zuzugreifen, da viele Vertragsfunktionen keine Ereignisse auslösen und Sie nie sicher sein können, dass das Ereignis Ihnen den wahren Wert der Parameter liefert.