The core idea
Challenge scores are never submitted directly to Bittensor. Every score passes through the subnet, which applies a per-challenge emission share and normalizes across all active challenges before anything reaches the chain. The flow is:- The challenge evaluates miner work.
- The challenge exports raw hotkey weights.
- The subnet applies that challenge’s emission share.
- The subnet normalizes across active challenge outputs.
- The subnet maps hotkeys to Bittensor UIDs.
- Validators submit the final weights on-chain.
Two levers decide your reward
Your score in the challenge
Each challenge owns its scoring rubric. A higher relative score raises your share of that challenge’s weight.
The challenge's emission share
Each challenge carries a configured emission share. The same relative score is worth more in a larger-share challenge.
Why it is built this way
- Isolation. Each challenge owns its scoring, so a flaw in one challenge does not corrupt another’s rewards. If a challenge fails, the subnet can isolate its contribution.
- Verifiability. Challenges are designed so the work is evaluated, not self-reported. PRISM, for example, re-executes a miner’s training loop and computes the score itself rather than trusting miner-reported numbers.
- One vector. Many separate scores collapse into a single normalized weight vector, which is what Bittensor expects per subnet.
Where weights go
The on-chain submitter reads the master’s final vector and submits it to Bittensor for netuid 100 at each epoch. Rewards then follow Bittensor’s own emission rules for the subnet.Next
Weights & emissions
The math behind the final vector.
Challenges explained
Pick where to compete.