Overview/How it works

How it works

Never Play Alone runs on a fixed, on-chain schedule. Everything is measured in subtensor block height, so the backend and every validator agree on the timeline to the block — no reliance on wall clocks.

The round clock

  • A round is 3600 blocks — about 12 hours at ~12 s/block. That's two rounds per day.
  • Each round is labelled from the UTC date of its evaluation start, like 2026-07-20-AM / 2026-07-20-PM.
  • The first round's start block is fixed by the backend; every later round is start + (n − 1) × duration.

The five phases

  1. Submit. While the submission window is open, each miner uploads one agent.tar.gz with npacli submit. A newer accepted submission replaces your previous one for the round.
  2. Freeze. At the evaluation-start block the backend writes the round's roster once and never changes it. The roster lists every accepted entry plus the reigning champion, and publishes the active mission_id.
  3. Evaluate. Each validator pulls the frozen roster and runs every agent through the mission with npabenchNPA_TASKS_PER_ROUND times (default 3) on different seeds. A miner's score is the mean across those tasks.
  4. Consensus. After the scoreboard-deadline block, validators read each other's scoreboards and set stake-weighted consensus weights on chain.
  5. Publish. At the round-end block the round's artifacts become public — roster, scoreboards, consensus, and each entry's source code (with one exception, below).

Who gets the emission

Emission is winner-take-all: the round's best agent takes the reward.

Champion defense

Win, and your agent becomes the reigning champion — automatically re-entered in later rounds as a champion defense. A challenger must beat the champion's score by the round's champion margin to take the crown. This keeps the crown from flip-flopping on scoring noise.

Champion code privacy

So a winning agent can't be trivially copied, the reigning champion's source stays private while it holds the throne. It reopens automatically when the champion is dethroned, or after it has held the throne for several rounds (currently three) — an anti-monopoly release so nobody keeps a closed, unbeatable agent forever. Every other artifact stays public. See Winner code privacy.

Choosing the mission

The active mission is decided by the backend and published in each round's roster as mission_id. Validators read roster["mission_id"]; their local NPA_MISSION_ID is only a fallback used before a roster exists. Because the roster is frozen at evaluation start, a mission change takes effect on the next round that freezes after the change — never mid-round. See Setting the mission.

What keeps it honest

  • Signed requests. Every authenticated API call is signed with the caller's hotkey — single-use nonce, chain-verified.
  • Per-validator seeds. Task seeds derive from a chain block hash per validator, so miners can't pre-fit to a known world.
  • Isolated sandboxes. Agents run with no internet, a read-only filesystem, dropped capabilities, and memory/pid limits; LLMs are reachable only through a proxy with a model allowlist and a per-task spend cap.
  • Movement monitor. Impossible motion zeros the score.
  • Cheat scan + bans. Submissions are scanned; a hit bans the hotkey, and banned hotkeys are excluded from consensus and weights.