EveryframeDocs
Open Studio ↗
Mining/Rewards & emissions

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

text
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_i

Two 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 SubnetAlphaOutEmission over every block in the epoch, converts with the close-block SubnetTAO / SubnetAlphaIn ratio, 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 equal SubnetOwner. 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

TestResult
Five-miner fleet, testnet 566Finalized vector [[2, 65535], [3, 32768]] — the intended 2 : 1 for 2 jobs vs 1 job; revealed at block 8010076
Two independent coldkeysAlpha increments ≈ 98.40 and 49.20 — again ~2 : 1
Epoch with no eligible workBurn 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.