RPC method

eth_getBalance on Celo

Supported on SwiftNodes

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

What eth_getBalance does

Returns an account's balance of the chain's native token in wei (the smallest unit, 10^-18), at a given block. It works for contracts as well as wallets; ERC-20 balances need eth_call to the token's balanceOf instead.

eth_getBalance on Celo: what we measured

The zero address held 381.78 CELO on Celo when we measured. On most chains a zero-address balance is funds sent there by mistake or burned; either way it differs from chain to chain, so reading it is a quick sanity test that your client is talking to Celo and not another network.

You can pin a read to an exact block with {"blockHash": "0x..."} (EIP-1898). Unlike a block number, a hash fails loudly if that block was reorganised away.

Balances at blocks older than about 10,000 blocks need historical state. Add &archive=1 to the URL to route those reads to archive nodes.

Unitwei of CELO (1 CELO = 10^18 wei)
Balance of 0x0000…0000 (zero address)381.78 CELO
Balance of 0x…dEaD (burn address)241,375 CELO
Block given by hash (EIP-1898)accepted
History on default routingabout the last 10,000 blocks
Older blocks (archive=1)available on paid plans

Example request

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

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

const wei = await client.getBalance({ address: "0x000000000000000000000000000000000000dEaD" });
console.log(formatEther(wei), "CELO");

// At a past block (older than the default window: add &archive=1 to the URL)
const then = await client.getBalance({ address: "0x000000000000000000000000000000000000dEaD", blockNumber: 79992967n });

// Many balances in one request: Multicall3 is deployed on Celo
const balances = await client.multicall({
  contracts: addresses.map((a) => ({ address: "0xcA11bde05977b3631167028862bE2a173976CA11", abi: [{ name: "getEthBalance", type: "function", stateMutability: "view", inputs: [{ type: "address" }], outputs: [{ type: "uint256" }] }], functionName: "getEthBalance", args: [a] })),
});

Other methods on Celo

eth_getBalance on other chains

Frequently asked questions

Does Celo support eth_getBalance?

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

What unit does eth_getBalance return on Celo?

Wei of CELO, as a hex string: divide by 10^18 for CELO. viem's formatEther does this.

Can I get historical balances on Celo?

Default routing keeps about 10,000 blocks of state. Older balances work with &archive=1 on paid plans.

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

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