Manas Network
The Manas network is open: guardians can join and leave whenever they choose without harming the network. As a guardian you help build a data availability (DA) layer with customizable privacy and security. You can also offer your hardware for compute or verification work, which grows the data, compute and AI ecosystem on Palliora. Follow the rules set by the runtime and you will not face any negative economic impact. This page covers how to run your own guardian from start to finish: the hardware it needs, starting the node and its compute services, joining on chain, and keeping it healthy afterwards.You do not build anything. The guardian node and every compute service ship as prebuilt container images on a public registry. All you need is Docker, the two files attached below, and the
palliora-cli npm package.What a guardian runs
A guardian machine runs one guardian node plus the services that execute compute jobs. All of them start together from onedocker-compose.yml using the operator profile.
System Requirements
- Standard Guardian
- Compute
- Verifier
Supported Platforms
The node runs in containers. Images are published for:- Linux/amd64: Ubuntu 24.04 (reference platform)
- Mac/arm64
Pre-Requisites
- Docker Engine with the Compose plugin
- Nvidia drivers and the NVIDIA Container Toolkit (Nvidia GPUs on Linux only)
- Ollama, with your models already pulled
- Node.js 22 and npm
palliora-cli
Install Docker on macOS: https://docs.docker.com/desktop/setup/install/mac-install/
Install Docker on Linux: https://docs.docker.com/engine/install/ubuntu/ On Linux, let your user run Docker without
sudo, and note the group ID of the Docker socket. You will need it later as DOCKER_GID:
Download and install Ollama: https://ollama.com/download Node.js
Install Node.js: https://nodejs.org/en/download NOTE: Installing with nvm is recommended.
wss://manas-rpc.palliora.org by default. To send a command through a different node, set PALLIORA_WS. You will need this for the guardian steps below.
Amounts are in PALI. Every
--amount and --fee flag takes whole PALI and accepts decimals up to 18 places. The CLI converts them to base units for you. Older versions of this guide used base-unit numbers such as 1000000. Do not use those numbers anymore.Setup a Guardian Node
To become an active guardian, complete these steps in order:- Create and fund an account
- Bond tokens
- Prepare the machine and configure
.env - Set up Ollama
- Generate session keys and join as a guardian
- Start the full stack
- Verify
docker-compose.yml
The compose file. Use the same file on every machine; the
.env file chooses the role.palliora-manas.json
The Manas chain spec.
Always use the chain spec from this page. The spec contains the network’s runtime. A spec that differs by even one byte creates a separate chain, and your node never connects to Manas. No error is shown: the node just stays at
peers: 0. When the network is upgraded, this attachment is replaced; download it again.~/.palliora/account.key. To use a different location, set PALLIORA_DIR. Back up this file. Anyone who has it controls your stake.
To use an account you already have, import it instead:
--amount must be at least the minimum guardian bond. To change your stake later:
Configure
.env
Create ~/node/.env next to docker-compose.yml. Use absolute paths (no ~ or $HOME), because Docker resolves them on the host.
Configure result submission
The orchestrator’s result relay submits
compute.result transactions from a separate account. That account needs PALI to pay fees.
SUBMITTER_ACCOUNT_ID: its SS58 address.PRIVATE_KEY: its private key.
address in SUBMITTER_ACCOUNT_ID and privateKey in PRIVATE_KEY.
.env holds private keys. Restrict who can read it (chmod 600 .env), and never commit it or share it.Never open the RPC port to
0.0.0.0/0. A cloud security group that allows all inbound traffic does exactly that, and exposes your node’s keystore to the internet.host.docker.internal, so on Linux it must listen on an address other than 127.0.0.1:
-
Pull the models you want to serve (for example
llama3.1:latest): -
Start the server so containers can reach it:
If you installed Ollama as a systemd service, set
Environment="OLLAMA_HOST=0.0.0.0:11434"withsudo systemctl edit ollama, then restart it.
- The key is in the node’s keystore.
- The key is registered on chain for your account with
session.setKeys.
1
Start a temporary node
Make sure nothing else is using ports 9947 and 30336, then run this from It uses the same database directory as the real guardian. That matters because your node’s peer ID is stored there, and the join step records that peer ID on chain.
~/node:2
Wait for it to sync
isSyncing is false and peers is above zero.3
Join as a guardian and register the keys
Send the join through your own node:This single command does three things:
The worker step reads the peer ID from the node you connect to. If you run
join-guardian against the public RPC or any other node, it links the wrong node to your account, and your guardian skips every agreement without logging why.Afterwards, ~/my-guardian/keystore/ contains five key files (babe, gran, guar, imon and audi key types). Back up this directory.4
Remove the temporary node
How your guardian decides on an agreement that names it:
- The submitter cannot afford the agreement: ignored.
- Dormant contracts: always accepted. No rate applies to them.
- Offered rate at or above your threshold for that compute type: accepted.
- Offered rate below your threshold: rejected.
- No fee set for a compute type: any rate is accepted for that type.
- The agreement carries a price-oracle quote: the quoted rate is used instead of your threshold. If the quote cannot be fetched, your own threshold applies.
operator profile started what you expect:
Abnormal Closure on host.docker.internal:9947. That is normal: the compute services start before the guardian’s RPC is ready, and they reconnect by themselves.
Verify your guardian
1. The node is synced and has peers. peers should rise above 1 within a few minutes as other guardians connect. Stuck at 1 means only the bootnode reaches you; see Troubleshooting.
system_chain should return Palliora Manas Network, and the genesis hash should match what the public RPC returns:
Having peers does not mean you are registered. A guardian that has not joined still syncs and connects to peers, but it is never named in
guardianList and never receives work. Guardian preferences take effect at the next era (an era is three 1-hour sessions), so give a fresh join up to about three hours.7777 and 4141 return 404 on /. That is healthy: they only answer on their own routes.
Operate and Maintain
Day-to-day checks
Every service uses
restart: always, so the stack comes back on its own after a reboot or crash. Ollama is not part of the stack; make sure it also starts at boot (for example with its systemd service).
The node logs at trace level by default. To make the logs quieter, set GUARDIAN_RUST_LOG=dac_guardian=info in .env.
Changing fees or compute types
Run join-guardian again with the new values, through your own node. You do not need --rotate-keys this time; your keys are already registered.
--reward-destination when bonding.
Updating the node and services
When a new image is released, update NODE_IMAGE in .env if the tag changed, then:
latest tag, so pull picks up new versions. Job containers are left in place on purpose; remove old compute-<block>-<index> containers when they pile up.
When your public IP changes
Other guardians reach you only at PUBLIC_IP. If the machine’s public address changes, for example when an AWS instance without an Elastic IP is stopped and started, the node keeps syncing from the bootnode, but no guardian can connect to it. Update .env and recreate the node:
palliora-manas.json), your old database cannot be used, and everything you did on chain has to be done again: