Popular starting points

Loading the full XDC search index…

Developer hubBuild · PageFrom your first contract to your next application.Wallets & custodyDiscover · PageUnderstand the network. Find your place in it.Get XDCDiscover · PageUnderstand the network. Find your place in it.Run a nodeBuild · PageFrom your first contract to your next application.Ecosystem applicationsDiscover · PageUnderstand the network. Find your place in it.Post-quantum initiativeResearch · PageA clear view of the engineering ahead.
↑ ↓ to selectEnter to openEsc to close
Browse all resources →

ENGINEERING / XDC INNOVATION LABS

XDC client comparison reference

Read the Labs comparison methodology and historical measurements, then optionally run a limited RPC check. Endpoint responses do not establish consensus parity.

MANUAL / READ-ONLY RPC

Compare endpoint responses.

Runs in your browser

Check chain IDs, current block heights and gas-price suggestions. Preset names come from the source page; this tool does not identify the software behind an endpoint.

RPC endpoints and request settings

Use public HTTPS endpoints without credentials or API keys. Requests go directly to the chosen servers, which can see your IP address. Endpoints are included in exported reports. No wallet connection, signing or chain writes are used.

Ready. No requests have been sent.

Source endpoint presets · reviewed 22 October 2026
Live · runs JSON-RPC in your browser

Three XDC clients, side by side

Live RPC, snapshot-size and consensus-parity results across three independent XDC clients: the legacy XDPoSChain client (rpc.xinfin.network · v2.6.8, a 2018 Geth ~1.8.3 fork), the modern re-baseline (new.xdcrpc.com · Geth v1.17.3-stable), and the Erigon client (02.xdcrpc.com/erigonrpc · Erigon 3.x). Calls run from your browser, latency is measured per-method, parity is checked against expected values. Verified bit-exact, in-sync at block #103.4M (2026-06-03).

At a glance · static · measured May 2026 · production XDC mainnet node (block ~103.3M)
3×smaller DB919 GB → 303 GB full node
19×live state~430 GB → ~22 GB (PBSS)
~15×faster sync5–8 days → ~6–10 h (snap)
10–15×RPC latencycold-cache eth_getBalance
0resync ritualsonline PBSS prune — never resync
Step 1 · Endpoints

Point the test runner at three RPC nodes

Defaults below run against XDC mainnet public RPC for the legacy client, the modern v1.17.3 re-baseline (branch reset/integration-1.17.3) and the 02.xdcrpc.com/erigonrpc Erigon node. Swap any of them for an internal or test endpoint. Your inputs are saved locally to localStorage only — nothing leaves the browser.

https://rpc.xinfin.network
https://new.xdcrpc.com/
https://02.xdcrpc.com/erigonrpc
WS: —
WS: —
WS: —
Transport mode
Status: idle · last run —
i

About these calls

Each method is invoked over HTTPS POST as a JSON-RPC 2.0 request directly from your browser. Latency is wall-clock time measured with performance.now(). Parity status is computed against a known-good expected value (chain ID, base fee) or by cross-comparing the endpoints against the modern node (genesis hash, block hash, state root, balance). The legacy and modern defaults (rpc.xinfin.network, new.xdcrpc.com) return access-control-allow-origin: * via Cloudflare, so calls succeed from any origin — including file://. If a column reports a network error on every row, the most likely cause is missing CORS headers on that endpoint — enable them at the edge (Cloudflare response-header rule adding access-control-allow-origin: *) or on the node itself (--http.corsdomain "*", and for Erigon --rpc.accessList / a CORS-enabled reverse proxy).

⚡ Erigon CORS error? Fix it in 60 seconds ›

If every Erigon row shows a network error, the endpoint at 02.xdcrpc.com/erigonrpc is missing Access-Control-Allow-Origin headers. Two fixes — choose the one that matches your setup:

Option A — Cloudflare response-header rule
Set: Access-Control-Allow-Origin → * (Cloudflare Dashboard → Rules → Transform Rules → Response Headers)
Option B — Erigon node flag (if you control the node)
--http.corsdomain "*"
Step 2 · Live JSON-RPC

Side-by-side, measured in real time

Identical request payloads against all three endpoints, cross-checked against the modern node. Status column: PASS matches expected, FAIL diverges, DIFF intentional (e.g. client version), N/A unsupported on that client.

Legacy · ~Geth 1.8.3

https://rpc.xinfin.network
idle
Avg latency: — ms Pass: — / —

Modern · Geth v1.17.3

https://new.xdcrpc.com/
idle
Avg latency: — ms Pass: — / —

Erigon · 3.x

https://02.xdcrpc.com/erigonrpc
idle
Avg latency: — ms Pass: — / —
— / —
Methods in parity
—
Block-height delta
— ms
Avg latency (modern)
— ms
Avg latency (Erigon)
— ms
Avg latency (legacy)
Snapshot & database size

Where the bytes live — legacy hash scheme vs PBSS

Measured on XDC mainnet production nodes synced to head (~block 103.3M, syncing=false, 24 peers, May 2026). Both nodes are full nodes serving identical JSON-RPC; only the underlying storage engine differs.

Legacy XDPoSChain v2.6.8 hash scheme · LevelDB

919 GB& growing
Ancients (freezer .ldb files)~415 GB
45% · compressible · cold
Live state trie (hash-keyed)~430 GB
47% · UNBOUNDED · no online prune
Receipts / logs / misc~74 GB
8%

Growth rate ~14 GB / week. The trie keeps every historical node it ever wrote; the only way to reclaim space is to stop the node and resync.

Modern Geth v1.17.3 fork PBSS · Pebble

303 GBstable, online-pruned
Ancients (freezer .ranges)281 GB
93% · era-file offloadable
Live state (PBSS, path-keyed)~22 GB
7% · BOUNDED · self-pruning
Snapshot layer (flat)~5 GB
2% · O(1) reads

Live-state portion stays flat at ~22 GB. No resync ritual. Snap-sync brings a fresh node from genesis to head in hours rather than days.

Disk subsystemLegacy (1.8.3)Modern (1.17.3)ΔMechanism
Full-node total919 GB303 GB−3.0×PBSS + Pebble + era-file ancients
Live state trie~430 GB & rising~22 GB stable−19×Path-based keys + online pruning
Ancients / freezer~415 GB281 GB−32%Better range encoding, snappy
Initial sync (fresh disk)~5–8 days (full)~6–10 h (snap)~15×Snap sync + range proofs + healing
Resync to reclaim spaceRequired every ~2 moNever (online prune)eliminatedPBSS state-history window
Archive node~2.5 TB · slow reads~1.6 TB · O(1) reads−36% + fasterPBSS archive + flat snapshot
Cold-cache RPC read (eth_getBalance)~40–120 ms~3–8 ms~10–15×Snapshot flat-layer lookup
Memory footprint (steady state)~8–16 GB~3–6 GB−2× to −3×Pebble cache + bounded PBSS

Snapshot taken on a single production node; absolute numbers vary with peer churn, indexing config and freezer cutoff. Ratios are the engineering-stable claim.

Step 3 · Expected results

What each test should return, and why

For every JSON-RPC method below the comparison is well-defined. Where the legacy client can't answer (method added after 2018), the row is N/A. Where the response is supposed to differ between clients (e.g. client version string), the row is DIFF. Everything else must be PASS — the chain is the same chain.

JSON-RPC methodLegacy (XDPoSChain v2.6.8)Modern (Geth v1.17.3)Rule · not yet run
eth_chainId0x32 (50) ✓0x32 (50) ✓PASS · const match
net_version"50" ✓"50" ✓PASS · const match
eth_blockNumber#103,427,225#103,427,225PASS · Δ = 0 blocks
eth_getBlockByNumber(0x0)0x4a9d…d6b10x4a9d…d6b1PASS · genesis bit-exact
eth_getBlockByNumber(0x1)hash 0x2c48…ad4f
stateRoot 0x49be…55ae
hash 0x2c48…ad4f
stateRoot 0x49be…55ae
PASS · cross-chain bit-exact
eth_getBalance(0x…0088)0x877f0a6e8dd7273ab6800000x877f0a6e8dd7273ab680000PASS · state parity
eth_feeHistorybaseFee 0x2e90edd00 (12.5 gwei)baseFee 0x2e90edd00 (12.5 gwei)PASS · XDC fixed base fee
net_peerCount31 peers29 peersPASS · both healthy
eth_syncingfalsefalsePASS · both at head
net_listeningtruetruePASS
txpool_status{pending,queued}{pending,queued}PASS · shape parity
web3_clientVersionXDC/v2.6.8-stable/linux-amd64/go1.23.12Geth/v1.17.3-stable-02ebae0d/linux-amd64/go1.24.0DIFF · intentional
eth_gasPrice~13.75 gwei (suggested, dynamic)~15.00 gwei (suggested, dynamic)DIFF · oracle estimate
eth_protocolVersion0x64 (XDPoS proto 100)deprecated in 1.17DIFF · expected
eth_getProofN/A · -32601Merkle proof returnedMODERN · EIP-1186
debug_dbAncientsN/A · -32601103,318,253 (freezer cutoff)MODERN · freezer/era-files
✓

Real-world verdict (not yet run)

Both endpoints are in perfect sync at block #103,427,225. Every consensus-touching field — genesis hash, block-1 hash, block-1 stateRoot, system-contract balance, base fee — is bit-identical. The modern node additionally serves eth_getProof and debug_dbAncients (the freezer-cutoff sentinel exposes that 103.3M of 103.4M blocks live in flat ancient files, leaving only the recent tail in the bounded PBSS live state).

Consensus-parity gate

Bit-exact, fork-aware, harness-enforced

Live RPC parity is the visible surface; the migration's release gate is bit-exact agreement on the consensus-critical bytes for every block on both networks. The harness replays mainnet blocks through both clients and asserts the three roots match — across normal blocks and every fork-activation boundary.

TestRangeAssertionLatest run
State root parityblocks 1 → headstateRoot ≡ canonical103,288,114 / 103,288,114 PASS
Receipts root parityblocks 1 → headreceiptsRoot ≡ canonical103,288,114 / 103,288,114 PASS
Block hash parityblocks 1 → headhash ≡ canonical103,288,114 / 103,288,114 PASS
XDPoS v1 → v2 switchepoch boundaryconsensus rule swap, hashes preservedPASS
Berlin / London / Shanghai forksactivation blocksEIP-2929 / 1559 / 3855 rules activePASS
Masternode rotationevery epochvalidator set ≡ canonicalPASS
TRC21 fee routing200 sample txsissuer pays gas, balances ≡200 / 200 PASS
Reward distribution (90/10)10 random epochsblock reward split ≡ canonical10 / 10 PASS
Genesis hashblock 00x645a…d9c0 (mainnet)PASS
✓

Zero consensus divergence on integration branch

Branch reset/integration-1.17.3 has replayed XDC mainnet to head with zero parity failures across all three roots. The modern binary serving the live endpoint above produces byte-identical blocks to the canonical XDPoSChain client.

Performance — measured

What changes when the storage engine actually catches up

RPC latency, sync time, archive footprint and memory — measured on production-shape hardware (8 vCPU / 32 GB / NVMe), serving the same canonical XDC mainnet.

RPC latency (cold cache)
eth_getBalance82 ms → 6 ms
eth_getStorageAt110 ms → 9 ms
eth_call (sload)95 ms → 7 ms
eth_getLogs (1k)3.4 s → 410 ms
~10–15× lower latency from PBSS flat snapshot
Sync (genesis → head, fresh NVMe)
Legacy (fast sync)~5–8 days
Modern (snap sync)~6–10 hours
Disk read amplification~22× → ~3×
Bandwidth (sync)~890 GB → ~260 GB
Range proofs eliminate per-node round-trips
Steady-state resources
Disk (full)919 GB → 303 GB
Disk (archive)~2.5 TB → ~1.6 TB
Memory8–16 GB → 3–6 GB
Resync ritualevery ~2 mo → never
PBSS + Pebble — modern engine, modern footprint

Complete source method reference

The source comparison defines these 18 read-only requests. The checker above intentionally reports a smaller connectivity sample. Method availability, latest-block differences and protected namespaces do not by themselves establish correctness or consensus parity.

Method / source labelParametersSource test classExpected value or compared field
web3_clientVersion[]diff
eth_chainId[]const0x32
net_version[]const50
net_peerCount[]nonzero
net_listening[]truthy
eth_syncing[]falsy
eth_blockNumber[]block
eth_gasPrice (suggested)[]diff
eth_protocolVersion[]diff
eth_getBlockByNumber(0x0) · genesis["0x0", false]genesis
eth_getBlockByNumber(0x1) · stateRoot["0x1", false]crosshash
eth_getBalance(0x…88)["0x0000000000000000000000000000000000000088", "latest"]cross
txpool_status[]shape
eth_feeHistory · baseFee 12.5 gwei["0x4", "latest", [25, 50, 75]]basefee
eth_getProof (EIP-1186)["0x0000000000000000000000000000000000000088", [], "latest"]modern_only
debug_dbAncients (freezer)[]modern_only
eth_getLogs(block 0x1, all topics)[{"fromBlock": "0x1", "toBlock": "0x1"}]logs_cross
eth_getTransactionByHash (block 50M tx)["0x1202fe3fe3b62a631f05d783df74b59f6176750d074560c8727cb4c8d3664339"]tx_cross

Interpretation and source limitations

The source row labelled stateRoot actually compares the block hash. Latest balances can refer to different blocks. A successful response is not an independent correctness proof. Debug methods are reference-only and are not required for the new public checker.

Source classificationMeaning
constCompare response with hardcoded source expected value.
diffExpected to vary by client or oracle; source labels DIFF.
nonzeroPositive peer count indicates endpoint peers, not chain security.
truthySource expects true.
falsySource expects false.
blockDisplay observed height; source marks PASS without chain agreement check.
genesisCompare with source hardcoded genesis hash.
crossCompare the selected field or serialized value with another endpoint.
shapeCheck only required response keys.
basefeeCompare first feeHistory base fee with source hardcoded value.
modern_onlyAny successful result is labeled PASS by source; no substantive validation.
logs_crossCompare entire JSON log arrays.
tx_crossCompare transaction hash, blockHash and from fields.
Original comparison configuration
{
  "legacy": "https://rpc.xinfin.network",
  "modern": "https://new.xdcrpc.com/",
  "erigon": "https://02.xdcrpc.com/erigonrpc",
  "mode": "http",
  "expected": {
    "chainIdHex": "0x32",
    "netVersion": "50",
    "baseFeeHex": "0x2e90edd00",
    "genesisHash": "0x4a9d748bd78a8d0385b67788c2435dcdb914f98a96250b68863a1f8b7642d6b1"
  },
  "sampleAddress": "0x0000000000000000000000000000000000000088",
  "qualification": "Source configuration only; no endpoint connection or current chain validation was performed."
}

About this source

Publisher: XDC Innovation Labs. Contact: pq@xdcindia.com. This source-specific contact is separate from the replacement website operator.

Original sourcegeth-compare.html ↗

Repository snapshot d2345a8 · Source content and historical measurements are attributed to XDC Innovation Labs. Links to independently operated services remain with their providers.