Как получить доступ к txpool в скрипте web3?

Я запускаю узел Ropsten (возрождение) тестовой сети ethereum. Я хотел бы получить содержимое txpool. С помощью консоли geth я могу получить доступ к переменной txpool.

Мой вопрос: как я могу получить доступ к этой переменной в сценарии web3?

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

Что-то вроде следующего:

pendingTx = web3.txpool ?

pendingTx = web3.eth.txpool ?

они все неопределенные...

вы правы, web3.txpool возвращает значение undefined. Похоже, этот API недоступен.
Когда мы запускаем geth с rpcapi и ipcapi, мы можем указать txpool как опцию: --rpcapi "eth,web3,txpool" --ipcapi "admin,db,eth,miner,net,shh,txpool,web3" Полезны ли они? для чего-то ?
Да, я определил txpool при запуске узла geth, но все равно web3.txpool возвращает значение undefined.
Единственное --XXXapi, что позволяет API на стороне сервера быть доступным. На стороне клиента вы можете использовать npmjs.com/package/web3admin , чтобы расширить обычный web3 дополнительными методами. Но некоторые методы все еще отсутствуют, и вам придется добавлять их вручную.

Ответы (1)

Web3 1.0.0 легко реализовать самостоятельно:

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'
  }]
});

Затем используйте его как обычно:

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

Вывод:

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

Точно так же вы можете расширить Web3, чтобы вызвать любой другой «отсутствующий» JSON RPC .

Обнаружил это странное поведение, имя метода contentне работает, а другие работают.
Я использую infura, и он не может разрешить эти функции.
Скажите, есть ли способ подписаться на txpool? Итак, не просто одноразовый опрос, а веб-сокет/в реальном времени (учитывая, что у нас есть стандартный провайдер WS).