The pay rule in formulas

Every formula and parameter of the Kokoah subnet’s pay rule, as the validators compute it.

Notation

For miner i on scoring day d, a UTC day. Money is in US dollars and the subnet’s token is alpha (α). Every number is a fixed parameter of the specification, the same on every validator.

f
A fill of the miner’s linked address that carries Kokoah’s builder code, on a perpetual market.
b_f
The Kokoah fee the fill paid: 0.025% of its notional, maker or taker.
A
The day’s miner pool: 41% of 7,200 α, that is 2,952 α.
p_d
The day’s dollar value of one α, used only to show pay in dollars: the mean pool rate (TAO per α) at 20 blocks anchored to the day, times the day’s mean TAO/USD from Hyperliquid’s hourly TAO-perpetual candles.

Credit and smoothing

Φ(i,d) = Σ b_f
Fee credit: the Kokoah fees on the day’s counted fills, from trades made while the miner is eligible; zero on an ineligible day. Multiplied by (1 − m) when the mirrored share m is above 25%.
Φ̂(i,d) = 0.7 × Φ̂(i,d−1) + 0.3 × Φ(i,d)
Smoothed credit: 30% today, 21% tomorrow, then each day 70% of the day before; the weights sum to one, so every dollar counts once.

The two pools and pay

S_d = 0.20 × A if any miner has a skill weight, otherwise 0
The skill pool.
V_d = A − S_d
The volume pool. If no eligible miner has fee credit but one has a skill weight, S_d = A and V_d = 0.
pay(i,d) = V_d × Φ̂(i,d) / Σⱼ Φ̂(j,d) + S_d × w(i,d) / Σⱼ w(j,d)
The first sum runs over the day’s eligible miners, the second over the miners with a skill weight. The whole of A is paid out.
weight(i) = pay(i,d) / A
The weight each validator sets on chain every tempo until the next day is scored, as whole numbers summing to 65,535.
no weight at all: A → burn hotkey
Only on a day when no miner has fee credit or a skill weight does the whole pool go to the burn hotkey, whose α is burned on chain.

Eligibility

Ē(i,d) = (1 / 24 h) × ∫ E_i(t) dt ≥ $10,000
The day’s time-weighted average account value, from Hyperliquid’s recorded history of the account’s perps value: recorded points joined by straight lines, the day’s edges interpolated. Fewer than 4 recorded points in the day, or a history that doesn’t reach back to the day’s start, make it unknown, and unknown is not eligible. An account whose history begins during the day counts zero before its first point.
3 trades, Σ notional ≥ $1,000
Qualification of a new identity. A trade is the fills of one coin and side at one instant. The first two earn no credit; the one that completes both counts does.
ineligible: Φ(i,d) = 0
An ineligible day: no credit, the smoothed credit is multiplied by 0.7, no part in either pool, nothing owed later.
identity = hotkey + linked address + registration
A new address, a new registration or an on-chain hotkey swap sets Φ̂ and the qualification to zero; g, the pay history and penalties are kept.

Skill

r_d = (E_d − E_d−1 − flows_d − offmarket_d) / E_d−1, capped at ±10%
Daily return: deposits, withdrawals, account and vault transfers, and money moved in through off-market fills are removed. On a day under the thin-coin or fill-limit rule (see Exclusions), a gain is removed the same way: r_d = min(0, r_d) before the cap. A day has a return only when its account value and the previous day’s are both known; the windows count known returns, so a day without one is skipped and the window reaches one day further back.
confidence = clip((PSR − 0.5) / 0.45, 0, 1)
PSR: the probabilistic Sharpe ratio of the last 60 days of returns, adjusted for skew and fat tails, against a daily Sharpe of 0.03; 0.5 with fewer than 10 days.
quality = clip((GPR − 1) / 1.2, 0, 1)
GPR: gain-to-pain of the last 30 days, the newest day weighted 1 and the weight halving every 10 days. Halved if 2 or more days in the last 60 lost more than 10%.
g = 0.7 × g(d−1) + 0.3 × confidence × quality; g′ = min(1, g / 0.65)
Smoothed like the credit. g′ is the score shown on the leaderboard.

The skill pool

entry: PSR₉₀ ≥ 0.95
The entry test: the probabilistic Sharpe ratio of the last 90 known capped daily returns against a daily Sharpe of 0.03. With fewer than 90 known returns, it is not passed.
s = max(0, (g′ − 0.25) / 0.75)
Skill above the luck floor of 0.25.
v = min(1, N₃₀ / $1,000,000)
N₃₀: the miner’s credited Kokoah notional (trades made while eligible) over the last 30 days, today included.
w = s × v × 1.1 for a verified agent, s × v otherwise
The skill weight, when the miner is eligible today, has no mirror penalty, passes the gates and passes the entry test; otherwise w = 0. Each account keeps its own w, from its own record: accounts that trade alike are never grouped. A verified agent is one whose sealed machine passed that validator’s check that day.
10 round trips, 7 active days, mean account ≥ $500 over 30 days
The gates of the skill pool, over the last 30 calendar days, today included. A round trip is a coin’s position returning to zero or flipping sign; an active day is a day with a Kokoah fill; the mean account value counts the days whose end-of-day value is the exchange’s recorded one. The volume pool doesn’t use them.

Exclusions

  • Spot fills: recorded, never counted.
  • Fills against the same cluster (a master’s sub-accounts, hotkeys on one coldkey, addresses joined by transfers): removed.
  • Fills against another linked address: removed. They report no one: any miner can take another’s resting orders.
  • Fills priced more than 0.5% from the mark: valued at the mark.
  • Thin coin: a coin in which the address’s own fills that day are more than 25% of its traded notional (the day’s minute candles, volume × close). Its marks then reflect the address’s own trades, so the day’s profit counts as zero for skill and a loss in full; its Kokoah fills still earn credit.
  • Fill limit: Hyperliquid keeps an address’s latest 10,000 fills. When the day’s fills and those since it ended reach 10,000 in what a validator read, or the later ones can’t be read, part of the day may be missing: its profit counts as zero for skill and a loss in full.
  • Mirrored share m, compared only between linked addresses of one owner (hotkeys on one coldkey, or a master and its sub-accounts): the share of position held opposite such an address, from net positions per coin at each day’s end correlated below −0.8 on at least 10 of the last 30 days. A day-end position is the size just before the first fill after the day (else the size read), valued at the close of the coin’s last hourly candle of the day; main perpetuals only. Above 25%: credit × (1 − m). Above 50%: also out of the skill pool for 30 days, for the address and the addresses its owner controls, and reported.

The link format

kokoah-bind-1 netuid=<netuid> hotkey=<hotkey> address=<0x…, lowercase>
The exact line the trading address signs as an Ethereum personal message (EIP-191).
base64("K1" + address + signature)
The hotkey’s commitment: one 116-character field (20-byte address, 65-byte signature). One address links to one hotkey: a claim on an address already linked to another hotkey is refused. A hotkey that leaves the subnet releases its address.
+ base64("P1" + previous address + its signature)
A move to a new address: the previous address signs the same line, which names the new address. Accepted only when the previous address is the one linked, at least 60 days after the last accepted change, and when the new address is free.
+ base64("A1" + code fingerprint + port + host)
An agent account: the 32-byte SHA-256 of the agent’s code, the machine’s 2-byte port and its host (up to 51 bytes). The line is signed by the key inside the sealed machine.

Parameters

  • Kokoah fee 0.025% of notional, maker and taker credited alike.
  • Smoothing 0.3 a day.
  • Pools 80% volume and 20% skill; an empty skill pool joins the volume pool.
  • Skill windows 60 and 30 days, half-life 10 days, return cap ±10%, g′ full at g = 0.65.
  • Skill pool: entry test PSR ≥ 0.95 over 90 days, luck floor 0.25, volume full at $1,000,000 over 30 days, agent bonus 10%.
  • Gates 10 round trips, 7 active days, $500 over 30 days.
  • Eligibility $10,000 average account value a day; three qualifying trades worth $1,000.
  • Off-market limit 0.5%; thin coin above 25% of its day’s volume; fill limit 10,000; mirror thresholds 25% and 50% (one owner’s accounts only), penalty 30 days.
  • Emission 7,200 α a day: miners 41%, validators 41%, owner 18% (locked).
  • Moving to a new address: once every 60 days, signed by both addresses; credit and qualification restart.