error: transacción de reemplazo subvaluada

Estoy tratando de enviar una transacción sin procesar usando web3 para ropsten testnet y recibo este error:

transacción de reemplazo infravalorada

donde a veces mi tx funciona y a veces me sale este error.

mis parámetros tx:

const nonce = web3.eth.getTransactionCount(ethereumConfig.contract.account)
const block = web3.eth.getBlock("latest")
const gasLimit = block.gasLimit
const gasPrice = web3.eth.gasPrice.toNumber() * 1.40 

tenga en cuenta que ya estoy agregando un 40% a gasPrice

Trate de aumentar el precio de la gasolina. por favor déjame saber el resultado
Ya estoy aumentando un 40%

Respuestas (5)

También me he encontrado con este problema. La red cree que está tratando de reemplazar una transacción no minada existente. Hay dos formas de evitar esto:

  1. Agregar un precio del gas %10 más alto que el precio del gas de la transacción no minada existente.
  2. Aumente su nonce a uno más alto que la transacción no minada.

También he estado recibiendo este error:

"La transacción no se extrajo dentro de los 50 bloques, asegúrese de que su transacción se envió correctamente. ¡Tenga en cuenta que aún podría ser extraída!"

En mi caso, creo que la transacción se está quedando atrapada en el limbo de alguna manera. No está siendo minado por nadie, pero no está siendo eliminado del grupo de transacciones no minadas. Tenga en cuenta que web3.eth.getTransactionCount(walletAddress)solo le dará el último nonce CONFIRMADO. Por lo tanto, no tendrá en cuenta los no minados.

así que si hago 2. la opción debería hacer: nonce = web3.eth.getTransactionCount() + 1?
Tengo el mismo problema, no codificando pero en una transacción que estoy tratando de enviar en myetherwallet. Creo que aumentar el nonce lo resolverá, pero ¿cómo hago eso si estoy enviando mi transacción a través de Metamask?
Entonces, si tengo una transacción no minada, ¿desaparece alguna vez? ¡No quiero tener que meterme con el nonce yo mismo!
¿Por qué la red piensa que la transacción es nueva? ¿No compara los datos y ve que son diferentes?
¿Hay otra forma de reemplazar la transacción no minada en Quorum, ya que el precio del gas siempre es 0 en Quorum?
Este error se genera al reemplazar el nonce, incluso con un precio de gasolina de ~ + 30%

Definir el objetivo

Quieres:

  1. Enviar una nueva transacción, después de que se hayan completado todas sus transacciones anteriores, o...
  2. Reemplace una transacción pendiente (no minada) con la nueva transacción sin procesar.

Enviar una nueva transacción

El mensaje de error implica que está intentando reemplazar una transacción pendiente. Esto se debe a que la transacción sin procesar que intenta enviar es igual noncea otra transacción que tiene pendiente.

Dado que reemplazar una transacción no es su objetivo, simplemente aumente el nonce para que sea uno más alto que su última transacción pendiente. Es posible que deba realizar un seguimiento de esto internamente, en lugar de depender de web3.eth.getTransactionCount().

Reemplazar una transacción pendiente

El 10% Mínimo

Dado que su objetivo es reemplazar una transacción que está pendiente, debe intentar convencer a los mineros para que usen su nueva transacción. Para ello, debe utilizar un precio de gasolina un 10% superior* al gasPrice de la transacción pendiente .

const gasPrice = web3.eth.gasPrice.toNumber() * 1.40 

tenga en cuenta que ya estoy agregando un 40% a gasPrice

El código citado agrega un 40% a web3.eth.gasPrice. Este no puede ser un 10% más alto que el precio del gas de la transacción pendiente. web3.eth.gasPricepuede variar con el tiempo y/o es posible que haya establecido un precio de gasolina arbitrario en la transacción pendiente.

* El 10% no está definido en el protocolo, así es como lo implementan la mayoría de los nodos y mineros.

Determinación del mínimo

Si tiene el hash de la transacción pendiente, puede determinar el precio del gas requerido con algo como:

replacement_price = web3.eth.getTransaction(pending_txn_hash).gasPrice * 1.101

Tenga en cuenta que se trata de matemáticas de coma flotante, que tendrán errores de redondeo, por lo que añadí una décima de porcentaje adicional para asegurarme de que estaba por encima del mínimo.

¿Cómo sabe metamask por adelantado el aumento del precio del gas requerido? Estoy intentando con + 30% y se rechaza instantáneamente con el error "transacción de reemplazo subvaluada"
@challet ¿De dónde obtiene el precio del gas de la transacción pendiente? Supongo que en realidad no está agregando un 30% más que la transacción pendiente. Por ejemplo, podría estar aumentando un 30 % del precio estimado actual para una nueva transacción.

He visto esto cuando llamo al mismo método de contrato dos veces desde JavaScript sin esperar a que termine la primera llamada awaito llamando por segunda vez en la devolución de llamada exitosa.

Supongo que los métodos de contrato en web3js no son seguros para subprocesos.

Verifique dos veces el precio de su Gas. Incluso yo también configuré el precio del combustible, pero de alguna manera también apliqué el precio del combustible adecuado. Uno de los ejemplos debajo de la captura de pantalla.ingrese la descripción de la imagen aquí

Estoy usando Ganache y MetaMask de repente dejó de manejar transacciones, puso en cola la primera y cada llamada subsiguiente no devolvería nada o "transacción subvaluada". He aquí cómo resolverlo:

  1. En MetaMask, vaya a Configuración/Avanzado y haga clic en Restablecer cuenta.
  2. Reinicie su navegador.

Si eso no ayuda, intente reinstalar MetaMask.