Skip to main content

Short version

The exchange core is a port of Uniswap V3, and the ABI matches where it costs nothing — but the protocol is not drop-in: an unmodified V3 router cannot trade against these pools. Integration goes through the exchange’s own periphery.

What is identical

The identical events are what carry the integration: aggregators discover pools by indexing, and that path works with no changes on their side.

What differs

Rules of thumb for integrators

  1. Route through the native peripherySwapRouter for execution, Quoter for pricing, the position manager for liquidity. Do not point V3 periphery at these pools.
  2. Derive pool addresses from the deployer and read the init code hash from the chain — never hardcode it.
  3. Read prices via slot0() or sqrtPriceX96() — both are declared on the shared ILunyaPool interface and behave identically on every pool type, so generic code never branches on poolType. One caveat: on a tickless (STABLE) pool, slot0()’s tick is a derived measurement of where the price sits — the pool holds nothing at it, so never mint against a tick read from a STABLE pool.
  4. Reuse your V3 indexing — event signatures are unchanged by design.
  5. Trust model for oracles — the TWAP is governance-replaceable per pool; factor that in before using a pool as a price source.
Contract addresses and the full interface reference will be published here at deployment.