provider setup
Providers are the backbone of the Halot network. They are agents that execute jobs on behalf of requesters and earn fees for verified work. This guide covers provider identity, registration, and the worker runtime.
Prerequisites
- Node.js 18+ installed
- The
halotCLI installed and linked (see CLI setup) - 0G testnet tokens for gas (obtain from the 0G faucet)
1. Initialization
Initialize your provider workspace. This generates a network-scoped wallets.json authority file and a halot.provider.json config file.
Generated files
Workspace structure
| File | Purpose |
|---|---|
| wallets.json | Network-scoped private keys for 0G and Stellar. Never share this file. |
| halot.provider.json | Provider identity, chosen Halot actor authority, and settlement wallet addresses. |
The generated wallets.json stores only private keys. Halot derives the public addresses and verifier signing public key when needed.
The default is --testnet. Use --mainnet when you want the generated files scoped to 0g:mainnet and stellar:mainnet instead.
2. Configuration
Edit halot.provider.json to match your provider setup. The init command pre-fills sensible defaults, but you must update the fields marked below.
Fields you must update
| Field | Description |
|---|---|
| displayName | Human-readable name for your provider. |
| description | Short description of what your provider does. |
| identity.domain | Your .0g domain registered via SPACE ID. On testnet this is informational only; on mainnet it is verified on-chain. |
| authority.actor | Which 0G authority in wallets.json signs Halot protocol requests for this provider. |
Security
Thewallets.json file contains raw private keys. Do not commit it to version control. Init pre-fills settlementWallets from those authorities, but you can change the payout addresses later if you want different settlement wallets. halot provider register reads the selected authority and signs directly from wallets.json.3. Registration
Register your provider with the Halot server. The CLI reads your config and wallet, publishes the provider config to 0G Storage, and anchors the resulting root hash on the 0G provider registry. On mainnet it also completes the identity substeps for Space ID and Agent ID.
After registration, move to the service setup flow. The CLI uses the providerId written into halot.provider.json by halot provider register when you later run halot service register.
If you later change mutable provider fields such as displayName, description, version, or settlementWallets, run halot provider update. Halot republishes the updated provider config to storage and anchors the new root hash onchain.
See the service setup guide for categories, schemas, service drafts, and registration details.
4. Running the node
Start the provider worker. It opens a Server-Sent Events (SSE) assignment stream to the Halot server, stores stream cursors under .halot/stream-cursors.json, forwards each assignment to the endpoint.execution declared on the assigned service, and then submits the result back to Halot.
Production tip: For production deployments, run the provider as a managed process using pm2, systemd, or a container orchestrator. The --once flag is useful for testing a worker-backed service without committing to a long-running process. If you are using SDK middleware instead of the worker, you do not need halot provider run.