eth_getBlockByNumber on zkSync Era
Everything below was measured on 2026-10-13 by calling eth_getBlockByNumber on zkSync Era 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 zkSync Era: what we measured
| Header fields | 24 (3 beyond the Ethereum set) |
|---|---|
| Transactions per block | 1, 1, 1, 1, 1 in five consecutive blocks |
| Response size, full transactions (true) | 2.5 KB average |
| Response size, hashes only (false) | 1.5 KB |
| Gas limit | 1,125,899,906,842,624 |
| Gas used in the latest block | 164,394 |
| Base fee | 0.0452 gwei |
| Tag "safe" | block 72,465,184 |
| Tag "finalized" | block 72,448,457 |
| Tag "pending" | not served (null) |
| Tag "earliest" | block 0 |
What is different on zkSync Era
zkSync Era blocks carry 3 fields that Ethereum blocks do not. l1BatchNumber: the L1 batch that includes the block or transaction; l1BatchTimestamp: the timestamp of the L1 batch; sealFields: consensus seal data (unused by applications). Strict schema validators need to allow them.
The header includes the fields added by London (EIP-1559 base fee), but not those of Shanghai (withdrawals), Cancun (EIP-4844 blob gas), Cancun (EIP-4788 beacon root), Prague (EIP-7685 requests). Code that assumes Ethereum's current header shape must treat the missing ones as optional.
The gas limit of 1,125,899,906,842,624 is not a real capacity figure. zkSync Era meters gas differently and reports a placeholder, so do not use gasUsed / gasLimit as a congestion signal there.
The "pending" tag was not served on zkSync Era. Code that waits for "pending" needs a fallback, such as latest minus a confirmation count.
"finalized" was 16,904 blocks (about 22.3 hours) behind the head.
A real zkSync Era block header
From block 72,465,360, as our endpoint returned it (long hex values shortened).
{
"baseFeePerGas": "0x2b275d0",
"difficulty": "0x0",
"extraData": "0x",
"gasLimit": "0x4000000000000",
"gasUsed": "0x2822a",
"hash": "0xb7d508c9d7b07735453f104b19577e5fa38856e91f3caa40132fddcbe7334e2b",
"l1BatchNumber": null,
"l1BatchTimestamp": null,
"logsBloom": "0x0000000000040001…(256 bytes)",
"miner": "0x0000000000000000000000000000000000000000",
"mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"nonce": "0x0000000000000000",
"number": "0x451bbd0",
"parentHash": "0x1f28225c43c6a77f850cf8faf20391747e0d0ab9f0b759766e7da4c7b4fe2583",
"receiptsRoot": "0x0000000000000000000000000000000000000000000000000000000000000000",
"sealFields": [],
"sha3Uncles": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",
"size": "0x0",
"stateRoot": "0x0000000000000000000000000000000000000000000000000000000000000000",
"timestamp": "0x6ace2e2e",
"totalDifficulty": "0x0",
"transactions": "1 transactions",
"transactionsRoot": "0x0000000000000000000000000000000000000000000000000000000000000000",
"uncles": []
}Example request
curl -s https://rpc.swiftnodes.io/rpc/zksync?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/zksync?key=YOUR_API_KEY"),
});
// Header plus transaction hashes (1.5 KB)
const block = await client.getBlock({ blockTag: "latest" });
// With full transactions (2.5 KB on average on zkSync Era)
const full = await client.getBlock({ blockNumber: block.number, includeTransactions: true });
// A block that will not be reorganised
const final = await client.getBlock({ blockTag: "finalized" });Other methods on zkSync Era
- eth_blockNumberSupported
- eth_chainIdSupported
- eth_getBalanceSupported
- eth_getTransactionByHashSupported
- eth_getTransactionReceiptSupported
- eth_callSupported
- eth_estimateGasNot measured
- eth_gasPriceSupported
- eth_maxPriorityFeePerGasSupported
- eth_sendRawTransactionSupported
- eth_getTransactionCountSupported
- eth_getCodeSupported
- eth_subscribeSupported
- eth_getLogsSupported
- eth_getBlockReceiptsSupported
- eth_feeHistorySupported
- eth_getProofNot available
- eth_createAccessListNot available
- 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
- 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
- Immutable zkEVM
Frequently asked questions
Does zkSync Era support eth_getBlockByNumber?
Yes. eth_getBlockByNumber answered on the SwiftNodes zkSync Era endpoint when our weekly probe called it through the customer path (2026-10-13).
How many transactions are in each zkSync Era block?
In five consecutive blocks on 2026-10-13: 1, 1, 1, 1, 1.
What are l1BatchNumber and l1BatchTimestamp in a zkSync Era block?
l1BatchNumber is the L1 batch that includes the block or transaction. l1BatchTimestamp is the timestamp of the L1 batch.
zkSync Era endpoints, live block height and WebSocket status are on the zkSync Era RPC page.
One key covers every chain we serve, and SwiftNodes has a free tier.