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.
Epoch length and timing
Section titled “Epoch length and timing”Production EpochRewardsV1_1 constants:
| Constant | Value |
|---|---|
EPOCH_DURATION | 7 days |
ERA_DURATION | 31 days (emission halving cadence) |
USER_ONLY_SECONDS | 2 hours after epoch end |
KING_DRAW_DELAY_SECONDS | 1 day after epoch end |
MIN_HOLDERS_BALANCE | 3.14 TRTH |
BONUS_WINDOW_SECONDS | equals 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.

Reward split per epoch
Section titled “Reward split per epoch”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: accrual and proportionality
Section titled “Base rewards: accrual and proportionality”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: VRF seed and eligibility
Section titled “Bonus: VRF seed and eligibility”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.
Carry: nothing useful is orphaned
Section titled “Carry: nothing useful is orphaned”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.
Claiming windows and fees
Section titled “Claiming windows and fees”After an epoch ends:
- First 2 hours (
USER_ONLY_SECONDS) — only the holder can claim their own rewards (user-only window). - After that — third parties may call
claimForif 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 epochclaimEpochBonus(epoch)— bonus for a specific epochclaimKingFor(epoch)— king payout when you are the winnerclaimFor(user)— third-party claim after the user-only window