9 · Run a Node
XChain is a public good, and running it is meant to be public. Once the public repository is published, a node builds and starts in about a minute and then produces a block every 3 seconds (Go 1.23+, git, bash; GOTOOLCHAIN=go1.25.7 fetches the toolchain):
# public repository not yet published — see Status for the current source situation
git clone <xchain-repo-url> && cd xchain
GOTOOLCHAIN=go1.25.7 go build -o build/xchaind ./cmd/xchaind
bash devnet/run-single-node.sh # a block every ~3s
The full acceptance gauntlet — bash devnet/mvc-all.sh — brings up a 3-chain devnet with a real relayer and runs the MVC acceptance from a clean state. XChain holds itself to three gates:
| Gate | What it runs |
|---|---|
| 1 | GOTOOLCHAIN=go1.25.7 go test ./... (CI) |
| 2 | Real devnet end-to-end — bash devnet/mvc-all.sh |
| 3 | Explorer — typecheck + tests + docker build (CI) |
The acceptance criteria (MVC) each pin one claim of this whitepaper to something a machine can check:
| Criterion | What it proves | Primitives exercised |
|---|---|---|
| MVC-1 | Anchors a "like" into the Data Layer and verifies inclusion cross-chain via ICA | VLC · DA · XMP |
| MVC-2 | Enforces the UAC security-class and the total-supply invariant | UAC |
| MVC-3 | XMP anti-replay + pessimistic containment under a simulated faulty chain | XMP |
| MVC-4 | Aggregates 3 chains → 1 Cell → Root and settles at the Settlement Layer | PAI · SC |
Figure 9 — From a clean checkout to the four acceptance criteria — the same path anyone can run.
Rule number one: verify before you claim done — paste the output, don't assert "looks correct." (Which build matches the running network, and where the source lives today, are status questions — see Status & Live Network.) Anyone can run the machine; the harder question is who decides what it becomes — governance, next.