Monad for Builders 2026: A Practical Implementation Guide
This 2026 guide explains how to analyze Monad’s performance at the block level using Node.js. The process covers fetching recent blocks through a Chainstack RPC, computing execution and fee-related metrics, and exposing the aggregated results through a simple API for downstream consumption.
💡 New to Monad’s architecture? Start with our “Deep dive into Monad: Speed, performance and more” for a complete overview of how it works.
⚡If you are already familiar with Monad and ready to dive into coding, jump to “Build On Monad” section below.
💡 Prefer diving straight into the code?
Get the Monad Metrics project on Utkarshini’s GitHub and start extracting block-level metrics instantly:
https://github.com/utkarshiniarora/monad-metrics
What is Monad?
Monad is an Ethereum-compatible Layer 1 blockchain designed to make decentralized applications fast, affordable, and scalable without sacrificing security or decentralization.
At its core, Monad focuses on high transaction throughput and scalability. While traditional blockchains process transactions one after another, Monad introduces optimistic Parallel Execution and Deferred Execution, allowing many transactions to run at the same time. This architecture enables Monad to process up to 10,000 transactions per second (TPS) while maintaining near-zero gas fees and low latency.
Monad is fully compatible with Ethereum, complying with the Ethereum Virtual Machine (EVM) and the Shanghai fork. This means developers can deploy existing Solidity applications without any modification, instantly benefiting from Monad’s performance improvements. From a developer’s perspective, it feels like Ethereum, but significantly faster and cheaper.
Consensus on Monad is powered by MonadBFT, a high-performance Byzantine Fault Tolerant protocol that delivers 1-second single-slot finality. Transactions confirm almost instantly, making Monad ideal for real-time applications, gaming, prediction markets, and consumer-facing use cases where speed matters.
To support this performance, Monad uses MonadDB, a database optimized for parallel reads and writes, ensuring the network can scale efficiently as usage grows. Together, optimistic Parallel Execution, MonadBFT, and MonadDB form the backbone that allows Mo.nad to achieve high throughput without compromising on security, scalability, or decentralization.
Ultimately, Monad provides the infrastructure developers need to build dApps that can scale to millions of users, offering very high transaction speeds, low fees, and reliable finality. Its growing ecosystem already includes applications across gaming, prediction, and consumer experiences, all benefiting from Monad’s real-time performance capabilities.
Why Use Monad?
Monad is built to support anyone interacting with high-performance blockchain systems, from developers and founders to teams building infrastructure and consumer-facing applications. It removes the usual tradeoffs of slow execution, high fees, and complex architectural constraints by delivering fast, scalable, and reliable execution at the base layer. Each core component of Monad contributes directly to better performance, predictable behavior, and a smoother experience across the ecosystem.
Parallel Execution
Most blockchains execute transactions sequentially, which creates congestion as usage grows. Monad uses optimistic parallel execution, allowing multiple non-conflicting transactions to be executed at the same time.
This makes it possible for applications to handle large numbers of users interacting simultaneously without delays, making Monad well-suited for high-activity use cases like gaming, trading, and consumer apps.
MonadDB
MonadDB is a purpose-built database designed to support parallel reads and writes at high throughput. Traditional blockchain storage layers often become a bottleneck when transaction volume increases.
With MonadDB, state access remains fast and consistent even under heavy load, enabling real-time updates and predictable application behavior as your user base scales.
MonadBFT Consensus
MonadBFT is a Byzantine Fault Tolerant consensus mechanism that provides one-second single-slot finality. Once a transaction is confirmed, it is final and cannot be reverted.
This results in fast confirmations and strong security guarantees, improving user experience for payments, interactions, and time-sensitive actions without compromising decentralization.
Deferred Execution
Monad separates transaction ordering from execution through deferred execution. Transactions are first ordered by consensus and then executed afterward in parallel.
This model benefits applications that experience bursts of activity or require many users to interact at once, such as games, prediction markets, marketplaces, and consumer apps. Unlike Ethereum, where transactions are ordered and executed sequentially, deferred execution allows Monad to maximize parallelism while still producing deterministic results. The outcome is higher throughput and lower latency without changing the EVM execution model or introducing developer-facing complexity.
Shared Mempool
Monad uses a shared mempool where validators observe the same set of pending transactions before block production.
This design primarily benefits applications sensitive to transaction ordering, such as DeFi protocols and on-chain markets. By reducing inconsistencies in how transactions are seen and ordered across validators, the shared mempool improves execution predictability and reduces edge cases that arise from divergent mempool views. This makes outcomes more consistent compared to Ethereum’s more fragmented mempool environment, especially under high network load.
Carriage Cost and Reserve Balance
Monad introduces carriage costs and reserve balances to manage how on-chain state is stored and maintained over time. Applications that consume more persistent state account for the long-term resources they use, rather than pushing those costs onto the entire network.
For intel, analytics, and real-time metrics platforms, this model is especially important. These systems often track large volumes of state such as historical data, performance metrics, and indexing metadata. Carriage costs make the cost of maintaining this state predictable and proportional, allowing infrastructure-level applications to scale sustainably without relying on unstable transaction fees or aggressive data pruning.
In practice, this means this design enables projects building on Monad to treat the blockchain as a reliable, high-throughput data source while keeping fees low for end users. It also sets the foundation for building richer observability layers on top of Monad, where execution performance, network health, and real-time activity can be monitored continuously and at scale.
Prerequisites
Before starting, make sure you have:
- Node.js 18+
- A Chainstack account
- Basic understanding of:
- JavaScript
- JSON-RPC
- Familiarity with REST APIs
✅ Verify your Node.js version using
node -v. If it’s below 18, update before continuing
Build On Monad
We will use:
Set Up Monad on Chainstack
Head to Chainstack and create a free account
After signing up, you will be navigated to https://console.chainstack.com/. This is where you can manage all your nodes across 70+ protocols
Click on “Add node.”
Choose Monad and then select “Monad Mainnet” in the network section

Click “Next”
In the next step, select the type of node. For this project, choose “Global Node.” Give your node a name, review all the settings in the summary, and click “Deploy Node.”

Once the node is deployed, click “View Node Details”. Scroll down to the “Access and credentials” section. Here you will find the endpoint URL, copy it and keep it safe. It will be needed in the next step.
⚠️ Do not expose your URL. Store it securely in a
.envfile and add it to your.gitignorebefore pushing the code to GitHub. Consider using password-protected endpoints to enhance security.
Set Up Environment
Create a new project folder:
mkdir monad-metrics
cd monad-metrics
npm init -y
Install dependencies:
npm install express cors ethers axios dotenv
Create an .env file with the following keys:
CHAINSTACK_URL=<Your-Chainstack-Endpoint-URL>
TOKEN_ID=<Token-Symbol>
BLOCK_SAMPLE=<Number-Of-Blocks>
CHAINSTACK_URL: The RPC endpoint URL obtained from Chainstack when the Monad node was deployedTOKEN_ID: The symbol of the token whose price you want to track (for example,MONAD).BLOCK_SAMPLE: Number of recent blocks to analyze
Create the RPC Provider
All network data in this project is fetched directly from a Monad JSON-RPC endpoint. To keep the setup simple and predictable, create a standard ethers.js provider that acts as the single access point for all on-chain reads.
Create a file provider.js
import { ethers } from "ethers";
export function createProvider(rpcUrl) {
const provider = new ethers.JsonRpcProvider(rpcUrl);
return provider;
}
Fetch Block Data
The core of the system samples the latest N blocks and computes averages across them.
const latestBlock =await provider.getBlockNumber();
const blocks = [];
for (let i = latestBlock; i > latestBlock -BLOCK_SAMPLE; i--) {
const block =await provider.getBlock(i,true);
blocks.push(block);
}
Each block includes:
- Timestamp
- Transactions
- Gas used
- Gas limit
- Base fee (if present)
This raw data becomes the foundation for every metric.
Compute Metrics
Block Time
const blockTimes = [];
for (let i =1; i < blocks.length; i++) {
blockTimes.push(blocks[i -1].timestamp - blocks[i].timestamp);
}
const avgBlockTime =
blockTimes.reduce((a, b) => a + b,0) / blockTimes.length;
This gives a real observed block time.
Transactions and TPS
const txCounts = blocks.map(b => b.transactions.length);
const avgTxPerBlock =
txCounts.reduce((a, b) => a + b,0) / txCounts.length;
constTPS = avgTxPerBlock / avgBlockTime;
You also track:
const largestBlockTxs =Math.max(...txCounts);
This helps identify bursty activity.
Gas Usage and Fees
const gasUsedArr = blocks.map(b =>Number(b.gasUsed));
const totalTxs = txCounts.reduce((a, b) => a + b,0);
const avgGasUsedPerTx =
gasUsedArr.reduce((a, b) => a + b,0) / totalTxs;
Gas price comes directly from the node:
const feeData =await provider.getFeeData();
const gasPriceWei = feeData.gasPrice ??0n;
Add Token Price and USD Fee Flow
Fetch live token price using CoinGecko:
exportasyncfunctionfetchTokenPriceUSD(tokenId) {
const { data } =await axios.get(
"<https://api.coingecko.com/api/v3/simple/price>",
{
params: {
ids: tokenId,
vs_currencies:"usd",
},
}
);
return data[tokenId]?.usd ??null;
}
Compute USD metrics:
const avgTxCostUSD =
tokenPriceUSD
? (Number(gasPriceWei) * avgGasUsedPerTx /1e18) * tokenPriceUSD
:null;
const feeFlowUSDPerSecond =
avgTxCostUSD ? avgTxCostUSD *TPS :null;
This answers a critical question:
How much value flows through Monad every second?
Block Utilization
const utilization = blocks.map(
b =>Number(b.gasUsed) /Number(b.gasLimit)
);
const blockUtilization =
(
utilization.reduce((a, b) => a + b,0) /
utilization.length *
100
).toFixed(2) +"%";
High utilization can indicate congestion or demand spikes.
Expose Metrics via Express API
Finally, serve everything through an API.
app.get("/metrics",async (req, res) => {
try {
console.log("\\n--- Fetching Monad Metrics ---");
const data =awaitgetMetrics(provider);
res.json(data);
}catch (err) {
res.status(500).json({error:"Failed to fetch metrics" });
}
});
Run the server:
node index.js
Your API is now live at:
<http://localhost:3001/metrics>
The result would look something like this:
Consume the Metrics API
Once the backend is running, the /metrics endpoint can be consumed by any frontend framework. Since the API returns plain JSON, it works equally well with React, Next.js, Vue, or simple static dashboards.
Example:
This approach keeps the frontend lightweight. All heavy computation happens server-side, while the UI focuses purely on visualization.
Because the API exposes already-aggregated values, the frontend does not need to understand block structure, gas mechanics, or RPC calls. It simply consumes clean, ready-to-use metrics that reflect the current state of the Monad network.
Considerations
RPC Usage and Sampling Strategy
Running a reliable RPC endpoint is essential when working with live network telemetry. Metrics like block time, TPS, and gas usage depend entirely on how fresh and consistent the underlying node data is. Using a managed RPC provider such as Chainstack simplifies this by allowing you to deploy and access fully managed nodes in minutes, ensuring consistent access to Monad’s latest blocks and RPC methods without maintaining your own infrastructure. Keep BLOCK_SAMPLE conservative to balance freshness with request volume. For most real-time use cases, sampling the latest 20–30 blocks over a Chainstack global node provides stable results without unnecessary overhead.
Sequential Block Fetching
Blocks are fetched sequentially in descending order. This keeps the logic easy to reason about but is not optimal for higher throughput. If you plan to increase sampling depth or refresh frequency, batching requests or parallelizing block fetches can significantly reduce latency.
Gas and Fee Accuracy
Gas price and base fee values reflect the current network state, not historical averages. During volatile periods, short sampling windows may exaggerate spikes or dips. If you need more stable metrics, introduce weighted averages or longer windows at the cost of responsiveness.
USD Conversions
Transaction cost and fee flow calculations depend on external price data. If the price API is unavailable or delayed, USD-denominated metrics gracefully return null. For production systems, caching prices or updating them on a fixed interval is recommended.
Summary
Monad demonstrates how a high-performance, Ethereum-compatible blockchain can remain scalable, fast, and developer-friendly. By combining Parallel Execution, Deferred Execution, MonadBFT consensus, and a purpose-built MonadDB, developers can access real-time block-level metrics without compromising security or decentralization.
Looking ahead, Monad empowers developers to:
- Build scalable dApps that handle high user activity and network throughput.
- Monitor execution, gas, and fee metrics in real time through simple APIs.
- Leverage predictable state costs with carriage and reserve balance mechanisms.
Running your own Monad node ensures reliable access to live block data. Chainstack simplifies this by letting you deploy fully managed Monad nodes in minutes, providing stable RPC access and the latest network state.
Monad is scaling with speed, reliability, and developer-first infrastructure.
Reliable Monad RPC provider for production
Looking for a reliable Monad RPC provider for production use in 2026?
Chainstack provides low-latency, globally distributed Monad RPC infrastructure built for trading, gaming, and stablecoin-powered applications, from development to high-throughput production.
With dedicated nodes, high availability, and enterprise-grade security, Chainstack helps teams build, scale, and operate Monad applications without managing infrastructure.
Chainstack as a Monad RPC provider
- Low-latency Monad RPC endpoints powered by global infrastructure
- Dedicated and global nodes for mainnet and testnets
- High 99.99% uptime and consistent performance under real-world load
- Secure access with API keys and role-based permissions
- Fast setup — deploy a Monad node in minutes
Start building on Monad today
Start for free, connect your application to a reliable Monad RPC endpoint, and scale with dedicated nodes built for production performance – one of the best RPC providers.





