txpool в частной цепочке не работает, невозможно отправить txn от не-майнера

У меня есть локальная тестовая установка с 3 узлами Geth, из которых 2 майнера (Clique) и 1 не майнера.

Я заметил, что отправленные транзакции никогда не синхронизируются с другими узлами.

Следовательно, на не-майнерах отправленные транзакции никогда не доходят до блоков.

Это не может быть нормальным поведением с Clique, не так ли?

Команды запуска:

Узел 1:geth --identity node1 --datadir node1/ --syncmode full --port 30304 --rpc --rpcport 8545 --bootnodes "enode://c0f96309ca5918bd0de1b69a0f062a590c7877681d7d69a370f3174cc3f137f200e024e86482ed3718c074a4d70488e09b7ff154dc5210ee0e890773646a25d8@127.0.0.1:30304" --nat none --networkid 2640 --gasprice 1 -unlock 0xe148888d6a894101a39b84da4d5f24c97f0ba3bd --password node1/password.txt --mine console

Узел2:geth --identity node2 --datadir node2/ --syncmode full --port 30305 --rpc --rpcport 8555 --ipcdisable --bootnodes "enode://c0f96309ca5918bd0de1b69a0f062a590c7877681d7d69a370f3174cc3f137f200e024e86482ed3718c074a4d70488e09b7ff154dc5210ee0e890773646a25d8@127.0.0.1:30304" --nat none --networkid 2640 --gasprice 1 -unlock 0x9d6189a2082a9df61d432cf384cb1f606cea1528 --password node2/password.txt --mine console

Узел 3:geth --identity node3 --datadir node3/ --syncmode full --port 30306 --rpc --rpcport 8556 --ipcdisable --bootnodes "enode://c0f96309ca5918bd0de1b69a0f062a590c7877681d7d69a370f3174cc3f137f200e024e86482ed3718c074a4d70488e09b7ff154dc5210ee0e890773646a25d8@127.0.0.1:30304" --nat none --networkid 2640 --gasprice 1 -unlock 0xd134a62fb3d349c8ba2991dfba48e091544a8a13 --password node3/password.txt console

Узлы связаны

(На узле 1, узле 2, узле 3):

> net.peerCount
2

Блоки майнятся и синхронизируются

На узле 3:

INFO [05-07|14:31:42] Imported new chain segment               blocks=1 txs=0 mgas=0.000 elapsed=0s      mgasps=NaN   number=2375 hash=8271c9…543b5e cache=0.00B
INFO [05-07|14:31:47] Imported new chain segment               blocks=1 txs=0 mgas=0.000 elapsed=0s      mgasps=NaN   number=2376 hash=9442d8…b5b467 cache=0.00B
INFO [05-07|14:31:52] Imported new chain segment               blocks=1 txs=0 mgas=0.000 elapsed=0s      mgasps=NaN   number=2377 hash=611ee5…02ba2e cache=0.00B

Но если я отправлю транзакцию на Node3 без майнера :

> personal.sendTransaction({from:'0xd134a62fb3d349c8ba2991dfba48e091544a8a13', to:'0xE0ca7d355F0CC6C1EECDA7Ce081353b7D87Aa1d7', value: 1},'redacted')
INFO [05-07|14:31:16] Submitted transaction                    fullhash=0x9d1f3fa3a4c0037daed01371bd57d2ca6876cdb3d088ec7917656f272ce6485d recipient=0xE0ca7d355F0CC6C1EECDA7Ce081353b7D87Aa1d7
"0x9d1f3fa3a4c0037daed01371bd57d2ca6876cdb3d088ec7917656f272ce6485d"

Тогда ничего не происходит . Транзакция остается в статусе «ожидание» навсегда:

> txpool.inspect
{
  pending: {
    0xD134A62fB3D349c8ba2991dFbA48E091544A8a13: {
      0: "0xE0ca7d355F0CC6C1EECDA7Ce081353b7D87Aa1d7: 1 wei + 90000 gas × 0 wei"
    }
  },
  queued: {}
}

Пустые блоки все еще приходят на Node3:

> INFO [05-07|14:31:17] Imported new chain segment               blocks=1 txs=0 mgas=0.000 elapsed=0s      mgasps=NaN   number=2370 hash=33498f…5077c1 cache=0.00B

На других узлах вообще нет ожидающих транзакций:

Узел1, Узел2:

> txpool.inspect
{
  pending: {},
  queued: {}
}

Почему это так и как заставить транзакции работать на не майнере?

Запуск Geth/v1.8.3-stable-329ac18e/windows-amd64/go1.10

Ответы (1)

Майнеры были запущены с --gasprice 1, но в транзакции не была указана цена газа, поэтому по умолчанию она была равна 0, что также можно увидеть в расчете " 90000 gas × 0 wei".

0 < 1, поэтому транзакция отклоняется майнерами как заниженная (это работает локально, потому что локальные транзакции освобождены от ограничений цены на газ).

Чтобы решить эту проблему, уберите порог цены на газ у майнеров (подойдет только для приватных сетей)

geth --mine --gasprice 0

Или указать некоторые gasPriceс транзакцией:

personal.sendTransaction({ from:xxx, to:xxx, value: 1, gasPrice: 1}, 'pw')

Недостатком является то, что будет потрачено некоторое количество эфира, поэтому -адрес fromдолжен быть достаточно профинансирован.

Спасибо за подсказку. В 2022 году команда geth --miner.gasprice 0и документы утверждают, что по умолчанию она установлена ​​​​на ноль. В любом случае, у моего node1 есть один ожидающий tx в ```txpool``, но у моего node3 нет ожидающих tx. Вы встречались с этой проблемой снова?