Strategies & yield
How the keeper deploys pooled ETH into strategies, how UniCLStrat earns trading fees on Uniswap V3, and how the performance fee works.
Testnet only
Everstrat is deployed on Sepolia testnet (chain id 11155111) only. No mainnet deployment exists. Strategy returns are not guaranteed and can be negative.
How funds reach strategies
You do not choose which strategies receive your ETH. When you deposit, the AMM forwards your ETH to the Controller. A keeper bot then calls the Controller to route ETH through the StrategyManager, which distributes it to registered strategies proportionally according to each strategy's configured safety level.
This means:
- All depositors share the same strategy exposure.
- Adding or removing strategies is a governance action (
ADMIN_ROLE), not a user action. - A keeper, not a user, decides when to deploy idle ETH.
UniCLStrat — concentrated-liquidity on Uniswap V3
UniCLStrat is the first (and currently only) registered strategy. It earns yield by providing concentrated liquidity on a Uniswap V3 WETH/paired-token pool.
Wrap ETH to WETH
Received ETH is wrapped into WETH via the Converter module before entering the Uniswap pool.
Provide liquidity in a price range
The strategy mints a concentrated LP position around the current pool price, earning a share of the pool's trading fees from swaps that fall within the range.
Rebalance when price drifts
When the pool price moves outside the strategy's range, a keeper triggers a rebalance — routed through the Controller and StrategyManager, since only the StrategyManager can call the strategy directly. Liquidity is removed, ticks are recalculated, and liquidity is re-added around the new price. The rebalance executes only while the pool is calm; during sharp volatility it reverts until the pool settles.
Report NAV in ETH
The strategy's navInETH() continuously sums idle ETH and WETH, the LP position value, uncollected
trading fees, and any paired-token inventory. ETH and WETH count 1:1; the paired token is valued in
ETH via the Oracle. This feeds the AMM's pricing.
The calm-period check
UniCLStrat only deposits or rebalances when the pool is calm. Calmness is determined by comparing both the pool's current spot tick and a short TWAP (at least 60 seconds) against a longer TWAP. If either deviates beyond a configured tolerance, the strategy refuses to act.
This protects against flash-loan attacks and short-term price manipulation: an attacker who pushes the pool price in a single block cannot trick the strategy into depositing or rebalancing at a manipulated tick, because the TWAP has not moved.
Other guardrails
- Deposit cap. The strategy enforces a configurable
maxTotalNAV; deposits that would push its NAV past the cap revert. - Swap safety. Internal swaps are capped at 2% slippage (
MAX_SWAP_SLIPPAGE_BPS = 200) and checked against a Chainlink quote with a 2% maximum deviation (MAX_QUOTE_DEVIATION_BPS = 200). - Pause and emergency exit. Pausing the strategy withdraws its pool liquidity and revokes its
Converter allowances.
emergencyExit()requires the strategy to be paused first, then drains all funds back to the StrategyManager. It is callable by eitherADMIN_ROLEorSECURITY_ROLE(onlyEitherAuthRole), consistent with the other emergency capital-recovery paths.
Performance fee
The protocol charges a performance fee on the accrued Uniswap V3 trading fees earned by the strategy's LP position. The fee is not taken from NAV growth, not pegged to a high-water mark, and not paid out in ETH. It is settled by minting EVE to the DAO treasury, which dilutes existing EVE holders proportionally.
| Parameter | Value |
|---|---|
| Fee rate | Configurable bps rate set on the StrategyManager (performanceFeeBps) |
| Maximum rate | 20% (MAX_PERFORMANCE_FEE_BPS = 2000 basis points, enforced on the StrategyManager) |
| Fee basis | A fraction of accrued LP trading fees from the strategy's Uniswap V3 position (the bps rate is applied to the ETH-equivalent value of uncharged tokensOwed growth) |
| Recipient | DAO treasury |
| Settlement | EVE is minted to the treasury via bonding-curve dilution — no ETH moves |
How settlement works
When the keeper harvests, the StrategyManager calls settlePerformanceFee(bps) on the strategy,
which:
- Measures the accrued Uniswap V3 LP trading fees since the last settlement — the
tokensOweddelta on the underlying V3 position, valued in ETH via the strategy's oracle. - Returns
feeETH = feeBaseETH × bps / 10_000.
The StrategyManager then mints EVE to the DAO treasury using bonding-curve dilution:
evesToMint = (feeETH × EVE_supply) / (totalNAV − feeETH)This is the same dilution formula the AMM uses for premium-priced deposits. The treasury ends up owning a larger slice of the protocol; existing EVE holders' share of NAV shrinks proportionally. No ETH is transferred out of the protocol and no Converter/WETH unwrap is involved.
Example. Suppose totalNAV = 100 ETH, EVE_supply = 1,000 EVE, and the strategy has accrued
10 ETH of LP trading fees. With a 10% fee rate, feeETH = 1 ETH. EVE minted to the treasury =
(1 × 1,000) / (100 − 1) ≈ 10.1 EVE. The treasury now holds ~10.1 EVE; every existing holder's
share of NAV is diluted by roughly 1%.
Trade-offs and risks
UniCLStrat carries risks that any concentrated-liquidity strategy carries:
Impermanent loss. If the pool price moves significantly, the strategy may end up holding more of the underperforming token. The LP position value can fall below the equivalent value of simply holding WETH.
Single-strategy concentration. Currently all protocol ETH flows into one strategy. A bug in UniCLStrat or the Uniswap V3 pool could affect the entire protocol NAV.
For a full treatment of these and other risks, see Key risks.
See also
- EVE & NAV — how strategy NAV feeds the token price
- Architecture at a glance — how the Controller, StrategyManager, and strategy fit together
- Key risks — impermanent loss, concentration risk, and more
Last updated on
Pricing & the bonding curve
How the AMM prices entries and exits using NAV and a bonding curve connector weight — and how the price-deviation guard protects against manipulation.
The redemption queue, in depth
Full mechanics of the ExitQueue — how your exit request is batched, priced, processed, and claimed, and what to do if things go wrong.