eth_getBlockByNumber - MegaETH RPC Method
Retrieve complete block data by block number on MegaETH. Perfect for high-frequency DeFi developers, gaming studios, and teams building real-time applications building on the first real-time blockchain with sub-millisecond latency and 100,000+ TPS.
Returns information about a block by block number on MegaETH.
Why MegaETH? Build on the first real-time blockchain with sub-millisecond latency and 100,000+ TPS with sub-millisecond transaction streaming with 100,000+ sustained TPS and full EVM compatibility.
When to Use This Method
eth_getBlockByNumber is essential for high-frequency DeFi developers, gaming studios, and teams building real-time applications:
- Block explorers and analytics dashboards: Display comprehensive block data and chain metrics for end-user interfaces on MegaETH
- 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 high-frequency trading, real-time gaming, instant payments, and latency-sensitive applications
- Timestamp-based logic: Verify block age and enforce time-dependent contract logic on the first real-time blockchain with sub-millisecond latency and 100,000+ TPS
Common Use Cases
1. Process All Transactions in the Latest Block
Fetch the latest block on MegaETH 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-megaeth-mainnet.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 MegaETH. 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-megaeth-mainnet.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 first real-time blockchain with sub-millisecond latency and 100,000+ TPS 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-megaeth-mainnet.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())
}
}Full Block Restriction
Full Block Queries Disabled
On MegaETH, the fullTransactionObjects parameter is disabled for performance optimization. The method always returns transaction hashes instead of full transaction objects.
To get full transaction details, fetch them individually:
// Get block with transaction hashes
const block = await provider.getBlock('latest', false);
// Fetch full transaction details as needed
for (const txHash of block.transactions) {
const tx = await provider.getTransaction(txHash);
console.log('Transaction:', tx);
}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 MegaETH. Essential for syncing dApps, monitoring transaction confirmations, and blockchain state tracking.
eth_getBlockByHash
Retrieve complete block data by block hash on MegaETH. Essential for high-frequency DeFi developers, gaming studios, and teams building real-time applications building on the first real-time blockchain with sub-millisecond latency and 100,000+ TPS.