Wie greife ich in einem web3-Skript auf txpool zu?

Ich betreibe einen Testnet Ropsten (Revival) Ethereum Node. Ich möchte den Inhalt von txpool abrufen. Mit einer Geth-Konsole kann ich auf die Variable txpool zugreifen.

Meine Frage ist, wie kann ich auf diese Variable in einem web3-Skript zugreifen?

Web3 = require("web3");
web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545"));

Etwas wie das Folgende:

pendingTx = web3.txpool ?

pendingTx = web3.eth.txpool ?

sie sind alle undefiniert...

Sie haben Recht, web3.txpool gibt undefiniert zurück. Anscheinend ist diese API nicht verfügbar.
Wenn wir geth mit rpcapi und ipcapi starten, können wir txpool als Option angeben: --rpcapi "eth,web3,txpool" --ipcapi "admin,db,eth,miner,net,shh,txpool,web3" Sind sie nützlich für etwas ?
Ja, ich habe txpool beim Starten des Geth-Knotens definiert, aber web3.txpool gibt immer noch undefiniert zurück.
Das --XXXapiermöglicht nur, dass die serverseitige API verfügbar ist. Auf der Client-Seite können Sie npmjs.com/package/web3admin verwenden , um das normale web3 um zusätzliche Methoden zu erweitern. Aber einige Methoden fehlen noch und Sie müssen sie von Hand hinzufügen.

Antworten (1)

Mit Web3 1.0.0 ist es einfach, es selbst zu implementieren:

var Web3 = require('web3');
var web3 = new Web3('ws://127.0.0.1:8546');
web3.eth.extend({
  property: 'txpool',
  methods: [{
    name: 'content',
    call: 'txpool_content'
  },{
    name: 'inspect',
    call: 'txpool_inspect'
  },{
    name: 'status',
    call: 'txpool_status'
  }]
});

Dann ganz normal verwenden:

web3.eth.txpool.status().then(console.log).catch(console.error)

Ausgabe:

{pending: "0x0", queued: "0x0"}

Auf die gleiche Weise können Sie Web3 erweitern, um alle anderen "fehlenden" JSON RPC aufzurufen .

Gefunden dieses seltsame Verhalten, Methodenname contentfunktioniert nicht, während andere funktionieren.
Ich verwende infura und es kann diese Funktionen nicht auflösen.
Können Sie sagen, gibt es eine Möglichkeit, txpool zu abonnieren? also nicht nur ein einmaliges Polling-Ereignis, sondern ein Websocket/Echtzeit-Ereignis (wenn man bedenkt, dass wir einen Standard-WS-Anbieter haben).