Skip to content

Epochs & Rewards

TRTH’s ongoing distribution is built around fixed-length epochs and a transparent split between Base, Bonus, and King rewards. Together, these mechanics aim to reward steady holders, add verifiable randomness to upside, and keep unclaimed value in the system through carry.

Production EpochRewardsV1_1 constants:

ConstantValue
EPOCH_DURATION7 days
ERA_DURATION31 days (emission halving cadence)
USER_ONLY_SECONDS2 hours after epoch end
KING_DRAW_DELAY_SECONDS1 day after epoch end
MIN_HOLDERS_BALANCE3.14 TRTH
BONUS_WINDOW_SECONDSequals one epoch (7 days)

For epoch index e:

epochStartTs(e) = startTs + e × 7 days

An era of 31 days sizes the emission curve (halving). The era jackpot path (requestEraSeed / createEraJackpot) is disabled in the current contracts and reverts EraDisabled.

Epoch lifecycle: splits, accrual, VRF, lag, and carry

For each epoch’s emission budget, the protocol allocates:

  • Base — 45%: continuous, proportional rewards for eligible TRTH holders.
  • Bonus — 45%: a VRF-seeded lucky window for eligible participants (~10% selected).
  • King — 10%: a single entrant selected by VRF as the epoch’s king.

The emission schedule decreases over time (era-based), so later epochs draw from a cooler curve even as the 45 / 45 / 10 split stays stable within each budget.

Base rewards use a continuous accrual model via an accBasePerToken-style index. Your share scales with eligible TRTH held. Holders need at least MIN_HOLDERS_BALANCE (3.14 TRTH) to participate in holder reward accounting.

Bonus selection uses Chainlink VRF. Roughly 10% of holders are “lucky” for an epoch (isLucky: hash mod 10 == 0). To claim bonus for epoch N during the bonus window in epoch N+1, a holder typically must:

  • Have a snapshot balance ≥ 3.14 TRTH
  • Have been eligible since epoch start
  • Have no balance change during that epoch
  • Claim within the bonus window

King: entry deadline and lagged settlement

Section titled “King: entry deadline and lagged settlement”

King allocates 10% of the epoch budget to one winner. To enter the draw for an epoch, claim before:

kingDrawTs = epochEnd + 1 day

King outcomes settle with VRF fulfillment and related lag/carry accounting. Once a winner exists, king claim remains available.

Unclaimed Bonus remainder rolls as carryOut(e) → carryIn(e+2). Unclaimed King rolls via kingCarry. Value stays in the pool for future distribution rather than evaporating.

After an epoch ends:

  1. First 2 hours (USER_ONLY_SECONDS) — only the holder can claim their own rewards (user-only window).
  2. After that — third parties may call claimFor if the holder has opted in, subject to a configurable claimer fee (claimerFeeBps, max 500 BPS / 5%).

Common entry points:

  • claimHoldersRewards() — base (+ bonus when eligible) for the prior epoch
  • claimEpochBonus(epoch) — bonus for a specific epoch
  • claimKingFor(epoch) — king payout when you are the winner
  • claimFor(user) — third-party claim after the user-only window