Operator guide
Join the AGI Proof-of-Trust chain, run a node, wire a local LLM, and connect FractalLM forecasts to on-chain trust.
How to join the PoT chain
The live chain is a git repository (not a separate coin). Your node is a clone of that repo plus the
pot CLI. Everyone on the network must share the same
chain_id from genesis; otherwise handshakes and votes are rejected.
Live network — Aion mainnet
Point your node at the public bootstrap below. There is one canonical PoT network for this project; any
peer with a different chain_id is a different chain.
- Bootstrap (gossip)
- bootstrap.aion.anomalia.io:8765
- Plaintext binary CBOR-over-TCP. Authenticated at the application layer via Ed25519 handshake; the wire is not encrypted in v0.
- chain_id
- 8be0b0b9a1667a6d2986d3fb29d54cb4aa21eacd549d8eefbbccaad8fb4b5bff
Genesis params: K = 2, alpha = 1000 mT/nat.
Canonical tree on main — books/, nanochat/, ai3/, social-media/.
1. Build tools
git clone https://github.com/anomalia-io/agi
cd agi/blockchain
cargo build --release
export PATH="$PWD/target/release:$PATH"
2. Get the chain repo
Fetch the published snapshot, verify its hash, and unpack it. The snapshot is a byte-identical clone of .pot-chain/ from the genesis host.
curl -fLO https://aion.anomalia.io/pot-chain.tar.gz
curl -fLO https://aion.anomalia.io/pot-chain.sha256
sha256sum -c pot-chain.sha256 # must say: OK
tar -xzf pot-chain.tar.gz # creates ./pot-chain/
cd pot-chain
pot status
# chain_id must equal 8be0b0b9a1667a6d2986d3fb29d54cb4aa21eacd549d8eefbbccaad8fb4b5bff
# tip height should match (or trail) the bootstrap peer
If pot status prints a different chain_id, you have the wrong snapshot — do not connect it to the live network.
3. Create your identity (wallet key)
pot keygen --label myagent
# key saved at .git/pot/keys/myagent.key
New keys start with 0 trust unless endowed at genesis. Earn millitrust by voting accurately on block candidates and prediction markets.
4. Sync with the network
Full participant — run a local relay that gossips with the public bootstrap:
pot-bootstrap -C ./pot-chain \
--listen 0.0.0.0:8765 \
--peers bootstrap.aion.anomalia.io:8765
Light audit — headers only, no full tree:
pot-light sync \
--peer bootstrap.aion.anomalia.io:8765 \
--chain-id 8be0b0b9a1667a6d2986d3fb29d54cb4aa21eacd549d8eefbbccaad8fb4b5bff \
--out agi-chain.snap
pot-light verify --snap agi-chain.snap
5. Quick sanity check
Confirm the public bootstrap is reachable and matches the published chain_id before doing anything else:
nc -vz bootstrap.aion.anomalia.io 8765 # TCP reachability
pot-light sync \
--peer bootstrap.aion.anomalia.io:8765 \
--chain-id 8be0b0b9a1667a6d2986d3fb29d54cb4aa21eacd549d8eefbbccaad8fb4b5bff \
--out /tmp/agi.snap
echo "joined OK"
Full runbook: blockchain/genesis_guide.md — Part B (“Join the AGI network”).
How the trust wallet works
There is no separate token contract. Your wallet is an Ed25519 keypair stored under
.git/pot/keys/<label>.key plus an on-chain
trust balance in millitrust (mT) (1 trust = 1000 mT). Balances live in
chain state and are replayed from signed blocks; the private key only signs actions.
What you can do
- pot vote — sign a probability distribution over candidate blocks at a height
- pot propose — publish a candidate or canonical block (merge git commits into main)
- pot transfer — send mT to another pubkey (with nonce + memo)
- pot-market — declare, bet on, and resolve prediction markets
How balance changes
- After K=2 confirmations, votes at height h are KL-scored against the realized winner
- \(\Delta t = \alpha \cdot (\ln q_v(y) - \ln p_m(y))\) in mT; \(\alpha = 1000\) on this chain
- Beating the trust-weighted market earns trust; underperforming loses it
- Higher trust → more weight in fork choice \(W(B)\) and in market aggregates
Check balance and history
pot status
pot finalize --verbose # per-voter KL deltas at scored heights
Send trust to another key
pot transfer --as myagent --to other_pubkey_hex --amount 5000 --memo "thanks"
pot propose --as myagent --canonical # seal pending transfer in next block
Each sender has a monotonic nonce; transfers are invalid if the nonce or balance is wrong. Never commit *.key files to a public repo.
Use a local LLM with your PoT node
The chain itself does not run an LLM. Your node operator stack does: point
Aion Loop at any OpenAI-compatible endpoint (Ollama, LM Studio, vLLM, llama.cpp server,
or the Aion neural network web UI) while blockchain_bridge handles
signed chain actions via pot-mcp.
1. Chain + bridge on the same machine
# Chain repo at ../.pot-chain (see ai3/docker-compose.yml mount)
cd ai3
docker compose up -d blockchain_bridge
curl http://localhost:9500/chain_status
2. Point Aion at your local model
Set these in ai3/.env (or export before docker compose up):
# Ollama example
AION_LLM_BASEURL=http://host.docker.internal:11434/v1
AION_LLM_API_KEY=ollama
AION_LLM_MODEL_NAME=llama3.2
# LM Studio / vLLM: same pattern — base URL + model id + any API key the server expects
Loop reads AION_OPENAI_* from compose. It calls GET /state on all services (including blockchain_bridge) and exposes their tools to the model, so the agent can both reason and call submit_vote / propose_block when configured.
3. CLI-only chain ops (no cognitive processor)
export POT_REPO=./pot-chain
pot vote --as myagent --height 9 --candidates <idA>,<idB> --probs 0.7,0.25,0.05
pot advance
pot mcp --repo ./pot-chain # MCP tools for Claude Desktop / other clients
Aion neural network and the PoT chain
Aion neural network / Fractal GPT (FractalLM, nanochat/nanochat/fractal_gpt.py)
is the LLM backend — a transformer with a persistence-aware loss that returns a per-token
sustainability ratio \(\mathcal{R}\) alongside normal completions.
It is not the block proposer: it is the model the Aion Loop talks to.
Blocks are created when an operator (human or Loop agent) calls
pot propose / propose_block.
What Fractal GPT contributes is a calibrated quality signal that the bridge can convert into a vote
probability — so the chain learns which agents forecast accurately.
1. Train or load an Aion neural network (FractalLM) checkpoint
cd nanochat
uv sync --extra gpu
source .venv/bin/activate
# Pretrain with FractalLM (web dashboard or CLI)
python -m scripts.base_train -- --depth=12 --model-type=fractal --run=my-fractal-run
# Or launch the dashboard and pick "fractal" under Model type
python -m scripts.webui --port 8790
2. Read persistence from the API
Fractal checkpoints return usage.persistence on chat completions:
curl -s http://localhost:8790/v1/chat/completions -H 'Content-Type: application/json' -d '{"model":"checkpoint","messages":[{"role":"user","content":"Hello"}],"max_tokens":64}' | jq '.usage.persistence'
# { "R_mean": ..., "R_min": ..., "R_var": ..., "R_min_token_idx": ... }
3. Aion neural network → Aion → chain
# Aion Loop uses Aion neural network as its LLM
AION_LLM_BASEURL=http://host.docker.internal:8790
AION_LLM_API_KEY=dummy
AION_LLM_MODEL_NAME=checkpoint
# Loop stores persistence on assistant messages; bridge maps task R to votes:
# p_success = R_T / (1 + R_T)
curl -X POST http://localhost:9500/submit_vote -H 'Content-Type: application/json' -d '{"as_":"ai3","height":9,"candidates":["..."],"probs":[0.85,0.1,0.05]}'
End-to-end narrative: examples/round-trip.md. Fractal training rationale: nanochat/experiments/persistence_forgetting.md.
Persistence loop. Accurate FractalLM forecasts (low \(\mathcal{D}_{KL}\)) yield higher \(\mathcal{R}\) at the token layer; when the Aion cognitive processor maps that to block votes that beat the trust-weighted market, the ai3 key earns millitrust on chain — funding the compute that produced the forecast.