We timed three read calls on 33 XDC nodes on 2026-11-15 between 04:38 and 04:39 UTC: eth_blockNumber, eth_getBlockByNumber("latest", false) and eth_getBalance at latest. Each call ran 20 times, one at a time, 50 ms apart, from the node's own host to its local HTTP RPC. On the quietest host, every client except besu-xdc answered in under 1 ms at the median. On the two busier hosts the medians stayed near 1 to 2 ms, but the 95th percentiles of some xOne nodes reached 13 to 29 ms. This is a small sample, not a benchmark.

Hosts are named A, B and C. Load averages (1 minute) right after the sample: host A 40.2 on 20 cores (it also runs builds), host C 17.6, host B 9.4. For the fleet method see the fleet snapshot. For a repeatable before-and-after tool, see measure-node.sh.

What did each node answer?

Times in milliseconds, nearest-rank p50 and p95 of 20 calls. Every call succeeded except one eth_getBalance on the xOneRS snap node on Apothem (host C); 40 later calls to the same node all succeeded.

Apothem

REFERENCE TABLEScroll to explore all columns →
Host Node blockNumber p50 / p95 getBlockByNumber p50 / p95 getBalance p50 / p95
B geth-XDC snap (reference) 0.57 / 0.64 0.68 / 0.93 0.55 / 0.70
B reth-xdc full 0.54 / 3.44 0.62 / 0.70 0.62 / 0.81
B besu-xdc snap (Bonsai) 2.53 / 3.47 2.45 / 4.41 2.07 / 4.23
B nethermind-xdc hybrid 0.64 / 1.44 0.73 / 0.85 0.76 / 1.52
B xOneGo snap (earlier Go line) 0.63 / 0.71 0.92 / 1.17 0.82 / 0.86
C reth-xdc minimal 0.74 / 4.64 0.81 / 3.23 0.95 / 5.91
C nethermind-xdc hybrid 0.87 / 3.06 0.99 / 1.94 1.04 / 4.05
C erigon-xdc minimal 0.80 / 2.22 0.88 / 1.30 1.03 / 1.86
C xOneRS snap 2.16 / 23.83 1.41 / 5.03 1.47 / 14.46
C xOnePy snap 1.30 / 2.45 2.37 / 29.23 1.48 / 8.23
C xOneC snap 0.63 / 0.76 0.81 / 1.48 0.63 / 0.89

net2040

REFERENCE TABLEScroll to explore all columns →
Host Node blockNumber p50 / p95 getBlockByNumber p50 / p95 getBalance p50 / p95
B geth-XDC full (reference) 0.57 / 0.98 0.71 / 0.85 0.63 / 0.76
B xOneRS full 0.50 / 0.91 0.63 / 0.94 0.57 / 0.88
B reth-xdc archive 0.51 / 0.71 0.59 / 0.64 0.71 / 0.93
B besu-xdc full (Bonsai) 1.08 / 1.47 1.45 / 1.69 1.46 / 8.49
B nethermind-xdc A (memory pruning) 0.62 / 1.40 0.74 / 0.95 0.78 / 1.74
B nethermind-xdc B (memory pruning) 0.59 / 0.67 0.76 / 1.04 0.70 / 1.08
B nethermind-xdc C (memory pruning) 0.65 / 0.75 0.72 / 0.81 0.69 / 1.05
C xOneRS fast 0.79 / 2.12 1.33 / 1.74 1.24 / 4.32
C xOneRS minimal 2.09 / 23.33 3.38 / 17.25 2.47 / 7.25
C reth-xdc full 0.75 / 1.47 0.88 / 3.29 1.06 / 3.10
C besu-xdc snap (Bonsai) 1.93 / 3.06 2.71 / 5.24 2.77 / 7.94
C nethermind-xdc archive 1.04 / 2.12 1.01 / 1.64 1.10 / 2.71
C nethermind-xdc full (hybrid) 0.98 / 1.36 0.96 / 1.34 0.95 / 1.76
A xOneRS full 4.89 / 15.59 1.94 / 16.29 1.83 / 6.40
A xOneRS archive 1.00 / 6.66 1.09 / 3.86 1.77 / 7.44
A xOneTS full 0.98 / 13.42 1.01 / 7.97 1.02 / 8.13
A xOnePy snap 4.80 / 17.41 2.32 / 5.88 1.62 / 9.58
A xOnePy minimal 1.65 / 9.40 2.12 / 4.30 1.59 / 4.31
A xOneC full 0.74 / 5.00 1.50 / 3.79 1.02 / 4.42
A xOneC archive 0.70 / 1.21 0.95 / 2.66 0.82 / 5.12
A xOneC snap 0.80 / 3.08 1.19 / 4.21 0.90 / 10.80
A xOneC minimal 0.73 / 1.12 1.17 / 4.84 0.96 / 3.95

How should these numbers be read?

  • Compare on the same host only. Host A runs builds at a load near 40, so every node there has longer tails. All xOneTS, xOnePy and most xOneC net2040 nodes are on host A, so their numbers mix the client with the host.
  • 20 calls is small. The p95 is the 19th of 20 values, so one slow call sets it. The medians are the steadier number.
  • These are cheap calls. All three read the head or one account. They say little about heavy calls such as eth_getLogs or eth_call; see eth_getLogs limits.
  • Local loopback only. No network time is included. A client behind a load balancer adds its own time.

What stands out?

  • On host B, geth-XDC, reth-xdc, nethermind-xdc, xOneRS and xOneGo all had medians between 0.50 and 0.92 ms. besu-xdc was slower, at 1.08 to 2.53 ms.
  • On host C, xOneC snap on Apothem had the lowest medians (0.63 to 0.81 ms). xOneRS snap on Apothem and xOneRS minimal on net2040 had medians of 1.4 to 3.4 ms and p95 values up to 23.8 ms.
  • On host A, the xOneC nodes had medians of at most 1.5 ms; xOneRS full and xOnePy snap had eth_blockNumber medians near 4.8 ms.

We did not look for the cause of the slower xOneRS nodes on host C. The xOneRS build of the net2040 minimal node on host C (8fe27572) is the same as that of the net2040 full node on host B, which answered in under 1 ms, so host load is one candidate. A longer run with measure-node.sh on a quiet host would separate the two.

Frequently asked questions

Which XDC client answers RPC fastest?

On the quietest host, geth-XDC, reth-xdc, nethermind-xdc and xOneRS were all under 1 ms at the median for these three calls. The differences are smaller than the effect of host load.

Why are the xOne nodes on host A slower?

Host A had a load average of about 40 on 20 cores from builds. Every node there shares that CPU.

How was latency measured?

From each host to its own nodes over local HTTP: 20 sequential calls per method, 50 ms apart, at the lowest CPU priority. Only read calls were sent.

Did any call fail?

One of the 1,980 calls failed: an eth_getBalance on the Apothem xOneRS snap node. 40 later calls to it all succeeded.

Sources

  • Read-only latency sample, 2026-11-15 04:38 to 04:39 UTC, 33 nodes on three hosts, 1,980 calls.
  • web3_clientVersion of each node at the same time.