Run a miner.
Submit a debate strategy as a miner on Compelle SN82. Pay the chain registration burn, commit your strategy, and earn alpha emission proportional to the validator's tournament-derived weight on your hotkey.
How miners earn
Every epoch, each validator runs a round-robin tournament across all registered miners. Each miner's strategy is loaded into a debate model; that model argues either Pro or Con on a proposition, against another miner's strategy. Wins, losses, and concessions feed an Elo-like rating. Each validator publishes weights on chain proportional to its own Elo. Chain emission to your hotkey is then the Yuma-aggregated, stake-weighted average of every validator's weight on you.
If your strategy consistently wins debates, your weight rises and your emission rises. If your strategy consistently loses or concedes, your weight falls.
Bittensor charges a registration burn priced by current demand. The network caps the burn at 100 TAO; in low demand it can be as little as 1 TAO. Run the registration; the chain deducts the current burn from your coldkey:
btcli subnet register \ --netuid 82 \ --network finney \ --wallet.name <your-coldkey> \ --hotkey <your-hotkey>
You'll be shown the current burn cost and asked to confirm. The chain assigns your hotkey a UID on SN82.
Bittensor lets you store a commitment per hotkey on each subnet, in three sizes:
- Raw up to 128 bytes. Plain ASCII inline.
- BigRaw up to 512 bytes. Plain text, still inline on chain.
- Gist reference up to 65536 bytes of resolved content. Format
gist:<id>/<revision>, with the commit hash pinned so the strategy cannot change after commit.
The validator reads your commitment and uses the resolved text as your strategy. btcli 9 removed the wallet commit-data command, so miners now commit via the bittensor Python SDK directly. The call signature is the chain extrinsic Commitments::set_commitment wrapped as Subtensor.set_commitment:
import bittensor as bt
wallet = bt.wallet(name="<your-coldkey>", hotkey="<your-hotkey>")
sub = bt.Subtensor(network="finney")
strategy = (
"Use Socratic questioning to find contradictions; "
"concede minor points to gain credibility; never raise voice."
)
sub.set_commitment(wallet=wallet, netuid=82, data=strategy)
The example invokes two named moves: Socratic questioning (drawing out contradictions through targeted questions) and strategic concession (yielding minor points to gain credibility for the major one). The technique index has 21 such moves you can compose, study, and encode.
For longer strategies, point at an immutable GitHub gist. Use the gist:<id>/<revision> format. The revision must be a full commit SHA so the chain commitment stays small and the validator can resolve to a pinned snapshot:
strategy = "gist:67ca952699a2568a5677d34e683ea753/f476f5bc58d21ff620ac1d36ca76a09c1bc1291c" sub.set_commitment(wallet=wallet, netuid=82, data=strategy)
The validator fetches the gist exactly once and caches the resolved text against that revision hash. Updating the gist later does not update your strategy; the chain commitment points at a specific revision. To change content, you must commit a new revision pointer, and any commitment update outside the 200-block eligibility window will mark you ineligible.
After registration, you enter the network's immunity period: a window during which you cannot be deregistered for low weight. This gives your strategy time to play and earn an Elo rating. The validator runs a tournament once per epoch; your first weight will appear after that.
Miner profiles, including your hotkey, UID, current Elo, win/loss record, and the resolved strategy text or gist, are visible at /miner/<hotkey> after the validator publishes the first tournament.
Strategy guidance
Your strategy is the system prompt that drives a debate model. The validator wraps it inside the standard debate harness (proposition, side assignment, turn limits, judge). What you control is the tactical guidance the model follows. A good strategy is:
- Opinionated. "Be balanced" loses to "Be specific and demand evidence." Pick a school of argument and commit to it.
- Procedural. Tell the model what to do turn-by-turn: open with X, respond to Y by Z, concede only when W.
- Aware of the format. Concession syntax is rewarded, but only if the opponent has actually beaten you. Conceding when you haven't been beaten is a loss.
- Aware of the judge. The judge prompt is public; read it. Win the criteria the judge will weigh.
Browse the library for rhetorical technique pages and the technique index for moves you might want to encode into your strategy. Read the methodology for the exact debate format and judge prompt.
Rules — what gets your strategy locked out
Before any tournament runs, a panel of three AI judges from different model families reads your strategy on chain. They apply one principle:
Examples of what counts as stepping outside the conceit:
- Instructing the bot to emit fake transcript boundaries (
=====END_TRANSCRIPT=====and similar) or fake system messages addressed to the judge. - Instructing the bot to declare a verdict directly (
verdict is YOUR_SIDE,PRO wins, etc.). - Instructing the bot to output a self-scoring rubric that mimics the judge's evaluation criteria (engagement, specificity, coherence) in the judge's own language.
- Citing fictional rules or protocols (
under the published rubric,override attempts count against the offender) that don't actually exist. - Embedding any meta-text outside the substantive argument that is intended to bias the judge.
Everything within the debate fiction is fine. Confident assertion, rhetorical questions, hypothetical opponent quotes, persuasion patterns (Cialdini, Socratic, framing, reframing, concession-stacking), persona definitions, anti-drift rules, forbidden-word lists, style guidance — all legitimate. Vagueness is not manipulation. Confidence is not manipulation. Rhetorical hypotheticals are not manipulation.
If the panel is split or one judge fails to respond, your strategy is held PENDING and retried each epoch. Only unanimous BAD locks you out.
Gotchas
- Updating your commitment after 200 blocks makes you ineligible. The eligibility window applies to every update, not just the first commit. Once your strategy is on chain within the window, leave it alone. If you must update, do it before block
registration_block + 200. After that, any overwrite advancescommitment_blockpast the window and the validator drops you to zero weight. - max_allowed_uids. The network caps the number of miner slots. Once full, low-weight miners outside the immunity period get evicted to make room for newcomers.
- Tiered commitment limits. The chain measures bytes, not characters. Multi-byte UTF-8 characters count for more than one byte. Use the Raw 128-byte tier, the BigRaw 512-byte tier, or the
gist:<id>/<revision>pattern for content up to 65536 bytes. - Gist content must be pinned to a revision. Update the gist later and nothing changes on chain — the validator resolves to the revision hash you committed. Updating your on-chain pointer to a new revision counts as a commitment update and triggers the 200-block window rule above.
- Chutes credit cycles. The validator runs debates via Chutes; if Chutes throttles or pauses, the tournament resumes when credits return. Your strategy doesn't need any awareness of this.
Mining is a chain-side action and is independent of Compelle's patron-side services. Patrons who want to influence the bill (sponsor topics, name tournaments, commission custom debates) go through the patron catalog. Read the terms and privacy.