A few days ago I deployed gasfee.oeduardoal.dev, a small tool that shows real-time transaction fees across 7 different blockchains.
The UI is simple, but building it forced me to understand something I had always glossed over: how does your code actually talk to a blockchain?
If you are a backend dev who has never touched Web3, this one is for you.
What is a blockchain, from a backend perspective?
Think of a blockchain as a database you do not own. It is a distributed ledger running across thousands of nodes worldwide. There is no single server. It is a network of computers that all agree on the same state.
As a backend dev, your instinct is: "okay, so how do I query it?" That is where RPCs come in.
What is an RPC?
RPC stands for Remote Procedure Call. In the blockchain world, it is the interface between your app and a node on the network. You do not run the node, you just call it.
It works over HTTP and looks like this:
POST https://eth.llamarpc.com
Content-Type: application/json
{
"jsonrpc": "2.0",
"method": "eth_gasPrice",
"params": [],
"id": 1
}
A regular HTTP POST. The node responds with the current gas price in wei. Libraries like viem or ethers.js wrap this for you, but under the hood it is just JSON over HTTP.
RPC endpoints are to blockchains what REST APIs are to web services. You are calling a server you do not control, and it returns data from the network.
What is gas?
Every operation on an EVM blockchain costs gas. Think of it as a fee you pay to compensate the validators who process and store your transaction.
The price fluctuates with demand, just like Uber surge pricing. When the network is busy, fees go up. When it is quiet, they drop.
Gas is measured in gwei, which is just a small unit of ETH:
1 ETH = 1,000,000,000 gwei
1 gwei = 0.000000001 ETH
A standard ETH transfer costs 21,000 units of gas. So if the gas price is 10 gwei, your transaction costs 21000 × 10 gwei = 0.00021 ETH, which you then convert to USD using the current ETH price.
Why 7 chains?
All 7 chains in the tracker are EVM-compatible, meaning they speak the same RPC protocol as Ethereum. The same method names, the same response format. The only difference is the endpoint URL and the native token price.
This is what makes building cross-chain tools surprisingly approachable. Ethereum, Base, Polygon, Arbitrum, Optimism all use the same call, just a different URL.
const chains = [
{ name: "Ethereum", rpc: "https://eth.llamarpc.com" },
{ name: "Base", rpc: "https://base.llamarpc.com" },
{ name: "Polygon", rpc: "https://polygon.llamarpc.com" },
// ...
]
const fees = await Promise.allSettled(
chains.map(c => fetchGasPrice(c.rpc))
)
Promise.allSettledinstead ofPromise.all, so a single chain being down does not break the whole UI.
Wrapping up
Blockchain is not magic. It is a distributed system with an HTTP interface. If you know how to call an API, you already know most of what you need to start exploring Web3.
The tracker is live at gasfee.oeduardoal.dev. Questions? Drop a comment, happy to go deeper on any of this.
Top comments (0)