txpool en cadena privada no funciona incapaz de enviar txn de no minero

Tengo una configuración de prueba local con 3 nodos Geth, de los cuales 2 son mineros (Clique) y 1 no minero.

Noté que las transacciones enviadas nunca se sincronizan con otros nodos.

En consecuencia, en un no minero, las transacciones enviadas nunca llegan a los bloques.

Ese no puede ser un comportamiento normal con Clique, ¿verdad?

Comandos de inicio:

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

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

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

Los nodos están conectados

(En Nodo1, Nodo2, Nodo3):

> net.peerCount
2

Los bloques están siendo extraídos y sincronizados.

En Nodo3:

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

Pero si envío una transacción en un Nodo3 que no es minero:

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

Entonces no pasa nada . La transacción permanece en estado "pendiente" para siempre:

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

Siguen llegando bloques vacíos en 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

En otros nodos no hay ninguna transacción pendiente:

Nodo1, Nodo2:

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

¿Por qué es esto y cómo hacer que las transacciones funcionen en un no minero?

Ejecutando Geth/v1.8.3-stable-329ac18e/windows-amd64/go1.10

Respuestas (1)

Los mineros se iniciaron con --gasprice 1, pero la transacción no especificó ningún precio del gas, por lo que el valor predeterminado fue 0, que también se puede ver en el cálculo " 90000 gas × 0 wei".

0 < 1, por lo que los mineros rechazan la transacción por infravalorada (funciona localmente porque las transacciones locales están exentas de los límites de precio del gas).

Para resolver este problema, elimine el umbral del precio del gas en los mineros (está bien solo para cadenas privadas)

geth --mine --gasprice 0

O especificar algunos gasPricecon la transacción:

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

La desventaja es que se gastará algo de éter, por lo que la fromdirección debe estar suficientemente financiada.

Gracias por la pista. En 2022, el comando es geth --miner.gasprice 0y los documentos afirman que está configurado en cero de forma predeterminada. De todos modos, mi nodo1 tiene un tx pendiente en ```txpool``, pero mi nodo3 tiene cero tx pendientes. ¿Te has vuelto a encontrar con este problema?