Last active
October 22, 2024 15:05
-
-
Save gluk64/fdea559472d957f1138ed93bcbc6f78a to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 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() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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 |
This works for me:
const tx = await provider.getTransaction(txHash)
const response = await provider.call(
{
to: tx.to,
from: tx.from,
nonce: tx.nonce,
gasLimit: tx.gasLimit,
gasPrice: tx.gasPrice,
data: tx.data,
value: tx.value,
chainId: tx.chainId,
type: tx.type ?? undefined,
accessList: tx.accessList,
},
tx.blockNumber,
)
// This should be your error code
const firstFourBytes = response.slice(0, 10)
const tx = await provider.getTransaction(txHash)
const response = await provider.call(
{
to: tx.to,
from: tx.from,
nonce: tx.nonce,
gasLimit: tx.gasLimit,
gasPrice: tx.gasPrice,
data: tx.data,
value: tx.value,
chainId: tx.chainId,
type: tx.type ?? undefined,
accessList: tx.accessList,
},
tx.blockNumber,
)
const reason = ethers.utils.toUtf8String('0x' + response.substring(138))
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
same with me