¿Por qué el protocolo Ethereum no tiene un indicador claro para una transacción que se revierte?
Hay una heurística aquí , así como una solución alternativa usando Geth . Pero probablemente hay formas en que el protocolo podría proporcionar un indicador claro. Por ejemplo, ¿el recibo de una transacción podría tener una propiedad booleana para outofgas?
¿Qué podría hacer el protocolo para proporcionar un indicador de falta de gas y por qué no se implementó ninguno?
La mayor parte del protocolo (y más particularmente el recibo de la transacción) es fundamental para el consenso. La cantidad de información que maneja debe ser lo más limitada posible y estable. Un mensaje de error realmente no se ajusta a esos requisitos.
Por otro lado, las implementaciones pueden generar fácilmente ese tipo de información. Al menos tanto Ethereumj como Geth lo hacen. Para ver un ejemplo, consulte la propiedad "execution_error" aquí:
debug.traceTransaction
o algo más donde una nueva respuesta a ethereum.stackexchange.com/questions/6007/… ayudaría?Se actualizó el protocolo en el bloque 4370000 (Byzantium) por lo que status
se ha agregado un indicador a los recibos.
eth.getTransactionReceipt(transactionHash)
devolverá un status
campo que tiene un valor de 0
cuando una transacción ha fallado y 1
cuando la transacción ha tenido éxito.
Aquí hay un ejemplo que muestra el status
campo:
{ blockHash: '0xb1fcff633029ee18ab6482b58ff8b6e95dd7c82a954c852157152a7a6d32785e',
blockNumber: 4370000,
contractAddress: null,
cumulativeGasUsed: 21000,
gasUsed: 21000,
logs: [],
logsBloom: '0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000',
root: null,
status: 1, // **** HERE IS THE STATUS FIELD *****
transactionHash: '0x1421a887a02301ae127bf2cd4c006116053c9dc4a255e69ea403a2d77c346cf5',
transactionIndex: 0 }
(Los bloques anteriores a 4370000 tendrán un status
valor nulo).
Más detalles aquí .
usuario3407
roland kofler
Giuseppe Bertone