Protocol

Goon Power

Goon Power is the weight by which an epoch's emission is divided. This page defines the scoring function exactly. It is integer arithmetic, so anyone recomputing it gets the same answer.

The scoring function#

RawGP      = min(SessionGP,      cap_session)
           + min(ChallengeGP,    cap_challenge)
           + min(ContributionGP, cap_contribution)
           + min(IntegrationGP,  cap_integration)

Diminished = RawGP                                  if RawGP <= knee
           = knee + (RawGP - knee) * aboveKneeRate  otherwise

AdjustedGP = floor( floor(Diminished * (1 + streakBonus)) * trust )

FinalGP    = min(globalCap, AdjustedGP)

All quantities are integer milli-GP (1 GP = 1000). Multiplications by a rate are done in basis points with floor division, in the order shown. The reference implementation is computeDayScore in packages/shared/src/scoring.ts; the API and this site both call it.

Caps#

SourceCap per epochHow it is earned
A · Goon Sessions45 GPEligible active time, on the session curve
B · Contributions40 GPReviewer score on approval
C · Daily challenges30 GP3 challenges × 10 GP
D · Integration proofs30 GPWhole GP signed by an allowlisted issuer
Global cap100 GPApplied last, after streak and trust

API unreachable · showing compiled-in defaults

With every source maxed, raw GP is 145. The knee turns that into 102.5, the largest streak bonus lifts it to 112.75, and the global cap brings it back to 100. No wallet can exceed 100 GP in an epoch by any route.

Streaks#

An epoch is eligible when raw GP reaches the eligibility minimum. A streak is the count of consecutive eligible epochs ending with the current one. The bonus applies only on eligible epochs, takes the highest tier reached, and is recomputed from stored history, so it is deterministic.

Consecutive eligible epochsBonus
fewer than 3none
3++2%
7++5%
14++8%
30++10%

An epoch is eligible at 5 raw GP or more

Trust#

Trust is a multiplier between 0 and 1 applied before the global cap.

SituationTrustApplied when
Default1.00Always, unless one of the rows below applies.
Excluded wallet0.00An admin excluded the wallet. Affects every epoch not yet settled.
Network cluster of n wallets, n > freefree / nAt settlement, when more wallets than the free allowance mined behind one network fingerprint.

The fingerprint is a salted hash of the IP address used for sessions; raw addresses are never stored. The rule means a room of ten wallets on one connection earns what three would. It also means real people sharing a network beyond the allowance are diluted, which is a known cost of the rule.

Other parameters#

ParameterValue
Network GP floor (minimum denominator)10,000 GP
Most one GP can be worth in era 1≈ 119.05 GOON
Backlog release1 / 210 of undistributed emission per epoch
Provisional GP carried into epoch 0100%
Diminishing returnsraw GP above 60 counts at 50%
Cluster rulemore than 3 wallets on one network fingerprint share 3 wallets' GP

Worked examples#

A casual epoch

30 minutes of eligible session time   -> 25 GP
3 daily challenges                    -> 30 GP
RawGP = 55      (below the knee, unchanged)
streak day 1, trust 1.00
FinalGP = 55.0

A heavy epoch on a 14-epoch streak

2 hours of session time               -> 45 GP   (session cap)
3 daily challenges                    -> 30 GP
1 approved bug report scored 40       -> 40 GP   (contribution cap)
RawGP      = 115
Diminished = 60 + (115 - 60) * 0.5    = 87.5
x 1.08 streak                         = 94.5
FinalGP    = 94.5

Six wallets on one connection

each wallet: RawGP 15, trust = 3 / 6 = 0.50
each FinalGP = 7.5
six wallets together = 45 GP = three honest wallets

Changing parameters#

  • Caps, tiers, the knee, streak tiers and the cluster allowance are balancing parameters held by the API. The active set is published at GET /v1/protocol with a version number, and that version is written into every distribution file.
  • They are not protocol constants and can be retuned between epochs. A change never affects an epoch that has already settled.
  • The emission schedule and the reserve are different: those are fixed in the program at activation and cannot be changed by anyone.