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_blockNumberon 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, 10eth_getBlockTransactionCountByNumberfor the last 10 of those, and 10eth_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.
| 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.
| 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.
| 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.
| 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
- xOne team measurement, 2026-11-14 19:20 UTC (read-only, one sample; no public file)
- XDCIndia/reth (private): releases v2.9.0-xdc.1 to v2.9.0-xdc.5
- reth.rs: storage, pruning, system requirements
- Reth 2.0 announcement, 2026-04-08
- Reth v2.0.0 release
- xOne sync modes, xOne storage layout, xOne RPC surface, xOne vs geth-XDC
This article describes the source and evidence at its review date. Check the linked repository for current implementation and qualification status.
Explore the engineering evidenceEdit this page on GitHub opens the Markdown source (content/blog/xone-vs-reth-xdc/index.md). GitHub may ask you to sign in. Report a correction opens a prefilled GitHub issue for this page.