Skip to content

Events

All events emitted by LiquidityVault. Every state-changing operation emits at least one event, providing a complete on-chain audit trail.

Investor Events

Event Parameters Emitted On
Deposit sender, receiver, assets, shares Successful deposit() call
WithdrawRequested requestId, owner, receiver, shares, timestamp Queue entry and share escrow
WithdrawProcessed requestId, receiver, payout, fee, avgExitPrice Keeper processes a queued request
WithdrawCancelled requestId, owner, sharesReturned Successful cancelWithdraw() call

WithdrawProcessed Detail

event WithdrawProcessed(
    uint256 indexed requestId,
    address indexed receiver,
    uint256 payout,        // Net USDC sent to receiver (after fee)
    uint256 fee,           // USDC sent to HouseBuffer
    uint256 avgExitPrice   // curveNAV: curve-weighted aggregate vault NAV applied to this request
);

avgExitPrice is the curveNAV value returned by _avgCurvePrice — the curve-weighted aggregate vault NAV (USDC, 6 dec), a total vault valuation between aggMarketNAV and aggModeledNAV. It is not a per-share price. The per-share exit price for this request is avgExitPrice / totalShares at the time of processing.

Role Management Events

Event Parameters Emitted On
KeeperUpdated oldKeeper, newKeeper setKeeper() call
OperatorUpdated oldOperator, newOperator setOperator() call
GovernanceProposed currentGovernance, proposedGovernance proposeGovernance() call
GovernanceTransferred oldGovernance, newGovernance acceptGovernance() call

Position Events

Event Parameters Emitted On
PositionOpened slot, adapter, assets, entryPrice, maturity openPosition()
PositionMarkedSettling slot markSettling()ACTIVE → SETTLING transition
PositionClosed slot, settledValue closePosition() after market settlement
PositionWrittenOff slot, previousModeledValue writeOff()
PositionRebased slot, oldEntryPrice, newEntryPrice, newMaturity rebasePosition()
SlotReclaimed slot reclaimSlot() — slot reset to EMPTY

System Events

Event Parameters Emitted On
DayRolled newDayStart, previousRedeemed Day window reset at start of processWithdrawals()
ReserveTopupRequested amount Vault's idle reserve drops below 50% of target
EmergencyLiquidation slot, sharesLiquidated, usdcRecovered, slippageBps emergencyLiquidate() execution

EmergencyLiquidation Detail

event EmergencyLiquidation(
    uint256 indexed slot,
    uint256 sharesLiquidated,  // Actual NO shares sold by the adapter
                               // NOT the maxShares parameter passed to the function
    uint256 usdcRecovered,     // USDC returned to vault
    uint256 slippageBps        // Realized price impact vs. pre-trade market price
);

sharesLiquidated is actual shares sold, not maxShares

sharesLiquidated reflects the actual number of shares filled by the adapter, which may be less than maxShares if the position size is smaller. Off-chain indexers must not assume sharesLiquidated == maxShares. The current implementation emits maxShares (known bug) — this is documented in Security §9.10.

slippageBps provides transparency into the real cost of emergency liquidation, enabling post-incident analysis and governance review.

Monitoring Recommendations

For real-time protocol health monitoring, subscribe to:

  1. PositionWrittenOff — immediate alert: vault NAV has decreased
  2. PositionMarkedSettling — settlement path initiated; gap on this slot has collapsed
  3. DayRolled — track redemption volume per day window
  4. EmergencyLiquidation — critical alert: last-resort action taken
  5. WithdrawProcessed — track avgExitPrice vs. aggregate NAVs to measure curve discount over time
  6. ReserveTopupRequested — reserve health indicator
  7. OperatorUpdated / GovernanceTransferred — role change alerts