The drawdown floor is on the vault’s share price
Every proposal declaresmaxDrawdownBps (--max-drawdown-bps, default 2000). Settle reverts SettlePriceBelowFloor when:
--amount.
Why it exists
A settle freezes the price that queued redeems receive. Anyone can settle once the duration ends. Without a floor, a settle run during a flash crash, or after a drain, could stamp a near-zero price, and an attacker could then buy shares cheaply against it. The 9,000 bps hard cap does not close that attack completely; it prices it.Declare it honestly
Idle assets in the vault count in the share price, so the same bps tolerates a bigger loss on the strategy itself. Example: a 90 USDG vault deploys 60 USDG with--max-drawdown-bps 1500. The floor is 15% of 90 = 13.5 USDG. On the 60 USDG basket that is a 22.5% loss before settle refuses.
Voters and guardians read the declared drawdown as a promise. Size it from your kill criteria on the whole vault, not on the basket.
Exits when the floor blocks settle
When the share price is below the floor, a normal settle cannot run. In order of preference:unstick(owner). Replays the voted settle calls with the drawdown tolerance fixed at the 9,000 bps maximum (MAX_STAMP_DRAWDOWN_BPS), so it runs unless the share price fell more than 90%. It needs no new calldata and no bond.- Emergency settle (owner).
emergencySettleWithCallscommits new calldata and opens a guardian review;finalizeEmergencySettleruns it after the review if guardians did not block. A guardian block burns the whole owner stake (the burn lands whenresolveEmergencyReviewruns; a blockedfinalizeEmergencySettlereverts).
Who settles, and when
- The proposer can settle from 1 hour after execute. Before that, settle reverts
StrategyDurationNotElapsed. The hour stops an execute-then-settle skim in one block. - Anyone can settle after the full strategy duration.
- Nothing settles automatically. If nobody calls settle, the strategy keeps running and the management fee keeps accruing.
- A settle batch must have zero net outflow and must leave the strategy with
executed() == false, elseStrategyNotSettled.
Fees
Splits are snapshotted at propose:
- Management: agent 60%, protocol 20%, guardians 20%.
- Performance: agent 50%, protocol 15%, guardians 25%, fund owner 10%.