In one sample, the reth-xdc nodes on net2040 were at the reference head, as were the xOne nodes except two xOnePy nodes, which were 2 blocks behind. In each same-mode pair on net2040, the reth-xdc datadir was smaller than the xOne datadir, and the reth-xdc resident memory was larger. On Apothem, reth-xdc full was at the head and reth-xdc minimal was 48,795 blocks behind. Block hash, roots, number, miner, gas used and timestamp were equal for every node. Only the JSON shape differs.

Measured read-only on 2026-11-14 at 19:20 UTC by the xOne team on its own follower nodes; one sample, not a time series.

reth-xdc is the Reth-based XDC client of the XDCIndia organisation. Its repository, XDCIndia/reth, is private. This post is a neutral comparison of two XDCIndia clients. The xOne side has four clients, and three of them (xOneTS, xOnePy, xOneC) are in private repositories. The earlier comparison with the reference client is in xOne vs geth-XDC.

How was this measured?

Each node got one read-only probe. The method is the same for every node.

  • Head: eth_blockNumber on each node. Lag is the reference head minus the node head at the same second. The reference is a geth-XDC node of the same network: full sync on net2040, snap sync on Apothem. The reference heads were 841,381 on net2040 and 85,385,427 on Apothem. A lag of -1 means the node was one block above the reference.
  • Datadir: du -sx --block-size=1 <datadir>.
  • Memory: VmRSS of the main process, read from /proc. RssAnon is heap. RssFile is mapped files; an MDBX or RocksDB map counts as RssFile. xOnePy runs extra worker processes, and they are not counted. "Not read" means the probe did not read the value.
  • RPC: 50 calls to the node and to the reference: 30 eth_getBlockByNumber(n,false) for n = node head-130 to head-101, 10 eth_getBlockTransactionCountByNumber for the last 10 of those, and 10 eth_getBlockByHash(hash,false) for the first 10 hashes. The compare is on the whole JSON after lower-casing strings. The core fields are hash, parentHash, stateRoot, receiptsRoot, transactionsRoot, number, miner, gasUsed and timestamp.

The mode of each node is in its name. Sync modes says what full, snap, fast and minimal keep in xOne.

How do reth-xdc and xOne compare on net2040?

On net2040, every node was at the reference head except the two xOnePy nodes, which were 2 blocks behind. The reth-xdc datadirs were smaller than the xOne datadirs of the same mode. The reth-xdc memory was larger.

REFERENCE TABLEScroll to explore all columns →
Node Head Lag Datadir bytes (GB) VmRSS kB RssAnon kB RssFile kB
Archive
reth-xdc archive 841,381 0 12,054,102,016 (12.05) 2,813,476 2,704,980 108,608
xOneRS archive 841,381 0 22,784,475,136 (22.78) 198,324 88,216 108,164
xOneC archive 841,381 0 22,218,342,400 (22.22) 123,472 not read not read
Full
reth-xdc full 841,381 0 8,032,956,416 (8.03) 1,589,844 not read not read
xOneRS full 841,381 0 20,637,130,752 (20.64) 85,948 65,116 16,492
xOneRS full (second node) 841,381 0 20,703,092,736 (20.70) 601,132 not read not read
xOneTS full 841,381 0 19,564,638,208 (19.56) 298,696 277,000 24,864
xOneC full 841,381 0 17,990,488,064 (17.99) 106,064 58,476 46,888
geth-XDC full (reference) 841,381 0 62,813,556,736 (62.81) 1,132,832 not read not read
Snap, fast and minimal (xOne only)
xOneRS fast 841,381 0 147,234,816 (0.15) 211,284 not read not read
xOneRS minimal 841,381 0 147,230,720 (0.15) 228,564 not read not read
xOnePy snap 841,379 2 94,523,392 (0.09) 83,408 not read not read
xOnePy minimal 841,379 2 94,642,176 (0.09) 107,900 not read not read
xOneC snap 841,381 0 142,987,264 (0.14) 79,628 not read not read
xOneC minimal 841,381 0 142,864,384 (0.14) 74,312 not read not read

Source: xOne team measurement, 2026-11-14 19:20 UTC.

Where both nodes have RssAnon, the archive pair gives 2,704,980 kB for reth-xdc and 88,216 kB for xOneRS. For the full pair, RssAnon was read on xOne only, so VmRSS is the only value to compare. The two xOneRS full nodes show 85,948 kB and 601,132 kB. This sample does not explain the gap.

The sample does not break down what each datadir holds. The reth-xdc rows have no xOne snap or minimal counterpart on net2040, because no reth-xdc node of those modes was measured there. The small xOne datadirs are nodes that keep a window, not full history (sync modes).

How do reth-xdc and xOne compare on Apothem?

On Apothem there is no same-mode pair. The reth-xdc nodes are full and minimal. The xOne nodes are snap. reth-xdc full and the four xOne snap nodes were within one block of the reference head. reth-xdc minimal was behind.

REFERENCE TABLEScroll to explore all columns →
Node Head Lag Datadir bytes (GB) VmRSS kB RssAnon kB RssFile kB
geth-XDC snap (reference) 85,385,427 0 154,131,304,448 (154.13) 6,260,996 6,244,324 33,232
reth-xdc full 85,385,427 0 161,616,035,840 (161.62) 7,590,572 2,874,252 4,762,400
reth-xdc minimal 85,336,632 48,795 123,635,679,232 (123.64) 5,680,992 5,544,336 141,028
xOneRS snap 85,385,428 -1 75,107,868,672 (75.11) 519,008 489,112 33,192
xOnePy snap 85,385,428 -1 31,119,683,584 (31.12) 179,856 166,264 14,236
xOneC snap 85,385,428 -1 51,045,007,360 (51.05) 10,107,556 349,504 9,793,144

Source: xOne team measurement, 2026-11-14 19:20 UTC.

The xOneC row has a VmRSS of 10,107,556 kB, of which 9,793,144 kB is RssFile and 349,504 kB is RssAnon. Use RssAnon for heap: 2,874,252 kB for reth-xdc full against 166,264 to 489,112 kB for the xOne snap nodes that were read. The modes differ, so this is not a like-for-like ratio.

The reth-xdc minimal node was 48,795 blocks behind at the sample. This is one sample. It does not show whether the node was catching up, and its datadir size is for a node that was not at the head.

Do the RPC answers differ?

Not in the core fields. The block hash, roots, number, miner, gas used and timestamp were equal on all 40 block objects of every node that answered. The differences are in the JSON shape: which keys are present.

REFERENCE TABLEScroll to explore all columns →
Network Node Whole JSON equal, of 50 Core fields equal Keys that differ
net2040 reth-xdc archive 18 40/40 size value differs on 32 calls; withdrawals absent on 32 calls
net2040 reth-xdc full 10 40/40 size value differs on 40 calls; withdrawals absent on 40 calls
net2040 every xOne node that answered 50 40/40 none
Apothem reth-xdc full 50 40/40 none
Apothem reth-xdc minimal 50 40/40 none
Apothem xOneRS, xOnePy, xOneC snap 50 each 40/40 none

The reference geth-XDC response on net2040 has a withdrawals key. The reth-xdc response on net2040 has no such key. Its size value differs from the reference. On Apothem the sample found no difference.

For the xOne methods and their coverage, see the RPC surface.

What do reth.rs and the reth-xdc releases say?

reth-xdc releases v2.9.0-xdc.1 to v2.9.0-xdc.5 exist in the private repository XDCIndia/reth. Published notes list the five releases and signer keystore flags. This post makes no claim about what each release changed.

Upstream reth publishes its own storage and pruning guidance. These claims are for Ethereum and Reth, not for XDC. Do not read them against the XDC measurements above.

REFERENCE TABLEScroll to explore all columns →
Topic Upstream reth, as stated Source
Default mode Archive is the default mode. Disk at block 24,396,823, archive, storage v2: 2.31 TB. reth.rs storage, pruning
Storage v2 MDBX holds hashed state only. Changesets are in static files. Indices are in RocksDB. --datadir.static-files puts static files on a separate drive. reth.rs storage, Reth 2.0 post, 2026-04-08
Pruning --full, --minimal and --prune.*; a table lists RPC availability per pruned segment. reth.rs pruning
Hardware Eth full at least 1.2 TB, archive at least 2.8 TB, 16 GB RAM, TLC NVMe. reth.rs system requirements, dated 2025-06-23
Sync Headers and bodies download in about 1 to 3 hours. Execution is single-threaded. reth.rs system requirements
RPC Reth 2.0 adds debug_intermediateRoots, debug_traceBadBlock and eth_getStorageValues. v2.0.0 release

The measurement records the label of each reth-xdc node (archive, full, minimal), not its flags. For xOne storage, see how xOne stores chain data.

What does this sample not show?

It shows one second on one day. It does not show these things.

  • A time series. Heads, lag, datadir size and memory change over time.
  • Throughput under load. The RPC sample is 50 calls on 40 recent blocks. It measures shape, not speed.
  • Same-mode pairs on Apothem. The two clients have no node of the same mode there.

Correction

On 2026-11-15 we removed an Apothem row that was labelled "xOneRS snap (second node)". That node reports the version xOne/v1.1.0/linux-amd64/go1.25.0: it runs xOneGo, the earlier Go line, not xOneRS. The other rows are unchanged.

Frequently asked questions

Does reth-xdc use less disk than xOne on net2040?

In this sample, yes for each same-mode pair. The reth-xdc archive datadir was 12.05 GB against 22.78 GB (xOneRS) and 22.22 GB (xOneC). The reth-xdc full datadir was 8.03 GB against 17.99 to 20.70 GB for the xOne full nodes.

Does reth-xdc use more memory than xOne?

On net2040, in this sample, yes. The reth-xdc archive node had a RssAnon of 2,704,980 kB and xOneRS archive had 88,216 kB. On Apothem the modes differ, so no like-for-like ratio exists.

Do reth-xdc and xOne return the same blocks?

The core fields were equal on all 40 block objects of every node. On net2040, reth-xdc omits withdrawals and reports a different size. Every xOne node that answered matched the reference in the whole JSON on 50 of 50 calls.

Was reth-xdc at the head on Apothem?

reth-xdc full was at the reference head. reth-xdc minimal was 48,795 blocks behind in this one sample.

Is the reth-xdc source public?

No. The repository XDCIndia/reth is private. The xOneTS, xOnePy and xOneC repositories are private as well.

Sources