Strategies & yield
How the keeper deploys pooled ETH into strategies, how UniCLStrat earns trading fees on Uniswap V3, and how the performance fee works.
Testing phase — treat as a test protocol
Everstrat is deployed on Ethereum mainnet (chain id 1), but it is in a testing phase and should be treated as a test protocol. Entry is invite-gated and the software is experimental. 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. Mimic automation calls an authenticated keeper executor, which uses Controller to route ETH through the StrategyManager, which distributes it to registered strategies proportionally according to each strategy's governance-set deposit weight, subject to capacity and deposit eligibility.
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.
A keeper deploys the pooled capital.
One UniCLStrat instance is shown; registered instances share pooled exposure. Converter handles wrap and swap operations, while the strategy manages its LP position. Performance fees are settled separately by minting EVE to the DAO treasury.
UniCLStrat — concentrated-liquidity on Uniswap V3
UniCLStrat is the strategy contract Everstrat runs today. Each deployed instance earns yield by providing concentrated liquidity on one Uniswap V3 pool that pairs WETH with another token. The registered instance list can change through governance. See Live strategies.
Wrap ETH to WETH
Received ETH is wrapped into WETH via the Converter module before entering the Uniswap pool.
Swap part of the ETH into the paired token
A concentrated position needs both of the pool's tokens, in a ratio set by the current price and the range. The strategy swaps part of its WETH into the paired token (USDC, USDT, or UNI) via the Converter. That part of the strategy's value then moves with the paired token rather than with ETH.
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.
Live strategies
The canonical dated deployment snapshot lists the registered strategy addresses. The pool set recorded there is:
| Uniswap V3 pool | Fee tier | Pool address |
|---|---|---|
| USDC / WETH | 0.30% | 0x8ad599c3A0ff1De082011EFDDc58f1908eb6e6D8 |
| USDC / WETH | 0.01% | 0xE0554a476A092703abdB3Ef35c80e0D76d32939F |
| WETH / USDT | 0.30% | 0x4e68Ccd3E89f51C3074ca5072bbAC773960dFa36 |
| UNI / WETH | 0.30% | 0x1d42064Fc4Beb5F8aAF85F4617AE8b3b5B8Bd801 |
The strategy list can change through governance; StrategyManager.strategies() is the source of
truth. The app's Metrics page shows each strategy's pool and capital, and links to the pool
on Uniswap.
Each position can hold both tokens. The split depends on the pool price, tick ranges, idle inventory, and rebalances; it is not a fixed 50/50 allocation. Paired assets include USDC, USDT, and UNI.
UniCL v2 migration status
Contracts PR #53 merged UniCL v2 on 1 October.
It adds ratio-aware inventory swaps, incremental liquidity, route-aware withdrawal sizing,
and a full unwind for near-full withdrawals. Shared logic lives in UniCLStratLib.
018 upgraded the Controller to 1.1.0, enabling the timelock's single-strategy withdrawal. 019 registered the v2 replacements on the same four pools, and 020 drained and removed v1. Both executed on October 19, 2026; the dated snapshot confirms that only the v2 strategies are registered. See Current deployments for operation ids, execution transactions, and the retired v1 addresses.
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 limits operations during short-term spot/TWAP divergence. It does not guarantee immunity to manipulation, incorrect feed data, or adverse execution.
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 blocks normal strategy operations and attempts a
best-effort pool unwind and paired-token allowance revoke. Failures can leave liquidity or
tokens unrecovered.
emergencyExit()requires pause and transfers assets already held by the strategy to StrategyManager; paired-token recovery is best-effort and it does not itself remove remaining pool liquidity. ADMIN or SECURITY may invoke it. Pause is not proof that all capital was recovered.
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 | 15% (performanceFeeBps = 1500) at the dated deployment snapshot; configurable by governance |
| 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 × live_supply) / (totalNAV − feeETH)live_supply excludes in-window priced queued EVE. 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, live_supply = 1,000 EVE, and eligible
uncharged LP fees are worth 10 ETH. At a 15% fee rate, feeETH = 1.5 ETH.
Treasury EVE minted is (1.5 × 1,000) / (100 − 1.5) ≈ 15.23 EVE.
Existing holders' share of NAV is diluted by 1.5%, assuming no other changes.
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.
Mixed-asset exposure. Capital includes paired tokens and can move differently from ETH. Stablecoin exposure changes ETH-denominated NAV when ETH/USD moves, independently of trading fees.
Single-contract concentration. Capital is spread across four pools, but all of them run the same strategy family, with deployment-specific builds. A shared bug could affect multiple pools.
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