У меня есть два гет-узла в моей частной сети: nodeA
и nodeB
. Когда я отправляю транзакцию из nodeA
, я могу видеть эту транзакцию в ожидающем пуле после метода вызова, txpool.content
если у меня есть доступ к nodeA
. Но можно ли получить txpool
, nodeA
если у меня есть доступ только к nodeB
? И как я могу просмотреть весь ожидающий txpool со всех узлов?
Пул транзакций является чем-то внутренним для узла. В geth есть расширение web3 для удаленного запроса через JSON RPC. См. https://github.com/ethereum/go-ethereum/blob/master/internal/web3ext/web3ext.go (TxPool_JS).
Вам нужно будет напрямую использовать JSON RPC (включить с помощью -rpcapi txpool
):
Например:
curl -X POST --data '{"jsonrpc":"2.0","method":"txpool_content","params":[],"id":1}' http://localhost:8545
{"jsonrpc":"2.0","id":1,"result":{"pending":{},"queued":{}}}
Полный список методов:
nodeA
. Но я хочу просмотреть ожидающие транзакции и с других узлов.Узлы не могут сообщить вам о транзакциях, о которых они не знают.
У каждого узла есть пул транзакций, но нет гарантии, что это тот же список, что и на другом узле. На самом деле сетевая задержка гарантирует наличие различий.
Остерегайтесь использования пула транзакций для логики приложения. Например, пул транзакций — не очень хороший способ определить одноразовый номер для следующей транзакции: получение ошибочного одноразового номера слишком мало, но одноразовый номер правильно застрял с одного дня .
Надеюсь, поможет.
Насколько я знаю, каждый узел знает только о своем собственном txpool.
Если вы хотите узнать, где эти транзакции хранятся в geth, вы можете найти файл transaction.rlp в каталоге вашего узла. Если вы хотите изменить это имя файла, вы можете сделать это, используя следующий флаг:
--txpool.journal value Disk journal for local transaction to survive node restarts (default: "transactions.rlp")
Дайти