Digamos que estoy haciendo mediante programación una transacción a un contrato. ¿Cómo puedo saber (mediante programación) que la transacción confirmada tiene un destino de salto incorrecto? En este momento, la única forma que conozco es ir a etherscan.io y buscar el texto rojo. Pero, ¿cómo puedo determinar esto programáticamente?
Estoy viendo los datos de respuesta de una llamada eth_getTransactionByHash y no puedo distinguir la diferencia entre un destino de salto incorrecto y uno que funcionó.
Parece que etherscan tiene una API que puede hacer esto. ¿Pero no debería haber una forma integrada que no involucre etherscan? https://etherscan.io/apis#transactions
------Editar------
Mi solución actual es verificar si mi transacción tiene al menos 1 confirmación. Si tiene al menos 1 confirmación, hago una llamada API a etherscan y verifico si hay errores. La respuesta de Etherscan me dice que es un destino de salto bueno o malo o que se quedó sin gasolina. Es bastante sorprendente, pero parece muy redondo y hacky. Revisaré las otras publicaciones que han mencionado para ver si esa solución es mejor.
Actualmente, usaría la misma técnica que ¿Cómo sé cuándo me quedé sin combustible mediante programación?
Después de Metropolis, si está escribiendo un contrato que desea depurar, puede registrar un evento y usar revert
. Por ejemplo:
event BadInputData();
...
// inside a function
if (inputData == 0) { // inputData should not be zero
BadInputData(); // log event
revert;
}
Luego, mediante programación, puede buscar los eventos.
ismael
ismael
debug.traceTransaction
.Pantalla de lámpara
Pantalla de lámpara