Skip to main content

Worked Example: Staking Rewards (1-month epoch)

This document walks through a concrete, numbers-first example of how UTIL staking rewards are budgeted and allocated over a one-month epoch. We apply a time-weighted stake multiplier and a fee-first funding policy, and show the effect of early unstaking (forfeiture of unvested rewards only; principal is never slashed). Use this as a baseline you can parameterize for your community; formal equations and an appendix table follow below.

Parameters​

  • Total staked at epoch start: ‘S=100,000‘`S = 100{,}000` UTIL

  • APR target: ‘6%‘`6\%` ⇒ monthly base rate ‘rmo=0.06/12=0.005‘`r_{\text{mo}} = 0.06/12 = 0.005`

  • Time multiplier: ‘f(Ti)=1+αTi‘`f(T_i) = 1 + \alpha T_i` with ‘α=0.01‘`\alpha = 0.01` per month (commitment length ‘Ti‘`T_i` in months)

  • Stakers:

    • Alice: ‘sA=10,000‘`s_A = 10{,}000` UTIL, ‘TA=6‘`T_A = 6` → ‘fA=1.06‘`f_A = 1.06`
    • Bob: ‘sB=20,000‘`s_B = 20{,}000` UTIL, ‘TB=3‘`T_B = 3` → ‘fB=1.03‘`f_B = 1.03`
    • Carol: ‘sC=70,000‘`s_C = 70{,}000` UTIL, ‘TC=12‘`T_C = 12` → ‘fC=1.12‘`f_C = 1.12`

Step 1 — Weighted stake & reward pool​

Weight each stake by its time multiplier:

  • ‘wA=sAfA=10,000×1.06=10,600‘`w_A = s_A f_A = 10{,}000 \times 1.06 = 10{,}600`
  • ‘wB=sBfB=20,000×1.03=20,600‘`w_B = s_B f_B = 20{,}000 \times 1.03 = 20{,}600`
  • ‘wC=sCfC=70,000×1.12=78,400‘`w_C = s_C f_C = 70{,}000 \times 1.12 = 78{,}400`
  • ‘∑wi=109,600‘`\sum w_i = 109{,}600`

Monthly rewards to distribute (mint side) follow the base rate on total stake:

‘Repoch=rmo⋅S=0.005×100,000=500textUTIL‘`R_{\text{epoch}} = r_{\text{mo}} \cdot S = 0.005 \times 100{,}000 = 500 \\text{ UTIL}`

Step 2 — Pro-rata allocation by weighted share​

‘Ri=Repoch×fracwisumwj‘`R_i = R_{\text{epoch}} \times \\frac{w_i}{\\sum w_j}`

  • Alice: ‘500×10,600109,600≈48.36‘`500 \times \frac{10{,}600}{109{,}600} \approx 48.36` UTIL
  • Bob: ‘500×20,600109,600≈94.16‘`500 \times \frac{20{,}600}{109{,}600} \approx 94.16` UTIL
  • Carol: ‘500×78,400109,600≈357.48‘`500 \times \frac{78{,}400}{109{,}600} \approx 357.48` UTIL
  • (Rounding ⇒ total ≈ 500 UTIL)

Intuition: bigger and longer commitments earn proportionally more via ‘wi=sif(Ti)‘`w_i=s_if(T_i)`.


Early Unstaking Penalty (loss of unvested reward only)​

Assume Bob committed to ‘TB=3‘`T_B=3` months but exits after ‘t=2‘`t=2` months. His term reward (sum across the first two months) is multiplied by a vesting factor ‘t/TB‘`t/T_B`.

For a single month’s reward ‘RB‘`R_B` (≈ 94.16 UTIL as above), his kept amount at month 2 is:

‘RB,textkept=fractTBtimesRB=frac23,RBapprox62.77textUTIL‘`R_{B,\\text{kept}} = \\frac{t}{T_B} \\times R_B = \\frac{2}{3}\\,R_B \\approx 62.77 \\text{ UTIL}`

The forfeited portion ‘(1−tfractTB)RBapprox31.39‘`(1-\\tfrac{t}{T_B})R_B \\approx 31.39` UTIL returns to the Treasury reward pool for redistribution in the next epoch.

Principal stake is never slashed; only the unvested reward is forfeited.


Fee-based replenishment (reduces reliance on minting)​

Suppose this month the platform collects 2,000 UTIL in fees. Policy:

  1. Use fees to fund the target reward budget (here, 500 UTIL) before minting.
  2. Route any surplus fees to the Contributor Pool (or keep a % to top up the reward buffer).
  • Fees cover the 500 UTIL rewards → Mint = 0 for this epoch.
  • Remaining fees ‘2,000−500=1,500‘`2{,}000 - 500 = 1{,}500` UTIL → Contributor Pool (to pay verified work), or per policy split (e.g., 1,000 to Contributor Pool, 500 retained in a reward buffer).

This creates a closed loop: communities spend UTIL on services → Treasury receives fees → fees finance staking rewards and contributor rewards → contributors earn UTIL for building/operating the platform that communities use.


Optional: Multi-epoch glimpse​

  • If Bob exits before his 3-month term ends, next epoch’s S drops (from 100k to 80k if he fully leaves), and his forfeited rewards (≈ 31.39 UTIL from month 2) go back into the next epoch reward pool—slightly boosting remaining stakers’ pro-rata outcomes or lowering mint needs.

Equations summary (for the paper)​

  • Time multiplier: ‘f(Ti)=1+alphaTi‘`f(T_i)=1+\\alpha T_i`

  • Weights: ‘wi=sif(Ti)‘`w_i=s_i f(T_i)`, ‘;W=sumiwi‘`\\;W=\\sum_i w_i`

  • Epoch reward budget (mint target): ‘Rtextepoch=rtextmocdotS‘`R_{\\text{epoch}}=r_{\\text{mo}}\\cdot S`

    • Fee-first rule: ‘Rtextfunded=min(textfees,Rtextepoch)‘`R_{\\text{funded}}=\\min(\\text{fees},R_{\\text{epoch}})`; ‘Rtextmint=max(0,Rtextepoch−textfees)‘`R_{\\text{mint}}=\\max(0,R_{\\text{epoch}}-\\text{fees})`
  • Allocations: ‘Ri=(Rtextfunded+Rtextmint)cdotfracwiW‘`R_i = (R_{\\text{funded}}+R_{\\text{mint}})\\cdot \\frac{w_i}{W}`

  • Early exit (loss of unvested reward only): ‘Ri,textkept=fractTiRi,;;Ri,textforfeit=left(1−fractTiright)Ri‘`R_{i,\\text{kept}}=\\frac{t}{T_i}R_i,\\;\\;R_{i,\\text{forfeit}}=\\left(1-\\frac{t}{T_i}\\right)R_i`


Awesome — here’s the appendix table for the staking example you approved, followed by a first draft of the Sell pressure risk & liquidity analysis section (parameterized + a clean baseline scenario you can tweak).


Appendix A — Worked Example Table (1-month epoch)

StakerStake (UTIL)Term (mo)Time Mult. f(T)Weighted Stake wᵢShare wᵢ/ΣwReward (UTIL)Early Unstake?Kept RewardForfeited Reward
Alice10,00061.0610,6009.68%48.36No48.360.00
Bob20,00031.0320,60018.80%94.16Exit @ 2/362.7731.39
Carol70,000121.1278,40071.52%357.48No357.480.00
Totals100,000——109,600100%500.00—468.6131.39

Parameters used: APR 6% ⇒ monthly base rate ‘rmo=0.005‘`r_{mo}=0.005`; ‘f(T)=1+0.01T‘`f(T)=1+0.01T`; epoch reward budget ‘Repoch=rmocdotS=500‘`R_{epoch}=r_{mo}\\cdot S=500` UTIL; fee-first funding (fees cover rewards before mint). Bob’s early exit forfeits unvested rewards only (principal never slashed).