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 periphery — SwapRouter and Quoter for execution and pricing, the position manager for liquidity.
  3. The pools directly — swap + 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 recomputed address: the init code hash differs per pool type and per deployment (a pool is a minimal proxy, and the hash embeds its type’s implementation address), so the registry is the one source you can rely on.
  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, and discover pools from the native PoolCreated, not the V3-shaped compatibility copy — 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.