RPC method

eth_getTransactionReceipt on Arbitrum

Supported on SwiftNodes

Everything below was measured on 2026-10-13 by calling eth_getTransactionReceipt on Arbitrum through the same endpoint customers use, and is re-measured weekly.

What eth_getTransactionReceipt does

Returns the outcome of a mined transaction: status (1 success, 0 reverted), gas used, the effective gas price, the logs it emitted and any contract it created. It returns null until the transaction is in a block.

eth_getTransactionReceipt on Arbitrum: what we measured

Fields17 (3 beyond the Ethereum set)
Receipt for an unknown hashnull
Size of the sample receipt1.6 KB

Reading the fee and fields

Beyond the Ethereum fields, Arbitrum receipts carry 3 more. gasUsedForL1: the part of gasUsed that pays for posting the transaction's data to Ethereum. It is already included in gasUsed; l1BlockNumber: the Ethereum (L1) block number the L2 block or transaction was sequenced against. On Arbitrum, the NUMBER opcode (block.number in Solidity) returns this L1 value, not the L2 block number; timeboosted: whether the transaction went through Arbitrum's Timeboost express lane.

On Arbitrum, gasUsed already includes the gas that paid for posting the transaction to Ethereum; gasUsedForL1 shows how much. In the sample receipt it was 384 of 32,495 gas (1.1%). The fee is gasUsed × effectiveGasPrice, with nothing to add.

A hash the node has not seen returns null, not an error, so poll until it is non-null (viem's waitForTransactionReceipt does this) and give up after a timeout.

A real Arbitrum receipt

As our endpoint returned it; logs collapsed to a count and long hex values shortened.

{
  "blockHash": "0x4c7b470aa12cae66402b2ec5f6c8cfb742625ee95b71beea12c85e6ac3df83c7",
  "blockNumber": "0x1ea98b88",
  "contractAddress": null,
  "cumulativeGasUsed": "0x7eef",
  "effectiveGasPrice": "0x142d0a0",
  "from": "0xbf97926a5e28e98bb5de8e2460138c90f0431774",
  "gasUsed": "0x7eef",
  "gasUsedForL1": "0x180",
  "l1BlockNumber": "0x18f877b",
  "logs": "1 logs",
  "logsBloom": "0x0000000000000000…(256 bytes)",
  "status": "0x1",
  "timeboosted": false,
  "to": "0xe844701934d9c6085b292e428f41b911cc0b3872",
  "transactionHash": "0xaa139c671cfac96fd23f6b819d83919c5b983a99822ef811319cc2bf667475e8",
  "transactionIndex": "0x1",
  "type": "0x2"
}

Example request

curl -s https://rpc.swiftnodes.io/rpc/arbitrum?key=YOUR_API_KEY \
  -X POST -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":1,"method":"eth_getTransactionReceipt","params":["0xaa139c671cfac96fd23f6b819d83919c5b983a99822ef811319cc2bf667475e8"]}'
import { createPublicClient, http } from "viem";

const client = createPublicClient({
  transport: http("https://rpc.swiftnodes.io/rpc/arbitrum?key=YOUR_API_KEY"),
});

const receipt = await client.waitForTransactionReceipt({ hash, timeout: 60_000 });
if (receipt.status !== "success") throw new Error("reverted");

// Total cost on Arbitrum: gasUsed already includes the L1 part
const total = receipt.gasUsed * receipt.effectiveGasPrice;
const l1Share = receipt.gasUsedForL1; // raw field: Arbitrum-specific

Other methods on Arbitrum

eth_getTransactionReceipt on other chains

Frequently asked questions

Does Arbitrum support eth_getTransactionReceipt?

Yes. eth_getTransactionReceipt answered on the SwiftNodes Arbitrum endpoint when our weekly probe called it through the customer path (2026-10-13).

How do I get the total fee of a transaction on Arbitrum?

gasUsed × effectiveGasPrice. On Arbitrum, gasUsed already includes the L1 component (gasUsedForL1).

Why is the Arbitrum receipt null?

The transaction is not in a block yet, or the hash is unknown to the node. Keep polling with a timeout.

Arbitrum endpoints, live block height and WebSocket status are on the Arbitrum RPC page.

One key covers every chain we serve, and SwiftNodes has a free tier.