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): MVC-1 anchors a "like" into the Data Layer and verifies inclusion cross-chain via ICA; MVC-2 enforces UAC security-class + the total-supply invariant; MVC-3 proves XMP anti-replay + pessimistic containment under a simulated faulty chain; MVC-4 aggregates 3 chains → 1 Cell → Root and settles at the Settlement Layer.
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.)