En esta respuesta ( https://ethereum.stackexchange.com/a/6010/1529 ) parece decir que el campo de estado siempre será '1' a menos que la transacción falle, en cuyo caso será '0'.
En la sección de resumen de esta respuesta ( https://ethereum.stackexchange.com/a/28078/1529 ), parece implicar que el campo de estado solo se establece en cero cuando se llama a 'revertir'.
¿Cuál es el significado exacto del campo de estado?
¿Receive.status de '0' indica errores de todo tipo o solo reverts
?
¿Receive.status de '1' siempre indica una transacción exitosa?
Aquí hay un ejemplo de una transacción con un estado 'Error' (es decir, '0') y un error informado de 'sin gasolina': https://etherscan.io/tx/0xeec4ccd13fe05907f9d732a8ad245bcb7f918217157b89baaa23895c12eb329a . ¿Que pasó aquí?
Pregunta relacionada: ¿El nuevo campo de estado de recepción informa todos los errores en toda la cadena de llamadas?
Esto fue descrito por EIP 658 que se implementó en la bifurcación de Byzantium . El texto del EIP está aquí , aunque extrañamente no parece haber sido finalizado formalmente antes de la bifurcación.
En cualquier caso, el texto relevante es este:
Para bloques donde block.number >= METROPOLIS_FORK_BLKNUM, la raíz de estado intermedio se reemplaza por un código de estado, 0 indica falla (debido a cualquier operación que puede causar que la transacción o llamada de nivel superior se revierta) y 1 indica éxito.
Entonces, en términos de su pregunta, 1 siempre es igual a éxito. Estoy bastante seguro de que "revertir" aquí no significa "resultado del código de revert
operación", sino que significa, esencialmente, cualquier condición que haga que el estado se revierta, incluidas todas las condiciones que antes se llamaban "lanzamientos".
Ahora, tenga en cuenta que EIP 658 también se llama EIP 98 y también se describe aquí
EIP98 está escrito por Vitalik:
Opción 3 (actualización 2017.07.28: vamos con este): para bloques donde block.number >= METROPOLIS_FORK_BLKNUM, el parámetro raíz de estado intermedio en el recibo debe establecerse en un byte \x01 si la ejecución del código más externo tuvo éxito, o un byte cero si falla la ejecución del código más externo.
Esto confirma que las transacciones fallidas (cualquiera que sea el modo de falla) dan como resultado 0, solo las exitosas deben dar como resultado 1. Se aplica solo a la "ejecución de código más externa".
Finalmente, para conocer la máxima autoridad, consulte la actualización del Libro amarillo de Yoichi (aún no fusionado).
Define un código de estado, s'
.
Es un poco difícil de leer de esa forma, pero creo que la definición relevante del código de estado es esta:
Línea 775:
El código asociado a la cuenta (identificado como el fragmento cuyo hash Keccak es $\boldsymbol{\sigma}[c]_c$) se ejecuta de acuerdo con el modelo de ejecución (ver sección \ref{ch:model}). Al igual que con la creación del contrato, si la ejecución se detiene de manera excepcional (es decir, debido a un suministro de gas agotado, flujo insuficiente de la pila, destino de salto no válido o instrucción no válida), entonces no se reembolsa el gas a la persona que llama y el estado se revierte al punto inmediatamente antes de la transferencia de saldo (es decir, $\boldsymbol{\sigma}$).
Creo que la línea 782 dice, si el estado se revierte así, entonces s'
es cero:
+s' & \equiv & \begin{cases}
+0 & \text{if} \quad \boldsymbol{\sigma}^{**} = \varnothing \\
+1 & \text{otherwise}
Hay otras referencias a s'
allí, y pueden arrojar más luz.
thomas jay prisa