
Overview
Registration Activity
Neuron registration trends

Neuron registration trends
The alpha price in τ, day by day, and what moved it each way.
Log change over the last 30 days −3.19%: protocol buys +0.04%, root sells −0.75%, users net −7.13%, cross-subnet +4.66%, unattributed −0.0005%.
The chart follows the alpha price in τ. Each period starts at its opening price and steps through the mechanisms below, in a fixed order, to its closing price: a step that rises pushed the price up, one that falls pushed it down, and its height is how far it moved the price. A thin line carries each close into the next period’s open; it is dashed where the two differ. The faint candle behind each period is the market’s own open, high, low and close, for context.
With many periods on screen (90 days, or hours), the steps would be too thin to read, so the chart draws the price as a line instead and colours each period by the mechanism that moved it most. Hover a period for the full step-by-step breakdown.
Not here, because they do not move the spot price: the per-block TAO injection into the pool, and burns.
All figures are log changes, not simple percentage changes, so the parts add up exactly to the total; on big moves the two differ (a 10% log fall is a 9.5% price fall).
2026-11-09 UTC, as of ≈18:40 UTC (block 9,470,491)
The day isn’t over yet, so these figures keep changing. They are in no daily total, average or rank.
Ad managers make high-stakes decisions about campaign budgets, bid strategies, and targeting changes with limited visibility into likely outcomes. Individual forecasting models are expensive, closed, and unverifiable—teams cannot audit how scores are computed or confirm whether a recommendation was actually better than alternatives. Outcome uncertainty is priced into risk, leading to conservative decisions or wasted spend.
A decentralized network of independent predictive models, selected and scored on verifiable accuracy rather than vendor claims, addresses this by providing transparent, auditable forecasts. Each model is executed in isolation, predictions are locked before outcomes exist, and settled scores are published so any stakeholder can recompute and verify them. No single vendor controls the scoring logic; the mechanism is open, the outcomes are deterministic, and lineage is traceable.
SN21 implements this by running admitted model containers daily against real account changes from Google Ads.
Each model outputs probabilistic distributions (P10/P50/P90) for cost, conversion, and efficiency deltas at 7, 14, and 28-day horizons. The subnet executes predictions in a sandbox (no network, fixed memory/CPU budget), locks them before outcomes are knowable, then settles them against measured results on a published schedule. Standings are computed from these scores; validators publish signed receipts so anyone can independently reproduce the scoring. Models that consistently predict well earn more weight; the mechanism is incentivized, so predictive accuracy is rewarded continuously.
Auto-generated from the GitHub repository and may not reflect the latest changes.
SN21 is a Bittensor subnet for predicting Google Ads campaign outcomes. Miners ship digest-pinned container images that the subnet executes daily against baskets of real account changes, outputting probabilistic distributions (P10/P50/P90) for cost, conversions, and efficiency deltas at 7, 14, and 28-day horizons. Predictions are locked before outcomes exist; settled outcomes feed a rolling standing that drives emissions through a published weight curve.
SN21 operates a daily prediction pipeline. The operator delivers a daily basket of qualifying account changes (midnight EST boundary). Miners ship digest-pinned OCI/Docker container images; the subnet pulls by committed digest and executes each admitted model in an isolated sandbox (no network, 1GB RAM limit, 3072MB virtual address space, 15 CPU-minute budget, read-only root) against that day's basket.
Models read one episode JSON per line on stdin, write one prediction JSON per line on stdout. Predictions are locked before outcomes exist. Later, outcomes are measured at 7/14/28 days plus 2-day settle window; validators run the daily loop to settle matured (episode × horizon) rows into miners' standings, compute weights from the published curve, and commit on-chain via set_weights.
Three processes run on validators: (A) hope-validator-api serves episodes and daily receipts over HTTP; (B) run_daily_loop.py settles daily and publishes receipt feeds; (C) hope-validator-heartbeat re-asserts weights every 3-4 hours to prevent ActivityCutoff pruning. Admission requires beating the published naive baseline on a held-out corpus and reaching 90% of reference coverage. Every scored day is published as a signed receipt (outcomes, predictions, components) enabling independent verification.
Champion (who runs live) is promoted under stricter rules than who earns weight: requires 5% standing lead held 7 consecutive days plus 14 scored days history.
The daily stream operates on a midnight EST cutoff. Each day a basket of account changes is revealed; miners' predictions are locked before outcomes exist. Outcomes are measured at 7, 14, and 28 days (plus 2-day settling window), and each (episode, horizon) is scored exactly once when its outcome settles.
Scores enter the moving average standing with horizon blend weights (high resolution: 0.20/0.35/0.45 for 7/14/28-day). A miner must cover at least 75% of daily episodes to be paid; uncovered episodes carry a full-weight zero penalty. To enter the earning curve miners need 250 scored predictions of evidence (placement floor).
The weight curve is steep: 1st place 50%, 2nd 25%, 3rd 10%, then geometric tail (80% of previous rank), capped at 20 earners, zero below score threshold. From 2026-09-04, standings are relative to field mean on identical changes, with 250-mass prior shrinking toward zero. From 2026-09-17, a replaced model's entries fade as the current model shows evidence.
Copy detection groups identical models (byte-identical predictions, matching point estimates, or behavioral lineage under four-signal test); only the earliest-committed earns.
The sections above were auto-generated from the GitHub repository and may not reflect the latest changes. View repository (github.com, opens in a new tab, external site)
Counterfactual impact prediction for advertising interventions
This information was auto-extracted from the GitHub repository and may be incomplete or out of date. Always refer to the subnet's GitHub repository (github.com, opens in a new tab, external site) for the latest instructions.
Container runs in sandbox with 1 GB resident memory limit, 3,072 MB virtual address space cap, 15 CPU-minute budget per daily basket, read-only root filesystem, no network access
Not yet verified: Notes
Machine-extracted from the subnet's repository docs; may be wrong or out of date. Check the repository before buying or renting hardware. Open the repository (github.com, opens in a new tab, external site) · Extracted 9 Nov 2026
Install the SN21 package with miner dependencies
git clone https://github.com/ippcteam/SN21-adtao.git && cd SN21-adtao && pip install -e ".[miner]"
Create a coldkey (keys-of-keys for wallet). Choose 12 words, set password, save mnemonic in password manager
btcli wallet new_coldkey --wallet.name my_miner
Create a hotkey under the coldkey for automated signing. Choose 12 words, save mnemonic
btcli wallet new_hotkey --wallet.name my_miner --wallet.hotkey default
Register on SN21 testnet (netuid 466). Confirm cost and enter coldkey password when prompted
btcli subnet register --netuid 466 --wallet.name my_miner --wallet.hotkey default --subtensor.network test
Generate an ed25519 signing key for authenticated API access
python scripts/sn21_keys.py generate --role miner --output ~/sn21-miner.pem
Register the ed25519 binding on chain. Confirm submission and enter coldkey password
python scripts/sn21_keys.py register --role miner --network test --netuid 466 --wallet-name my_miner --wallet-hotkey default --key ~/sn21-miner.pem
Build the reference container image locally for testing(optional)
cd reference_model && docker build -t sn21-reference-model:v1 .
Push your container image to a public registry and record the repo digest
docker tag sn21-reference-model:v1 ghcr.io/<you>/sn21-miner:v1 && docker push ghcr.io/<you>/sn21-miner:v1
Commit the digest-pinned model on chain in format: sn21-model:v1:<repo>@sha256:<digest>
python -c "import bittensor as bt; wallet = bt.wallet(name='my_miner', hotkey='default'); sub = bt.subtensor(network='test'); sub.commit(wallet=wallet, netuid=466, data='sn21-model:v1:<repo>@sha256:<64hex>')"
Install the SN21 package
git clone <repo-url> && cd SN21-adtao && pip install -e .
Generate an ed25519 key for the validator
python scripts/sn21_keys.py generate --role validator --output ~/.sn21/keys/validator.pem
Register the ed25519 binding on chain
python scripts/sn21_keys.py register --role validator --network finney --netuid 21 --wallet-name my_validator --wallet-hotkey default --key ~/.sn21/keys/validator.pem
Start the HTTP API daemon (long-lived) for serving episodes and daily receipts
export SN21_LEDGER_ROOT=/var/lib/sn21_ledger && hope-validator-api --host 0.0.0.0 --port 8080 --network finney --netuid 21 --wallet-name my_validator --wallet-hotkey default
Run the daily loop (once per day from cron after basket delivery) to settle matured predictions and publish receipts
python3 scripts/run_daily_loop.py --shadow-root /var/lib/sn21_ledger --ledger-root /var/lib/sn21_ledger
Run heartbeat from cron every 3-4 hours to re-assert weights and prevent ActivityCutoff pruning
hope-validator-heartbeat --network finney --netuid 21 --wallet-name my_validator --wallet-hotkey default
| Day (UTC) | Share |
|---|---|
| 2026-11-08 | 0.07% |
| 2026-11-07 | 0.09% |
| 2026-11-06 | 0.11% |
| 2026-11-05 | 0.12% |
| 2026-11-04 | 0.12% |
| 2026-11-03 | 0.12% |
| 2026-11-02 | 0.11% |
| 2026-11-01 | 0.10% |
| 2026-10-31 | 0.10% |
| 2026-10-30 | 0.08% |
| 2026-10-29 | 0.07% |
| 2026-10-28 | 0.08% |
| 2026-10-27 | 0.07% |
| 2026-10-26 | 0.07% |
| 2026-10-25 | 0.07% |
| 2026-10-24 | 0.07% |
| 2026-10-23 | 0.10% |
| 2026-10-22 | 0.10% |
| 2026-10-21 | 0.07% |
| 2026-10-20 | 0.07% |
| 2026-10-19 | 0.08% |
| 2026-10-18 | 0.10% |
| 2026-10-17 | 0.12% |
| 2026-10-16 | 0.14% |
| 2026-10-15 | 0.13% |
| 2026-10-14 | 0.16% |
| 2026-10-13 | 0.16% |
| 2026-10-12 | 0.14% |
| 2026-10-11 | 0.13% |
| 2026-10-10 | 0.11% |
| 2026-10-09 | 0.10% |
| 2026-10-08 | 0.09% |
| 2026-10-07 | 0.05% |
| 2026-10-06 | 0.04% |
| 2026-10-05 | 0.04% |
| 2026-10-04 | 0.04% |
| 2026-10-03 | 0.04% |
| 2026-10-02 | 0.04% |
| 2026-10-01 | 0.03% |
| 2026-09-30 | 0.03% |
| 2026-09-29 | 0.03% |
| 2026-09-28 | 0.03% |
| 2026-09-27 | 0.03% |
| 2026-09-26 | 0.04% |
| 2026-09-25 | 0.03% |
| 2026-09-24 | 0.03% |
| 2026-09-23 | 0.03% |
| 2026-09-22 | 0.03% |
| 2026-09-21 | 0.03% |
| 2026-09-20 | 0.03% |
| 2026-09-19 | 0.03% |
| 2026-09-18 | 0.03% |
| 2026-09-17 | 0.03% |
| 2026-09-16 | 0.04% |
| 2026-09-15 | 0.04% |
| 2026-09-14 | 0.02% |
| 2026-09-13 | 0.02% |
| 2026-09-12 | 0.02% |
| 2026-09-11 | 0.02% |
| 2026-09-10 | 0.02% |
| 2026-09-09 | 0.03% |
| 2026-09-08 | 0.03% |
| 2026-09-07 | 0.02% |
| 2026-09-06 | 0.02% |
| 2026-09-05 | 0.02% |
| 2026-09-04 | 0.02% |
| 2026-09-03 | 0.02% |
| 2026-09-02 | 0.02% |
| 2026-09-01 | 0.02% |
| 2026-08-31 | 0.03% |
| 2026-08-30 | 0.03% |
| 2026-08-29 | 0.03% |
| 2026-08-28 | 0.03% |
| 2026-08-27 | 0.03% |
| 2026-08-26 | 0.03% |
| 2026-08-25 | 0.03% |
| 2026-08-24 | 0.01% |
| 2026-08-23 | 0.01% |
| 2026-08-22 | 0.01% |
| 2026-08-21 | 0.01% |
| 2026-08-20 | 0.01% |
| 2026-08-19 | 0.01% |
| 2026-08-18 | 0.01% |
| 2026-08-17 | 0.0036% |
| 2026-08-16 | 0.0033% |
| 2026-08-15 | 0.0032% |
| 2026-08-14 | 0.0031% |
| 2026-08-13 | 0.003% |
| 2026-08-12 | 0.0033% |
| 2026-08-11 | 0.0034% |