Zora - Creator Economy & NFT L2 Documentation
Complete guide to Zora L2 integration with Dwellir RPC. Build NFT marketplaces, creator tools, and onchain media platforms on Zora's OP Stack L2.
Zora RPC
With Dwellir, you get access to our global Zora network which always routes your API requests to the nearest available location, ensuring low latency and the fastest speeds.
Get your API keyWhy Build on Zora?
Zora is the leading Ethereum Layer 2 optimized for creators, NFTs, and onchain media. Built on Optimism's OP Stack, Zora offers the perfect infrastructure for the creator economy:
Creator-First Design
- 0.000777 ETH mint rewards - Get rewarded for onchain activity
- Gas-optimized NFT operations - Efficient minting, trading, and transfers
- Built-in creator tools - Native support for royalties and revenue sharing
Lightning Fast & Affordable
- 2-second block times - Near-instant NFT transactions
- Ultra-low fees - Mint NFTs for pennies, not dollars
- EIP-4844 enabled - Leveraging blob data for maximum cost efficiency
Battle-Tested Infrastructure
- OP Stack security - Inherits Ethereum's security guarantees
- 7777777 Chain ID - Lucky sevens for the creator economy
- Ethereum compatibility - Use existing tools and wallets
Thriving NFT Ecosystem
- Zora Protocol integration - Native NFT marketplace functionality
- Creator rewards system - Earn from every mint and interaction
- Major creator adoptions - Home to top artists and projects
Quick Start with Zora
Connect to Zora's creator-optimized infrastructure in seconds:
curl -sS -X POST https://api-zora-mainnet.n.dwellir.com/<API_Keys_Are_Not_Made_for_Bots> \ -H 'Content-Type: application/json' \ -d '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}'import { JsonRpcProvider } from 'ethers';const provider = new JsonRpcProvider( 'https://api-zora-mainnet.n.dwellir.com/<API_Keys_Are_Not_Made_for_Bots>');const latest = await provider.getBlockNumber();console.log('block', latest);import requestsurl = 'https://api-zora-mainnet.n.dwellir.com/<API_Keys_Are_Not_Made_for_Bots>'payload = { 'jsonrpc': '2.0', 'id': 1, 'method': 'eth_blockNumber', 'params': []}resp = requests.post(url, json=payload)print(resp.json())package mainimport ( "bytes" "fmt" "io" "net/http")func main() { url := "https://api-zora-mainnet.n.dwellir.com/<API_Keys_Are_Not_Made_for_Bots>" payload := []byte(`{"jsonrpc":"2.0","id":1,"method":"eth_blockNumber","params":[]}`) resp, err := http.Post(url, "application/json", bytes.NewBuffer(payload)) if err != nil { panic(err) } defer resp.Body.Close() body, _ := io.ReadAll(resp.Body) fmt.Println(string(body))}Installation & Setup
Network Information
| Parameter | Value | Details |
|---|---|---|
| Chain ID | 7777777 | Mainnet |
| Block Time | 2 seconds | Average |
| Gas Token | ETH | Native token |
| RPC Standard | Ethereum | JSON-RPC 2.0 |
API Reference
Zora supports the full Ethereum JSON-RPC API specification plus OP Stack L2 optimizations for creator applications.
Creator-Focused Integration Patterns
NFT Minting & Management
Efficiently mint and manage NFTs on Zora:
// Mint NFT with creator rewards
async function mintNFTWithRewards(contract, to, tokenURI) {
const tx = {
to: contract.address,
data: contract.interface.encodeFunctionData('mint', [to, tokenURI]),
// Zora rewards: 0.000777 ETH per mint
value: parseEther('0.000777')
};
const receipt = await provider.sendTransaction(tx);
// Check for creator reward distribution
const rewardEvents = receipt.logs.filter(log =>
log.topics[0] === creatorRewardEventSignature
);
return { receipt, rewards: rewardEvents };
}Real-time NFT Tracking
Monitor NFT transfers and marketplace activity:
// Watch for NFT transfers in real-time
const nftFilter = {
address: contractAddress,
topics: [
'0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef', // Transfer
null, // from (any)
null // to (any)
]
};
provider.on(nftFilter, (log) => {
const transfer = parseLog(log);
console.log(`NFT ${transfer.tokenId} transferred from ${transfer.from} to ${transfer.to}`);
});Creator Revenue Optimization
Track and optimize creator earnings:
// Calculate total creator rewards
async function getCreatorEarnings(creatorAddress, fromBlock = 0) {
const rewardFilter = {
address: ZORA_REWARDS_CONTRACT,
topics: [
'0x...', // RewardPaid event signature
ethers.utils.hexZeroPad(creatorAddress, 32)
]
};
const logs = await provider.getLogs({
...rewardFilter,
fromBlock,
toBlock: 'latest'
});
const totalRewards = logs.reduce((sum, log) => {
const reward = parseLog(log);
return sum.add(reward.amount);
}, BigNumber.from(0));
return totalRewards;
}Advanced NFT Querying
Query NFT metadata and ownership efficiently:
// Batch query NFT metadata
async function getNFTBatch(contractAddress, tokenIds) {
const contract = new Contract(contractAddress, erc721Abi, provider);
const batchSize = 50; // Zora recommended batch size
const results = [];
for (let i = 0; i < tokenIds.length; i += batchSize) {
const batch = tokenIds.slice(i, i + batchSize);
const promises = batch.map(async (tokenId) => ({
tokenId,
owner: await contract.ownerOf(tokenId),
tokenURI: await contract.tokenURI(tokenId),
}));
const batchResults = await Promise.all(promises);
results.push(...batchResults);
}
return results;
}Performance Best Practices for Creators
1. Optimize NFT Operations
Use efficient patterns for high-volume NFT operations:
// Batch mint for gas efficiency
async function batchMintNFTs(contract, recipients, tokenURIs) {
const batchData = recipients.map((to, i) =>
contract.interface.encodeFunctionData('mint', [to, tokenURIs[i]])
);
const multicallData = contract.interface.encodeFunctionData('multicall', [batchData]);
return await contract.multicall(batchData, {
value: parseEther((0.000777 * recipients.length).toString())
});
}2. Smart Caching for Metadata
Cache NFT metadata to improve user experience:
const metadataCache = new Map();
async function getCachedMetadata(tokenURI) {
if (!metadataCache.has(tokenURI)) {
const response = await fetch(tokenURI);
const metadata = await response.json();
metadataCache.set(tokenURI, metadata);
}
return metadataCache.get(tokenURI);
}3. Event-Driven Architecture
Build responsive creator tools with event listeners:
// Listen for all creator-relevant events
const eventFilters = [
{ topics: [transferEventSignature] }, // NFT transfers
{ topics: [mintEventSignature] }, // New mints
{ topics: [saleEventSignature] }, // Marketplace sales
{ topics: [rewardEventSignature] } // Creator rewards
];
eventFilters.forEach(filter => {
provider.on(filter, handleCreatorEvent);
});
function handleCreatorEvent(log) {
const eventType = identifyEventType(log);
switch(eventType) {
case 'TRANSFER':
updateOwnershipRecords(log);
break;
case 'MINT':
trackNewCreation(log);
break;
case 'SALE':
updateCreatorEarnings(log);
break;
case 'REWARD':
distributeMintRewards(log);
break;
}
}Troubleshooting Creator Applications
Error: "Insufficient mint reward"
Zora requires 0.000777 ETH for creator rewards on mints:
// Always include mint reward in NFT transactions
const mintTx = {
to: nftContract.address,
data: mintData,
value: parseEther('0.000777'), // Required for Zora rewards
gasLimit: 100000n
};Error: "Token does not exist"
Handle NFT queries gracefully for better UX:
async function safeGetTokenURI(contract, tokenId) {
try {
return await contract.tokenURI(tokenId);
} catch (error) {
if (error.reason === 'ERC721: invalid token ID') {
return null; // Token doesn't exist yet
}
throw error; // Re-throw other errors
}
}Error: "Rate limit exceeded"
Implement retry logic for high-volume creator applications:
async function mintWithRetry(contract, params, maxRetries = 3) {
for (let i = 0; i < maxRetries; i++) {
try {
return await contract.mint(...params);
} catch (error) {
if (error.code === 429 && i < maxRetries - 1) {
const delay = Math.min(2 ** i * 1000, 10000); // Cap at 10s
await new Promise(r => setTimeout(r, delay));
} else {
throw error;
}
}
}
}Migration Guide
From Ethereum Mainnet
Moving NFT projects from L1 to Zora L2:
// Before (Ethereum L1)
const provider = new JsonRpcProvider('https://eth-rpc.example.com');
// After (Zora L2)
const provider = new JsonRpcProvider(
'https://api-zora-mainnet.n.dwellir.com/YOUR_API_KEY'
);
// Same NFT standards (ERC-721, ERC-1155)
// Same tooling and libraries work
// Dramatically lower fees
// Note: Different chain ID (7777777)
// Note: Creator rewards system (0.000777 ETH)
// Note: L1 data fees applyFrom Polygon
Zora offers better creator economics than Polygon:
// Enhanced creator benefits on Zora:
// - Built-in mint rewards (0.000777 ETH per mint)
// - Lower gas fees than Polygon
// - Native creator tools and royalty enforcement
// - Better Ethereum ecosystem integrationCreator Tools & Resources
Official Resources
Creator Tools
- Zora Create - Easy NFT minting
- Creator Toolkit - Smart contract templates
Developer Resources
Need Help?
- Email: support@dwellir.com
- Docs: You're here!
- Dashboard: dashboard.dwellir.com
Start building the future of the creator economy on Zora with Dwellir's enterprise-grade RPC infrastructure. Get your API key
eth_coinbase
Check the legacy eth_coinbase compatibility method on zkSync Era. Public endpoints may return an address, `unimplemented`, or another unsupported-method response depending on the client.
eth_blockNumber
Get the current block height on Zora. Essential for syncing dApps, monitoring transaction confirmations, and blockchain state tracking.

