| // This is universal, works with Infura -- set provider accordingly | |
| const ethers = require('ethers') | |
| //const provider = ethers.getDefaultProvider('rinkeby') | |
| const provider = new ethers.providers.JsonRpcProvider(process.env.WEB3_URL) | |
| function hex_to_ascii(str1) { | |
| var hex = str1.toString(); | |
| var str = ''; | |
| for (var n = 0; n < hex.length; n += 2) { | |
| str += String.fromCharCode(parseInt(hex.substr(n, 2), 16)); | |
| } | |
| return str; | |
| } | |
| async function reason() { | |
| var args = process.argv.slice(2) | |
| let hash = args[0] | |
| console.log('tx hash:', hash) | |
| console.log('provider:', process.env.WEB3_URL) | |
| let tx = await provider.getTransaction(hash) | |
| if (!tx) { | |
| console.log('tx not found') | |
| } else { | |
| let code = await provider.call(tx, tx.blockNumber) | |
| let reason = hex_to_ascii(code.substr(138)) | |
| console.log('revert reason:', reason) | |
| } | |
| } | |
| reason() |
| #!/bin/bash | |
| # This is for geth | |
| # Fetching revert reason -- https://ethereum.stackexchange.com/questions/48383/how-to-receive-revert-reason-for-past-transactions | |
| if [ -z "$1" ] | |
| then | |
| echo "Usage: revert-reason <TX_HASH>" | |
| exit | |
| fi | |
| TX=$1 | |
| SCRIPT=" tx = eth.getTransaction( \"$TX\" ); tx.data = tx.input; eth.call(tx, tx.blockNumber)" | |
| geth --exec "$SCRIPT" attach http://localhost:8545 | cut -d '"' -f 2 | cut -c139- | xxd -r -p | |
| echo |
|
Though you can use |
|
Thanks for putting this together. I forked and made a few mods including the above recommendation. |
|
Nice. I bundled this up with some other features into https://github.com/justinjmoses/eth-reveal/ |
|
Thanks, this is quite useful! I also forked and added a Go version of the script: https://gist.github.com/msigwart/d3e374a64c8718f8ac5ec04b5093597f |
|
I added an NPM package, |
|
Please excuse the ignorance, but this does not work with ganache, correct? |
|
Apologies for the multiple questions. I tested this on Rinkeby (https://rinkeby.etherscan.io/tx/0x512b05c7fadf8c30fc62fb9400bbeb47169174d908648ac531f5db9dd1aeaa96) and, as you can see, it failed (on purpose by me setting the gas too low). When this transaction was first called, and failed, my
However, when
Am I misunderstanding something here about how this is supposed to work? |
justinjmoses commentedon May 18, 2019
Awesome - just what I was looking for!