Weights & Rewards
This page is the exact math that turns your stake into a PYUSD payout — mirrored from the
on-chain integer math in staking_vault and reward_distributor.
Stake weight
weight = staked × (badge_bps / 10_000) × (lock_bps / 10_000)
= staked × badgeMultiplier × lockMultiplier
Maximum boost = Diamond (8×) × 5-year lock (10×) = 80×.
Example: 1,000,000 staked, Diamond badge, 5-year lock → weight 80,000,000.
Reward accrual (MasterChef accumulator)
The reward distributor uses a classic accumulator. On each epoch a harvest advances a
global reward_index; each position's pending reward is the index growth applied to its
weight:
reward_index += harvested × INDEX_SCALE / total_weight // on each harvest
pending = weight × reward_index / INDEX_SCALE − reward_debt
INDEX_SCALE = 1_000_000_000_000(1e12) — must match in both programs.total_weightis read on-chain fromStakingState, never caller-supplied.- Entry checkpoint: on any weight change,
reward_debtis adjusted byΔweight × reward_index / INDEX_SCALE, so a position only earns on index growth after its weight is established — no retroactive claims.
Your share, intuitively
yourReward = harvestedPYUSD × yourWeight / totalWeight
(0 if you have no weight or there's no yield this harvest.) Your slice of each harvest is simply your weight as a fraction of all stakers' weight.
Claiming
Rewards are pull-based:
- You sign and pay gas to
claim_reward. - The payout is a real SPL transfer of the reserve asset (PYUSD) from the pool ATA to you.
You're never auto-paid and you never deposit PYUSD — you only stake $IONS and claim the PYUSD yield your weight has earned.
End-to-end
trades → fees → 70% → PYUSD reserve → Kamino yield
→ keeper harvests realized yield
→ reward_index advances by harvested/total_weight
→ you claim weight × Δindex (in PYUSD)
See The Flywheel for where the harvested yield comes from, and Keeper Bounties for who runs the harvest.
Rewards are variable and depend on volume, reserve size, market rates, and total staking participation. No fixed return is promised. See the Disclaimer.