Llamo a un contrato sobre geth RPC usando sendTransaction y obtengo un hash de transacción. ¿Hay alguna manera de verificar a través de la interfaz geth RPC si esta transacción falló debido a un aborto de VM (declaración de lanzamiento de Solidity, similar)?
El recibo de la transacción no parece ofrecer ninguna variable que indique esto.
La respuesta de @eth no es precisa.
use eth_getTransactionReceipt para obtener el estado: CANTIDAD 1 (éxito) o 0 (falla) será más preciso
referencia:
https://eth.wiki/json-rpc/API
// Request
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getTransactionReceipt","params":["0xb903239f8543d04b5dc1ba6579132b143087c68db1b2168786408fcbce568238"],"id":1}'
// Result
{
"id":1,
"jsonrpc":"2.0",
"result": {
transactionHash: '0xb903239f8543d04b5dc1ba6579132b143087c68db1b2168786408fcbce568238',
transactionIndex: '0x1', // 1
blockNumber: '0xb', // 11
blockHash: '0xc6ef2fc5426d6ad6fd9e2a26abeab0aa2411b7ab17f30a99d3cb96aed1d1055b',
cumulativeGasUsed: '0x33bc', // 13244
gasUsed: '0x4dc', // 1244
contractAddress: '0xb60e8dd61c5d32be8058bb8eb970870f07233155', // or null, if none was created
logs: [{
// logs as returned by getFilterLogs, etc.
}, ...],
logsBloom: "0x00...0", // 256 byte bloom filter
status: '0x1'
}
}
Verificar el recibo de la transacción gas == gasUsed
es una heurística práctica , porque la única forma en que la VM aborta es consumir todo el gas.
Actualmente no hay ningún indicador para una transacción que se quedó sin gas, por lo que nada más preciso que la heurística está disponible a través de RPC.
mikko ohtamaa
status
campo no existía en ninguna API en ese momento.