Rewards & emissions
The subnet uses an epoch value cap-and-burn reward policy, modelled on SayGM's published economics. Each closed epoch, the USD value of approved miner work is compared against a USD pool derived from that epoch's alpha emission. Miners share the pool in proportion to their work; whatever the work does not cover is burned to the subnet owner's hotkey.
#The formula
work_i = approved server-priced earnings_i + surcharge_i
pool_usd = total epoch alpha-out emission × 0.41 × alpha_usd at epoch close
share_i = work_i / max(pool_usd, Σ work)
burn_share = 1 − Σ share_iTwo miners earning the same value get the same weight, whether one served one expensive job or the other served many cheap ones. If the pool is $100 and miners A and B earned $30 and $20, the allocation is about 30% / 20% / 50% burn. If they earned $120 and $80, it is about 60% / 40% with rounding dust to burn.
Everyframe currently has no surcharge, so it is zero. The 41% factor mirrors SayGM's published policy; changing it requires an explicit policy version bump.
#What counts as work
work_i is the sum of minerRewardMicrousd over jobs that are all of:
- accepted by the coordinator (valid receipt, sandbox-decoded video, correct dimensions) — and
- completed inside the epoch window
[start, end)by the coordinator's accepted-completion time — and - operator-approved and marked
reward_eligible— and - organic customer demand, not synthetic pilot work.
Excluded and recorded in the epoch artifact: failed, unknown, rejected, expired, review-held, disputed, non-organic and administratively paused miners' work. Being offline after completing work is not an exclusion; a pause is.
#Epochs and finalization
- Epoch length is
tempo + 1= 361 blocks on subnet 566. The finalizer scores only the most recent closed epoch. - One consistent read-only SQLite transaction collects accepted work. Any mismatch between attempts, payables and artifacts — or a missing review — stops finalization rather than guessing.
- The finalizer sums
SubnetAlphaOutEmissionover every block in the epoch, converts with the close-blockSubnetTAO / SubnetAlphaInratio, and prices TAO with the latest completed Kraken one-minute candle at or before epoch end (must have trades, at most five minutes old). Source, timestamp and candle hash are recorded. - No price, a non-positive pool, missing historical chain state or an incompatible tempo means defer — never an invented price or a silent burn.
- The artifact (receipt and output hashes, reviewed earnings, exclusions, chain hashes, emission inputs, price provenance, policy version) is stored immutably with its SHA-256. An unreviewed epoch is not published, and a missed submission window is not back-paid.
#Weights on chain
- Allocation units sum to 65,535. Tiny positive earners are floored to one unit; the excess comes off the largest allocations. The SDK then max-upscales to its wire format; reconciliation compares the actual submitted vector.
- The burn target is resolved from on-chain
SubnetOwnerHotkey, whose coldkey must equalSubnetOwner. It is never a hard-coded UID. - Current UID ownership, validator permit, min/max weight constraints and policy version are checked before planning and again immediately before signing. Constraints are never weakened to force a submission.
- Commit-reveal is enabled, so applied weights appear a round after submission. The reward runner fires every minute but submits at most once per closed epoch, with a watchdog alerting on a stale heartbeat.
- With zero eligible work the runner submits a burn-only vector
{owner: 65535}when chain constraints allow it.
#What miners have actually received
| Test | Result |
|---|---|
| Five-miner fleet, testnet 566 | Finalized vector [[2, 65535], [3, 32768]] — the intended 2 : 1 for 2 jobs vs 1 job; revealed at block 8010076 |
| Two independent coldkeys | Alpha increments ≈ 98.40 and 49.20 — again ~2 : 1 |
| Epoch with no eligible work | Burn vector {0: 65535} revealed at block 8011156 |
Testnet alpha is a test token. These figures show the mechanism working, not income.
#Who cannot be paid
A miner hotkey that belongs to the subnet owner's coldkey earns nothing — the chain shows incentive but burns it. A separate hotkey inside the owner's wallet does not help. The validator rejects such recipients before planning and re-checks ownership before signing. Use your own coldkey; see Testnet & wallets.
#Known gaps
- Applied weights are not payouts, and there is no USD settlement of serving fees.
- A no-work round burns new emission but does not revoke previously applied weights; old weights can persist until the next non-empty epoch.
- One trusted validator, one coordinator. There is no multi-validator consensus, replicated coordinator or independent artifact-distribution service in the pilot.
- Mainnet is not enabled and has no date.