Beobachten Sie ausstehende Transaktionen von allen Knoten im Netzwerk

Ich habe zwei Geth-Knoten in meinem eigenen privaten Netzwerk: nodeAund nodeB. Wenn ich eine Transaktion von sende nodeA, kann ich diese Transaktion nach der Anrufmethode im ausstehenden Pool sehen, txpool.contentwenn ich Zugriff auf habe nodeA. Aber ist es möglich, txpoolvon zu kommen, nodeAwenn ich nur Zugriff auf habe nodeB? Und wie kann ich alle ausstehenden txpools von allen Knoten beobachten?

afaik Sie müssen beide Knoten als "vollständige Knoten" synchronisieren. Wenn Sie Licht zum Synchronisieren verwendet haben, haben sie keinen Zugriff

Antworten (3)

Der Transaktionspool ist etwas Internes des Knotens. In Geth gibt es eine Web3-Erweiterung, um sie per JSON RPC remote abzufragen. Siehe https://github.com/ethereum/go-ethereum/blob/master/internal/web3ext/web3ext.go (TxPool_JS).

Sie müssen JSON RPC direkt verwenden (mit aktivieren -rpcapi txpool):

Z.B:

curl -X POST --data '{"jsonrpc":"2.0","method":"txpool_content","params":[],"id":1}' http://localhost:8545

{"jsonrpc":"2.0","id":1,"result":{"pending":{},"queued":{}}}

Die vollständige Methodenliste ist:

  • txpool_content
  • txpool_inspect
  • txpool_status
Tatsächlich gibt es Methoden, die ich jetzt verwende und die mir nur einen Pool meiner nodeA. Aber ich möchte auch ausstehende TXs von anderen Knoten erneut überprüfen
Afaik, von außen können Sie es nur über den jsonrpc-Port abfragen.

Die Nodes können Ihnen nichts über Transaktionen sagen, von denen sie nichts wissen.

Jeder Knoten hat einen Transaktionspool, aber es gibt keine Garantie dafür, dass es sich um dieselbe Liste handelt, die Sie möglicherweise auf einem anderen finden. Tatsächlich garantiert die Netzwerklatenz, dass es Unterschiede gibt.

Hüten Sie sich davor, den Transaktionspool für App-Logik zu verwenden. Zum Beispiel ist der Transaktionspool keine sehr gute Methode, um die Nonce für die nächste Transaktion zu ermitteln: Fehler Nonce zu niedrig bekommen, aber Nonce steckt seit einem Tag fest

Ich hoffe es hilft.

AFAIK jeder Knoten kennt nur seinen eigenen Txpool.

Wenn Sie wissen möchten, wo diese Transaktionen in Geth gespeichert sind, können Sie in Ihrem Knotenverzeichnis nach Transactions.rlp suchen. Falls Sie diesen Dateinamen ändern möchten, können Sie dies mit dem folgenden Flag tun:

  --txpool.journal value       Disk journal for local transaction to survive node restarts (default: "transactions.rlp")
Mit eth65 können Nodes Pool-Transaktionen klatschen, bevor sie in Blöcke aufgenommen werden.