Cómo detectar la excepción Out of Gas en Oraclize Callback y mostrar el error en la interfaz de dapp

Tengo un contrato inteligente dentro del cual he usado Oraclelize para obtener la marca de tiempo actual. En algunas ocasiones, la devolución de llamada de Oraclize falla debido a una excepción de falta de gas. ¿Cómo se puede detectar este error y mostrar un mensaje de error en la interfaz de mi dapp?

Intenté las siguientes opciones:

  1. Supervise un evento para detectar si Oraclize devuelve algún valor o no. En mi caso, devuelve la marca de tiempo actual y avanza a la lógica dentro de la función de devolución de llamada. Así que aquí no pude atrapar la excepción.
  2. Supervise un segundo evento que se activa cuando se completan los cálculos que utilizan la marca de tiempo devuelta por Oraclize. Aquí tampoco puedo detectar la excepción ya que se queda sin gas antes de alcanzar la lógica para desencadenar el evento de éxito.

Según tengo entendido, la excepción de falta de gas ocurre entre los dos eventos anteriores, es decir, después de enviar el valor y antes de completar el procesamiento, pierde todo el gas.

Ayude a sugerir cuál es la forma preferida de manejar este error y comunicarse con el usuario en la parte delantera.

Si la transacción falla, ninguno de los eventos se activará.
entonces, ¿cuál es la forma ideal de informar a un usuario al respecto en la interfaz?
¿Puedes mostrarme la transacción de oraclize que falla, en etherscan?
lo siento, pero estoy probando localmente usando Ganache. Below is error message : } [2018-08-17T11:55:47.960Z] INFO sending __callback tx... { "contract_myid": "0x58a88cebdf576344bff17f2caa61d373f7a3beb619f71538a6e58dbd017405d1", "contract_address": "0x98d9f9e8debd4a632682ba207670d2a5acd3c489" } [2018-08-17T11:55 :48.643Z] ERROR error de tx de devolución de llamada, contrato myid: 0x58a88cebdf576344bff17f2caa61d373f7a3beb619f71538a6e58dbd017405d1 { "mensaje": "Excepción de VM al procesar la transacción: sin gasolina",
no entiendo, que falla? la transacción oraclize a su contrato? si es así, ¿cómo está probando esto localmente?
desde la función de devolución de llamada de oraclize llamo a otra función cuyo trabajo es almacenar datos dentro de asignaciones en el contrato inteligente. Oraclize devuelve la marca de tiempo perfectamente, pero es durante la ejecución de la lógica adicional dentro de la función de devolución de llamada que termina agotando todo el gas antes de completarse.

Respuestas (1)

Una solución a esto es establecer en tu app como cantidad de gas obligatoria la mínima necesaria para ejecutar la función sin quedarte sin gas.

Además, si la llamada falla, puede verificar las transacciones de su contrato en cada bloque. Identifique cuál es de oraclize y verifique si falló o no.

Espero que esto ayude

Leí sobre el cálculo de la cantidad de gas antes de llamar a la función, pero no pude encontrar ningún código de muestra que lo haga, ¿podría proporcionar algunas referencias que pueda usar?