eth_syncing - Zora RPC Method
Check the sync status of your Zora node. Returns sync progress or false when fully synced — essential for node health monitoring and dApp reliability.
Returns the sync status of your Zora node — either false when fully synced, or an object describing the sync progress.
Why Zora? Build on the creator-first L2 powering $353M+ in NFT trading volume with 179K+ active creators with 0.000777 ETH minting fees, 50% creator royalty share, no-code NFT toolkit, and OP Stack Ethereum security.
When to Use This Method
eth_syncing is essential for NFT creators, digital artists, brands, and onchain media builders:
- Node Health Checks — Verify your node is fully synced before processing transactions
- Sync Progress Monitoring — Track how far behind your node is during initial sync or after downtime
- Load Balancer Routing — Route requests only to fully synced nodes in multi-node setups
- dApp Reliability — Display sync warnings to users when data may be stale
Code Examples
Common Use Cases
1. Node Health Monitor
Continuously check sync status and alert on issues:
async function monitorNodeHealth(provider, interval = 30000) {
setInterval(async () => {
const syncing = await provider.send('eth_syncing', []);
if (syncing === false) {
const blockNumber = await provider.getBlockNumber();
const block = await provider.getBlock(blockNumber);
const age = Date.now() / 1000 - block.timestamp;
if (age > 60) {
console.warn(`Node synced but block is ${age.toFixed(0)}s old`);
} else {
console.log(`Healthy — block ${blockNumber}`);
}
} else {
const current = parseInt(syncing.currentBlock, 16);
const highest = parseInt(syncing.highestBlock, 16);
console.warn(`Syncing: ${highest - current} blocks behind`);
}
}, interval);
}2. Wait for Sync Before Processing
Block application startup until the node is ready:
async function waitForSync(provider, pollInterval = 5000) {
while (true) {
const syncing = await provider.send('eth_syncing', []);
if (syncing === false) {
console.log('Node synced — ready to process transactions');
return;
}
const current = parseInt(syncing.currentBlock, 16);
const highest = parseInt(syncing.highestBlock, 16);
console.log(`Waiting for sync: ${highest - current} blocks remaining...`);
await new Promise(r => setTimeout(r, pollInterval));
}
}Error Handling
| Error Code | Description | Solution |
|---|---|---|
| -32603 | Internal error | Node may be starting up — retry after delay |
| -32005 | Rate limit exceeded | Reduce polling frequency |
Related Methods
eth_blockNumber— Get current block heightnet_peerCount— Check peer connectionsnet_listening— Verify node is accepting connectionsweb3_clientVersion— Get node client info