txpool auf privater Kette funktioniert nicht, txn kann nicht von Nicht-Miner gesendet werden

Ich habe ein lokales Test-Setup mit 3 Geth-Knoten, von denen 2 Miner (Clique) und 1 Nicht-Miner sind.

Mir ist aufgefallen, dass übermittelte Transaktionen niemals mit anderen Knoten synchronisiert werden.

Folglich schaffen es auf einem Nicht-Miner eingereichte Transaktionen nie zu den Blöcken.

Das kann doch kein normales Verhalten bei Clique sein, oder?

Startbefehle:

Knoten1: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

Knoten2: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

Knoten3: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

Die Knoten sind verbunden

(Auf Knoten1, Knoten2, Knoten3):

> net.peerCount
2

Blöcke werden abgebaut und synchronisiert

Auf Knoten3:

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

Aber wenn ich eine Transaktion auf einem Nicht-Miner-Node3 einreiche :

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

Dann passiert nichts . Die Transaktion bleibt für immer im Status „ausstehend“:

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

Auf Node3 kommen immer noch leere Blöcke herein:

> 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

Auf anderen Knoten gibt es überhaupt keine ausstehenden Transaktionen:

Knoten1, Knoten2:

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

Warum ist das so und wie kann man Transaktionen auf einem Nicht-Miner zum Laufen bringen?

Ausführen von Geth/v1.8.3-stable-329ac18e/windows-amd64/go1.10

Antworten (1)

Die Miner wurden mit gestartet --gasprice 1, aber die Transaktion hat keinen Gaspreis angegeben, also war sie standardmäßig auf 0, was auch in der Berechnung „ “ zu sehen ist 90000 gas × 0 wei.

0 < 1, also wird die Transaktion von den Minern als unterbewertet abgelehnt (es funktioniert lokal, weil lokale Transaktionen von den Gaspreisgrenzen ausgenommen sind).

Um dieses Problem zu lösen, entfernen Sie die Gaspreisschwelle bei den Minern (ist nur für private Ketten in Ordnung).

geth --mine --gasprice 0

Oder geben Sie einige gasPricemit der Transaktion an:

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

Der Nachteil ist, dass etwas Ether ausgegeben wird, also frommuss die -Adresse ausreichend finanziert sein.

Vielen Dank für den Hinweis. Im Jahr 2022 lautet der Befehl geth --miner.gasprice 0und die Dokumentation behauptet, dass er standardmäßig auf Null gesetzt ist. Wie auch immer, mein Knoten1 hat einen ausstehenden tx in ```txpool``, aber mein Knoten3 hat null ausstehende tx. Sind Sie erneut auf dieses Problem gestoßen?