Build a local chain for experiments, or follow zerone-1 with the experimental signed observer. Choose your network and verify the package before starting.
New to the project? Understand Zerone: its purpose, one contribution, and how knowledge, money and control fit together.
01 · Build and run
A chain on your computer.
This setup runs on loopback addresses. It creates fresh local state and test keys in a directory you choose. Local test funds only; no live ZRN balance or reward entitlement.
Before you start
Go 1.25.14, Git, make and the platform C build tools.
Python 3.11+ and a terminal on Linux or macOS.
A new, dedicated home directory and free loopback ports 47656 and 47657.
Network access for the source and Go dependencies during the build.
Run these commands in order. The start command stays open; use a second terminal for the final check.
01
Get the pinned source
Where A directory where zerone-local-source does not exist
Terminal
git clone https://github.com/cambridgetcg/zerone-core.git zerone-local-source
cd zerone-local-source
git checkout --detach 22c6b43724c6681657d3b812467e8154ca4188a1
Check git rev-parse HEAD reports 22c6b43724c6681657d3b812467e8154ca4188a1.
02
Build the local binary
Where zerone-local-source
Terminal
GOTOOLCHAIN=go1.25.14 make build
./build/zeroned version --long
Check The build succeeds and the binary reports the pinned source revision.
03
Check the setup helper
Where zerone-local-source
Terminal
python3 -c 'import hashlib; from pathlib import Path; actual = hashlib.sha256(Path("scripts/local-node.py").read_bytes()).hexdigest(); assert actual == "9da37ea914857cf613753222a92eae51a5ea42f4f691872e170c65b5a2dfbcb8", "Setup helper digest mismatch"; print(actual)'
Check The helper SHA-256 is 9da37ea914857cf613753222a92eae51a5ea42f4f691872e170c65b5a2dfbcb8.
Check Read result.node_info.network and result.sync_info.latest_block_height from your local node.
Optional: send local test funds
Send 100 uzrn from the funded local user to the local validator, with a 250000 uzrn test fee. This signs a local transaction; it uses no live funds.
Where zerone-local-source, in the second terminal while the node remains running
Terminal
LOCAL_HOME="$HOME/zerone-local"
LOCAL_BIN="$LOCAL_HOME/bin/zeroned"
TX_HASH=""
python3 scripts/local-node.py status --home "$LOCAL_HOME" &&
RECIPIENT=$("$LOCAL_BIN" keys show validator -a --home "$LOCAL_HOME" --keyring-backend test) &&
LOCAL_TX_OUTPUT=$("$LOCAL_BIN" tx bank send user "$RECIPIENT" 100uzrn --home "$LOCAL_HOME" --chain-id zerone-local-1 --keyring-backend test --node http://127.0.0.1:47657 --fees 250000uzrn --gas 250000 --yes --output json) &&
printf '%s\n' "$LOCAL_TX_OUTPUT" &&
TX_HASH=$(printf '%s' "$LOCAL_TX_OUTPUT" | python3 -c 'import json,re,sys; result=json.load(sys.stdin); txhash=result.get("txhash", ""); assert result.get("code") == 0 and re.fullmatch("[0-9A-Fa-f]{64}", txhash), "No accepted transaction hash returned"; print(txhash)')
Confirm it was committed
In the same terminal, query the captured hash until the result has height greater than zero and code 0. The initial send response at height 0 is only mempool acceptance.
Terminal
if [ -n "$TX_HASH" ]; then
"$LOCAL_BIN" query tx "$TX_HASH" --home "$LOCAL_HOME" --node http://127.0.0.1:47657 --output json
else
printf 'No accepted transaction hash was captured.\n'
fi
If the transaction is not indexed yet, retry only the query. Repeating the send creates another transaction and spends another local test fee.
02 · Public observations
Read zerone-1.
A custodial network with a disclosed sole-validator trust model. Gateway reads are observations, not independent proofs; the upstream node hop uses HTTP.
Available · no account
Inspect public records
Open a selected read endpoint, or use the dashboard. These links return public observations; this guide does not poll the network.
Read the returned denom and amount; a failed request means unavailable, not zero.
For automated reads, send an honest application User-Agent, such as zerone-node-guide/1.0, and set a timeout. Some generic client signatures are blocked by the gateway. Treat non-200 responses as unavailable.
A signed Linux amd64 observer package retains the legacy application with reviewed dependency fixes and follows the ledger with zero voting power. Check the bootstrap expiry before installing.
Experimental legacy runtime: SDK 0.50 is end of life and Go 1.25 is outside upstream support. Review the retained dependency risks in the release notes before installing; long-term maintenance is not established.
Linux amd64, Python 3.11+, gpgv, local Docker, 2 available CPUs, 6 GiB available memory and at least 20 GiB free disk for an initial trial.
New bootstrap closes 2026-09-16T19:19:13Z. New bootstrap is refused after the signed expiry. Obtain a refreshed signed package then. A successfully synced home can resume with its original verified package.
Use new directories for the tools, package and home. First confirm the release authority fingerprint from a trusted Zerone source: 09327B031F8FF2C2EE49B18F2234027FC5B68C19. The source-pinned unpacker verifies the signature and every file before package code runs.
Wait for FOLLOWING: the fresh zero-power observer has synced and advanced with recent blocks. RPC listens at http://127.0.0.1:27657.
In another terminal:
Terminal
python3 -I -B "$HOME/zerone-observer-package/observer.py" status --home "$HOME/zerone-observer-home"
Press Ctrl-C in the start terminal; keep the package and home. Repeat start to resume the same observer.
Operator-selected sole-validator checkpoint; the RPC aliases share one upstream. State sync starts from a recent snapshot; it does not replay the complete history or repair legacy signer custody. Keep the RPC on loopback. Source reproduction details ↗
Validator joining, new-account admission, starter funds, sponsored onboarding, and reward-claim onboarding remain paused. Joining status ↗ · Trust model ↗
A dated ledger census records application height 1261575 on 2026-09-09. It is a historical checkpoint, not a claim of current freshness. Read the census ↗ · Settlement history ↗
03 · Bring your work
Find a place to contribute.
Start with an integration, a reproducible observation, or a source change. Existing account tools and the participation principles are also available to inspect.
Build an agent integration
Run the local node and test against its local RPC using the pinned API and SDK.
Compare public records, reproduce local results, and contribute a bounded issue or source change. Share public evidence, never keys or private account material.