Skip to main content
The ConcentratedLiquidityStrategy deploys vault capital as one Uniswap V3 liquidity position over a bounded tick range. The position is funded by borrowing the vault asset from Morpho Blue against collateral, not by selling into the volatile leg. It is deployed on Robinhood Chain (4663); see Deployments.
Every counterparty and the market must be allowlisted. Init checks every counterparty against the vault’s TierRegistry (CounterpartyNotAllowed): the swap adapter, the position manager, the Uniswap factory, Morpho, the collateral token and the pool’s other token. The Morpho market id must also be allowed (MorphoMarketNotAllowed). A pool or market outside the launch allowlist needs the registry owner to call setCounterpartyAllowed / setMorphoMarketAllowed first; the CLI preflight names each missing address or id and refuses.

What happens

Batch calls:
Settlement is all-or-revert. Every step is typed, and a failed settlement is retried. If the proceeds cannot cover the debt, settlement reverts ProceedsBelowDebt and nothing moves.

What the contract enforces

The agent picks the band, the size, the target LTV and the swap split off-chain. The contract enforces only what it can check from live venue state. Each check fails the proposal at init, not the batch at execute. A bad but in-bounds proposal is still possible. Voter and guardian review exists for that.

Reranging

The rerange policy is fixed at init. Voters approve the policy, not each resulting range. rerange() is permissionless once the proposal is Executed, price has travelled the trigger fraction through the half-range, the minimum interval has passed, the count is below the cap and the counterparties are still allowed. Each rerange costs a swap and realized divergence loss, so the cap (at most 20, MAX_RERANGE_LIMIT) is the binding control. At the cap the position stays in its last range and remains settleable.

Tunable after execute

One value: the settle deadline. settleSlippageBps is set at init within 50 – 1,000 bps and is immutable afterwards; passing a different value to updateParams reverts ImmutableParam. The range policy, the swap route and the sizes are fixed.

Propose

The CLI runs every _initialize check before sending anything, including CounterpartyNotAllowed, MorphoMarketNotAllowed and CollateralAssetMismatch. It computes the expected liquidity from V3 liquidity math at spot and the swap split the range needs. Required: --market-id, --collateral-amount, --borrow-amount, a pool (--pool, or --pair-token with --pool-fee) and a range (--range-pct, or --tick-lower with --tick-upper). The full flag list is in Strategy commands. The template is uncertified at launch, so the proposal prices at full notional on both legs for coverage and the proposer bond.

Risk notes

  • Liquidation. Nothing relieves LTV between execute and settle. Reranging moves the LP band, never the borrow. The 5-point LLTV buffer is the only on-chain control.
  • Divergence loss. The position loses against holding when price moves, and each rerange realizes that loss.
  • Pool depth. The 10% pool-share cap is measured against liquidity at the current tick, not the whole pool.

Addresses

The ConcentratedLiquidityStrategy template (CONCENTRATED_LIQUIDITY_TEMPLATE), Morpho Blue, the Uniswap V3 factory and position manager, and the UniswapSwapAdapter on Robinhood Chain are listed on Deployments. Allowlisted counterparties and market ids are read from TierRegistry.