Earn vaults
Understand EarnVaultV24 marked NAV, guarded exits, harvests, and fees.
This page describes EarnVaultV24 and SingleLpStrategyV24, the current committed protocol baseline. Contract support does not prove that an Earn Vault is live on your network. At this baseline, v24 contracts are recorded as deployed and verified on a public testnet, with no production cutover. Use an Earn Vault only when the active deployment manifest supplies verified addresses and live onchain data.
An EarnVaultV24 is an optional ERC-4626 vault that accepts one collateral token and deploys part of that collateral as liquidity into one price-market pool through a SingleLpStrategyV24. Vault shares are a proportional claim on the vault, not a fixed claim on your original deposit.
Deposits, investment, and the idle buffer
You approve the vault's asset and call the standard ERC-4626 deposit or mint, or the guarded depositWithGuards with minSharesOut and an expectedMarkNonce. Collateral first enters the idle buffer.
Normal investment and divestment are performed by the configured keeper: invest adds liquidity, and divest removes it to refill the buffer. The owner or guardian can separately invoke the guarded emergencyWithdrawAll path. Your withdrawal never triggers a divest automatically. Idle collateral does not earn the underlying LP return.
Standard withdraw and redeem pay from the idle buffer and are bounded by maxWithdraw and maxRedeem. A request above the limit reverts, so additional idle liquidity, such as from a successful divest, is needed to increase cash capacity.
Where collateral moves
Solid arrows show collateral movement after the corresponding checks pass. Vault shares are accounting claims; withdrawals do not automatically pull liquidity from the pool.
The owner or guardian also has the guarded emergencyWithdrawAll path. Neither routine nor emergency divestment guarantees that the pool can pay all entitlements immediately.
Marked NAV and mark nonces
The vault prices shares from a stored mark instead of reading the pool oracle on every view:
totalAssets = idleAssets + investedMarkA successful syncMark refreshes investedMark from the pool's funding-aware LP valuation and increments markNonce. Anyone can refresh the mark. lastMarkAt records its timestamp, and maxNavStaleness bounds how long a mark stays usable.
The mark is stale when a strategy exists and either lastMarkAt is zero or the mark is older than maxNavStaleness. lastMarkAt == 0 means the mark is invalid. investedMark == 0 alone does not mean stale: a successful fresh valuation can legitimately be zero, and zero value does not exempt an old timestamp from the staleness rule.
Stale NAV and Emergency Pause exits
When the mark is stale, or the underlying pool is in EmergencyPause, the standard exit path closes:
- New
depositandmintcalls revert withStaleNavwhile the mark is stale. withdrawandredeemrevert, andmaxWithdrawandmaxRedeemreturn0.previewRedeemandpreviewWithdrawuse an idle-only basis when NAV is stale. EmergencyPause alone, with a fresh mark, does not switch those previews: they can still show full NAV even though standard exits are blocked. Do not treat that full-NAV preview as the payout forredeemIdleOnly.
The explicit exit in these states is redeemIdleOnly(shares, receiver, owner, minAssetsOut, expectedMarkNonce):
- It pays a pro-rata share of idle collateral only and never calls the pool.
- It forfeits the burned shares' claim on the invested value. That value remains for the remaining shareholders if the strategy later recovers.
- It accrues the management fee but never crystallizes the performance fee.
- The last remaining shareholder cannot use it while invested value or an invalid mark remains, because there is no one left to hold the recovery claim.
Compare exit conditions
redeemIdleOnly is also callable with a fresh mark in Normal mode. It always pays only pro-rata idle collateral and forfeits the burned shares' invested entitlement.
| Condition | Standard exit limits | previewWithdraw / previewRedeem basis | Explicit redeemIdleOnly |
|---|---|---|---|
| Normal, fresh mark | Limited by holder shares and idle capacity | Full NAV | Available subject to its guards |
| Stale NAV | maxWithdraw = maxRedeem = 0 | Idle only | Available subject to its guards |
Pool EmergencyPause, fresh mark | maxWithdraw = maxRedeem = 0 | Full NAV, not an idle-only payout quote | Available subject to its guards |
All idle-only exits retain nonce, authorization, balance and minimum-output checks. Redeeming the entire supply is rejected if investedMark > 0 or lastMarkAt == 0.
The solid branch is the cash outcome. The dotted branch is the entitlement consequence, not another token transfer.
Harvests
The keeper's harvest claims strategy income into the idle buffer through two separate channels:
- Trading-fee rewards are fully backed by the pool's LP fee reserve and are claimed even when LP valuation is unavailable.
- LP Funding is a mass claim and is skipped when the pool is in
EmergencyPause, when Funding is blocked, or when the funding state cannot be read safely.
If the mark cannot be refreshed after a harvest, the vault records the transferred value conservatively, sets lastMarkAt to zero, and increments markNonce. Explicit idle-only exits remain available until a fresh mark returns.
Vault fees
- The management fee accrues linearly on marked assets and is capped at 5% per year.
- The performance fee applies only above the previous high-water-mark share price and is capped at 30% of gains above that mark.
- Fees are paid by minting shares to the fee recipient, which dilutes existing shareholders.
- Fee crystallization requires a fresh mark. Stale idle-only exits do not crystallize the performance fee.
Strategy rotation
The vault's strategy can be replaced, but rotation is delayed and constrained:
- The owner proposes a rotation with a strategy deployer, a data hash, and an
etaat least the configured minimum delay in the future. - After the delay, the owner accepts. The old strategy must be fully drained: principal, accrued and deferred Funding, fee rewards, and any residual must all be zero, and
investedMarkmust be zero. - The replacement must target the same pool and market key, use the approved version and schema, and start economically clean.
- A guardian can cancel a pending rotation.
Rotation never carries entitlements across strategies. Deferred Funding must be harvested to zero, not dropped.
Before using an Earn Vault
- Resolve the vault, factory, asset, strategy, and pool from the active deployment source.
- Read
idleAssets,totalAssets,pricePerShare,markNonce,lastMarkAt, andmaxNavStaleness. - Check
maxDeposit,maxWithdraw, andmaxRedeembefore signing. - Read the fee rates, fee recipient, owner, keeper, and strategy address.
- Review the underlying pool's oracle, market state, phase, and LP risks in Price market liquidity.