Skip to main content

Orientation

The exchange core is a port of Uniswap V3 — extended with three pool types and a plugin system. For an integrator that means most of your V3 knowledge and tooling transfers, and the places where it does not are few, deliberate, and listed here. Three ways in, by depth:
  1. The SDK — quoting, swapping, curve trading; unsigned calls, bring your own signer.
  2. The peripherySwapRouter and Quoter for execution and pricing, the position manager for liquidity.
  3. The pools directlyswap + callback for aggregators that settle themselves.

What is identical to Uniswap V3

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

What differs

Rules of thumb

  1. Never point V3 periphery at these pools — the callback names alone guarantee failure, and address validation by init-code-hash recomputation is wrong here.
  2. Validate pool callers against factory.getPool(...), not a hardcoded init code hash: blueprints are governance-replaceable, and there is one hash per type anyway.
  3. Read prices via slot0() or sqrtPriceX96() — shared, uniform, never reverting (an uninitialized pool returns zeros). On tickless pools the tick is a measurement, not a mintable index.
  4. Reuse your V3 indexing for the six trading events; add handlers for what is new — see Events.
  5. Oracle trust: a pool’s TWAP is a plugin the pool’s governance can swap; factor that in before using a pool as a price source.