3

I call a contract over geth RPC using sendTransaction and get a transaction hash. Is there a way to verify over the geth RPC interface if this transaction failed due to a VM abort (Solidity throw statement, similar)?

The transaction receipt doesn't seem to offer any variables telling this.

eth
  • 85,679
  • 53
  • 285
  • 406
Mikko Ohtamaa
  • 22,269
  • 6
  • 62
  • 127

2 Answers2

2

@eth 's answer is not accurate.

use eth_getTransactionReceipt to get status: QUANTITY either 1 (success) or 0 (failure) will be more precise

reference:
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'
        }
        }

temple
  • 136
  • 4
  • I moved the correct answer marker. Note that the original answer was written in 2016 and the status field did not exist in any API by the time. – Mikko Ohtamaa Jun 24 '21 at 19:59
1

Checking the transaction receipt for gas == gasUsed is a practical heuristic, because the only way that the VM aborts is to consume all gas.

There's currently no indicator for a transaction that ran Out of Gas, so nothing more precise than the heuristic is available through RPC.

eth
  • 85,679
  • 53
  • 285
  • 406