ZERONE Node guide Dashboard

Local sandbox · legacy observer

Run your own
node.

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.

  1. 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.

  2. 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.

  3. 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.

  4. Create fresh local state

    Where zerone-local-source

    Terminal
    python3 scripts/local-node.py init --home "$HOME/zerone-local" --binary "$PWD/build/zeroned"

    Check A new local genesis, validator and funded test account are created in the chosen home.

  5. Start your local node

    Where zerone-local-source

    Terminal
    python3 scripts/local-node.py start --home "$HOME/zerone-local"

    Check The foreground process confirms zerone-local-1 and advancing blocks. Leave this terminal open.

  6. Check it from another terminal

    Where zerone-local-source, in a second terminal

    Terminal
    python3 scripts/local-node.py status --home "$HOME/zerone-local"

    Check The JSON status confirms the local node identity, chain and advancing height.

Stop and return

Press Ctrl-C in the start terminal. The helper stops its own child and preserves your local state.

Initialization refuses an existing home. Restart the same home to continue; setup is not a reset command.

Terminal
python3 scripts/local-node.py start --home "$HOME/zerone-local"

Initialization retains the exact binary in your local home. Restart uses that copy, even if you later rebuild the source checkout.

Retained binary: $HOME/zerone-local/bin/zeroned

Your local endpoints

Chain
zerone-local-1
RPC
http://127.0.0.1:47657
P2P
tcp://127.0.0.1:47656
Disabled in this setup
REST, gRPC, gRPC-Web

Fresh local test keys remain in your chosen home. Never import a live validator key or reuse test keys for real funds.

These APIs describe the pinned local source. Public legacy routes and messages may differ.

Make a first read from your tool

With the local node running, read its status from another terminal.

Terminal
curl --fail --max-time 10 http://127.0.0.1:47657/status

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.

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.

Open the zerone.ai dashboard

Experimental signed release · Linux amd64

Follow the ledger
with your own observer

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.

Verify and start the observer

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.

Terminal
git clone https://github.com/cambridgetcg/zerone-core.git zerone-observer-tools &&
cd zerone-observer-tools &&
git checkout --detach ed364bc0afec062612b61a309002f23da85acf2c &&
curl --fail --location --connect-timeout 15 --max-time 300 --proto '=https' --proto-redir '=https' 'https://github.com/cambridgetcg/zerone-core/releases/download/zerone-1-observer-20260909.2/observer-release.tar.gz' --output ../observer-release.tar.gz &&
python3 -I -c 'import hashlib; from pathlib import Path; assert hashlib.sha256(Path("../observer-release.tar.gz").read_bytes()).hexdigest() == "5d874b4c38427117f1567ea0152fc4782e066e4926f3294f1eb776ff6ce22d08", "Archive digest mismatch"' &&
python3 -I -B deploy/legacy-observer/package.py unpack --archive "$PWD/../observer-release.tar.gz" --output "$HOME/zerone-observer-package" --gpgv "$(command -v gpgv)" &&
curl --fail --location --connect-timeout 15 --max-time 60 --proto '=https' --proto-redir '=https' 'https://github.com/cambridgetcg/zerone-core/releases/download/zerone-1-observer-20260909.2/REHEARSAL-RECEIPT.json' --output ../REHEARSAL-RECEIPT.json &&
curl --fail --location --connect-timeout 15 --max-time 60 --proto '=https' --proto-redir '=https' 'https://github.com/cambridgetcg/zerone-core/releases/download/zerone-1-observer-20260909.2/REHEARSAL-RECEIPT.json.sig' --output ../REHEARSAL-RECEIPT.json.sig &&
python3 -I -c 'import hashlib; from pathlib import Path; assert hashlib.sha256(Path("../REHEARSAL-RECEIPT.json").read_bytes()).hexdigest() == "c99a1bac24b9ccc71a2769ce10d72f0a947eec8cb4b4afe9df22df2886c0ed0b", "Rehearsal receipt digest mismatch"' &&
python3 -I -B deploy/legacy-observer/verify-rehearsal.py --bundle "$HOME/zerone-observer-package" --archive "$PWD/../observer-release.tar.gz" --receipt "$PWD/../REHEARSAL-RECEIPT.json" --signature "$PWD/../REHEARSAL-RECEIPT.json.sig" --gpgv "$(command -v gpgv)"

Create fresh state

Terminal
python3 -I -B "$HOME/zerone-observer-package/observer.py" init --home "$HOME/zerone-observer-home"

Follow new blocks

Terminal
python3 -I -B "$HOME/zerone-observer-package/observer.py" start --home "$HOME/zerone-observer-home"

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.

Open the local setup

Use an existing zerone-1 account

Connect Keplr to inspect an address and balance. Any supported transaction is a separate action you review and sign.

Open wallet tools

Contribute evidence or code

Compare public records, reproduce local results, and contribute a bounded issue or source change. Share public evidence, never keys or private account material.

Open source issues

Read the participation principles

Read the covenant and adapter status. These documents do not enroll an account or open a service endpoint.

Read the compact

04 · Exact source

Know what
you are running.

Pinned source for the local sandbox; not the installed zerone-1 executable.

Source commit
22c6b43724c6681657d3b812467e8154ca4188a1
Setup helper
scripts/local-node.py
Helper SHA-256
9da37ea914857cf613753222a92eae51a5ea42f4f691872e170c65b5a2dfbcb8

The same steps and source pins are available as a static file for tools and agents.