Events
On this page
Use events to identify state changes, then read the corresponding contract view to confirm current state. Signatures and fields are reference data, not instructions to treat an old event as the latest balance.
NoteCore
fact Copied from contracts/src/core/NoteCore.sol.
| Event | Emitted by | When |
|---|---|---|
SeriesCreated(uint256 indexed seriesId, address indexed underlying, address indexed feed, SeriesParams params) | createSeries | New series |
CouponDeposited(uint256 indexed seriesId, address indexed account, uint256 quoteAmount) | depositCoupon, depositCouponReserved | Not applicable |
ReserveDeposited(uint256 indexed seriesId, address indexed account, uint256 quoteAmount, uint16 minCouponBps) | depositCouponReserved | Reserved COUPON deposit with its hurdle (the highest hurdle posted for the series) |
ReserveDepositorSet(address indexed previous, address indexed current) | setReserveDepositor | Not applicable |
ReserveExcluded(uint256 indexed seriesId, uint256 excluded, uint256 included) | finalizeStrike | Part of the reserved deposit left the COUPON book so the coupon holds the hurdle; excluded is refundable to the reserve account |
ShieldDeposited(uint256 indexed seriesId, address indexed account, uint256 stockAmount, uint256 prefundQuote) | depositShield | Not applicable |
StrikeDeferred(uint256 indexed seriesId, uint40 closeTs) | finalizeStrike | Oracle not ready |
StrikeFinalized(uint256 indexed seriesId, uint256 s0, uint256 matchedNotional, uint16 couponBps, uint256 notionalFee) | finalizeStrike | Series Live |
SeriesCancelled(uint256 indexed seriesId) | finalizeStrike | No match or cancelled strike |
Observed(uint256 indexed seriesId, uint32 indexed index, uint256 price, bool barrierHolds, bool autocall, Status status) | observe | Successful observation |
ObservationDeferred(uint256 indexed seriesId, uint32 indexed index, uint40 closeTs) | observe | Oracle not ready |
ObservationSkipped(uint256 indexed seriesId, uint32 indexed index, uint40 closeTs) | observe | Governance-cancelled observation |
ObservationRolled(uint256 indexed seriesId, uint256 indexed index, uint40 scheduled, uint40 effective) | finalizeStrike, observe | Observation index (0 = strike) resolved, skipped or cancelled at effective, the next official close after its scheduled day became a holiday; emitted before the resolving event |
ObservationCollapsed(uint256 indexed seriesId, uint32 idx, uint40 closeTs) | observe | Observation idx rolled onto the same effective close as the previously processed index; consumed without coupon, autocall test or keeper payment. A collapsed final index still settles at lastPrice |
CouponAccrued(uint256 indexed seriesId, uint32 indexed index, uint256 gross, uint256 fee, uint256 couponIndex) | observe | Barrier held |
PositionSettled(uint256 indexed seriesId, address indexed account, uint256 couponUnits, uint256 shieldUnits, uint256 refundQuote, uint256 refundStock) | settle and implicit settles | Lazy mint |
Claimed(uint256 indexed seriesId, address indexed account, uint256 quoteOut) | claim | Not applicable |
Redeemed(uint256 indexed seriesId, address indexed account, uint8 leg, uint256 units, uint256 quoteOut, uint256 stockOut) | redeem, redeemShield | Not applicable |
Refunded(uint256 indexed seriesId, address indexed account, uint256 quoteOut, uint256 stockOut) | refund | Not applicable |
FeesSwept(uint256 indexed seriesId, address indexed feeSink, uint256 amount) | sweepFees | Amount is sweepableFees(seriesId) (accrued fees above the keeper reserve) |
FeeNotifyFailed(uint256 indexed seriesId, address indexed feeSink, uint256 amount) | sweepFees | Fees transferred but the sink's notifyFee call reverted; the sink reconciles on balance |
KeeperPaid(uint256 indexed seriesId, address indexed keeper, uint256 amount) | finalizeStrike, observe, and lazily from claim, redeem, redeemShield, settle, refund | Reward credited to keeperOwed |
KeeperRewardClaimed(address indexed keeper, uint256 amount) | claimKeeperReward | Not applicable |
FeeSinkSet(address indexed feeSink), OracleSet(address indexed oracle), CalendarSet(address indexed calendar) | admin | Not applicable |
FeesSet(uint16 couponFeeBps, uint16 notionalFeeBps), KeeperRewardSet(uint256 keeperRewardQuote), LimitsSet(uint16 maxCouponCapBps, uint16 maxObservations) | admin | Not applicable |
SeriesCreatorSet(address indexed oldCreator, address indexed newCreator) | setSeriesCreator | Not applicable |
Plus OpenZeppelin Paused(address), Unpaused(address), OwnershipTransferStarted and OwnershipTransferred (Ownable2Step), and GuardianUpdated from Governed.
Recovery and Module Events
fact Added by the Upgradeability and recovery addendum. Status.Unwound is terminal; Observed and CouponAccrued never follow SeriesUnwound.
| Event | When |
|---|---|
ModuleUpdated(bytes32 indexed key, address oldValue, address newValue, uint40 effectiveAt) | setOracle, setCalendar, setFeeSink; effectiveAt = now + 24 h |
ParamUpdated(bytes32 indexed key, uint256 oldValue, uint256 newValue, uint40 effectiveAt) | setKeeperReward |
UnwindProposed(uint256 indexed seriesId, uint40 at) | proposeUnwind; unwind is possible from at + 48 h |
UnwindCancelled(uint256 indexed seriesId) | cancelUnwind by owner or guardian |
SeriesUnwound(uint256 indexed seriesId, uint256 quoteLiabilities, uint256 stockLiabilities) | unwind; status becomes Unwound, entitlements frozen |
UnwoundWithdrawn(uint256 indexed seriesId, address indexed account, uint256 quoteOut, uint256 stockOut) | withdrawUnwound |
ExcessSwept(address indexed token, address indexed to, uint256 amount) | sweepExcess; amount = balance − recordedLiabilities(token) |
DustWrittenOff(uint256 indexed seriesId, address indexed to, uint256 quoteAmount, uint256 stockAmount) | writeOffDust on a terminal series whose residue is within dustLimitQuote() and DUST_LIMIT_STOCK |
SeriesRegistry
| Event | When |
|---|---|
CoreRegistered(uint256 indexed version, address indexed core) | register |
CoreDeprecated(uint256 indexed version, address indexed core) | deprecate; the core stops accepting createSeries |
NoteLegs
Standard ERC-1155 TransferSingle, TransferBatch, ApprovalForAll, URI.
OracleAdapter and MarketCalendar
fact From contracts/src/oracle/.
| Event | When |
|---|---|
ParamsUpdated(uint40 settlementWindow, uint40 maxLookback, uint16 maxDeviationBps, uint40 deferralWindow, uint40 forceDelay, uint16 maxRoundWalk, uint40 freshLag) | setParams |
CloseWindowUpdated(uint40 closeGrace, uint40 maxPreCloseLag) | setCloseWindow |
LiveMaxAgeUpdated(uint40 liveMaxAge) | setLiveMaxAge |
ModuleUpdated(bytes32 indexed key, address oldValue, address newValue, uint40 effectiveAt) with key = keccak256("CALENDAR") | setCalendar; the first set is effective immediately, later sets after 24 h |
BackupFeedSet(address indexed primary, address indexed backup, uint40 effectiveAt) | setBackupFeed; effectiveAt = now + 24 h, the new backup is used from then on (backupFeedAt); ModuleUpdated is emitted alongside |
ObservationDeferred(address indexed feed, uint40 indexed closeTs, uint40 at) | First failed read for a close |
ObservationResolved(address indexed feed, uint40 indexed closeTs, uint256 price, bool forced) | Read succeeded or force executed |
ForceObserveProposed(address indexed feed, uint40 indexed closeTs, uint256 price, uint40 executeAfter) | Governance proposal after deferralWindow |
ForceObserveRevoked(address indexed feed, uint40 indexed closeTs) | Owner or guardian revoke |
ForceObserveExecuted(address indexed feed, uint40 indexed closeTs, uint256 price) | After forceDelay |
ObservationCancelled(address indexed feed, uint40 indexed closeTs) | Governance cancel |
PythProFeed: MultiplierAcknowledged(uint256 previousWad, uint256 multiplierWad) also stamps basisAcknowledgedAt; post errors PayloadPredatesBasis(uint64 priceTs, uint64 acknowledgedAt), PostTooSoon(uint64 priceTs, uint64 lastTs) (waived inside the last MIN_POST_INTERVAL before an official close), MultiplierChanged(uint256 observed, uint256 accepted) | Pyth Pro backup feed |
HolidaySet(uint32 indexed dayIndex, bool isHoliday), EarlyCloseSet(uint32 indexed dayIndex, uint40 closeTs) | Calendar |
GuardianUpdated(address indexed previousGuardian, address indexed newGuardian) | All Governed modules |
RollPolicy
fact From contracts/src/automation/RollPolicy.sol.
| Event | When |
|---|---|
Rolled(address indexed underlying, uint256 indexed seriesId, address indexed caller, uint256 bountyPaid) | roll, rollAll, rollRange: one per series opened; bountyPaid is min(bounty, balance) at that point |
TemplateSet(address indexed underlying, Template template) | setTemplate |
Disabled(address indexed underlying, address indexed by) | disable (owner or guardian) |
SeriesRegistered(address indexed underlying, uint256 indexed seriesId) | registerSeries |
SeriesUnregistered(address indexed underlying, uint256 indexed seriesId) | unregisterLast: the tail entry (a Cancelled or Unwound series) left the issuance list |
BountySet(uint256 oldBounty, uint256 newBounty) | setBounty |
MinRollIntervalSet(uint256 oldInterval, uint256 newInterval) | setMinRollInterval |
Funded(address indexed from, uint256 amount) | fund |
Swept(address indexed to, uint256 amount) | sweep |
Indexers building the issuance calendar: Rolled plus NoteCore.SeriesCreated for the same seriesId gives the schedule; openSeriesOf and capCount are the read-side twins.
Token Engine
fact From the contract sources.
| Contract | Events |
|---|---|
NOTE | MinterUpdated(address indexed account, bool allowed), MintCapPerEpochUpdated(uint256 previousCap, uint256 newCap), Minted(address indexed minter, address indexed to, uint256 amount, uint256 indexed epoch) |
sNOTE | RewardNotified(address indexed notifier, uint256 amount, uint256 unvestedCarried, uint256 streamEnd), RewardDeferred(address indexed notifier, uint256 amount, uint256 deferredTotal) (reward notified while supply is zero; streamed by the first deposit that restores supply), RewardNotifierUpdated(address indexed previous, address indexed current), CooldownUpdated(uint256 previous, uint256 current), WithdrawRequested(address indexed owner, uint256 shares, uint256 totalPending, uint256 unlockAt), WithdrawRequestCancelled(address indexed owner, uint256 shares), ERC-4626 Deposit/Withdraw. Paused/Unpaused gate deposit and mint only; request, cancel, withdraw and redeem keep emitting while paused |
Treasury | AssetAdded(address indexed token, AssetKind kind, address indexed feed), AssetEnabled(address indexed token, bool enabled), LegSeriesRegistered(uint256 indexed seriesId), DeskUpdated(address indexed previous, address indexed current), BondDepositoryUpdated(address indexed previous, address indexed current), MaxFeedStalenessUpdated(uint256 previous, uint256 current), RedemptionParamsUpdated(uint16 haircutBps, uint16 dailyCapBps), Redeemed(address indexed account, uint256 noteAmount, uint256 quoteOut), SeriesHarvested(uint256 indexed seriesId, uint256 couponOut, uint256 unitsRedeemed, uint256 quoteOut, uint256 stockOut) (quoteOut and stockOut are measured balance deltas), StockPurchased(address indexed token, uint256 amount, uint256 quotePaid), NoteMinted(address indexed to, uint256 amount), Withdrawn(address indexed token, address indexed to, uint256 amount), LegsWithdrawn(uint256 indexed seriesId, address indexed to, uint256 units), AssetFeedUpdated(address indexed token, address indexed previous, address indexed current) |
BondDepository | MarketCreated(uint256 indexed id, QuoteKind kind, address indexed quoteToken, uint256 legSeriesId, uint256 capacity, uint256 controlVariable, uint256 minPriceWad, uint256 maxDebt, uint48 vestingSeconds, uint48 conclusion), MarketClosed(uint256 indexed id), ControlVariableUpdated(uint256 indexed id, uint256 previous, uint256 current), DiscountParamsUpdated(uint16 k, uint16 maxDiscountBps), DeskUpdated(address indexed previous, address indexed current), Bonded(uint256 indexed id, address indexed depositor, address indexed recipient, uint256 amount, uint256 payout, uint256 priceWad, uint256 bondIndex), Redeemed(address indexed recipient, uint256 indexed bondIndex, uint256 amount), UtilisationUpdated(uint256 snapshotBps, uint256 averageBps) (from deposit and pokeUtilisation) |
RevenueRouter | FeeNotified(address indexed token, uint256 amount, address indexed from), FeesRouted(uint256 toBuyback, uint256 toTreasury), SplitUpdated(uint16 buybackBps), AuctionParamsUpdated(uint256 halfLifeSeconds, uint16 maxPremiumBps, uint16 maxFillBps), MinFillIntervalUpdated(uint256 minFillInterval), MinFillBpsUpdated(uint16 minFillBps), MinFillQuoteUpdated(uint256 minFillQuote), AuctionReset(uint256 anchorTime), Buyback(address indexed seller, uint256 noteAmount, uint256 quoteOut, uint256 priceWad), Swept(address indexed token, address indexed to, uint256 amount) |
Desk | ERC-4626 Deposit/Withdraw, CapsUpdated(uint16 perSeriesCapBps, uint16 perUnderlyingCapBps, uint16 totalDeployedCapBps), MaxFeedStalenessUpdated(uint256 previous, uint256 current), QueueProcessLimitUpdated(uint256 previous, uint256 current), CouponFilled(uint256 indexed seriesId, address indexed underlying, uint256 amount), FillerSet(address indexed previous, address indexed current), Refunded(uint256 indexed seriesId, uint256 quoteOut, uint256 stockOut), Harvested(uint256 indexed seriesId, INoteCore.Status status, uint256 couponOut, uint256 units, uint256 quoteOut, uint256 stockOut), PrincipalReleased(uint256 indexed seriesId, uint256 principal, uint256 recovered), StockTracked(address indexed token), StockUntracked(address indexed token), StockLiquidated(address indexed token, uint256 amount, uint256 quoteIn), StockSwept(address indexed token, address indexed to, uint256 amount), WithdrawRequested(uint256 indexed id, address indexed owner, address indexed receiver, uint256 shares), WithdrawRequestCancelled(uint256 indexed id, address indexed owner, uint256 shares), WithdrawRequestFilled(uint256 indexed id, address indexed owner, address indexed receiver, uint256 shares, uint256 assets) (credits claimable(receiver)), WithdrawRequestCancelledFor(uint256 indexed id, address indexed owner, uint256 shares), WithdrawClaimed(address indexed receiver, address indexed to, uint256 assets), MinHoldUpdated(uint256 previous, uint256 current), MinRequestQuoteUpdated(uint256 previous, uint256 current), StockMarkStale(address indexed token, uint256 lastMark) (Treasury could not value a held stock; last mark kept), StockWriteOffSet(address indexed token, bool writtenOff), SeriesWrittenOff(uint256 indexed seriesId, uint256 principal, address indexed legsTo, uint256 units), RedemptionFailed(uint256 indexed seriesId, uint256 units, bytes reason) (the core redemption of a settled series reverted; principal released at zero recovery, legs kept), PoolHolderSet(address indexed account, bool pooled), SharesSwept(address indexed to, uint256 shares), PerUnderlyingCapSet(address indexed underlying, uint16 bps, address indexed source), GaugeControllerUpdated(address indexed previous, address indexed current) |
DeskPolicy | RuleSet(address indexed underlying, Rule rule), RuleDisabled(address indexed underlying, address indexed by), FillLeadSet(uint256 previous, uint256 current), MinFillSet(uint256 previous, uint256 current), MinFillIntervalSet(uint256 previous, uint256 current), BountySet(uint256 previous, uint256 current), Funded(address indexed from, uint256 amount), Swept(address indexed to, uint256 amount), Filled(uint256 indexed seriesId, address indexed underlying, uint256 amount, address indexed caller, uint256 bounty) (emitted after the bounty transfer) |
NoteAutomation | UpkeepAction(Action kind, uint256 indexed id, bool success, bytes reason) (success only when the action changed state; reason NoProgress(id) for a call that changed nothing) (Action.Fill reports the DeskPolicy reason when a fill is skipped), RewardsForwarded(address indexed to, uint256 amount) (min(balance, paidSuccesses × keeperRewardCap) paid per performUpkeep; successful Fill actions are not counted), BountyForwarded(address indexed keeper, uint256 indexed seriesId, uint256 amount) (the DeskPolicy bounty of a successful Fill passed on to the caller), KeeperRewardCapSet(uint256 cap), DeskSet(address indexed oldDesk, address indexed newDesk), DeskPolicySet(address indexed previous, address indexed current), Swept(address indexed to, uint256 amount) |
UUPS modules (Treasury, BondDepository, RevenueRouter, Desk) | ERC-1967 Upgraded(address indexed implementation), upgrade governance, Initialized(uint64 version), OwnershipTransferStarted, OwnershipTransferred, GuardianUpdated(address indexed previousGuardian, address indexed newGuardian), Paused(address account), Unpaused(address account) |
Governance
fact From contracts/src/governance/. OpenZeppelin Governor and governance events are standard and listed by name only.
| Contract | Events |
|---|---|
veNOTE | Deposit(address indexed provider, uint256 value, uint256 indexed lockEnd, DepositKind kind, uint256 timestamp) with DepositKind { DepositFor, CreateLock, IncreaseAmount, IncreaseUnlockTime, LockFromStaked }, StakedDeposit(address indexed provider, uint256 shares, uint256 noteEquivalent), Withdraw(address indexed provider, uint256 value, uint256 stakedShares, uint256 timestamp), Supply(uint256 previousSupply, uint256 newSupply) |
NoteGovernor, UpgradeGovernor | OZ ProposalCreated, ProposalQueued, ProposalExecuted, ProposalCanceled, VoteCast, VoteCastWithParams (fractional votes carry params), VotingDelaySet, VotingPeriodSet, ProposalThresholdSet, QuorumNumeratorUpdated, governance; NoteGovernor adds ProposalThresholdBpsSet(uint256 previous, uint256 current) |
| governance (48 h), upgrade governance (7 d) | OZ CallScheduled, CallSalt, CallExecuted, Cancelled, MinDelayChange, RoleGranted, RoleRevoked |
GaugeController | AddType(string name, int128 indexed typeId), NewTypeWeight(int128 indexed typeId, uint256 time, uint256 weight, uint256 totalWeight), NewGaugeWeight(address indexed gauge, uint256 time, uint256 weight, uint256 totalWeight), VoteForGauge(uint256 time, address indexed user, address indexed gauge, uint256 weight), NewGauge(address indexed gauge, int128 indexed gaugeType, uint256 weight, address indexed underlying), DeskUpdated(address indexed previous, address indexed current), CapSynced(address indexed underlying, uint256 relativeWeight, uint16 bps, uint256 week), CapSyncProgress(uint256 indexed week, uint256 cursor, uint256 gaugeCount) (a syncCaps(maxGauges) slice that did not reach the last gauge), GaugeKilled(address indexed gauge, bool killed) (killGauge emits true, reviveGauge emits false) |
EmissionSchedule | ScheduleUpdated(uint256 initialWeekly, uint256 decayBps, uint256 decayPeriodWeeks, uint256 floorWeekly) |
Minter | ScheduleUpdated(address indexed previous, address indexed current), WeeklyMint(uint256 indexed week, uint256 budget, uint256 minted), UnfinishedWeekRecovered(uint256 indexed week, uint256 cursor, uint256 remainder) (a week whose gauge cursor never reached the end is closed when the next week opens; the remainder is carried), GaugeMinted(uint256 indexed week, address indexed gauge, uint256 relativeWeight, uint256 amount), GaugeSkipped(uint256 indexed week, address indexed gauge, uint256 amount, bytes reason) (delivery to one gauge reverted; amount carried forward), CarryDelivered(address indexed gauge, uint256 amount) (retryGauge), EmissionShortfallUpdated(uint256 indexed week, uint256 scheduled, uint256 budget, uint256 shortfall) (the epoch cap clipped the week; the difference is added to the next week's budget) |
DeskGauge, StakingGauge, SeriesGauge | MinterUpdated(address indexed previous, address indexed current), RewardAdded(uint256 amount, uint256 carried, uint256 periodFinish), Staked(address indexed account, uint256 amount), Withdrawn(address indexed account, uint256 amount), RewardPaid(address indexed account, uint256 amount); SeriesGauge adds CouponPaid(address indexed account, uint256 amount) (claimCoupons) and UnallocatedCouponsSwept(address indexed to, uint256 amount) |
Indexer Notes
- Reconstruct a series timeline from
SeriesCreated → (CouponDeposited | ShieldDeposited)* → (StrikeDeferred)* → StrikeFinalized | SeriesCancelled → (Observed | ObservationDeferred | ObservationSkipped | CouponAccrued)* → (Claimed | Redeemed | Refunded)*. Observed.statusreports the status after the observation, soAutocalledandMaturedare detectable from the event alone.ObservationRolledprecedesStrikeFinalized,SeriesCancelled,Observed,ObservationSkippedorObservationCollapsedin the same transaction when the observation was taken at a rolled close;ObservationDeferred.closeTsandStrikeDeferred.closeTsalready carry the effective close.ObservationCollapsedcounts as a processed observation fornextObsaccounting but emits noCouponAccrued; when it is the final index the usual settlement events follow with the price of the previousObserved.CouponAccrued.couponIndexis cumulative; the net coupon for that observation isgross − fee.StrikeFinalized.notionalFeeplus the sum ofCouponAccrued.feeminusKeeperPaid.amountequals the total available forFeesSwept.- Gauge weights for a week are final once
VoteForGaugeevents withtime < weekStartare summed;CapSyncedfor that week reports the resulting Desk cap per underlying, andWeeklyMintplusGaugeMintedgive the emission split.WeeklyMint.minted < budgetmeans the NOTE epoch cap bound that week or one or more gauges were skipped:GaugeSkipped.amountsums intocarriedForward(gauge)until a matchingCarryDelivered. A killed gauge (GaugeKilled(gauge, true)without a laterfalse) receives noGaugeMinted. - Desk exits are two-step:
WithdrawRequestFilledmoves the request’s assets into the receiver’s claimable balance andWithdrawClaimedrecords the transfer out. SumWithdrawRequestFilled.assetsminusWithdrawClaimed.assetsper receiver to getclaimable(receiver). - A series is in recovery when
UnwindProposedhas no laterUnwindCancelledorSeriesUnwound; afterSeriesUnwound,UnwoundWithdrawnsums per token converge toquoteLiabilitiesandstockLiabilities.
Keep exploring, or revisit this topic from the navigation.