Incentive
Miners are paid for time spent being the best executable quote on a direction — not per swap, not per unit of volume. Validators replay the contract's event history over a rolling window and, at every instant, ask: on this direction, who posted the best rate, and could they actually have filled it? Those miners hold the crown for that instant, and your emission is the share of the window you held it, weighted by how well you backed it.
Completing swaps still matters — it is how you become and stay eligible, and it grows the pool of the direction you serve — but a completed swap is not itself a payout.
Every threshold in this model is a tunable parameter, so none are quoted below. alw view config and alw miner status show the live values; the constants live in the allways repo.
Three conditions, checked every instant
You hold the crown on a direction only while all three are true at the same moment:
- Eligible — your delivery record clears the gate (next section).
- Active — the purse backing that quote is activated on the contract.
- Idle — that purse is not reserved and not mid-swap.
Lose any one and your credit stops until you get it back; the crown falls through to the next qualifying miner. Nothing is averaged across the window — a miner that is busy or inactive for half of it earns for the other half.
Eligibility: three strikes and you're out
The contract keeps two lifetime counters for every miner — swaps completed and swaps timed out — and eligibility is read straight off them.
- You start ineligible. A new miner earns nothing until its first few swaps clear. Perfect quotes on day one pay zero until then — the warm-up is what stops a miner from earning on a rate it never intends to honor.
- Every timeout is a strike. Go over the limit and you stop earning.
alw miner statusshows your counters and the live limits. - Strikes never go away. The counters don't decay, don't reset, and survive deregistration — the hotkey↔Solana binding is set-once, and the counters ride on it. Strike out and that identity is done earning, permanently. The only way back is a fresh start: new Solana keypair, new hotkey, bind, re-post collateral.
- A struck miner disappears from the crown. It isn't merely paid zero — it is skipped, and the next-best eligible miner takes the crown instead. Its quotes still route swaps for users; they just earn nothing.
A strike is not the slash. The slash is the per-swap penalty: miss a delivery deadline and the swap's collateral requirement is seized from your backing and paid to the wronged user — instantly on a SOL-backed swap, via the vault on a TAO-backed one (see What if a miner fails?). The strike is the record of that failure, and it is the strike — not the lost collateral — that eventually ends your emission.
What doesn't count: a swap validators close as Cancelled — your destination provably could not receive (a paused or blacklisted token, a reverting contract, a reserved account) — is no fault of yours. No slash, no strike.
The crown is a band, not a single head
At any instant on a direction, validators sort the posted rates best-first and find the best rate held by a qualified miner — eligible, active, idle, and able to fund its own quote. Every qualified miner within a small band of that rate co-holds the crown, and the instant's credit splits among the co-holders by collateral depth.
In practice:
- Matching the leader pays. You get your depth-proportional share without undercutting anyone.
- A one-tick undercut inside the band changes nothing but the depth split. Rates are floored to a fixed precision anyway, so sub-tick undercuts tie rather than win.
- Beating the band takes the crown outright. Post materially better than everyone else and you hold it alone.
- Outside the band you earn nothing on that direction for that interval. There is no partial credit for second-best.
- If no qualified miner is posting, the interval goes unfilled and its share is paid to no one.
Inside the band, depth is what rivals compete on — which is what capacity rewards.
Capacity: depth up to one full-size fill
Your crown share is scaled by capacity: how much of the direction's largest allowed swap your collateral could back at the contract's collateral requirement.
- Enough collateral for a full-size fill is full capacity. Anything past that earns nothing extra — depth is never pay-to-win.
- Below that, the ramp is convex: thin collateral is punished harder than the raw ratio. A sharp rate parked on a sliver of collateral earns a sliver of a sliver.
- Capacity is measured through the window, not read at the end. Topping up afterwards does not retroactively boost credit you already earned; letting collateral drain mid-window costs you from that moment on.
- Collateral the validators cannot see counts as zero.
Capacity — and nothing else — scales your crown share. There is no volume term, no uptime term, no latency term. Your own cleared volume does not multiply your reward.
Idle is per purse: why running both backings pays
"Idle" is judged per collateral purse, not per miner. A swap running against your TAO bond does not make your SOL purse busy, and vice versa.
- Two purses keep earning while one works. Take a TAO-backed swap and your SOL-backed quotes keep their crowns for its whole duration. A single-purse miner goes dark on every pair it quotes for the length of each swap.
- Your slowest chain sets that outage. A Bitcoin leg can hold a purse for the length of its confirmations. If that's your only purse, that's the whole outage on every pair — including pairs that had nothing to do with Bitcoin.
- You can serve two swaps at once — one per purse, concurrently, on the same miner.
So funding both purses is not just more collateral — it removes the head-of-line blocking a single purse imposes on your entire book. sol↔tao is the special case: one pair that can be quoted under either backing, each scored as its own lane with its own crown. Quoting it both ways means competing for both.
Which direction you serve matters
Every direction has its own emission pool, and pools follow demand. Each hub's family of pairs holds a fixed share of miner emission; within a family, a pair's share blends an equal split with its share of the family's recent cleared volume, then splits evenly between the pair's two directions and across their backing lanes.
- The equal-split term is a floor — a quiet pair still pays, so an uncontested crown on it is still worth taking.
- Weighting is at pair level, so one direction can't be inflated without inflating its twin.
- Volume only sizes pools. Your own volume does not raise your share of one.
Holding the crown on a busy pair is worth meaningfully more than the same crown share on a quiet one. Pools are recomputed every scoring round and drift as demand moves.
What you don't claim is not redistributed
Emission a direction leaves unclaimed — an unfilled interval, an ineligible or thin-capacity holder — recycles back to the network. It does not flow to the remaining miners, and it is not normalized away. A penalty on you is absolute: an eligible miner holding the whole crown at partial capacity takes that partial slice and the rest is gone.
The levers you control are exactly three: stay eligible (deliver, every time), post depth (capacity), and hold the crown where people actually swap (pool).
Ways to quietly earn zero
None of these are strikes — but each one stops your credit until fixed:
| Situation | Effect |
|---|---|
| Bond falls below its purse's floor (fees and slashes drain it; the admin raises the floor) | That purse is auto-deactivated — no crown on any lane it backed until you top up and re-activate |
| TAO-backed timeout still settling on the vault | That hub is frozen to new swaps for a grace period and earns nothing on its lanes; the other purse keeps earning |
| Quote posted, but not executable under the current swap bounds | Ignored for the crown, even if it sorts best |
| Not enough collateral to fund your own quote's smallest routable fill | Ignored for the crown ("boundary squat") |
| Deregistered from the subnet mid-window | Credit for that window is forfeited |
| Contract halted | Nobody earns; the whole round recycles |
alw miner status shows each purse's activation state, required bond, and counters — check it before assuming the scoring is wrong.
Where the live values are
| Value | Where |
|---|---|
| Collateral requirement, swap bounds, floors, timeouts | alw view config (on-chain, admin-tunable) |
| Your counters, purse states, required bond | alw miner status |
| Band width, warm-up and strike limits, capacity curve, pool blend | allways/constants.py in the repo |
For the swap mechanics behind all of this, see How It Works; to set up a miner, the Miner Guide.
