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 the Robinhood mainnet fork.
Every counterparty must be allowlisted. Init checks every counterparty against the vault’s
TierRegistry, including the Morpho collateral token and the pool’s other token. On the fork, spUSDG (0xde770c84FE66E063336b31737cFE9790f18c4087) and WETH (0x0Bd7D308f8E1639FAb988df18A8011f41EAcAD73) are allowlisted, so the USDG/WETH pool with the spUSDG market works. A different pool or market may need the TierRegistry owner to call setCounterpartyAllowed first; the CLI preflight names each missing address and refuses with CounterpartyNotAllowed.What happens
Batch calls:
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. A rerange is permissionless once price has travelled the trigger fraction through the half-range, the minimum interval has passed and the count is below the cap. Each rerange costs a swap and realized divergence loss, so the cap (at most 20) is the binding control. At the cap the position stays in its last range and remains settleable.Tunable after execute
Two values: the settle slippage, which can only be tightened (loosening revertsImmutableParam), and the settle deadline. The range policy, the swap route and the sizes are fixed.
Propose
_initialize check before sending anything, including CounterpartyNotAllowed 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.
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.