xOne runs on Apothem (chain 51) and on net2040 (chain 2040) with the same binary and the same --network flag. The differences for an operator are the size of the chain, the peers you pass, the state size, which sync modes have a recorded run, and who may mine. This post lists them side by side. The xOneTS, xOnePy and xOneC repositories are private, so their links need access.
For the steps on each network, see How to join net2040 with xOne and How to run an XDC Apothem follower with xOne. This post does not repeat them.
What differs at a glance?
Apothem is the public XDC testnet. net2040 is the public end-to-end devnet. Both use a 900-block epoch.
| Apothem | net2040 | |
|---|---|---|
| Chain id | 51 | 2040 |
| Flag | --network apothem |
--network net2040 |
| Purpose | Public testnet (guide) | Public end-to-end devnet, every fork live within its first 21,600 blocks (chain spec) |
| Size of the chain | About 85 million blocks (head 85,396,805 on 2026-11-15) | Head 846,739 on 2026-11-15 |
| Epoch, gap, period | 900, 450, 2 | 900, 450, 2 |
| V2 switch block | 56,828,700 | 10,800 |
| Bootnodes | 28 enode URLs in the repository | None committed |
| Quiet window | 120 s | 120 s |
--mine |
Allowed, owner approval first | Allowed, owner approval first |
Sources: forks.json, net2040 guide, and the measurement under the last heading.
Which fork rows differ?
Most fork rows differ. net2040 reaches every fork within 21,600 blocks. Apothem reaches them over 85 million blocks, so a full sync from genesis passes them late.
| Row | Apothem | net2040 |
|---|---|---|
| V2 switch block | 56,828,700 | 10,800 |
| Berlin, London | 61,290,000 | 9,000 |
| EIP-1559 | 71,550,000 | 12,600 |
| Cancun | 71,551,800 | 14,400 |
| Prague | 84,333,000 | 18,000 |
| Osaka | not set | 19,800 |
| Amsterdam | 99,999,999,999 (unscheduled) | 21,600 |
Source: forks.json. The value 99,999,999,999 is the UNSCHEDULED_BLOCK constant in the chain spec crate. For what an epoch switch does, see epoch switches on XDC.
How do the peers differ?
Apothem has a committed bootnode list. net2040 has none, so you pass the enode URL of a peer you trust.
The repository file ops/bootnodes/apothem.txt has 28 enode URLs. The node embeds it. It uses the list only when you give no --bootnodes, discovery is on and peers are allowed (bootnodes module). A chain with another genesis never inherits the public lists. The Apothem guide still says the node has no built-in boot list. The code on main embeds one.
ops/bootnodes/net2040.txt says: "no public bootnode list is committed".
xone --network apothem --datadir <datadir>
xone --network net2040 --datadir <datadir> --bootnodes <enode-url>
How big is the state?
Apothem state is large. net2040 state is small. By default xOne holds the head state in memory.
- Apothem: 327,356 accounts and about 158 M slots, "over 40 GB" in memory (disk-state). The Apothem guide gives 325,043 accounts and 8.6 million slots at block 83.6 million. The two documents disagree on slots.
- net2040: 5,000 accounts at block 754,000 (net2040 guide). The snap test in the sync-modes page downloaded 9,532 accounts in under a second.
--state.disk keeps the state rows and trie nodes in MDBX. The disk-state page has the parts and the limits.
Which sync modes are recorded on each network?
net2040 has a recorded run for every mode. Apothem has a recorded follow and RPC run only. The support matrix uses working only when an evidence page records a run.
| Role | Apothem | net2040 |
|---|---|---|
| follow | working | working |
| sync modes | not-qualified | working |
| archive | not-qualified | working |
| rpc | working | working |
| signing | owner-approval | owner-approval |
not-qualified means nothing on main proves it yet. It does not mean the mode fails. The xOne snap followers on Apothem below reached the head. That sample is not the qualification. For the modes, see how sync works in xOne.
What are the --mine rules?
--mine is allowed on Apothem and on net2040. It is refused on chain id 50 (mainnet). The producer checks the chain id first, then asks for --keystore and --password (producer.rs, flags).
The matrix marks signing owner-approval on both networks: the node allows it, and a public run needs the owner's approval first. The net2040 validator guide covers the net2040 side.
What is the quiet window?
The quiet window is 120 seconds on mainnet, Apothem and net2040, and 20 on the devnets. You may raise it with --miner.quietwindow. A lower value is refused (flags, chain spec test). The value is the same on both networks, so it does not change your setup.
What did the xOne team measure on followers?
Source for this section: xOne team measurement, 2026-11-15 01:50 UTC. It was one read-only sample. The reference heads were 846,739 on net2040 and 85,396,805 on Apothem. Every xOne node below answered 50 of 50 whole-JSON RPC compares equal to the reference and matched 40 of 40 core block fields.
| Network | Node | Lag | Datadir GB | VmRSS kB |
|---|---|---|---|---|
| net2040 | xOneRS full | 0 | 20.65 | 277,104 |
| net2040 | xOneRS archive | 0 | 22.79 | 592,888 |
| net2040 | xOneRS fast | 0 | 0.16 | 209,856 |
| net2040 | xOneRS minimal | 0 | 0.16 | 228,256 |
| net2040 | xOneTS full | 0 | 19.58 | 327,716 |
| net2040 | xOnePy snap | 2 | 0.11 | 129,636 |
| net2040 | xOnePy minimal | 0 | 0.11 | 130,904 |
| net2040 | xOneC full | 0 | 18.00 | 243,284 |
| net2040 | xOneC archive | 0 | 22.23 | 695,552 |
| net2040 | xOneC snap | 0 | 0.15 | 100,020 |
| net2040 | xOneC minimal | 0 | 0.15 | 93,168 |
| Apothem | xOneRS snap | 0 | 75.21 | 640,668 |
| Apothem | xOnePy snap | 0 | 31.22 | 166,928 |
| Apothem | xOneC snap | 0 | 52.62 | 14,054,512 |
The modes differ between rows, so read this as context and not as a ranking. Apothem has only snap rows for xOne. The xOnePy Apothem build has no git data in its version string, so it is a follower and not a release. The xOneC VmRSS is mostly the mapped MDBX file, as the Apothem follower post shows for the 2026-11-14 samples.
Frequently asked questions
Do I need --bootnodes on Apothem?
No. If you give none, the node uses the 28 URLs embedded from ops/bootnodes/apothem.txt. On net2040 you must pass a peer, because no list is committed.
Where is the V2 switch on each network?
Block 56,828,700 on Apothem and block 10,800 on net2040. Both use a 900-block epoch.
Can I mine on Apothem and net2040?
The node allows --mine on both and refuses it on chain id 50. It needs --keystore and --password. A public run needs the owner's approval first.
Is the quiet window different on the two networks?
No. It is 120 seconds on both. You can raise it with --miner.quietwindow, not lower it.
Sources
- docs/ops/net2040-follow.md, docs/ops/apothem-follow.md
- docs/ops/support-matrix.md, docs/ops/net2040-sync-modes.md
- docs/ops/disk-state.md, docs/cli/flags.md
- crates/xone-chainspec/generated/forks.json, crates/xone-chainspec/src/lib.rs, networks.rs
- ops/bootnodes/apothem.txt, ops/bootnodes/net2040.txt, crates/xone-node/src/bootnodes/mod.rs, crates/xone-node/src/services/producer.rs
- xOne team measurement, 2026-11-15 01:50 UTC (read-only, one sample; no public file)
- How to join net2040 with xOne, How to run an XDC Apothem follower with xOne
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/apothem-vs-net2040-operator/index.md). GitHub may ask you to sign in. Report a correction opens a prefilled GitHub issue for this page.