Skip to content

Emissions

fact Sources contracts/src/governance/EmissionSchedule.sol and contracts/src/governance/Minter.sol. Emissions are the only NOTE that gauges distribute. The schedule is a pure function of time; the Minter is the only path that turns it into tokens, and it can never exceed the NOTE epoch cap.

weeklyEmission(t) = 0 if t < START = max(floor, initial × (1 − decayBps / 10,000) ^ periods) otherwise periods = (roundWeek(t) − START) / (decayPeriodWeeks × 1 week)

START is rounded down to a week boundary at construction and is immutable. The other four parameters are governed through setSchedule(initialWeekly, decayBps, decayPeriodWeeks, floorWeekly) (owner = 48-hour Timelock), which reverts InvalidSchedule when decayBps ≥ 10,000, decayPeriodWeeks == 0 or floor > initial, and emits ScheduleUpdated(initialWeekly, decayBps, decayPeriodWeeks, floorWeekly).

initialWeekly
300,000 NOTE
decayBps
200 (2%)
decayPeriodWeeks
4
floorWeekly
25,000 NOTE

Deployed defaults from DeployGovernance. Emission is constant inside a 4-week period and steps down 2% at each period boundary until it reaches the floor after about 123 periods (week 492, roughly 9.5 years). The decay loop exits early once the floor is reached, so gas is bounded by periods to the floor, not by elapsed time.

est. The tokenomics document (v2, September 2026) reserves a gauge-emission budget of 30,000,000 NOTE (30% of the hard cap) and quotes mainnet launch parameters of 250,000 NOTE per week, 3% decay every 4 weeks and a 20,000 floor, under which the budget is exhausted after roughly 5.8 years. The budget is not enforced by EmissionSchedule; governance is expected to lower the schedule to zero when it is reached, and the NOTE epoch cap remains the hard brake. The DeployGovernance defaults above are the current deploy-script values and may be changed before launch.

illustrative Computed from the defaults; governance may change any of the four parameters through a proposal.

WeekPeriodWeekly emissionCumulative (approx.)
00300,000
41294,000
123282,358
266265,753
52 (year 1)13230,70713.86m
104 (year 2)26177,41924.52m
156 (year 3)39136,43932.71m
208 (year 4)52104,92539.02m
260 (year 5)6580,68943.86m
364 (year 7)9147,719
468 (year 9)11728,221
492 onward123+25,000 (floor)55.70m at year 10
300k 200k 100k 0 start 2 y 4 y 6 y 8 y 10 y floor 25,000 300,000 NOTE / week, −2% every 4 weeks
Illustrative, default parameters. Steps are drawn at four-week resolution. The floor is reached in week 492; from then on the schedule pays 25,000 NOTE per week indefinitely, subject to the NOTE supply cap.

fact Minter.mintWeekly() is nonReentrant, whenNotPaused and callable by anyone once per week:

  1. week = currentWeek(); revert AlreadyMinted(week) if already done.
  2. budget = min(schedule.weeklyEmission(week), NOTE.epochMintRemaining()); revert NothingToMint(week) if zero.
  3. Mark the week minted, then for every registered gauge: rw = controller.gaugeRelativeWeightWrite(gauge, week), amount = budget × rw / 1e18 clamped to budget − mintedSoFar; if non-zero, NOTE.mint(gauge, amount) followed by gauge.notifyRewardAmount(amount).
  4. Record mintedForWeek, mintedToGauge, totalMinted; emit GaugeMinted per gauge and WeeklyMint(week, budget, minted).

The clamp in step 3 is a second line of defence: totalMinted cannot exceed the schedule even if a future controller version mis-reports weights. setSchedule(schedule) on the Minter (owner) swaps the schedule contract; currentWeek() and mintedWeek(week) are views. The first mintWeekly() is possible from EMISSION_START, which defaults to the week boundary after deployment. NOTE.setMinter(minter, true) must have been executed by the NOTE owner.

NOTE has its own brake: mintCapPerEpoch per 7-day epoch counted from GENESIS, with epochMintRemaining() = min(mintCapPerEpoch − mintedInEpoch, CAP − totalSupply). The Minter is one of several minters (bonds and governed Treasury minting are the others) and shares that headroom.

SituationWhat mintWeekly does
Epoch headroom ≥ scheduled emissionMints the full schedule
Bonds have used part of the epoch capMints only the remaining headroom; never reverts on the cap and never pre-empts other minters
Epoch fully used by othersReverts NothingToMint(week); the week’s emission is forgone, not deferred
Schedule and epoch windows misalignedThe schedule week is Thursday-anchored while NOTE’s epoch is anchored at GENESIS; a partial overlap only makes the effective budget more conservative

Raising emissions therefore takes two governed steps when the cap binds: EmissionSchedule.setSchedule and NOTE.setMintCapPerEpoch, both through the 48-hour Timelock. The epoch cap is the ceiling; the schedule is the target.

Emissions are split by gauge relative weight, so veNOTE voters decide the allocation between COUPON stakers per series, Desk depositors and sNOTE stakers each week. See Gauges for the weekly cycle and a numerical split of a 300,000 NOTE week, and Desk for how the same votes steer the Desk’s per-underlying caps.