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.

2 Answers 2

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'
            }
            }
1
  • 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. Commented Jun 24, 2021 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.

2

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.