Start here

Core concepts

The vocabulary, the actors, and what happens to one epoch from the moment it opens to the moment its rewards are claimed.

Terms#

TermMeaning
GoonerA wallet that has signed in. There are no accounts, emails or usernames.
Goon Power (GP)The accounting weight used to split an epoch's emission. Not a token, not transferable, not redeemable by itself. Stored as integer milli-GP.
GrindingFighting enemies in Goontown. Time spent landing hits is what the session category credits.
BountyOne of three daily combat goals. Each pays a fixed amount of Goon Power once per epoch.
Goon EpochThe period over which rewards are computed. 86,400 seconds on mainnet.
PeriodThe off-chain index of an epoch-length window: floor(unixTime / epochSeconds). Exists before activation.
Era210 consecutive epochs. Emission halves at each era boundary.
Goon VaultThe token account, owned by a program-derived address, that holds the mining reserve.
Goon StreakConsecutive epochs in which a wallet earned at least the eligibility minimum.
Goon ProofA signed claim from an allowlisted integration that a wallet did something.
RootThe Merkle root of every wallet's cumulative allocation, published on-chain once per epoch.
Goon ClaimThe on-chain withdrawal of a wallet's unclaimed allocation.

Actors#

ActorWhat it doesWhat limits it
MinerEarns Goon Power, claims GOON.Per-source caps, a global cap, diminishing returns, cluster rules.
API (operator)Verifies activity, computes scores, settles epochs, builds the tree.Everything it settles is published; the program bounds the total.
Oracle keySigns the transaction that publishes a root.Emission cap, monotonic epochs and totals, settlement delay.
Guardian keyCancels a pending root; pauses the program.Cannot publish or move tokens.
Admin keyBinds the mint before activation, rotates roles.Cannot move tokens or change the schedule after activation.
ProgramHolds the vault and enforces every rule above.Its code. See the on-chain reference.
IssuerSigns integration proofs for its own users.Allowlist, per-proof and per-wallet caps, revocation.
ReviewerScores community contributions.Category ceilings, weekly limits, no self-review.

The life of one epoch#

  1. Open. The epoch begins at a UTC day boundary. Wallets earn Goon Power from four sources. Scores shown during the epoch are live previews.
  2. Close. At the boundary the epoch stops accruing. A 10-minute grace window follows so late integration proofs and revocations can land.
  3. Score. Final Goon Power is computed for every wallet, with exclusions and network-cluster adjustments applied. This is deterministic integer arithmetic.
  4. Split. The epoch's pool is divided pro rata by Goon Power. Each reward is added to the wallet's lifetime allocation.
  5. Commit. A Merkle tree is built over every wallet's cumulative allocation. The root, the total and the SHA-256 of the distribution file are published on-chain.
  6. Wait. The root is pending for the settlement delay. Anyone can inspect the file. The guardian can cancel.
  7. Settle. After the delay the root becomes the active root. Claims against it open.
  8. Claim. A wallet presents its cumulative amount and a Merkle proof. The program pays the difference between that amount and what the wallet has already claimed.

Protocol states#

StateConditionWhat miners see
Pre-launchNo mint is bound to the program.Provisional Goon Power only. Nothing claimable.
Vault fillingA mint is bound; the vault holds less than the reserve or has not been activated.Provisional Goon Power, plus bonding-curve progress.
Mining liveThe vault held the reserve and activate has run.Epochs settle on-chain; allocations become claimable after each delay.
PausedThe guardian or admin paused the program.Goon Power keeps accruing; publishing and claims are halted.

Cumulative, not per-epoch

Each root covers every allocation ever made, not just the latest epoch. A leaf is (wallet, lifetime amount). This means a wallet can ignore the protocol for a month and then claim once, a new root never invalidates money already owed, and the program only ever needs to remember one root and one number per wallet.