xOneC is the C++23 client of the xOne family. To run it, build xonec with clang 19 or newer, or download the v0.1.0 release binary, then start it on net2040 or Apothem. To verify it, compare xonec --version with the board, compare its head with a reference node, and read the Gate B replay record. The xOneC repository is private, so its links need access.
What is xOneC?
xOneC is an XDC execution client written in C++23, with its own EVM, XDPoS V1 and V2 consensus, a libmdbx store and its own devp2p. It ships as one binary, xonec. The xOneC overview explains the design. The CHANGELOG lists what v0.1.0 contains. Its README status line is out of date.
How do I get xonec?
Build it from source, or download the release binary.
Build needs clang 19 or newer, clang-format, clang-tidy, CMake 3.28 or newer, Ninja and Python 3 (README). The presets are dev, asan-ubsan, tsan, fuzz and release (CMakePresets.json).
cmake --preset release && cmake --build --preset release
build/release/xonec --version
The v0.1.0 release has the assets xonec-v0.1.0-linux-amd64 and SHA256SUMS. Check the file before you run it.
sha256sum -c SHA256SUMS
The chain specification is inside the binary (test), so --network selects a network.
How do I follow net2040?
Start xonec with --network net2040 and a bootnode list. The node has no peer discovery: peers come from --bootnodes and are redialled every 5 s (CHANGELOG). The command below is from net2040-node.md.
xonec --network net2040 --datadir <datadir> --port <p2p-port> --bootnodes '<enode-url>,...' \
--http --http.addr 127.0.0.1 --http.port <http-port> --http.api eth,net,web3,XDPoS \
--ws --ws.addr 127.0.0.1 --ws.port <ws-port> --ws.api eth,net,web3 \
--metrics --metrics.addr 127.0.0.1 --metrics.port <metrics-port>
To report to a board, add --ethstats name:secret@host:port. Pass the secret from the environment, not from a file. For a snap node on net2040, add --syncmode snap and --snap.gap-rpc to the same flags (net2040-snap.md). Stop the node with kill -TERM <pid>. It stops within 15 s.
How do I follow Apothem?
Use --network apothem --syncmode snap. The documented node syncs from geth-XDC and Nethermind peers (Besu did not stay connected). It needs no xOne peer (apothem-snap.md).
xonec --network apothem --datadir <datadir> --syncmode snap \
--snap.gap-rpc http://127.0.0.1:<gap-rpc-port> --port <p2p-port> --bootnodes '<enode-url>,...' \
--http --http.addr 127.0.0.1 --http.port <http-port> --http.api eth,net,web3,XDPoS \
--metrics --metrics.addr 127.0.0.1 --metrics.port <metrics-port>
--snap.gap-rpc reads the 0x88 pool state of the gap blocks from an archive RPC that serves eth_getProof. The node checks each proof against the header, so it does not trust that RPC. The documented unit sets SSL_CERT_FILE, because without it the ethstats TLS handshake fails silently.
The documented run needed about 85 GB of disk at its peak. The final datadir was 42 GB. Do not use --mine unless a seated validator owns the key. Apothem allows --mine. Mainnet (chain 50) refuses it.
Which sync mode do I choose?
Use --syncmode full (the default, from config.cpp) to replay from genesis, --syncmode snap for an empty datadir, --minimal after a snapshot import, and --gcmode archive for history. fast is an alias of snap. An archive needs an empty datadir and --syncmode full. The sync modes post compares all four clients.
How do I verify a node?
Check five things, in this order.
- Version stamp.
xonec --versionprintsxOneC/v<semver>-<commit8>-<DDMMYYYY>/<os>-<arch>/clang<version>. The date is the commit date. A stamp with00000000is a failed build. The stamp has no-dirtymarker (how stamps work; release.md). The v0.1.0 build printsxOneC/v0.1.0-331920a3-14112026/linux-x86_64/clang19.1.7. - Board. A node that runs a release must show the same stamp as
clientVersionon its board entry.web3_clientVersion, the P2P hello andxone_build_infouse the same value. - Head against a reference. Compare the hash of the head block with a reference node. For Apothem, the docs compare with
https://erpc.apothem.network. - Health.
/livezanswers 200 while the process runs./readyzanswers 200 only with a recent head and no sync in progress. - Replay record. Gate B replays net2040 and Apothem from genesis on the node's own state. The gates page records 0 mismatches for net2040 1..21,600 and Apothem 1..432,000. The CHANGELOG records net2040 1..23,400. See the replay gate post.
curl -s -H 'Content-Type: application/json' -d '{"jsonrpc":"2.0","id":1,"method":"web3_clientVersion","params":[]}' http://127.0.0.1:<http-port>
curl -s http://127.0.0.1:<metrics-port>/metrics | grep -E 'xone_build_info|xone_head_block_number|xone_peers'
curl -s -o /dev/null -w '%{http_code}\n' http://127.0.0.1:<metrics-port>/readyz
How does it perform?
performance.md gives the numbers. All come from a release build on a shared 20-core host with a load average of 31-48.
| Measurement | Result |
|---|---|
| net2040 replay 1..23,400 | 372 s, 368 Mgas/s, peak RSS 134 MB |
| Apothem replay 1..432,000 | 217 s, peak RSS 214 MB |
| Follower import, net2040 12,999 to 20,000, loopback | 59.4 blocks/s, 15,250 tx/s |
How do other clients compare for operators?
| Client | Metrics | Health | Default sync |
|---|---|---|---|
| geth | --metrics, port 6060 (docs, 2024-12-16) |
not in the source | snap (docs, 2025-02-18) |
| Besu | --metrics-enabled, port 9545 (docs) |
not in the source | SNAP on named networks (docs) |
| Nethermind | not in the source | /health, 503 on NoPeers (docs) |
not in the source |
| xOneC (XDC) | --metrics, /metrics |
/livez, /readyz |
full |
The rows describe different clients on different networks. They are not a speed comparison.
What does xOneC not do yet?
- Receipts over RPC.
eth_getTransactionReceipt,eth_getBlockReceiptsandeth_getLogsdo not answer from stored receipts. Issue #94 is open. - Peer discovery. Peers come from
--bootnodesonly. - Precompiles. EIP-2537 (BLS12-381), the XDCx ring signature and bulletproof stay refused. The bn254 precompiles 0x06-0x08 are in v0.1.0.
- Release gate. The release was not re-gated on its own commit. The last full gate is 528b4d7.
- Mint and mainnet. Apothem minting and a mainnet follower need an owner decision. Mainnet minting is out of scope.
Frequently asked questions
Is xOneC public?
No. The repository is private, so the source, release assets and issue links need access.
Which compiler does xOneC need?
clang 19 or newer. The configure step refuses any other compiler (release.md).
How do I know the binary I run is the release?
Run sha256sum -c SHA256SUMS on the file. Then compare xonec --version with the board clientVersion.
Can I read transaction receipts from an xOneC node?
Not over JSON-RPC today. The node serves receipts to peers. Issue #94 tracks the RPC path.
Can I run xOneC on mainnet?
The docs cover net2040 and Apothem only. A mainnet follower needs an owner decision.
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/run-xonec/index.md). GitHub may ask you to sign in. Report a correction opens a prefilled GitHub issue for this page.