Miner and judge

Run a miner

A Dendra miner answers AI requests with an open model on your own machine, and a judge votes on a random sample of other miners' answers.

This page is for anyone with an NVIDIA GPU, or with a computer that has enough memory to judge on its CPU.

Already installed? Kit v0.2.2 is required from 24 October 2026, 12:00 UTC, and an older kit does not update itself. Update an installed kit.

How it works

Your machine runs an open model and answers the requests the chain assigns to it. The work is paid in DNDR, the network's token.

An NVIDIA GPU mines

The hardware probe reads the card's memory and picks the model it can serve.

The judge runs on the CPU

With or without a GPU. The kit seats it by default on a machine that can judge, and it votes when the chain draws this miner onto a jury.

A jury checks a sample

A random sample of answers is checked by a jury of other present miners. A verdict needs at least audit_min_quorum jurors voting, and the jury excludes the miner under audit. A miner convicted of cheating loses part of its stake.

It joins by itself

The miner creates its own key, takes its stake from the public faucet and registers on chain by itself. It only opens outbound connections: no inbound port to open, and a home router is fine.

What you need

The kit prints its floors and decides the role of your machine.

Machine
An NVIDIA GPU to mine. Without a GPU, a machine can only judge, and it needs at least MOE_CPU_MIN_RAM_MB of system RAM; below that floor the kit refuses it and changes nothing.
System
Ubuntu, Debian or HiveOS. On Windows, the installer sets up WSL 2 and Ubuntu. Docker with Compose v2: the Linux installer adds it. Under Windows the judge counts the RAM of WSL 2, about half of the PC's by default; the memory= line of the [wsl2] section of %UserProfile%\.wslconfig raises it.
Disk
Free disk above MIN_DISK_GB to mine, and above MIN_DISK_GB_JUDGE for the judge role, which pulls a second, larger model. Both are set in deploy/install.sh.
Network
Outbound connections only, to the relay, the chain and the faucet. No wallet is needed: one is only an optional address for season rewards.

Check your machine

On Linux, from a clone of the repository (on Windows, skip this: install.ps1 runs the probe once WSL is ready):

Hardware probe
$ git clone https://github.com/DendraNetwork/dendra-network.git && cd dendra-network
$ bash deploy/hw_probe.sh
$ bash deploy/hw_probe.sh --judge-floor-mb
$ grep -E '^MIN_(DISK_GB|DISK_GB_JUDGE|RAM_MB)=' deploy/install.sh

Read the -> role line of the probe's report: mine only, mine and judge, judge on the CPU, or refused. The second command prints the judge's RAM floor in MB, the third the installer's disk and RAM floors.

Install

Pick one path. Each one ends in deploy/join.sh, which joins the network.

Download the script, read it, then run it: the installers change nothing until you pass --yes (-Yes on Windows). There is no curl … | sh, since it would run code you never read.

Ubuntu or Debian

Four steps. Nothing is installed until the last one.

  1. Download the installer

    Linux
    $ curl -fsSLO https://raw.githubusercontent.com/DendraNetwork/dendra-network/main/deploy/install.sh
  2. Read it

    Run this on its own: a pager swallows anything pasted after it. Quit with q.

    Linux
    $ less install.sh
  3. See the plan

    This changes nothing. It reads the machine and lists what it would install.

    Linux
    $ bash install.sh
  4. Install and join

    It installs Docker, and the NVIDIA container toolkit when there is a GPU, clones the repository into ~/dendra-network, then runs join.sh. On a desktop session it also adds the Dendra app (start, stop, health, balance, season progress).

    Linux
    $ bash install.sh --yes

    To mine only on a machine with a GPU, add --no-judge.

Windows

install.ps1 installs WSL 2 and Ubuntu, then runs install.sh inside it.

  1. Download and read it

    Save install.ps1 into a folder and read it.

  2. See the plan

    Open PowerShell as administrator, in that folder. This changes nothing.

    PowerShell
    PS> powershell -ExecutionPolicy Bypass -File .\install.ps1
  3. Install and join

    PowerShell
    PS> powershell -ExecutionPolicy Bypass -File .\install.ps1 -Yes

    It stops for a restart, then for Ubuntu's first launch, where you create your Linux user: run the same command again each time. To mine only on a PC with a GPU, add -NoJudge.

HiveOS

Each release publishes a HiveOS package. Create a flight sheet with these fields.

Installation URL, for v0.2.2
https://github.com/DendraNetwork/dendra-network/releases/download/v0.2.2/dendra-0.2.2.tar.gz
FieldValue
MinerCustom
Installation URLThe package of the release, above.
WalletYour payout address, dendra1…, where the season pays this rig. A public address only, never a recovery phrase.
Wallet and worker template%WAL%
Pool URLEmpty.
Extra config argumentsYES=1, without which the package only prints the installer's plan. Add ROLE=miner to decline the judge.

The payout address is locked with its first declaration and cannot be corrected: check it before YES=1. Every field, and how to check the package before using its URL: deploy/hiveos/README.md.

By hand, from a clone

For a machine that already has Docker with Compose v2, and the NVIDIA container toolkit to mine.

  1. Clone the repository

    Linux
    $ git clone https://github.com/DendraNetwork/dendra-network.git && cd dendra-network
  2. Read the launcher

    Run this on its own line, then quit with q.

    Linux
    $ less deploy/join.sh
  3. Join the network

    Linux
    $ CONFIG_URL=https://testnet-api.dendranetwork.com/network-info.txt bash deploy/join.sh

Check

At the end, join.sh prints [OK] miner alive and registered.

Later, run the health check from your clone: ~/dendra-network when an installer made it, inside Ubuntu on Windows.

Health check
$ cd ~/dendra-network
$ bash deploy/testnet-miner/miner_health.sh

It checks the containers, your kit against the network's, the registration, the model and the judge, and says what to fix. To follow the miner's log:

Miner log
$ docker compose -f deploy/testnet-miner/docker-compose.yml logs -f miner

"Waiting for jobs" is normal: jobs follow traffic.

Keep your keys. The Docker volume dendra-miner_miner-keys holds your miner's identity. Never run docker compose down -v: it deletes that volume, and a new identity needs a new stake.

The judge

On a machine that can judge (bash deploy/hw_probe.sh --can-judge prints true), the kit seats the judge by default.

It runs on the CPU with the model the chain's model registry names, and it votes when the chain draws this miner onto a jury.

A miner without an active judge is drawn onto juries all the same, and votes nothing there: a silent seat. Only a posted verdict earns a juror reward.

What the judge produced on chain, read with the height of each figure:

Judge status
$ bash deploy/testnet-miner/judge.sh status

To decline the seat, then to take it again:

Decline the seat
$ bash deploy/testnet-miner/judge.sh off
Take it again
$ bash deploy/testnet-miner/judge.sh on

On a machine without a GPU, judging is the only role, and judge.sh off is refused there.

Rewards, in brief

The Final Testnet Season pays miners in testnet DNDR for verified work, juror verdicts, proven presence and, from a day the season announces, an active judge. It pays by a formula published in advance, every seven season days, until 7 November 2026 at 23:59 UTC, by the chain's block times.

Each testnet DNDR the season paid becomes one mainnet DNDR, credited in the mainnet genesis to the address that received it. Your wallet balance is not your reward: faucet drops, the stake, job pay and transfers do not convert. Rates, caps and how to check a payment: Final Testnet Season.

Update

Kit v0.2.2 is required from 24 October 2026, 12:00 UTC. A v0.2.0 or v0.2.1 kit does not update itself: update an installed kit in two commands.

From v0.2.2 on, the kit checks for a newer signed release once a day and updates itself; a HiveOS rig updates through its package.

Help

Ask in #operator-support on the Discord. Say where it stopped, and paste the output of these two commands, run from your clone:

What to paste
$ bash deploy/hw_probe.sh
$ docker compose -f deploy/testnet-miner/docker-compose.yml logs --tail 40 miner