Tengo una pequeña red privada que tiene un motor de prueba de autoridad creado mediante el geth-clique
uso Geth Version: 1.8.3-unstable
de , actualmente hay tres nodos firmantes y otros dos nodos no firmantes (llamémoslos peer-A
y peer-B
). peer-A
y peer-B
están conectados a tres nodos firmantes.
Primero, envié una transacción con un valor muy bajo gasPrice
, como 200, peer-A
como se muestra a continuación.
eth.sendTransaction({from:eth.accounts[0], to:eth.accounts[1], value: web3.toWei(0,0000, "ether"), gasPrice: 200})
Más tarde, cuando envié más transacciones peer-A
incluso con mayor gasPrice
, todas esas transacciones permanecerán en estado pendiente. Según tengo entendido, las transacciones enviadas funcionan como una cola FIFO y mis próximas transacciones están bloqueadas desde la primera transacción de envío con gasPrice
bloqueos muy bajos para otras.
Ejemplo: (Primero peer-A
y peer-B
envió un Tx con bajo gasPrice
y luego sus otros Tx con gasPrice alto atascados en su estado pendiente).
He solucionado esta situación limpiando my chaindata
on peer-A
, que también limpia todas las transacciones pendientes: rm -rf private/geth
, y luego envío mis transacciones con más grande gasPrice
. Supongo que esta fue una solución muy ineficiente para las redes que tienen una gran cadena.
Entonces, ¿todas las transacciones enviadas se proporcionan como cola FIFO? ¿Por qué no seleccionaron en base a cuál tiene el más alto gasPrice
?
Tenga en cuenta que he intentado:
eth.resend(eth.pendingTransactions[0], web3.toWei(1000, 'gwei'))
pero ante el siguiente error:
Error: intrinsic gas too low
oError: replacement transaction underpriced error.
[P] ¿Cómo podría resolver este problema? ¿Cómo podría eliminar la transacción pendiente en el sistema que tiene un precio de gas bajo o rechazarla o actualizar su gasPrice
valor y la resend()
de ellos?
Problema de Github: https://github.com/ethereum/go-ethereum/issues/16284
La respuesta de Péter Szilágyi en ( https://github.com/ethereum/go-ethereum/issues/16284 ) me ayuda a resolver el problema.
Cada cuenta y transacción en Ethereum tiene un nonce. En un momento dado, solo se puede ejecutar la transacción con el nonce correcto. Si envía una transacción con un precio de gasolina bajo, eso bloqueará todas las transacciones subsiguientes, ya que no son ejecutables, solo el siguiente nonce es ejecutable.
No necesita borrar la carpeta de datos de su cadena, las transacciones pendientes no se almacenan allí. Hay un archivo de transacciones.rlp que guarda las transacciones locales.
Estaba usando eth.resend()
con dos parámetros.
=> Agregar gasLimit
como tercer parámetro lo resolvió, ejemplo:
eth.resend(eth.pendingTransactions[0], web3.toWei(20, 'gwei'), 2000000)
=> O detenga el nodo, elimine transactions.rlp
el archivo ( rm ~/examplePOA/private/geth/transactions.rlp
) y reinicie.
Una solución más fácil (en comparación con restablecer la cadena) es enviar una transacción de reemplazo que
Para obtener un algoritmo eficiente con respecto al problema más genérico de nonce singleton, consulte esta pregunta y sus respuestas.
alper
Canción Linmao
alper
Error: intrinsic gas too low
oError: replacement transaction underpriced error.
@Linmao SongCanción Linmao
alper
web3.eth.gasPrice is 18000000000
, lo he intentado:eth.resend(eth.pendingTransactions[0], web3.toWei(1000, 'gwei'))
pero sigue siendo el mismo error. @Linmao Canción