Everstrat Docs home
How Everstrat Works

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.
06 / Strategy architecture

A keeper deploys the pooled capital.

Open
A keeper deploys the pooled capital.Keeper calls Controller, which routes operations through StrategyManager to UniCLStrat; the strategy uses Converter for swaps, maintains a Uniswap V3 LP position, and reports NAV.DEPLOY ETHNAVLP POSITIONKEEPER_ROLEKeeperOperational callerUUPSControllerRoutes operationsUUPSStrategyManagerAllocates capitalEXTERNALUniswap V3Concentrated LPUUPSConverterWrap + swapIMMUTABLEUniCLStratManages LP position
Keeper / contract callNAV readExternal protocol

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 poolFee tierPool address
USDC / WETH0.30%0x8ad599c3A0ff1De082011EFDDc58f1908eb6e6D8
USDC / WETH0.01%0xE0554a476A092703abdB3Ef35c80e0D76d32939F
WETH / USDT0.30%0x4e68Ccd3E89f51C3074ca5072bbAC773960dFa36
UNI / WETH0.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.

ParameterValue
Fee rate15% (performanceFeeBps = 1500) at the dated deployment snapshot; configurable by governance
Maximum rate20% (MAX_PERFORMANCE_FEE_BPS = 2000 basis points, enforced on the StrategyManager)
Fee basisA 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)
RecipientDAO treasury
SettlementEVE 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:

  1. Measures the accrued Uniswap V3 LP trading fees since the last settlement — the tokensOwed delta on the underlying V3 position, valued in ETH via the strategy's oracle.
  2. 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

Last updated on

On this page