eth_getBlockByNumber on Immutable zkEVM
Everything below was measured on 2026-10-13 by calling eth_getBlockByNumber on Immutable zkEVM through the same endpoint customers use, and is re-measured weekly.
What eth_getBlockByNumber does
Returns a block by number or tag (latest, safe, finalized, pending, earliest): the header, and either the transaction hashes or the full transactions. Indexers, explorers and wallets use it to follow the chain.
eth_getBlockByNumber on Immutable zkEVM: what we measured
| Header fields | 26 |
|---|---|
| Transactions per block | 1, 1, 1, 1, 2 in five consecutive blocks |
| Response size, full transactions (true) | 5.1 KB average |
| Response size, hashes only (false) | 1.9 KB |
| Gas limit | 30,000,000 |
| Gas used in the latest block | 211,928 (0.706% of the limit) |
| Base fee | 49 wei |
| Tag "safe" | not served (safe block not found) |
| Tag "finalized" | not served (finalized block not found) |
| Tag "pending" | block 44,806,428 |
| Tag "earliest" | block 0 |
What is different on Immutable zkEVM
The header includes the fields added by London (EIP-1559 base fee), Shanghai (withdrawals), Cancun (EIP-4844 blob gas), Cancun (EIP-4788 beacon root), but not those of Prague (EIP-7685 requests). Code that assumes Ethereum's current header shape must treat the missing ones as optional.
Asking for full transactions (second parameter true) made the response 2.7 times larger than hashes only. If you need only some transactions, fetch hashes and request those transactions or their receipts individually.
The "safe" and "finalized" tags were not served on Immutable zkEVM. Code that waits for "safe" needs a fallback, such as latest minus a confirmation count.
A real Immutable zkEVM block header
From block 44,806,423, as our endpoint returned it (long hex values shortened).
{
"baseFeePerGas": "0x31",
"blobGasUsed": "0x0",
"difficulty": "0x2",
"excessBlobGas": "0x0",
"extraData": "0xd983010000846765…(97 bytes)",
"gasLimit": "0x1c9c380",
"gasUsed": "0x33bd8",
"hash": "0x2cf2909dd2a21cc6037ae39f3f8b6f45c64b82f1546704052b5465f7f01c698a",
"logsBloom": "0x0000000000100000…(256 bytes)",
"miner": "0x0000000000000000000000000000000000000000",
"mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"nonce": "0x0000000000000000",
"number": "0x2abb117",
"parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000",
"parentHash": "0x709d9b1fb4f548ebc9b5d8d604751db79aa1e41af29a06d35725979bf15c2e2a",
"receiptsRoot": "0x60eaacea576c43b8fd12329e9c6f44a34ec31766b95fbf35aa32465befa73cfb",
"sha3Uncles": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",
"size": "0x62d",
"stateRoot": "0xf4c8a87eba8544fce02981dbbe5ce529b26b2259d6f144f80fe06b3e935da368",
"timestamp": "0x6ace2948",
"totalDifficulty": "0x557620e",
"transactions": "1 transactions",
"transactionsRoot": "0x99631724a45fd8c24cbd734e5ec44c37314c3da3fc511c2d7a28f29a6ccdd6c5",
"uncles": [],
"withdrawals": [],
"withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421"
}Example request
curl -s https://rpc.swiftnodes.io/rpc/immutable-zkevm?key=YOUR_API_KEY \
-X POST -H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"eth_getBlockByNumber","params":["latest",false]}'import { createPublicClient, http } from "viem";
const client = createPublicClient({
transport: http("https://rpc.swiftnodes.io/rpc/immutable-zkevm?key=YOUR_API_KEY"),
});
// Header plus transaction hashes (1.9 KB)
const block = await client.getBlock({ blockTag: "latest" });
// With full transactions (5.1 KB on average on Immutable zkEVM)
const full = await client.getBlock({ blockNumber: block.number, includeTransactions: true });
Other methods on Immutable zkEVM
- eth_blockNumberSupported
- eth_chainIdSupported
- eth_getBalanceSupported
- eth_getTransactionByHashSupported
- eth_getTransactionReceiptSupported
- eth_callSupported
- eth_estimateGasSupported
- eth_gasPriceSupported
- eth_maxPriorityFeePerGasSupported
- eth_sendRawTransactionSupported
- eth_getTransactionCountSupported
- eth_getCodeSupported
- eth_subscribeNot available
- eth_getLogsSupported
- eth_getBlockReceiptsSupported
- eth_feeHistorySupported
- eth_getProofSupported
- eth_createAccessListSupported
- debug_traceCallSupported
- trace_blockNot available
- trace_transactionNot available
eth_getBlockByNumber on other chains
- Ethereum
- Base
- Arbitrum
- Optimism
- Polygon
- BNB Smart Chain
- Avalanche
- Sonic
- Linea
- Scroll
- zkSync Era
- Blast
- Mantle
- Gnosis
- Celo
- Berachain
- Monad
- Unichain
- Kaia
- PulseChain
- World Chain
- Ronin
- Abstract
- ApeChain
- MegaETH
- Fantom
- Lisk
- Hemi
- X Layer
- BOB
- Plasma
- Fraxtal
- Zora
- Story
- Soneium
- Sei
- Hyperliquid
- Taiko
- Morph
- Ink
- Katana
- Ethereum Classic
- opBNB
- Mode
- Flare
- Core
- Chiliz
- Telos EVM
- Tempo
- Cronos
- Manta Pacific
- Shibarium
- Boba Network
- Arbitrum Nova
Frequently asked questions
Does Immutable zkEVM support eth_getBlockByNumber?
Yes. eth_getBlockByNumber answered on the SwiftNodes Immutable zkEVM endpoint when our weekly probe called it through the customer path (2026-10-13).
How many transactions are in each Immutable zkEVM block?
In five consecutive blocks on 2026-10-13: 1, 1, 1, 1, 2.
Immutable zkEVM endpoints, live block height and WebSocket status are on the Immutable zkEVM RPC page.
One key covers every chain we serve, and SwiftNodes has a free tier.