Governance Overview
On this page
fact Governance is implemented in contracts/src/governance/ (veNOTE, NoteGovernor, UpgradeGovernor, GaugeController, EmissionSchedule, Minter, gauges) and in the Governed base every module inherits. This section documents the deployed design; anything marked illustrative is an example, not a promise.
One Diagram
Pages in This Section
| Page | What it covers |
|---|---|
| veNOTE | Lock maths, decay curve, minimum and maximum terms, lockFromStaked, withdrawal |
| Proposals and voting | NoteGovernor and UpgradeGovernor parameters, proposal lifecycle, fractional voting, the two governance delays, Security Council powers and limits |
| Gauges | Weekly cycle, vote weights, cooldown, how relative weights become emissions and Desk caps, worked weekly example |
| Emissions | The step-decay schedule, the NOTE epoch cap and how Minter.mintWeekly reconciles the two |
| Upgradeability and recovery | Hybrid model (immutable core, UUPS periphery), Recovery Unwind, excess sweep, versioned series registry, storage-layout policy |
| Upgrade safety | The controls that make the upgrade path auditable, under Security |
Roles
fact Every module inherits Governed: an owner and a guardian. After DeployGovernance the owner of every module is the 48-hour governance; the only thing that can call upgradeToAndCall on a UUPS proxy is the 7-day upgrade governance.
| Actor | governance (48 h) | upgrade governance (7 d) | Governed contracts |
|---|---|---|---|
NoteGovernor | PROPOSER, CANCELLER | - | - |
UpgradeGovernor | - | PROPOSER, CANCELLER | - |
| governance (optional, launch only) | PROPOSER | PROPOSER | - |
| Guardian (Security Council) | CANCELLER | CANCELLER | pause(), NoteCore.cancelUnwind, OracleAdapter.revokeForceObserve |
address(0) | EXECUTOR (anyone executes) | EXECUTOR | - |
| governance (48 h) | - | - | owner of every module, veNOTE, GaugeController, EmissionSchedule, Minter, gauges, SeriesRegistry |
| Deployer | admin renounced | admin renounced | none |
What each actor cannot do matters as much:
- The guardian cannot propose, execute, unpause, change a parameter or move funds. It can delay a decision (veto a queued operation) and stop new activity (pause). Only the governance can unpause.
- The 48-hour governance cannot upgrade code.
_authorizeUpgradeon every UUPS module rejects unauthorised calls for any other caller, so a compromised governance path cannot shorten the 7-day upgrade delay. - No actor can move escrowed user funds in
NoteCore. Recovery Unwind pays holders exactly their recorded entitlement;sweepExcessonly moves balances aboverecordedLiabilities. - Direct calls to
onlyOwnerfunctions from the governance, guardian or deployer revertOwnableUnauthorizedAccount.DEFAULT_ADMIN_ROLEon both governance delays was renounced at deployment, so roles can only change through the governance itself.
Parameter Map
| Module | Parameter | Bound | Effect of change |
|---|---|---|---|
| NoteCore | couponFeeBps, notionalFeeBps | ≤ 5,000 / ≤ 500 | Future series only |
| NoteCore | setKeeperReward | - | Observations with closeTs ≥ effectiveAt (24 h grace) |
| NoteCore | maxCouponCapBps, maxObservations | - | Future series |
| NoteCore | setFeeSink, setOracle, setCalendar | 24 h MODULE_GRACE | Emits ModuleUpdated with effectiveAt; one pending change per slot |
| NoteCore | createSeries | Validated; reverts CoreDeprecated() on a deprecated core | New series |
| NoteCore | proposeUnwind, unwind, cancelUnwind, sweepExcess | whenPaused; see recovery | Per-series recovery |
| SeriesRegistry | register(core), deprecate(version) | Irreversible deprecation | Which core may create series |
| OracleAdapter | setParams: settlementWindow, maxLookback, maxDeviationBps, deferralWindow, forceDelay, maxRoundWalk, freshLag | forceDelay ≥ 24 h; maxRoundWalk 1 to 500; settlementWindow > closeGrace; freshLag 1 s to 24 h | Immediate |
| OracleAdapter | setCloseWindow: closeGrace, maxPreCloseLag | closeGrace ≤ 1 h and < settlementWindow; maxPreCloseLag 1 s to 24 h | Immediate |
| OracleAdapter | setBackupFeed, proposeForceObserve, cancelObservation | Delays | Per feed / per observation |
| MarketCalendar | setHoliday, setEarlyClose | - | createSeries validation and future timestamp checks |
| NOTE | setMinter, setMintCapPerEpoch | Cap 100m | Emission pace (hard ceiling for Minter) |
| sNOTE | setRewardNotifier, setCooldown | ≤ 30 days | Immediate |
| veNOTE | pause / unpause | withdraw never pausable | New locks and top-ups |
| NoteGovernor | setProposalThresholdBps | ≤ 10,000 (InvalidBps) | Proposal threshold; via proposal only |
| UpgradeGovernor | setProposalThresholdBps, setVotingPeriod, updateQuorumNumerator, governance-authority configuration | Constructor floors 7 d / 8 % / 7 d; later changes go through the 7-day process itself | Upgrade vote parameters |
| GaugeController | addType, changeTypeWeight, addGauge, changeGaugeWeight, setDesk | GaugeHasVotes blocks admin weight on voted gauges | Next week boundary |
| EmissionSchedule | setSchedule (initial, decay bps, period, floor) | decayBps < 10,000; floor ≤ initial | Next mintWeekly |
| Treasury | asset whitelist, setRedemptionParams, setDesk, setBondDepository, setMaxFeedStaleness, withdrawERC20, withdrawLegs, mintNote | Haircut ≤ 50%, cap ≤ 100% | Reserve composition and floor |
| BondDepository | markets, controlVariable, setDiscountParams, setDesk | Discount ≤ 50% | Bond pricing |
| RevenueRouter | setSplit, setAuctionParams, resetAuction, sweep | half-life 5 min to 30 d; bump ≤ 100%; fill 1 bp to 100% | Fee split and auction |
| Desk | setCaps, setGaugeController, fillCoupon, liquidateToTreasury, sweepToken, setQueueProcessLimit, setMaxFeedStaleness | caps ≤ 100%; queue limit ≤ 50; gauge cap bounded 1% to 40% | Desk exposure. See Desk |
Series Creation Policy
intended Governance publishes a standing template per underlying (twelve weekly observations, 12-week tenor, autocall 105% or 110%, barrier 60% to 88%, coupon floor, reference and cap set per underlying so that the band brackets the fair value of the protection; see Templates) and series roll daily per underlying through RollPolicy, so that holders can always roll. Deviations (different barrier, different tenor) go through a proposal.
Checks before creating a series:
- All observation timestamps pass
isOfficialClose; holidays and early closes for the tenor are registered. - No known corporate action (split, spin-off) is scheduled inside the tenor for the underlying, or the series is shortened to end before it.
- Feed and backup feed are live and agree.
notionalCapis set with regard to Stock Token liquidity, since physical settlement can deliver up toN / s0tokens to COUPON holders at once.- The core creating the series is the active version in
SeriesRegistry.
Emergency Procedures
| Situation | Guardian | Governance |
|---|---|---|
Suspected bug in NoteCore | Pause deposits, strike and observation | Deploy a new core version, register, deprecate the old one; proposeUnwind affected series if needed |
| Suspected bug in a UUPS module | Pause | Schedule the fix through the 7-day upgrade governance |
| Oracle feed failure | - | Wait for deferral window; propose force or cancel |
| Wrong forced price proposed | Revoke | - |
| Stock Token frozen by issuer | Pause new series on that underlying | Cancel remaining observations; series settles at lastPrice, or unwind |
| Treasury asset depeg | Pause redemption | Disable asset in valuation, rebalance |
| Malicious queued operation | cancel on the relevant governance | - |
Pause never blocks claim, redeem, redeemShield, refund, settle, sweepFees or withdrawUnwound in NoteCore, nor Desk withdrawals and queue processing, nor sNOTE withdraw/redeem on a matured request, nor veNOTE withdraw, nor gauge withdraw/exit/getReward. Users can always exit settled or unwound positions.
Process
intended
- Forum discussion with a written specification of the change and its parameter values. The on-chain description follows
# <title>and includes a## Risksection. - Temperature check by NOTE holders.
- On-chain proposal on the relevant governor. A parameter change takes about 8 days end to end (1 d delay, 5 d vote, 48 h governance); a code upgrade about 15 days (1 d, 7 d, 7 d).
- Queued actions are visible on both governance delays for the full delay period; the guardian may cancel.
- Anyone executes; post-execution report.
Governance does not control user escrow, cannot change the terms of a live series except by cancelling observations or unwinding it at recorded entitlements, and cannot mint NOTE beyond the epoch cap without first raising the cap through the same delayed process.
Keep exploring, or revisit this topic from the navigation.