Start mining
Mining on Bittensor means running software that competes against other miners on a subnet, and being paid according to how validators score you. This guide covers the full path from an empty machine to a registered, running miner.
What to expect
Mining is a competition, not a passive yield product. You are paid a share of a fixed pool based on how you rank against everyone else on the same subnet, so your earnings depend entirely on out-performing them. Running a stock template unchanged, on a busy subnet, will usually earn close to nothing.
The costs are real and mostly up front:
| Cost | Notes |
|---|---|
| Registration burn | Paid in TAO, recycled rather than refunded. Varies per subnet and changes over time. |
| Compute | Anything from a modest CPU box to multiple high-end GPUs, depending entirely on the subnet. |
| Time | Reading the subnet's code and incentive mechanism carefully is the work that actually determines your ranking. |
Only commit what you can lose
Prerequisites
- A Linux machine you control, with a stable connection and reliable uptime. Most subnet software targets Linux.
- Python 3.9 or newer, plus comfort with the command line, virtual environments, and reading source code.
- TAO in a wallet you control, covering the registration burn with margin for a second attempt.
- Hardware appropriate to your chosen subnet — determined by that subnet's documentation, not by any general rule.
TaoScope does not publish hardware requirements
1. Install the tooling
Work inside a virtual environment so that Bittensor's dependencies stay isolated from the rest of your system.
python3 -m venv bt-env
source bt-env/bin/activateThere are two packages. bittensor is the Python SDK that subnet code imports; bittensor-cli provides the btcli command you will use for wallets and registration.
pip install bittensor bittensor-cli
btcli --versionCommand names vary between versions
btcli command surface has changed across releases. If a command in this guide is not recognised, run btcli --help or btcli subnets --help to find its equivalent in your version.2. Create a wallet
A Bittensor wallet has a coldkey that holds funds and one or more hotkeys that operate on the network. Your miner needs its hotkey on the machine; your coldkey should never be there.
btcli wallet create --wallet.name my-cold --wallet.hotkey my-miner
# Verify and check funds
btcli wallet list
btcli wallet balance --wallet.name my-coldStore both mnemonics offline
3. Choose a subnet
This decision matters more than any optimisation you will make later. Choosing a subnet whose task matches skills you already have beats choosing one with a headline emission number.
btcli subnets list
btcli subnets show --netuid <NETUID>Read at minimum:
- The subnet's repository, especially the validator code — it defines exactly what is rewarded.
- The README's stated hardware and software requirements.
- The subnet's Discord, where operators discuss what is actually working.
- The live registration cost, free UID slots, and immunity period.
TaoScope's Choosing a subnet guide walks through how to read those numbers, and the subnet explorer lets you filter by open slots, registration cost, and miner pool size.
4. Rehearse on the test network
Bittensor runs a public test network that uses the same software with valueless tokens. Registering and running there first costs nothing and is the single highest-value step in this guide.
Most commands accept a network flag, commonly --subtensor.network test. Confirm the exact flag and the test netuid in your subnet's documentation, since subnets use different netuids on test and mainnet.
Your immunity period is short
5. Register on mainnet
Registration burns TAO to claim a UID slot. Check the live cost immediately before you submit, because it rises with each registration.
btcli subnets show --netuid <NETUID>
btcli subnets register \
--netuid <NETUID> \
--wallet.name my-cold \
--wallet.hotkey my-miner- Register your own hotkey. Miner emission aimed at owner-associated hotkeys is never paid out.
- If the subnet is full, your registration evicts the lowest-scoring non-immune neuron.
- The burn is recycled into the protocol supply and cannot be reclaimed.
The mechanics are covered in detail in Registration and UID slots.
6. Run and monitor your miner
Clone the subnet's repository, install its dependencies, and start the miner with your wallet. The exact entry point is defined by the subnet — the pattern below is typical, not universal.
git clone <SUBNET_REPOSITORY>
cd <SUBNET_DIRECTORY>
pip install -r requirements.txt
python neurons/miner.py \
--netuid <NETUID> \
--wallet.name my-cold \
--wallet.hotkey my-miner \
--logging.debugRun it under a process supervisor such as systemd or pm2 so it restarts automatically. Downtime costs you score immediately, and validators do not wait.
What to watch
- Your incentive score. It is the value that determines your pay, and it will read zero for a while after registering.
- Your rank against the field, visible on the miner leaderboard on your subnet's TaoScope page.
- Your logs, for validator requests arriving and being answered within the latency budget.
- How close you are to the eviction boundary once your immunity period ends.
Zero incentive at first is normal
7. Improve your ranking
Successful miners rarely write everything from scratch. They start from the baseline the subnet provides, measure where they lose points, and fix one bottleneck at a time.
- Read the validator's scoring function first. It is the specification you are actually being graded against — everything else is inference.
- Instrument your miner so you know your own latency and failure rate before guessing at quality problems.
- Change one variable at a time and compare incentive across several epochs; single-epoch noise is large.
- Watch what top-ranked miners do differently where the subnet makes that observable.
Latency is frequently the cheapest win
Common pitfalls
| Mistake | Consequence |
|---|---|
| Registering before the miner works | The immunity period is consumed by debugging, and eviction follows. |
| Assuming default hyperparameters | Tempo and immunity period are set per subnet; the defaults are frequently not what a given subnet uses. |
| Optimising before reading the validator code | Effort goes into something the scoring function does not reward. |
| Keeping the coldkey on the mining machine | A compromised server becomes a drained wallet. |
| Treating alpha earnings as TAO | Rewards are paid in the subnet's alpha token, whose TAO value can fall and which incurs slippage when sold. |
| Running without a supervisor | A crash at 3am costs a full night of score. |
Verify before you spend
Last updated August 7, 2026