¿Por qué se quedó sin gasolina cuando no se alcanza el límite de gas?

https://etherscan.io/tx/0x43f39829b3a48c4146808b12489e01bdb5dfa32d5b49514298339a719e538c09

este tx falló, y el mensaje muestra que la causa es: sin gas, pero el límite de gas es 520000, mientras que solo 86056 Gas utilizado por Txn.

¿Por qué sucedería esto?

PD. El código fuente del token erc20 que intentamos intercambiar está en https://etherscan.io/address/0x4ceda7906a5ed2179785cd3a40a69ee8bc99c466#code

gracias, pero ¿por qué etherscan se muestra sin gasolina? en mi experiencia, cuando se llama a revertir, el mensaje de error se "revierte"

Respuestas (1)

Si observa el seguimiento de paridad de la transacción, puede ver que se queda sin gasolina en una llamada de 0x4ceda7906a5ed2179785cd3a40a69ee8bc99c466 a 0x092988fc1090ff8f924b8f9cc71350e90ca446cd , que solo recibió 2411 gasolina.

Cuando los contratos realizan llamadas secundarias, se les permite transferir solo un subconjunto del gas disponible a la transacción completa.

Parece que el contrato que está utilizando para los intercambios limita ciertas llamadas externas al 4999 de gas.

Por lo tanto, cuando se invoca la función balanceOf en el token, recibe solo 4999 de gas. Este token en particular parece estar usando otro contrato para rastrear los saldos y luego realiza una segunda llamada interna para recuperar el saldo desde allí. Esta llamada solo recibe gas 2411 (que es todo lo que queda del gas 4999 del saldo inicial de la llamada), que no es suficiente para completar la operación de lectura y devolución, y por lo tanto se queda sin gas.

Es probable que no haya forma de solucionar esto sin actualizar el contrato de intercambio de tokens.