DocumentationGovernance

Governance Overview

Documentation snapshot 18 October 2026. Deployment · Audit Status
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

Governance architecture: NOTE locked into veNOTE feeds two governors and gauge votes; each governor schedules through its own governance; the guardian can only cancel and pause 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 governance 48 h upgrade governance 7 d Guardian cancel · pause only parameters, series, unwind, gauges UUPS upgrades (periphery only) emission split, Desk caps
fact 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 governance; code upgrades through a separate 7-day upgrade governance. Dashed lines: the guardian (Security Council) can cancel queued operations on either governance and pause, nothing else.

Pages in This Section

fact Pages in This Section
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 governance delays, 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

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.

fact Roles Reference
Actorgovernance (48 h)upgrade governance (7 d)Governed contracts
NoteGovernorPROPOSER, CANCELLER--
UpgradeGovernor-PROPOSER, CANCELLER-
governance (optional, launch only)PROPOSERPROPOSER-
Guardian (Security Council)CANCELLERCANCELLERpause(), NoteCore.cancelUnwind, OracleAdapter.revokeForceObserve
address(0)EXECUTOR (anyone executes)EXECUTOR-
governance (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 governance can unpause.
  • The 48-hour governance cannot upgrade code. _authorizeUpgrade on 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; sweepExcess only moves balances above recordedLiabilities.
  • Direct calls to onlyOwner functions from the governance, guardian or deployer revert OwnableUnauthorizedAccount. DEFAULT_ADMIN_ROLE on both governance delays was renounced at deployment, so roles can only change through the governance itself.

Parameter Map

fact Parameter Map Reference
ModuleParameterBoundEffect of change
NoteCorecouponFeeBps, notionalFeeBps≤ 5,000 / ≤ 500Future series only
NoteCoresetKeeperReward-Observations with closeTs ≥ effectiveAt (24 h grace)
NoteCoremaxCouponCapBps, maxObservations-Future 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, setEarlyClose-createSeries 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, governance-authority configurationConstructor 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

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:

  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.

Emergency Procedures

fact Emergency Procedures Reference
SituationGuardianGovernance
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 upgrade governance
Oracle feed failure-Wait 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 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

  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 governance); a code upgrade about 15 days (1 d, 7 d, 7 d).
  4. Queued actions are visible on both governance delays 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.

A little more clarity?

Keep exploring, or revisit this topic from the navigation.