Zora RPC: Building on the Creator L2
Zora Network is the Layer 2 built for onchain media — NFTs, mints, and creator monetization. It's an OP Stack rollup on the Optimism Superchain, chain ID 7777777, and if you've worked with any EVM chain, connecting is trivial: it speaks standard eth_* JSON-RPC, uses ETH for gas, and viem/ethers/web3.py connect unchanged. What's worth knowing is what kind of traffic Zora carries — because a mint-heavy chain shapes how you build and, especially, how you index. Here's the map.
The essentials
Zora mainnet is chain ID 7777777, an OP Stack optimistic rollup that launched June 2023, with ~2-second blocks and ETH as the gas token. It's EVM-equivalent — standard Ethereum bytecode runs as-is — so your Solidity contracts, ABIs, and tooling work without changes:
import { createPublicClient, http } from "viem";
import { zora } from "viem/chains";
const client = createPublicClient({
chain: zora, // chain ID 7777777
transport: http("https://rpc.swiftnodes.io/rpc/zora?key=YOUR_API_KEY"),
});
await client.getBlockNumber(); // just works
The OP Stack basics (shared with the Superchain)
Zora is built on the same OP Stack as Optimism, Base, and Unichain, so the rollup mechanics are identical to what we covered in the Unichain spotlight:
- A sequencer orders transactions (no public gossiped mempool → little third-party front-running; you trust the sequencer's ordering).
- Gas has two parts — L2 execution gas plus an L1 data fee for posting your transaction's data to Ethereum.
eth_estimateGascovers the L2 part; read the OP gas-price oracle for the L1 component if you need exact costs. - Finality is fast-soft, slow-hard: ~2-second soft confirmation, but withdrawals to Ethereum L1 pass through the standard ~7-day optimistic challenge window (see Soft vs Hard Finality).
So for the plumbing, treat Zora exactly like any OP Stack L2. The interesting part is the workload.
What makes Zora different: it's a mint machine
Zora's reason to exist is onchain media — creators deploy contracts and mint editions; collectors mint them; the protocol distributes mint rewards to creators, referrers, and the protocol. In practice that means Zora's transaction mix is dominated by:
- ERC-721 and ERC-1155 mints — high volume, often in bursts around a popular drop.
- Contract deployments — every creator's collection is a new contract.
- Protocol reward flows — value routed to creators on each mint.
For a developer, the implication isn't a new API — it's that the events you care about are token Transfers and mint logs, at volume. That changes your indexing strategy more than your write path.
Indexing a mint-heavy chain
If you're building anything that watches Zora — a gallery, a creator dashboard, a collection indexer — you'll live in eth_getLogs, and the mint-burst pattern matters:
- Filter by event signature, not just address. A mint is an ERC-721
Transfer(from=0x0, to, tokenId)or an ERC-1155TransferSingle/TransferBatch. Filter ontopics[0](the event hash) withfrom = 0x0to isolate mints from ordinary transfers. - Respect
eth_getLogsrange caps. Popular drops produce dense blocks with many logs; a wide block range can exceed the provider's log/range limits. Page your queries by block range and handle the caps (see How eth_getLogs Range Caps Bite You). - Key on log identity, not just block number. Sequencer-ordered soft blocks can reorder before they settle, so index defensively — key on
(txHash, logIndex)and confirm against thefinalizedtag rather than trusting a soft block (the reorg-handling patterns apply here too). - Stream new mints over WebSocket. For live drops, subscribe to
logsoverwss://instead of tight polling — at ~2s blocks and burst traffic, polling lags fast.
// Stream ERC-721 mints (Transfer from the zero address) live
const ws = new WebSocket("wss://rpc.swiftnodes.io/ws/zora?key=YOUR_API_KEY");
ws.onopen = () => ws.send(JSON.stringify({
jsonrpc: "2.0", id: 1, method: "eth_subscribe",
params: ["logs", {
topics: [
"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef", // Transfer(address,address,uint256)
"0x0000000000000000000000000000000000000000000000000000000000000000", // from = 0x0 (mint)
],
}],
}));
What carries over unchanged
Treat Zora as standard EVM for everything else:
eth_call,eth_getBalance,eth_getLogs,eth_getTransactionReceipt,eth_estimateGas,eth_sendRawTransactionall behave normally.- Solidity contracts, ABIs, events, and tooling deploy and run without changes.
- ETH is the gas token — no exotic fee handling.
- WebSocket subscriptions (
eth_subscribe) fornewHeadsandlogswork.
The rule of thumb: build on Zora as you would on Ethereum via eth_*, mind the OP Stack L1 data fee and challenge window like any rollup, and — because it's a creator/mint chain — design your indexing for high-volume Transfer/mint events rather than expecting DeFi-style traffic.
The short version
Zora (chain ID 7777777) is an OP Stack L2 for creators, NFTs, and onchain media — EVM-equivalent, ETH gas, ~2-second blocks, so viem/ethers work unchanged and the rollup mechanics match Base/Optimism/Unichain (sequencer ordering, L1 data fee, ~7-day withdrawal challenge window). What's distinct is the workload: Zora is mint-heavy, so the real design consideration is indexing — filter for ERC-721/1155 mint logs, respect eth_getLogs range caps during drop bursts, key on log identity for reorg safety, and stream new mints over WebSocket.
Indexing a mint-heavy chain needs an endpoint that serves eth_getLogs and WebSocket subscriptions reliably under burst load. A flat-rate Zora RPC endpoint gives you both across dozens of chains under one key. Grab a free key and point your app at:
https://rpc.swiftnodes.io/rpc/zora?key=YOUR_API_KEY
Related posts
- Unichain RPC: Uniswap's L2 for Developers
Unichain is Uniswap's own L2 — an OP Stack rollup on the Optimism Superchain, purpose-built for DeFi with ~1s blocks. It speaks standard eth_* JSON-RPC, so viem and ethers just work. Here's the chain ID, what carries over from Ethereum, and the Superchain and finality details that actually matter.
- Celestia RPC: Talking to a Modular Data Availability Layer
Celestia isn't an execution chain — it's a modular data availability layer, so its RPC works nothing like Ethereum's. No eth_*, no smart contracts. Here's what Celestia actually does, the CometBFT RPC you connect to, how blobs and data availability sampling work, and where the celestia-node API fits in.
- Kaia RPC: The Merged Klaytn + Finschia Chain, for Developers
Kaia is the EVM Layer 1 formed by merging Klaytn and Finschia — chain ID 8217, ~1s blocks, immediate finality, and a huge Asian user base via LINE and Kakao. It speaks standard eth_* RPC, so viem and ethers just work. Here's what carries over and the Klaytn-heritage features worth knowing.