У меня есть локальная тестовая установка с 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
Майнеры были запущены с --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
должен быть достаточно профинансирован.
Гляйхмут
geth --miner.gasprice 0
и документы утверждают, что по умолчанию она установлена на ноль. В любом случае, у моего node1 есть один ожидающий tx в ```txpool``, но у моего node3 нет ожидающих tx. Вы встречались с этой проблемой снова?