{
  "schema": "zerone.node-participation/v1",
  "title": "Run a Zerone node and participate",
  "documentation": {
    "humanGuide": "https://zerone.ai/nodes/",
    "machineGuide": "https://zerone.ai/nodes/guide.json",
    "index": "https://zerone.ai/llms.txt",
    "kind": "documentation",
    "agentProtocolEndpoint": false
  },
  "source": {
    "repository": "https://github.com/cambridgetcg/zerone-core",
    "commit": "22c6b43724c6681657d3b812467e8154ca4188a1",
    "url": "https://github.com/cambridgetcg/zerone-core/tree/22c6b43724c6681657d3b812467e8154ca4188a1",
    "localNodeHelper": {
      "path": "scripts/local-node.py",
      "url": "https://github.com/cambridgetcg/zerone-core/blob/22c6b43724c6681657d3b812467e8154ca4188a1/scripts/local-node.py",
      "rawUrl": "https://raw.githubusercontent.com/cambridgetcg/zerone-core/22c6b43724c6681657d3b812467e8154ca4188a1/scripts/local-node.py",
      "sha256": "9da37ea914857cf613753222a92eae51a5ea42f4f691872e170c65b5a2dfbcb8"
    },
    "scope": "Pinned source for the local sandbox; not the installed zerone-1 executable.",
    "productionBinaryProvenance": false
  },
  "local": {
    "id": "local-sandbox",
    "title": "Run your own local node",
    "availability": "available",
    "chainId": "zerone-local-1",
    "role": "local-validator",
    "networkScope": "loopback-only",
    "liveNetworkConnection": false,
    "funds": "Local test funds only; no live ZRN balance or reward entitlement.",
    "prerequisites": [
      "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."
    ],
    "endpoints": {
      "rpc": "http://127.0.0.1:47657",
      "p2p": "tcp://127.0.0.1:47656",
      "publicGateway": false
    },
    "disabledInterfaces": [
      "REST",
      "gRPC",
      "gRPC-Web"
    ],
    "agentRead": {
      "command": "curl --fail --max-time 10 http://127.0.0.1:47657/status",
      "completion": "Read result.node_info.network and result.sync_info.latest_block_height from your local node."
    },
    "testTransfer": {
      "title": "Optional: send local test funds",
      "summary": "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.",
      "workingDirectory": "zerone-local-source, in the second terminal while the node remains running",
      "sendCommand": "LOCAL_HOME=\"$HOME/zerone-local\"\nLOCAL_BIN=\"$LOCAL_HOME/bin/zeroned\"\nTX_HASH=\"\"\npython3 scripts/local-node.py status --home \"$LOCAL_HOME\" &&\nRECIPIENT=$(\"$LOCAL_BIN\" keys show validator -a --home \"$LOCAL_HOME\" --keyring-backend test) &&\nLOCAL_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) &&\nprintf '%s\\n' \"$LOCAL_TX_OUTPUT\" &&\nTX_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)')",
      "queryCommand": "if [ -n \"$TX_HASH\" ]; then\n  \"$LOCAL_BIN\" query tx \"$TX_HASH\" --home \"$LOCAL_HOME\" --node http://127.0.0.1:47657 --output json\nelse\n  printf 'No accepted transaction hash was captured.\\n'\nfi",
      "completion": "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.",
      "retry": "If the transaction is not indexed yet, retry only the query. Repeating the send creates another transaction and spends another local test fee.",
      "localOnly": true
    },
    "steps": [
      {
        "id": "source",
        "title": "Get the pinned source",
        "workingDirectory": "A directory where zerone-local-source does not exist",
        "command": "git clone https://github.com/cambridgetcg/zerone-core.git zerone-local-source\ncd zerone-local-source\ngit checkout --detach 22c6b43724c6681657d3b812467e8154ca4188a1",
        "completion": "git rev-parse HEAD reports 22c6b43724c6681657d3b812467e8154ca4188a1."
      },
      {
        "id": "build",
        "title": "Build the local binary",
        "workingDirectory": "zerone-local-source",
        "command": "GOTOOLCHAIN=go1.25.14 make build\n./build/zeroned version --long",
        "completion": "The build succeeds and the binary reports the pinned source revision."
      },
      {
        "id": "verify-helper",
        "title": "Check the setup helper",
        "workingDirectory": "zerone-local-source",
        "command": "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)'",
        "completion": "The helper SHA-256 is 9da37ea914857cf613753222a92eae51a5ea42f4f691872e170c65b5a2dfbcb8."
      },
      {
        "id": "init",
        "title": "Create fresh local state",
        "workingDirectory": "zerone-local-source",
        "command": "python3 scripts/local-node.py init --home \"$HOME/zerone-local\" --binary \"$PWD/build/zeroned\"",
        "completion": "A new local genesis, validator and funded test account are created in the chosen home."
      },
      {
        "id": "start",
        "title": "Start your local node",
        "workingDirectory": "zerone-local-source",
        "command": "python3 scripts/local-node.py start --home \"$HOME/zerone-local\"",
        "completion": "The foreground process confirms zerone-local-1 and advancing blocks. Leave this terminal open."
      },
      {
        "id": "status",
        "title": "Check it from another terminal",
        "workingDirectory": "zerone-local-source, in a second terminal",
        "command": "python3 scripts/local-node.py status --home \"$HOME/zerone-local\"",
        "completion": "The JSON status confirms the local node identity, chain and advancing height."
      }
    ],
    "stop": "Press Ctrl-C in the start terminal. The helper stops its own child and preserves your local state.",
    "restart": "python3 scripts/local-node.py start --home \"$HOME/zerone-local\"",
    "retainedBinary": "$HOME/zerone-local/bin/zeroned",
    "binaryRetention": "Initialization retains the exact binary in your local home. Restart uses that copy, even if you later rebuild the source checkout.",
    "keyCustody": "Fresh local test keys remain in your chosen home. Never import a live validator key or reuse test keys for real funds.",
    "existingState": "Initialization refuses an existing home. Restart the same home to continue; setup is not a reset command.",
    "apiReference": "https://github.com/cambridgetcg/zerone-core/blob/22c6b43724c6681657d3b812467e8154ca4188a1/docs/API.md",
    "sdkReference": "https://github.com/cambridgetcg/zerone-core/blob/22c6b43724c6681657d3b812467e8154ca4188a1/sdk/typescript/README.md",
    "apiScope": "These APIs describe the pinned local source. Public legacy routes and messages may differ."
  },
  "live": {
    "id": "zerone-1",
    "title": "Read the existing network",
    "availability": "public-reads",
    "chainId": "zerone-1",
    "role": "gateway-reader",
    "localSandboxIsReplica": false,
    "endpoints": {
      "rpc": "https://zerone.ai/api/rpc",
      "rest": "https://zerone.ai/api/rest",
      "scope": "The website gateway exposes selected routes, not the whole source API."
    },
    "reads": [
      {
        "method": "GET",
        "url": "https://zerone.ai/api/rpc/status",
        "check": "Check result.node_info.network is zerone-1, block age and catching_up before relying on freshness."
      },
      {
        "method": "GET",
        "url": "https://zerone.ai/api/rest/cosmos/bank/v1beta1/supply/by_denom?denom=uzrn",
        "check": "Read the returned denom and amount; a failed request means unavailable, not zero."
      }
    ],
    "trust": "A custodial network with a disclosed sole-validator trust model. Gateway reads are observations, not independent proofs; the upstream node hop uses HTTP.",
    "clientGuidance": "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.",
    "trustGuide": "https://github.com/cambridgetcg/zerone-core/blob/22c6b43724c6681657d3b812467e8154ca4188a1/deploy/mainnet/TRUST.md",
    "replicaInstallation": {
      "availability": "signed-legacy-observer",
      "reason": "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.",
      "release": {
        "schema": "zerone.observer-publication/v1",
        "releaseId": "zerone-1-observer-20260909.2",
        "toolingCommit": "ed364bc0afec062612b61a309002f23da85acf2c",
        "executableBaseCommit": "2e37c4c86c31e67515d6aa07b6fd406083e012ea",
        "executableSha256": "d6391ea7e500425c898b6b98cb422f76a4262361d45452955182d9b92b743443",
        "manifestSha256": "1300f9381d2e290e1468075806734c586fd92e4df7d0ec55e2f7c7a858df7d92",
        "archiveSha256": "5d874b4c38427117f1567ea0152fc4782e066e4926f3294f1eb776ff6ce22d08",
        "receiptSha256": "c99a1bac24b9ccc71a2769ce10d72f0a947eec8cb4b4afe9df22df2886c0ed0b",
        "expiresAt": "2026-09-16T19:19:13Z",
        "checkpointHeight": 1262000,
        "checkpointHash": "E9068E42337DC1D7A5BB932FBA3416614806FD572D026E4DBCBBC8A5F4921957",
        "releaseUrl": "https://github.com/cambridgetcg/zerone-core/releases/tag/zerone-1-observer-20260909.2",
        "archiveUrl": "https://github.com/cambridgetcg/zerone-core/releases/download/zerone-1-observer-20260909.2/observer-release.tar.gz",
        "guideUrl": "https://github.com/cambridgetcg/zerone-core/blob/ed364bc0afec062612b61a309002f23da85acf2c/deploy/legacy-observer/README.md",
        "buildGuideUrl": "https://github.com/cambridgetcg/zerone-core/blob/ed364bc0afec062612b61a309002f23da85acf2c/deploy/legacy-observer/README-build.md",
        "receiptUrl": "https://github.com/cambridgetcg/zerone-core/releases/download/zerone-1-observer-20260909.2/REHEARSAL-RECEIPT.json",
        "signatureFingerprint": "09327B031F8FF2C2EE49B18F2234027FC5B68C19",
        "chainId": "zerone-1",
        "role": "observer",
        "validatorPower": 0,
        "platform": "linux/amd64",
        "executableProvenance": "Legacy application source plus the dependency patch authenticated inside the release archive.",
        "executableSourceStatus": "reproduced-observer-patch",
        "executableBaseIsUnpatchedSource": true,
        "sameExecutableAsLiveValidator": false,
        "expiryScope": "bootstrap-only",
        "checkpointTrust": "Operator-selected sole-validator checkpoint; the RPC aliases share one upstream.",
        "independentTrustAnchor": false,
        "completeHistoricalReplay": false,
        "transactionAdmission": false,
        "validatorAdmission": false,
        "maintenance": "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.",
        "prerequisites": "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.",
        "verifyCommand": "git clone https://github.com/cambridgetcg/zerone-core.git zerone-observer-tools &&\ncd zerone-observer-tools &&\ngit checkout --detach ed364bc0afec062612b61a309002f23da85acf2c &&\ncurl --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 &&\npython3 -I -c 'import hashlib; from pathlib import Path; assert hashlib.sha256(Path(\"../observer-release.tar.gz\").read_bytes()).hexdigest() == \"5d874b4c38427117f1567ea0152fc4782e066e4926f3294f1eb776ff6ce22d08\", \"Archive digest mismatch\"' &&\npython3 -I -B deploy/legacy-observer/package.py unpack --archive \"$PWD/../observer-release.tar.gz\" --output \"$HOME/zerone-observer-package\" --gpgv \"$(command -v gpgv)\" &&\ncurl --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 &&\ncurl --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 &&\npython3 -I -c 'import hashlib; from pathlib import Path; assert hashlib.sha256(Path(\"../REHEARSAL-RECEIPT.json\").read_bytes()).hexdigest() == \"c99a1bac24b9ccc71a2769ce10d72f0a947eec8cb4b4afe9df22df2886c0ed0b\", \"Rehearsal receipt digest mismatch\"' &&\npython3 -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)\"",
        "initCommand": "python3 -I -B \"$HOME/zerone-observer-package/observer.py\" init --home \"$HOME/zerone-observer-home\"",
        "startCommand": "python3 -I -B \"$HOME/zerone-observer-package/observer.py\" start --home \"$HOME/zerone-observer-home\"",
        "statusCommand": "python3 -I -B \"$HOME/zerone-observer-package/observer.py\" status --home \"$HOME/zerone-observer-home\"",
        "stop": "Press Ctrl-C in the start terminal; keep the package and home. Repeat start to resume the same observer.",
        "completion": "Wait for FOLLOWING: the fresh zero-power observer has synced and advanced with recent blocks. RPC listens at http://127.0.0.1:27657.",
        "expiry": "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."
      }
    },
    "validatorJoining": {
      "availability": "not-open",
      "guide": "https://github.com/cambridgetcg/zerone-core/blob/22c6b43724c6681657d3b812467e8154ca4188a1/deploy/mainnet/JOIN.md"
    },
    "newAccountAdmission": {
      "availability": "paused",
      "websiteSignup": false
    },
    "starterFunds": {
      "availability": "paused"
    },
    "sponsorshipOnboarding": {
      "availability": "paused"
    },
    "rewardClaimOnboarding": {
      "availability": "paused"
    },
    "checkpoint": {
      "kind": "dated-operator-observed-census",
      "applicationHeight": "1261575",
      "bindingHeaderHeight": "1261576",
      "postCommitAppHash": "a381775589d84a74bbf365b9b2add26201465e20980cf50a53544f7a81256106",
      "date": "2026-09-09",
      "currentFreshnessClaim": false,
      "independentTrustAnchor": false,
      "report": "https://github.com/cambridgetcg/zerone-core/blob/22c6b43724c6681657d3b812467e8154ca4188a1/docs/reports/authenticated-ledger-census-2026-09-09.md",
      "settlementHistory": "https://github.com/cambridgetcg/zerone-core/blob/22c6b43724c6681657d3b812467e8154ca4188a1/docs/reports/knowledge-settlement-history-2026-09-09.md"
    }
  },
  "participation": [
    {
      "id": "local-development",
      "title": "Build an agent integration",
      "availability": "available",
      "action": "Run the local node and test against its local RPC using the pinned API and SDK.",
      "url": "https://zerone.ai/nodes/#local",
      "liveTransaction": false
    },
    {
      "id": "existing-account",
      "title": "Use an existing zerone-1 account",
      "availability": "existing-wallet-tools",
      "action": "Connect Keplr to inspect an address and balance. Any supported transaction is a separate action you review and sign.",
      "url": "https://zerone.ai/#wallet",
      "admissionCreatedByConnection": false,
      "fundingCreatedByConnection": false
    },
    {
      "id": "evidence-and-source",
      "title": "Contribute evidence or code",
      "availability": "available",
      "action": "Compare public records, reproduce local results, and contribute a bounded issue or source change. Share public evidence, never keys or private account material.",
      "url": "https://github.com/cambridgetcg/zerone-core/issues",
      "automaticPayment": false
    },
    {
      "id": "participation-principles",
      "title": "Read the participation principles",
      "availability": "static-document",
      "action": "Read the covenant and adapter status. These documents do not enroll an account or open a service endpoint.",
      "url": "https://zerone.ai/#participate",
      "adapterIndex": "https://zerone.ai/standards/adapter-index.v1.json"
    }
  ],
  "boundaries": {
    "readingGuideRequestsWallet": false,
    "liveNetworkMutationBySetup": false,
    "localSetupWritesStateAndCreatesTestKeys": true,
    "privateStateUploadRequired": false,
    "admitsValidatorsOrNewLiveAccounts": false,
    "activatesSuccessorNetwork": false,
    "provesHistoricalPayments": false
  }
}
