This post lists numbers only. For each xOne client it gives the replayed block ranges, block and transaction counts, epoch switches and the wall-clock time that the run record states. It also counts the vector files in xOneRS. Every number comes from a file on origin/main. Sums are mine, and the arithmetic is shown.
The method is in How xOne proves parity with geth-XDC. The status report is State of parity, week of 2026-11-15. This post does not repeat their text. xOneTS, xOnePy and xOneC are private repositories.
How many vector files does the gate have?
The xOneRS tree conformance/vectors/ holds 430 files and 242,089 lines. A line is one newline character. Three .gz replay windows are files but have no line count.
I counted at xOneRS origin/main, head 5f12c61. git ls-tree -r --name-only origin/main conformance/vectors lists the files. For each file that is not .gz, git show origin/main:<file> | wc -l gives the lines. The count includes JSON, JSONL, Markdown, Python, Go and shell files.
| Folder | Files | Lines |
|---|---|---|
consensus |
77 | 3,353 |
evm |
20 | 17,508 |
headers |
3 | 2,597 |
net |
5 | 196 |
penalty |
4 | 17 |
producer |
1 | 5,530 |
replay (3 .gz) |
3 | not counted |
reward |
18 | 708 |
rpc |
162 | 7,416 |
special |
96 | 534 |
t8n |
21 | 259 |
txpool |
4 | 110 |
v2 |
16 | 203,861 |
| Total | 430 | 242,089 |
Files: 77 + 20 + 3 + 5 + 4 + 1 + 3 + 18 + 162 + 96 + 21 + 4 + 16 = 430. Lines: 3,353 + 17,508 + 2,597 + 196 + 17 + 5,530 + 708 + 7,416 + 534 + 259 + 110 + 203,861 = 242,089.
Three files in v2 hold most of the lines: bft-forensics.json (57,631), bft-rule.json (52,632) and commit.json (37,957). Lines are not test cases. The v2 README gives case counts, for example 1,600 cases in commit.json.
The earlier status post counted only consensus and rpc at head 4f20e93: 227 files and 9,867 lines. At 5f12c61 the same two folders hold 77 + 162 = 239 files and 3,353 + 7,416 = 10,769 lines.
Which ranges did xOneRS replay, and how long did they take?
The xOneRS RUNS.md states wall time in seconds, and in minutes for one row. It gives no transaction count. All rows below show 0 mismatches. Runs started from genesis, except the three pivot windows and the resumed net2040 chunks. The host was the shared build host, release build, one thread. For the Apothem rows the source states a load average of 20 to 25.
| Network | Range | Blocks | Epoch switches | Wall time |
|---|---|---|---|---|
| Apothem | 0..=432,000 | 432,000 | not stated | 894.3 s |
| Apothem | 56,826,901..=57,099,999 (pivot) | 273,099 | 302 V2 | 2,225 s |
| Apothem | 83,596,001..=83,602,999 (pivot) | 6,999 | 9 V2 | 51 s |
| Apothem | 84,729,001..=84,735,500 (pivot) | 6,500 | 7 V2 | 130.6 s |
| net2040 | 0..=21,599 | 21,599 | 13 V2 | 1,851.6 s |
| net2040 | 30,001..=754,336 (9 resumed chunks) | 724,336 | 809 V2 | 52 min |
The Apothem 0..=432,000 row has 4,320 archive hash checks and 480 checkpoint lists. The xOneTS record states 0 V2 switches for the same range.
Sums of the six rows:
- Blocks: 432,000 + 273,099 + 6,999 + 6,500 + 21,599 + 724,336 = 1,464,533.
- V2 switches: 302 + 9 + 7 + 13 + 809 = 1,140 (the first row states none).
- Time: 894.3 + 2,225 + 51 + 130.6 + 1,851.6 + (52 × 60 = 3,120) = 8,272.5 s. In hours: 8,272.5 ÷ 3,600 = 2.30 h. The 52 minutes are the source's own figure, so the sum is not exact to the second.
The net2040 chunk row alone: 52 ÷ 60 = 0.87 h for 724,336 blocks. The pivot windows start from the archive's state, so they prove execution rules, not bootstrap.
RUNS.md also states rates. The block cache fetch runs at about 125 blocks per second. To reach TIPSigning at block 3,000,000, the source estimates about 6.7 hours of fetching: 3,000,000 ÷ 125 = 24,000 s = 6.67 h. A quiet host replays 0..=20,000 in 23.2 s and 0..=50,000 in 57.4 s (1.16 and 1.15 ms per block).
What do xOneTS and xOnePy record?
Both xOneTS and xOnePy record blocks per second, not seconds. Their records have no duration column. I do not derive one, because the rates are rounded.
| Client | Network | Range | Blocks | Transactions | V2 switches | Blocks/s |
|---|---|---|---|---|---|---|
| xOneTS | net2040 | 1..899 | 899 | 5,769 | 0 | 90 |
| xOneTS | Apothem | 1..1800 | 1,800 | 406 | 0 | 207 |
| xOneTS | net2040 | 1..21600 | 21,600 | 4,205,493 | 13 | 13 |
| xOneTS | Apothem | 1..432000 | 432,000 | 118,983 | 0 | 345 |
| xOnePy | net2040 | 1..900 | 900 | 5,769 | 0 | 249 |
| xOnePy | Apothem | 1..1800 | 1,800 | 406 | 0 | 611 |
| xOnePy | net2040 | 1..21600 | 21,600 | 4,205,493 | 13 | 14 |
| xOnePy | Apothem | 1801..432000 | 430,200 | 118,577 | 0 | 447 |
| xOnePy | net2040 | 1..21600 | 21,600 | 4,205,493 | 13 | 19 |
| xOnePy | net2040 | 21601..60000 | 38,400 | 18,427,339 | 42 | 9 |
xOneTS ran on 20 shared cores at load average 17 to 25. xOnePy used a process pool of cores minus 2.
Sums of the table rows (ranges overlap, so a block can count twice):
- xOneTS blocks: 899 + 1,800 + 21,600 + 432,000 = 456,299. Transactions: 5,769 + 406 + 4,205,493 + 118,983 = 4,330,651.
- xOnePy blocks: 900 + 1,800 + 21,600 + 430,200 + 21,600 + 38,400 = 514,500. Transactions: 5,769 + 406 + 4,205,493 + 118,577 + 4,205,493 + 18,427,339 = 26,963,077.
Distinct xOnePy blocks, counting each range once: Apothem 1..1800 and 1801..432000 give 432,000. net2040 1..21600 and 21601..60000 give 60,000. Distinct transactions on net2040: 4,205,493 + 18,427,339 = 22,632,832. On Apothem: 406 + 118,577 = 118,983, the same count as xOneTS.
What does xOneC record?
The xOneC Gate B record in docs/process/gates.md gives seconds and rates. The host was the shared 20-core build host at load average about 33, release preset.
| Network | Range | Blocks | Transactions | V2 switches | Seconds | Blocks/s | Mgas/s |
|---|---|---|---|---|---|---|---|
| net2040 | 1..21,600 | 21,600 | 4,205,493 | 13 | 233 | 92.7 | 378.3 |
| Apothem | 1..432,000 | 432,000 | 118,983 | 0 | 237 | 1,825 | 42.0 |
Sums: 21,600 + 432,000 = 453,600 blocks. 4,205,493 + 118,983 = 4,324,476 transactions. 233 + 237 = 470 s, or 470 ÷ 60 = 7.8 min, or 470 ÷ 3,600 = 0.13 h.
How do the clients compare on the shared ranges?
Two ranges appear in every record: net2040 up to block 21,600 and Apothem up to block 432,000. The runs used different hosts, loads and thread counts, so the table is a list and not a ranking.
| Client | net2040 1..21,600 | Apothem 1..432,000 |
|---|---|---|
| xOneRS | 1,851.6 s (0..=21,599) | 894.3 s |
| xOneTS | 13 blocks/s | 345 blocks/s |
| xOnePy | 14 and 19 blocks/s (two runs) | 447 blocks/s (1801..432000) |
| xOneC | 233 s, 92.7 blocks/s | 237 s, 1,825 blocks/s |
All four records give 13 V2 switches for net2040 up to block 21,600. xOneTS, xOnePy and xOneC give 4,205,493 transactions for it. For Apothem up to block 432,000, xOneTS and xOneC give 118,983 transactions. xOneRS states no transaction count.
How do other projects describe their testing?
The networks differ, so the table compares no number.
| Source | What it says about testing | xOne |
|---|---|---|
| ethrex | EF spec tests and Hive run in CI. As stated in ethrex completes its first external security audit, 2026-06-18. | The numbers above come from vectors and replay of recorded XDC history. |
| Sigma Prime guide (a security firm, not a client) | Differential fuzzing across clients. As stated in Core node security, 2025-06-06. | Each replayed block is compared with one pinned geth-XDC. |
See also the roadmap gates and performance.
Frequently asked questions
How many vector files does xOneRS have?
At 5f12c61, conformance/vectors/ has 430 files and 242,089 newline-counted lines. Three .gz files have no line count.
How many blocks did xOneRS replay at 0 mismatches?
The six rows in the xOneRS RUNS.md add up to 1,464,533 blocks: 432,000 + 273,099 + 6,999 + 6,500 + 21,599 + 724,336. Three of them are pivot windows.
How long did the xOneRS runs take?
The six rows add up to 8,272.5 s, which is 2.30 h. One row states 52 minutes, so the sum is not exact to the second.
Which clients record seconds, and which record blocks per second?
xOneRS and xOneC record seconds. xOneTS and xOnePy record blocks per second. xOneC records both.
Sources
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/replay-gate-in-numbers/index.md). GitHub may ask you to sign in. Report a correction opens a prefilled GitHub issue for this page.