Skip to content

Governance overview

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.

veNOTE lock NOTE, up to 4 y NoteGovernor 1 d delay · 5 d vote · 4 % UpgradeGovernor 1 d delay · 7 d vote · 8 % GaugeController weekly weights · 10 d cooldown Timelock 48 h UpgradeTimelock 7 d Guardian cancel · pause only parameters, series, unwind, gauges UUPS upgrades (periphery only) emission split, Desk caps
NOTE locked in veNOTE is the only source of voting power; there is no delegation and weight decays linearly to zero at unlock. Parameter decisions travel through the 48-hour Timelock; code upgrades through a separate 7-day UpgradeTimelock. Dashed lines: the guardian (Security Council) can cancel queued operations on either timelock and pause, nothing else.
PageWhat it covers
veNOTELock maths, decay curve, minimum and maximum terms, lockFromStaked, withdrawal
Proposals and votingNoteGovernor and UpgradeGovernor parameters, proposal lifecycle, fractional voting, the two timelocks, Security Council powers and limits
GaugesWeekly cycle, vote weights, cooldown, how relative weights become emissions and Desk caps, worked weekly example
EmissionsThe step-decay schedule, the NOTE epoch cap and how Minter.mintWeekly reconciles the two
Upgradeability and recoveryHybrid model (immutable core, UUPS periphery), Recovery Unwind, excess sweep, versioned series registry, storage-layout policy
Upgrade safetyThe controls that make the upgrade path auditable, under Security

fact Every module inherits Governed: an owner and a guardian. After DeployGovernance the owner of every module is the 48-hour Timelock; the only thing that can call upgradeToAndCall on a UUPS proxy is the 7-day UpgradeTimelock.

ActorTimelock (48 h)UpgradeTimelock (7 d)Governed contracts
NoteGovernorPROPOSER, CANCELLER
UpgradeGovernorPROPOSER, CANCELLER
Multisig (optional, launch only)PROPOSERPROPOSER
Guardian (Security Council)CANCELLERCANCELLERpause(), NoteCore.cancelUnwind, OracleAdapter.revokeForceObserve
address(0)EXECUTOR (anyone executes)EXECUTOR
Timelock (48 h)owner of every module, veNOTE, GaugeController, EmissionSchedule, Minter, gauges, SeriesRegistry
Deployeradmin renouncedadmin renouncednone

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 Timelock can unpause.
  • The 48-hour Timelock cannot upgrade code. _authorizeUpgrade on every UUPS module reverts NotUpgradeTimelock(caller) 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; sweepExcess only moves balances above recordedLiabilities.
  • Direct calls to onlyOwner functions from the multisig, guardian or deployer revert OwnableUnauthorizedAccount. DEFAULT_ADMIN_ROLE on both timelocks was renounced at deployment, so roles can only change through the timelock itself.
ModuleParameterBoundEffect of change
NoteCorecouponFeeBps, notionalFeeBps≤ 5,000 / ≤ 500Future series only
NoteCoresetKeeperRewardObservations with closeTs ≥ effectiveAt (24 h grace)
NoteCoremaxCouponCapBps, maxObservationsFuture series
NoteCoresetFeeSink, setOracle, setCalendar24 h MODULE_GRACEEmits ModuleUpdated with effectiveAt; one pending change per slot
NoteCorecreateSeriesValidated; reverts CoreDeprecated() on a deprecated coreNew series
NoteCoreproposeUnwind, unwind, cancelUnwind, sweepExcesswhenPaused; see recoveryPer-series recovery
SeriesRegistryregister(core), deprecate(version)Irreversible deprecationWhich core may create series
OracleAdaptersetParams: settlementWindow, maxLookback, maxDeviationBps, deferralWindow, forceDelay, maxRoundWalk, freshLagforceDelay ≥ 24 h; maxRoundWalk 1 to 500; settlementWindow > closeGrace; freshLag 1 s to 24 hImmediate
OracleAdaptersetCloseWindow: closeGrace, maxPreCloseLagcloseGrace ≤ 1 h and < settlementWindow; maxPreCloseLag 1 s to 24 hImmediate
OracleAdaptersetBackupFeed, proposeForceObserve, cancelObservationDelaysPer feed / per observation
MarketCalendarsetHoliday, setEarlyClosecreateSeries validation and future timestamp checks
NOTEsetMinter, setMintCapPerEpochCap 100mEmission pace (hard ceiling for Minter)
sNOTEsetRewardNotifier, setCooldown≤ 30 daysImmediate
veNOTEpause / unpausewithdraw never pausableNew locks and top-ups
NoteGovernorsetProposalThresholdBps≤ 10,000 (InvalidBps)Proposal threshold; via proposal only
UpgradeGovernorsetProposalThresholdBps, setVotingPeriod, updateQuorumNumerator, updateTimelockConstructor floors 7 d / 8 % / 7 d; later changes go through the 7-day process itselfUpgrade vote parameters
GaugeControlleraddType, changeTypeWeight, addGauge, changeGaugeWeight, setDeskGaugeHasVotes blocks admin weight on voted gaugesNext week boundary
EmissionSchedulesetSchedule (initial, decay bps, period, floor)decayBps < 10,000; floor ≤ initialNext mintWeekly
Treasuryasset whitelist, setRedemptionParams, setDesk, setBondDepository, setMaxFeedStaleness, withdrawERC20, withdrawLegs, mintNoteHaircut ≤ 50%, cap ≤ 100%Reserve composition and floor
BondDepositorymarkets, controlVariable, setDiscountParams, setDeskDiscount ≤ 50%Bond pricing
RevenueRoutersetSplit, setAuctionParams, resetAuction, sweephalf-life 5 min to 30 d; bump ≤ 100%; fill 1 bp to 100%Fee split and auction
DesksetCaps, setGaugeController, fillCoupon, liquidateToTreasury, sweepToken, setQueueProcessLimit, setMaxFeedStalenesscaps ≤ 100%; queue limit ≤ 50; gauge cap bounded 1% to 40%Desk exposure. See Desk

intended Governance publishes a standing template per underlying (autocall 100%, barrier 65%, fortnightly observations, 52-week tenor, coupon floor and cap, refBps) and creates series on a fixed cadence, for example every two weeks per underlying, so that holders can roll. Deviations (different barrier, different tenor) go through a proposal.

Checks before creating a series:

  1. All observation timestamps pass isOfficialClose; holidays and early closes for the tenor are registered.
  2. No known corporate action (split, spin-off) is scheduled inside the tenor for the underlying, or the series is shortened to end before it.
  3. Feed and backup feed are live and agree.
  4. notionalCap is set with regard to Stock Token liquidity, since physical settlement can deliver up to N / s0 tokens to COUPON holders at once.
  5. The core creating the series is the active version in SeriesRegistry.
SituationGuardianTimelock
Suspected bug in NoteCorePause deposits, strike and observationDeploy a new core version, register, deprecate the old one; proposeUnwind affected series if needed
Suspected bug in a UUPS modulePauseSchedule the fix through the 7-day UpgradeTimelock
Oracle feed failureWait for deferral window; propose force or cancel
Wrong forced price proposedRevoke
Stock Token frozen by issuerPause new series on that underlyingCancel remaining observations; series settles at lastPrice, or unwind
Treasury asset depegPause redemptionDisable asset in valuation, rebalance
Malicious queued operationcancel on the relevant timelock

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.

intended

  1. Forum discussion with a written specification of the change and its parameter values. The on-chain description follows # <title> and includes a ## Risk section.
  2. Temperature check by NOTE holders.
  3. 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 timelock); a code upgrade about 15 days (1 d, 7 d, 7 d).
  4. Queued actions are visible on both timelocks for the full delay period; the guardian may cancel.
  5. 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.