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
- Route through the native periphery —
SwapRouterfor execution,Quoterfor pricing, the position manager for liquidity. Do not point V3 periphery at these pools. - Derive pool addresses from the deployer and read the init code hash from the chain — never hardcode it.
- Read prices via
slot0()orsqrtPriceX96()— both are declared on the sharedILunyaPoolinterface and behave identically on every pool type, so generic code never branches onpoolType. One caveat: on a tickless (STABLE) pool,slot0()’stickis 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. - Reuse your V3 indexing — event signatures are unchanged by design.
- 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.