DualPool for builders
A market-making protocol built as a Uniswap v4 hook. Execution is an ordinary v4 swap; the difference is where capital lives between swaps, and how you discover capacity.
From the outside, a DualPool is a standard v4 pool: swappers and routers execute normal v4 swaps at the pool's static fee. But the pool holds approximately zero resident v4 liquidity between swaps — capital rests in ERC-4626 vaults and is deployed just-in-time, per swap. That means getLiquidity is not a routing signal: integrators discover capacity through the hook's quote views (getIndicativeQuote, swapToPrice, getEffectiveLiquidity) rather than pool state.
If you're integrating, start with Swap Against a DualPool for execution and Integrate as a Router or Aggregator for the quote surface. If you're trying to understand the mechanism, read the concepts in order — they build on each other.
The mechanism, precisely.
Contract-level walkthroughs.