Debug-API & Trace-Modul

Nikki
Moonbeam-DE translations
4 min readJul 30, 2021

Einleitung

Sowohl die Debug-API von Geth als auch das Trace-Modul von OpenEthereum bieten nicht standardmäßige RPC-Methoden, um einen tieferen Einblick in die Transaktionsverarbeitung zu erhalten.

Mit dem Release von Moonbase Alpha v7 sind als Teil des Ziels von Moonbeam, Entwicklern ein nahtloses Ethereum-Erlebnis zu bieten, jetzt sowohl die debug_traceTransaction- als auch die trace_filter-RPC-Methode verfügbar.

Die Unterstützung beider RPC-Methoden ist ein wichtiger Meilenstein, da viele Projekte wie The Graph oder Blockscout darauf angewiesen sind, Blockchain-Daten zu indizieren.

Beide Aufrufe sind für den Knoten ziemlich schwer. Daher ist es erforderlich, diesen RPC für einen lokal laufenden Knoten zu erstellen, entweder mit dem Flag — ethapi=debug für debug_traceTransaction und/oder dem Flag — ethapi=trace für trace_filter. Derzeit können Sie zwei verschiedene Arten von Knoten erstellen:

  • Moonbeam-Entwicklungsknoten — Führen Sie Ihre eigene Moonbeam-Instanz in Ihrer privaten Umgebung aus. Dazu können Sie dieser Anleitung folgen. Sehen auch Sie unbedingt den Abschnitt mit den erweiterten Flags.
  • Moonbase Alpha-Knoten — Führen Sie einen vollständigen Knoten des TestNet aus und greifen Sie auf Ihre eigenen privaten Endpunkte zu. Dazu können Sie dieser Anleitung folgen. Überprüfen Sie unbedingt den Abschnitt mit den erweiterten Flags.

Geth Debug API

Die debug_traceTransaction RPC-Implementierung folgt den Debug-API-Richtlinien von Geth.

Die RPC-Methode erfordert die Ausführung des Transaktions-Hashs. Als optionale Parameter können Sie Folgendes angeben:

  • disableStorage(boolean) — (Standard: false). Wenn Sie dies auf “true” setzen, wird die Storage Capture deaktiviert.
  • disableMemory(boolean) — (Standard: false). Wenn Sie dies auf “true” setzen, wird die Memory Capture deaktiviert.
  • disableStack(boolean) — (Standard: false). Wenn Sie dies auf “true” setzen, wird die Stack Capture deaktiviert.

JavaScript-basiertes Transaktions-Tracing wird derzeit nicht unterstützt.

Trace Modul

Die RPC-Implementierung von trace_filter folgt den Richtlinien für das Trace-Modul von OpenEthereum.

Die RPC-Methode erfordert einen der folgenden optionalen Parameter:

  • fromBlock(uint blockNumber) — entweder Blocknummer (hex), erliest, welcher der Genesis-Block ist, oder latest (Standard) beste verfügbare Block. Startblock verfolgen
  • toBlock(uint blockNumber) — entweder Blocknummer (hex), erliest, welcher der Genesis-Block ist, oder latest (Standard) beste verfügbare Block. Startblock verfolgen
  • fromAddress(array addresses) — nur Transaktionen von diesen Adressen filtern. Wenn ein leeres Array bereitgestellt wird, wird mit diesem Feld nicht gefiltert
  • toAddress(array addresses) — filtert Transaktionen nur von diesen Adressen aus. Wenn ein leeres Array bereitgestellt wird, wird mit diesem Feld nicht gefiltert
  • after(uint offset) — Standard-Offset ist 0. Trace-Offset- (oder Start-)Nummer
  • count(uint numberOfTraces) — Anzahl der Traces, die in einem Batch angezeigt werden sollen

Probieren Sie es auf Moonbase Alpha aus

Wie bereits erwähnt, müssen Sie zur Verwendung beider Funktionen einen Knoten mit den debug- und trace-Flags ausführen. In diesem Beispiel wird ein lokaler Moonbase Alpha-Vollknoten mit dem RPC-HTTP-Endpunkt unter http://127.0.0.1:9933 verwendet. Wenn Sie einen laufenden Knoten haben, sollten Sie ein ähnliches Terminalprotokoll sehen:

Für den debug_traceTransaction Aufruf können Sie beispielsweise die folgende JSON-RPC-Anfrage in Ihrem Terminal stellen (in diesem Fall für den Transaktions-Hash 0x04978f83e778d715eb074352091b2159c0689b5ae2da2554e8fe8e609ab463bf):

curl http://localhost:9933 -H “Content-Type:application/json;charset=utf-8” -d \

‘{

“jsonrpc”:”2.0",

“id”:1,

“method”:”debug_traceTransaction”,

“params”: [“0x04978f83e778d715eb074352091b2159c0689b5ae2da2554e8fe8e609ab463bf”]

}’

Der Knoten antwortet mit den schrittweise wiedergegebenen Transaktionsinformationen (die Antwort wird hier nicht vollständig angezeigt, da sie ziemlich lang ist):

Für den trace_filter-Aufruf können Sie die folgende JSON-RPC-Anfrage in Ihrem Terminal stellen (in diesem Fall reicht der Filter von Block 20000 bis 25000, nur für Transaktionen, bei denen der Empfänger 0x4E0078423a39EfBC1F8B5104540aC2650a756577 ist, beginnt er mit einem Null-Offset und liefert den ersten 20 Spuren):

curl http://localhost:9933 -H “Content-Type:application/json;charset=utf-8” -d \

‘{

“jsonrpc”:”2.0",

“id”:1,

“method”:”trace_filter”, “params”:[{“fromBlock”:”0x4E20",”toBlock”:”0x5014",”toAddress”:[“0x4E0078423a39EfBC1F8B5104540aC2650a756577”],”after”:0,”count”:20}]

}’

Der Knoten antwortet mit den dem Filter entsprechenden Trace-Informationen (die Antwort wird hier nicht vollständig angezeigt, da sie ziemlich lang ist):

--

--