eth_getBlockByNumber - Celo RPC Method
Retrieve complete block data by block number on Celo. Perfect for mobile payment developers, fintech builders, and teams targeting emerging markets building on the mobile-first L2 powering 500K+ daily active users and $2B+ monthly stablecoin volume.
Returns information about a block by block number on Celo.
Why Celo? Build on the mobile-first L2 powering 500K+ daily active users and $2B+ monthly stablecoin volume with phone number-based addressing, sub-cent fees, 150+ country adoption, Nightfall privacy layer, and Opera browser integration.
When to Use This Method
eth_getBlockByNumber is essential for mobile payment developers, fintech builders, and teams targeting emerging markets:
- Block explorers and analytics dashboards: Display comprehensive block data and chain metrics for end-user interfaces on Celo
- Transaction indexers processing block contents: Extract and index every transaction within a block for data pipelines and search backends
- Cross-chain bridges verifying block data: Validate block headers and transaction proofs for mobile stablecoin payments (MiniPay 10M+ wallets), remittances, humanitarian aid, and local currency stablecoins (cUSD, cNGN, cEUR)
- Timestamp-based logic: Verify block age and enforce time-dependent contract logic on the mobile-first L2 powering 500K+ daily active users and $2B+ monthly stablecoin volume
Common Use Cases
1. Process All Transactions in the Latest Block
Fetch the latest block on Celo with full transaction objects, then iterate through each transaction to extract sender, receiver, value, and gas data. This pattern powers indexers, analytics dashboards, and event backfill pipelines.
import { JsonRpcProvider, formatEther } from 'ethers';
const provider = new JsonRpcProvider('https://api-celo-mainnet-archive.n.dwellir.com/YOUR_API_KEY');
async function processLatestBlock() {
const block = await provider.getBlock('latest', true);
if (!block) return;
console.log(`Block #${block.number}: ${block.transactions.length} transactions`);
for (const tx of block.prefetchedTransactions) {
console.log(` ${tx.hash}`);
console.log(` From: ${tx.from} To: ${tx.to}`);
console.log(` Value: ${formatEther(tx.value)} Gas: ${tx.gasLimit.toString()}`);
}
}
processLatestBlock();2. Monitor New Blocks with a Polling Loop
Poll eth_getBlockByNumber at regular intervals to detect new blocks as they are produced on Celo. This lightweight pattern is suitable for bots, watchers, and notification services that need near-real-time block awareness.
from web3 import Web3
import time
w3 = Web3(Web3.HTTPProvider('https://api-celo-mainnet-archive.n.dwellir.com/YOUR_API_KEY'))
last_block = w3.eth.block_number
print(f'Starting from block #{last_block}')
while True:
current_block = w3.eth.block_number
if current_block > last_block:
for block_num in range(last_block + 1, current_block + 1):
block = w3.eth.get_block(block_num)
tx_count = len(block.transactions)
print(f'New block #{block.number}: {tx_count} txns, '
f'gas used {block.gasUsed}')
last_block = current_block
time.sleep(2)3. Verify Block Finality on L2 Chains
Layer 2 rollup chains on the mobile-first L2 powering 500K+ daily active users and $2B+ monthly stablecoin volume expose additional block tags that indicate settlement confidence. Use safe or finalized tags alongside the base latest tag for use cases requiring strong finality guarantees.
package main
import (
"context"
"fmt"
"log"
"math/big"
"github.com/ethereum/go-ethereum/ethclient"
)
func main() {
client, _ := ethclient.Dial("https://api-celo-mainnet-archive.n.dwellir.com/YOUR_API_KEY")
// Latest block (may be unconfirmed on L2)
latest, _ := client.BlockByNumber(context.Background(), nil)
fmt.Printf("Latest block: %d (timestamp: %d)\n",
latest.Number().Uint64(), latest.Time())
// Finalized block (settled on L1 for rollups)
finalized, _ := client.BlockByNumber(context.Background(),
big.NewInt(int64(RPCLatestBlockNumber-32))) // placeholder: use rpc.FinalizedBlockNumber
if finalized != nil {
fmt.Printf("Finalized block: %d\n", finalized.Number().Uint64())
}
}Best Practices
- Cache block data by block number: Blocks are immutable once finalized, so cache results indefinitely keyed by block number to eliminate redundant API calls
- Use
latesttag for most use cases; avoidpendingfor production: Thependingtag returns speculative data that may never be included in the canonical chain - For L2 chains, check chain-specific finality tags: Tags like
safeandfinalizedprovide settlement guarantees specific to each rollup's proof mechanism - Combine with
eth_getBlockReceiptsfor efficient receipt scanning: When you need both block headers and transaction outcomes, useeth_getBlockReceiptsalongside this method rather than fetching receipts individually
Code Examples
Error Handling
| Error Code | Message | Description |
|---|---|---|
| -32602 | Invalid params | Invalid block number or parameter format |
| -32000 | Block not found | Block does not exist |
Related Methods
eth_blockNumber- Get latest block numbereth_getBlockByHash- Get block by hasheth_getTransactionByHash- Get transaction details
eth_blockNumber
Get the current block height on Celo. Essential for syncing dApps, monitoring transaction confirmations, and blockchain state tracking.
eth_getBlockByHash
Retrieve complete block data by block hash on Celo. Essential for mobile payment developers, fintech builders, and teams targeting emerging markets building on the mobile-first L2 powering 500K+ daily active users and $2B+ monthly stablecoin volume.