On 2026-11-15 at 01:50 UTC, every node in this sample was at the reference head or within 2 blocks of it, except one reth-xdc node on Apothem. All four xOne clients answered the RPC sample with whole JSON equal to the reference, 50 of 50. The core fields were equal on every node. The differences on other clients are in the JSON shape only.

Measured read-only on 2026-11-15 at 01:50 UTC by the xOne team on its own follower nodes; one sample, not a time series. Source: xOne team measurement, 2026-11-15 01:50 UTC (read-only; there is no file link). This post also corrects a row of the 2026-11-14 measurement. See the correction below.

How did we measure?

The method is the same as in the 2026-11-14 posts. We called eth_blockNumber on each node. Head lag is the reference head minus the node head, read at the same second. The reference is a geth-XDC node of the same network.

  • Reference heads: net2040 846,739. Apothem 85,396,805. The net2040 reference runs full sync. The Apothem reference runs snap sync.
  • Datadir: du -sx --block-size=1 of the datadir.
  • Memory: VmRSS of the main process, from /proc. VmRSS includes mapped files, such as an MDBX or RocksDB map. xOnePy runs extra worker processes that we did not count.
  • RPC sample: 50 calls per node, made against the node and the reference. They were 30 eth_getBlockByNumber(n,false) for n = 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. We compared the whole JSON after we lowercased strings.
  • Core fields: hash, parentHash, stateRoot, receiptsRoot, transactionsRoot, number, miner, gasUsed and timestamp. "40/40" means the core fields were equal in all 40 block objects of the sample.

In the tables, a - before a key means the node does not return that key. A + means the node adds a key. A ~ means the key is present and its value differs from the reference. The number in brackets counts the calls that showed the difference.

What did the net2040 nodes show?

On net2040, 20 of 22 nodes were at the reference head, and two nodes were 2 blocks behind. The sync or pruning mode of each node is in its name. Compare a node only with nodes of the same mode.

REFERENCE TABLEScroll to explore all columns →
Node Head Lag Datadir bytes (GB) VmRSS kB RPC whole-JSON equal Core fields Differing keys (count of calls) Version (xOne nodes)
geth-XDC full (reference) 846,739 0 62,825,099,264 (62.83) 1,143,200 reference - - -
xOneRS full 846,739 0 20,647,587,840 (20.65) 277,104 50 of 50 40/40 none xOne/v0.1.0-fc9a8e9e-13112026 (Rust, pre-rename stamp)
xOneRS archive 846,739 0 22,794,932,224 (22.79) 592,888 50 of 50 40/40 none xOneRS/v0.1.0-fa3edb8e-14112026
xOneRS full (second node) 846,739 0 20,713,545,728 (20.71) 642,028 50 of 50 40/40 none xOne/v0.1.0-8fe27572-12112026 (Rust, pre-rename stamp)
xOneRS fast 846,739 0 157,687,808 (0.16) 209,856 50 of 50 40/40 none xOne/v0.1.0-8fe27572-12112026
xOneRS minimal 846,739 0 157,683,712 (0.16) 228,256 50 of 50 40/40 none xOne/v0.1.0-8fe27572-12112026
xOneTS full 846,739 0 19,576,348,672 (19.58) 327,716 50 of 50 40/40 none xOneTS/v0.1.0-dfdb1d62-13112026
xOnePy snap 846,737 2 105,467,904 (0.11) 129,636 50 of 50 40/40 none xOnePy/v0.1.1-93656365-14112026
xOnePy minimal 846,739 0 105,508,864 (0.11) 130,904 50 of 50 40/40 none xOnePy/v0.1.1-93656365-14112026
xOneC full 846,739 0 18,000,916,480 (18.00) 243,284 50 of 50 40/40 none xOneC/v0.1.0-706c5f75-14112026
xOneC archive 846,739 0 22,228,770,816 (22.23) 695,552 50 of 50 40/40 none xOneC/v0.1.0-706c5f75-14112026
xOneC snap 846,739 0 153,411,584 (0.15) 100,020 50 of 50 40/40 none xOneC/v0.1.0-706c5f75-14112026
xOneC minimal 846,739 0 153,292,800 (0.15) 93,168 50 of 50 40/40 none xOneC/v0.1.0-706c5f75-14112026
reth-xdc archive 846,739 0 12,064,657,408 (12.06) 2,872,320 19 of 50 40/40 -withdrawals (31), ~size (31) -
besu-xdc full (Bonsai) 846,739 0 10,852,577,280 (10.85) 865,044 10 of 50 40/40 -validator (40), -validators (40), +totalDifficulty (40), -penalties (40) -
nethermind-xdc A (memory pruning) 846,739 0 7,397,142,528 (7.40) 911,640 10 of 50 40/40 -blockAccessListHash (40), -validator (40), -parentBeaconBlockRoot (40), ~size (40), -validators (40), +totalDifficulty (40), -excessBlobGas (40), -penalties (40) -
nethermind-xdc B (memory pruning) 846,739 0 7,359,434,752 (7.36) 911,964 10 of 50 40/40 -blockAccessListHash (40), -validator (40), -parentBeaconBlockRoot (40), ~size (40), -validators (40), +totalDifficulty (40), -excessBlobGas (40), -penalties (40) -
nethermind-xdc C (memory pruning) 846,739 0 7,416,307,712 (7.42) 920,424 10 of 50 40/40 -blockAccessListHash (40), -validator (40), -parentBeaconBlockRoot (40), ~size (40), -validators (40), +totalDifficulty (40), -excessBlobGas (40), -penalties (40) -
reth-xdc full 846,739 0 8,041,000,960 (8.04) 1,656,132 12 of 50 40/40 -withdrawals (38), ~size (38) -
besu-xdc snap (Bonsai) 846,737 2 5,991,993,344 (5.99) 1,400,620 10 of 50 40/40 -validator (40), -validators (40), +totalDifficulty (40), -penalties (40) -
nethermind-xdc archive 846,739 0 11,378,438,144 (11.38) 1,091,108 10 of 50 40/40 -blockAccessListHash (40), -validator (40), -parentBeaconBlockRoot (40), ~size (40), -validators (40), +totalDifficulty (40), -excessBlobGas (40), -penalties (40) -
nethermind-xdc full (hybrid) 846,739 0 7,565,754,368 (7.57) 726,048 10 of 50 40/40 -blockAccessListHash (40), -validator (40), -parentBeaconBlockRoot (40), ~size (40), -validators (40), +totalDifficulty (40), -excessBlobGas (40), -penalties (40) -

The two xOne nodes with the Rust stamp xOne/v0.1.0 use the stamp from before the repository was renamed. The xOnePy snap node and the besu-xdc snap node were 2 blocks behind at this second. One sample does not show whether that lag is steady.

What did the Apothem nodes show?

On Apothem, 9 of 10 nodes were at the reference head. The reth-xdc node in minimal mode was 48,814 blocks behind, in this one sample.

REFERENCE TABLEScroll to explore all columns →
Node Head Lag Datadir bytes (GB) VmRSS kB RPC whole-JSON equal Core fields Differing keys (count of calls) Version (xOne nodes)
geth-XDC snap (reference) 85,396,805 0 154,200,936,448 (154.20) 6,230,912 reference - - -
xOneRS snap 85,396,805 0 75,208,540,160 (75.21) 640,668 50 of 50 40/40 none xOneRS/v0.1.0-385a8190-dirty-14112026
xOnePy snap 85,396,805 0 31,220,367,360 (31.22) 166,928 50 of 50 40/40 none xOnePy/v0.1.1-00000000-00000000 (build has no git data; a follower, not a release)
xOneC snap 85,396,805 0 52,621,656,064 (52.62) 14,054,512 50 of 50 40/40 none xOneC/v0.1.0-edf2ebe3-14112026
reth-xdc full 85,396,805 0 161,688,154,112 (161.69) 12,986,632 50 of 50 40/40 none -
besu-xdc snap (Bonsai) 85,396,805 0 29,895,348,224 (29.90) 2,308,348 10 of 50 40/40 -validator (40), -validators (40), +totalDifficulty (40), -penalties (40) -
nethermind-xdc hybrid 85,396,805 0 23,731,429,376 (23.73) 2,101,236 10 of 50 40/40 -validator (40), ~size (40), -validators (40), +totalDifficulty (40), -penalties (40) -
xOneGo snap (earlier Go line, not one of the four clients) 85,396,805 0 9,875,460,096 (9.88) 1,192,856 10 of 50 40/40 ~size (40) xOne/v1.1.0/linux-amd64/go1.25.0 (xOneGo, the earlier Go line, not xOneRS)
reth-xdc minimal 85,347,991 48,814 123,737,636,864 (123.74) 5,644,884 50 of 50 40/40 none -
nethermind-xdc hybrid (second node) 85,396,805 0 23,758,204,928 (23.76) 2,071,564 10 of 50 40/40 -validator (40), ~size (40), -validators (40), +totalDifficulty (40), -penalties (40) -
erigon-xdc minimal 85,396,805 0 92,570,689,536 (92.57) 3,565,812 50 of 50 40/40 none -

The xOneGo row is the node that the 2026-11-14 measurement labelled as xOneRS. See the next sections.

What changed since the 2026-11-14 measurement?

Two things changed: erigon-xdc caught up, and one row label is corrected.

Did erigon-xdc catch up?

Yes. The erigon-xdc node on Apothem was re-syncing from block 0 at 2026-11-14 19:20 UTC. At 19:44 UTC it was 9,120 blocks behind. At 19:57 UTC its RPC refused calls. At 2026-11-15 01:50 UTC its head was 85,396,805, equal to the reference, with lag 0. Its whole JSON was equal to the reference in 50 of 50 calls, and its core fields were equal in 40 of 40 block objects. This node is 50 of 50 equal. See xOne against erigon-xdc, which was written when the node could not be measured.

What is the correction about the xOneGo row?

We labelled a node on Apothem as "xOneRS snap (second node)" in the 2026-11-14 measurement. That label was wrong. The node reports web3_clientVersion xOne/v1.1.0/linux-amd64/go1.25.0. It is an xOneGo node. xOneGo is the earlier Go line, and it is not one of the four clients (xOneRS, xOneTS, xOnePy, xOneC). It is not xOneRS.

We are correcting the earlier posts that used that row. They are Apothem follower, disk planning, xOne vs reth-xdc, xOne vs besu-xdc, xOne vs nethermind-xdc and xOne vs erigon-xdc. Do not use its datadir or memory values as xOneRS values.

In this sample, the xOneGo node answered the RPC sample. Its size value differs from the reference in 40 of 40 block objects. Its core fields are equal. Its whole JSON is equal in 10 of 50 calls.

How does the JSON differ between clients?

The core fields are equal on every node. The differences are in which keys the block JSON contains, and in the size value. This is what each JSON contains compared with the reference:

REFERENCE TABLEScroll to explore all columns →
Node Difference from the reference JSON
xOneRS, xOneTS, xOnePy, xOneC None. Whole JSON equal in 50 of 50 calls.
erigon-xdc (Apothem) None. Whole JSON equal in 50 of 50 calls.
reth-xdc (Apothem) None. Whole JSON equal in 50 of 50 calls.
reth-xdc (net2040) No withdrawals key. The size value differs.
besu-xdc No validator, validators or penalties keys. Adds totalDifficulty.
nethermind-xdc (Apothem) No validator, validators or penalties keys. Adds totalDifficulty. The size value differs.
nethermind-xdc (net2040) The same as on Apothem, and also no parentBeaconBlockRoot, excessBlobGas or blockAccessListHash keys.
xOneGo (Apothem) The size value differs.

We compare each node with the geth-XDC reference (xOne against geth-XDC). We did not test whether a missing key affects any tool. For the full RPC surface of xOne, see RPC surface.

What did we not measure?

  • A time series. This is one sample. The series so far has five samples. See below.
  • RssAnon and RssFile. We read VmRSS only. VmRSS counts mapped files, so compare it only between nodes of the same client and mode.
  • Datadir across modes. An archive, full, snap, fast and minimal node keep different data. Do not compare datadir sizes across modes. See sync modes and hardware and disk.
  • Other RPC methods. We called three methods, on recent blocks only.
  • erigon-xdc on net2040. This sample has no erigon-xdc node on net2040.
  • Lag over time. The lag of the reth-xdc minimal node on Apothem is one value at one second.

What are the series timestamps?

The series of fleet samples, all UTC:

  • 2026-11-14 19:20
  • 2026-11-14 19:33
  • 2026-11-14 19:44
  • 2026-11-14 19:57
  • 2026-11-15 01:50

To choose a client, read which xOne client.

Frequently asked questions

Are all four xOne clients equal to the reference?

In this sample, yes. Every node of the four xOne clients gave whole JSON equal to the reference in 50 of 50 calls, with core fields equal in 40 of 40 block objects.

Did erigon-xdc catch up on Apothem?

Yes. At 2026-11-15 01:50 UTC its head was 85,396,805, equal to the reference. Its whole JSON was equal in 50 of 50 calls.

Which node is the xOneGo row?

It is the Apothem node earlier labelled "xOneRS snap (second node)". It reports xOne/v1.1.0/linux-amd64/go1.25.0. It is an xOneGo node, not xOneRS, and the earlier posts that used the row are being corrected.

Why do besu-xdc and nethermind-xdc show 10 of 50 equal?

Their block JSON has different keys from the reference. Only the 10 transaction-count calls matched. Their core fields were equal.

Sources