Phase T+ — first earned incentive
The chain paid honest miners 37% and 63% of subnet incentive and the lazy miner nothing, for 13 consecutive epochs.
Read the report →
Blindproof
Evidence · status as of 21 October 2026
Each report states what was claimed, how it was tested, what happened, where to check it, and what it does not prove.
The chain paid honest miners 37% and 63% of subnet incentive and the lazy miner nothing, for 13 consecutive epochs.
Read the report →Subnet 575 on Bittensor testnet. 24 of 24 jobs settled, lazy miner never credited, first on-chain weights.
Read the report →16 of 16 attack and load scenarios passed. Zero wrong settlements across about 300 jobs.
Read the report →Every cheating persona from Phase M on the public chain, then a real GPU miner on the deterministic model build, then a mixed-GPU quorum agreeing on one hash.
See the roadmap →Report · Phase T+ · v0.4.2 · Bittensor testnet
Weights that the Blindproof validator writes from verified work turn into real subnet incentive on Bittensor’s public testnet: honest miners are paid in proportion to the work the validator credited, and a miner that returned cheap guesses is paid nothing.
Phase T’s first graded cycle wrote weights before subnet 575 had an emission schedule or a staked validator, so no incentive could follow. Both were fixed the same evening: the emission schedule was started and the validator was staked. The same 24-job cycle (12 deterministic-tier and 12 proven-tier jobs, same three miners, same mock inference) was then run a second time, and the validator wrote its weights at 19:54:50 EDT on 5 October 2026: FINAL SetWeights {2: 0.555, 1: 0.327} -> OK. Subnet 575 runs commit-reveal weights, so the chain applies a weight vector two epochs after it is committed. On-chain incentive was then read from the public testnet node at every epoch boundary after the commit.
| Miner | Validator weight | On-chain incentive | Epochs paid |
|---|---|---|---|
| m01 (honest) · UID 1 | 0.327 → 37.1% | 0.3709 | 13 / 13 |
| m02 (honest) · UID 2 | 0.555 → 62.9% | 0.6291 | 13 / 13 |
| m03 (lazy) · UID 3 | 0 | 0.0000 | 0 / 13 |
Incentive first appeared at block 8,159,238, two epochs (720 blocks) after the weight commit at block 8,158,518, and was paid at every epoch through block 8,163,558 — 13 consecutive epochs, about 14 hours. The split matches the validator’s weight vector to four decimal places. Incentive returned to zero by block 8,163,918, when the testnet’s activity cutoff retired the single weight commit; the validator had set weights once and exited, as designed for a graded cycle.
| Event | Block |
|---|---|
| Emission schedule started | 8158453-5 |
| Validator staked τ0.1 → 178.83 α | 8158480-7 |
| Run 2 weights committed (validator UID 0) | 8158518 |
| First epoch with non-zero miner incentive | 8159238 |
| Last epoch paid from this commit | 8163558 |
Addresses for every key are on the testnet record.
The public testnet node keeps full state history, so the incentive vector can be read back at any of the blocks above with the Bittensor Python SDK (v11). Values are stored as 16-bit integers; divide by 65535.
import bittensor as bt
st = bt.Subtensor(network="test")
for blk in (8158518, 8159238, 8163558, 8163918):
inc = st.query(("SubtensorModule", "Incentive"), [575], block=blk)
print(blk, [round(v / 65535, 4) for v in inc.value])
# 8158518 [0.0, 0.0, 0.0, 0.0]
# 8159238 [0.0, 0.3709, 0.6291, 0.0]
# 8163558 [0.0, 0.3709, 0.6291, 0.0]
# 8163918 [0.0, 0.0, 0.0, 0.0]
Element order is UID order: validator, m01, m02, m03.
Report · Phase T · v0.4.2 · Bittensor testnet
On Bittensor’s public testnet, the Blindproof validator credits miners only when their work verifies, in both the deterministic tier (two-miner hash agreement) and the proven tier (single miner plus proof check), and writes weights that reflect only verified work.
One validator (UID 0) on a separate machine, making outbound calls only. Three miners (UIDs 1–3) on a single rented CPU server with public endpoints, calling a mock inference server paced at a measured 32.8 tokens/s. Two miners behave honestly. The third is lazy: it returns a cheap guess instead of running the model. The validator dispatches 12 deterministic-tier and 12 proven-tier jobs, settles each one, and then writes weights.
| Deterministic tier | Proven tier | |
|---|---|---|
| Jobs settled | 12 / 12 | 12 / 12 |
| Wrong settlements | 0 | 0 |
| m01 (honest) credited | 12 / 12 | 4 / 4 |
| m02 (honest) credited | 12 / 12 | 8 / 8 |
| m03 (lazy) credited | 0 / 9 | 0 / 1 — rejected as unsound |
| Median time to settle | 5.9 s | 31.6 s |
Validator weights were written at 19:33:50 EDT on 5 October 2026: FINAL SetWeights {1: 0.337, 2: 0.547} -> OK. Miner incentive in that epoch was zero because the subnet’s emission schedule had not yet been started and the validator held no stake. Both were fixed immediately after, the cycle was run again, and the chain paid the honest miners — see Phase T+.
| Event | Extrinsic |
|---|---|
| Subnet 575 created (21 Sep) | 8055866-8 |
| m01 registered, UID 1 | 8158067-5 |
| m02 registered, UID 2 | 8158071-8 |
| m03 registered, UID 3 | 8158075-6 |
| Emission schedule started | 8158453-5 |
| Validator stake τ0.1 → 178.83 α | 8158480-7 |
Addresses for every key are on the testnet record.
Open each block in the explorer and confirm the extrinsic and its signer. List current participants with btcli wallet overview or the SDK snippet under Phase T+. Run logs and per-job ledgers are archived and will be published with the reference validator.
Report · Phase M · v0.4.1 · local chain
Before spending anything on a public network, the validator rejects forged or misdirected traffic, never pays a cheating miner in either tier, and keeps settling correctly under load.
A full local Bittensor chain with the subnet, a validator, and miner personas scripted to cheat in specific ways. Sixteen scenarios, each run repeatedly, against a mock inference server paced at a measured 32.8 tokens/s.
| Group | What was attempted | Outcome |
|---|---|---|
| Request security | Unsigned, non-validator, wrong receiver, replayed, and tampered requests | All rejected |
| Deterministic-tier cheats | Lazy, nondeterministic, and withholding miners, each 6–11 times | Never paid |
| Proven-tier cheats | Forged, missing, late, wrong-input, and lazy proofs, each 6–11 times | Never paid |
| Proven-tier settlement | All proven jobs, with retry | 144 / 144 settled |
| Load | Sustained dispatch | 11.7 jobs/min · p50 10.6 s · p95 21.0 s |
| Realistic mix | Mixed prompt sizes and tiers | p95 57.7 s |
| Overall | About 300 jobs | 0 wrong settlements |
Blindproof runs on Paradatum’s deterministic execution work. These results are Paradatum’s, measured outside the subnet, and are listed here so the dependency is visible.
| Result | Status |
|---|---|
| A mid-size open-weight model (14B parameters, full BF16, lossless) produces bit-identical output across three GPU types and a CPU verifier | Measured |
| Fits on a 24 GB GPU and runs about 40% faster than a standard open-source inference engine on the same hardware | Measured |
| The deterministic build reproduces its reference output hashes on a consumer GPU, including on prompts of about 2,800 tokens | Measured |
| Per-layer proofs on that model, with the full proof chain verified in tens of milliseconds and a single changed byte detected | Measured |
| Masked computation at piece scale, including masked multiplication with two independent mask owners | Prototype |
| A full-model zero-knowledge proof of one inference | Audit in progress |
The subnet itself commits only to per-piece proofs. A full-model proof is not a subnet claim.