Skip to content

Instantly share code, notes, and snippets.

@gluk64
Last active October 22, 2024 15:05
Show Gist options
  • Save gluk64/fdea559472d957f1138ed93bcbc6f78a to your computer and use it in GitHub Desktop.
Save gluk64/fdea559472d957f1138ed93bcbc6f78a to your computer and use it in GitHub Desktop.
// 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
@gigamesh
Copy link

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)

@tonynguyen136
Copy link

Hope this will help you guys!

image

image

@gHashTag
Copy link

Hope this will help you guys!

image

image

Was it difficult to paste the code? Why did you send a screenshot? 🤦🏼‍♂️

@gHashTag
Copy link

gHashTag commented Aug 27, 2023

  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