Guides

Receipts & event logs (EVM)

On EVM chains, the transaction object is not enough for status and events — you need the receipt. eth_getLogs queries indexed topics over a block range (respect full-node retention).

eth_getTransactionReceipteth_getLogs

← All guides

Steps

  1. After broadcast, poll eth_getTransactionReceipt until non-null (or timeout).
  2. Check receipt.status (0x1 success / 0x0 revert) and gasUsed.
  3. Read receipt.logs for events, or query eth_getLogs with address + topics + fromBlock/toBlock.
  4. Keep log ranges modest — large historical scans belong on archive/indexer stacks, not a full-node RPC plan.

Transaction receipt (curl)

curl

curl https://holy-burned-sky-ethereum-mainnet.rpcnode.dev/7c9e6679-7425-40de-944b-e07fc1f90ae7 \
  -X POST \
  -H 'content-type: application/json' \
  -d '{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "eth_getTransactionReceipt",
  "params": [
    "0x0000000000000000000000000000000000000000000000000000000000000001"
  ]
}'

Transaction receipt (JavaScript)

fetch

const response = await fetch('https://holy-burned-sky-ethereum-mainnet.rpcnode.dev/7c9e6679-7425-40de-944b-e07fc1f90ae7', {
  method: 'POST',
  headers: { 'content-type': 'application/json' },
  body: JSON.stringify({
    jsonrpc: '2.0',
    id: 1,
    method: 'eth_getTransactionReceipt',
    params: [
      "0x0000000000000000000000000000000000000000000000000000000000000001"
    ],
  }),
});

const data = await response.json();
console.log(data);

eth_getLogs (small range) (curl)

curl

curl https://holy-burned-sky-ethereum-mainnet.rpcnode.dev/7c9e6679-7425-40de-944b-e07fc1f90ae7 \
  -X POST \
  -H 'content-type: application/json' \
  -d '{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "eth_getLogs",
  "params": [
    {
      "fromBlock": "0x0",
      "toBlock": "latest",
      "address": "0x0000000000000000000000000000000000000000",
      "topics": []
    }
  ]
}'

eth_getLogs (small range) (JavaScript)

fetch

const response = await fetch('https://holy-burned-sky-ethereum-mainnet.rpcnode.dev/7c9e6679-7425-40de-944b-e07fc1f90ae7', {
  method: 'POST',
  headers: { 'content-type': 'application/json' },
  body: JSON.stringify({
    jsonrpc: '2.0',
    id: 1,
    method: 'eth_getLogs',
    params: [
      {
        "fromBlock": "0x0",
        "toBlock": "latest",
        "address": "0x0000000000000000000000000000000000000000",
        "topics": []
      }
    ],
  }),
});

const data = await response.json();
console.log(data);

Tips

  • Same methods work on base, arbitrum, optimism, polygon, bsc, hyperliquid endpoints — change the network slug in the URL.
  • Avoid fromBlock: 0 on busy chains; use a recent window.
  • Reverts still produce a receipt with status 0x0 — do not treat null receipt as revert.

Related