Transacción sin gas a pesar de que el precio del gas es mucho más alto que una transacción casi idéntica al mismo tiempo que se extrae por completo

Dos txns de Uniswap llamando swapExactETHForTokensque son casi idénticos (incluso la misma marca de tiempo) excepto por el valor y el precio del gas, pero el que tiene un valor y un precio de gas más altos se queda sin gas y usa mucho más gas que el otro . La única otra diferencia es, por supuesto, proporcionalmente diferente amountOutMin.

Dado que el valor del swap fallido es menor que x2 del otro mientras que el precio del gas es x10, ¿por qué está fallando?

He vinculado arriba, pero estos son los txns:

Esto me ha pasado dos veces ahora. La otra vez fue de mucho menos valor, pero aun así el precio del gas x10 sobre el txn que se extrajo por completo (aunque ese txn falló por una razón diferente: cantidad de producción insuficiente).

¿Alguna idea de qué podría estar causando que los txns defectuosos se queden sin gasolina (e incluso usen mucha más gasolina) dado que son prácticamente idénticos a un intercambio exitoso al mismo tiempo, pero con un precio de gasolina mucho más alto?

Las txn internas también son idénticas entre las txn en cada caso.

'Fuera de gasolina' no tiene nada que ver con el precio de la gasolina. Trate de aumentar el límite de gas.
@goodvibration Nunca dije que sí, pero eso hace que mi pregunta sea aún más válida. ¿Por qué los txns defectuosos se están quedando sin gasolina (e incluso usando más gasolina) sin razón aparente (especialmente porque el precio de la gasolina no debería causar ninguna diferencia como dijiste)? Aumentar el límite de gas hasta el infinito obviamente mejorará la probabilidad de no quedarse sin gas, pero el problema real es que las txns que fallan están usando más gas que las txns sucesivas.
El título de su pregunta en realidad lo dice muy explícitamente en mi opinión.
En cuanto al resto de su pregunta, el uso de gas de una función no es constante. Por un lado, depende de las operaciones dentro de esa función, que pueden diferir de una ejecución a otra, dependiendo de la entrada a la función, así como del valor actual de cualquier variable de estado (en este contrato o en otro contrato) que el la función cambia durante su ejecución. Por ejemplo, cambiar una variable de estado de cero a distinto de cero cuesta 20 000, mientras que cambiarla de cero a distinto de cero cuesta solo 10 000 (o 5 000, no lo recuerdo con certeza).
@goodvibration Eso está muy bien y se entiende, pero no explica lo que sucedió en mis dos casos donde las entradas son prácticamente idénticas excepto por el valor y el amountOutMinprecio del gas. ¿Está sugiriendo que esas entradas en particular podrían causar una disparidad tan grande entre dos txns que, por lo demás, son idénticos?
Estoy sugiriendo que entre estas dos transacciones, el estado del contrato (o algún otro contrato involucrado en esas transacciones) ha cambiado, lo que lleva a un consumo de gas diferente en cada caso. Y por 'estado de un contrato', me refiero a los valores de las variables de estado en ese contrato.
@goodvibration Con el debido respeto, sé que algo es diferente. Si nada fuera diferente, entonces el resultado sería el mismo. Eso es bastante existencial. Lo que busco es lo que es diferente. Lo único involucrado en toda la transacción es el código SC, por lo que decir que algo es diferente en SC realmente no lo limita para mí.

Respuestas (1)

Las transacciones tienen un límite de gas y un campo de precio de gas. Si su transacción se está quedando sin combustible, debe aumentar el campo de límite de combustible, no el campo de precio del combustible.

La cantidad de gas consumida por una transacción puede variar según el código que se ejecuta y la cantidad de datos que se escriben o eliminan de la cadena de bloques. Puede encontrar los detalles en el papel amarillo, pero un ejemplo simple: si una transacción anterior establece un valor en cero y su transacción lo establece en un valor distinto de cero, su transacción requerirá 15000 más gasolina que si la transacción anterior no hubiera ocurrido .

Su billetera no puede predecir cómo cambiará el estado del contrato entre el momento en que envía la transacción y el momento en que se confirma, por lo que utiliza el estado actual del contrato para calcular la cantidad de gas requerida.

Si está enviando una transacción a un contrato ocupado con muchos otros usuarios, debe aumentar el límite de gas más allá de lo que sugiere su billetera. Si la transacción termina consumiendo menos gas que su límite de gas, la diferencia se le reembolsará automáticamente. Además de los contratos incumplidos, no hay nada de malo en simplemente aumentar su límite de gasolina en 100k para ayudar a que se confirme su transacción.

espero que esto ayude

Gracias por la explicación, pero estoy más interesado en saber por qué mi txn particular se quedó sin gasolina con respecto a las txn casi idénticas al mismo tiempo que requerían mucha menos gasolina. Con respecto al reembolso automático, ¿está diciendo que el gas neto usado en mis txns puede haber sido menos de lo que realmente usaron si el límite de gas fuera más alto? En otras palabras, debido a que se quedaron sin gasolina, el txn simplemente se canceló y cualquier reembolso automático que hubiera tenido lugar no se hizo. Entonces, si establecí el límite de gasolina en 200k y se confirmó en 190k, es posible que me hayan reembolsado 70k. Pero como mi limite era 137k me costo 137k?