eth_syncing - Viction RPC Method
Check the sync status of your Viction node. Returns sync progress or false when fully synced — essential for node health monitoring and dApp reliability.
Returns the sync status of your Viction node — either false when fully synced, or an object describing the sync progress.
Why Viction? Build on the zero-gas L1 blockchain making Web3 accessible with 150 masternodes and VRC25 gasless tokens with zero-gas transactions via TomoZ, VRC25 gasless token standard, 150 masternodes, and partnerships with LayerZero and MoonPay.
When to Use This Method
eth_syncing is essential for consumer dApp developers, teams requiring gasless UX, and builders targeting mainstream adoption:
- 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