π€Matching Logic
Crossing the spread
Fermi DEX optimistically matches orders on a Price-Time priority basis; the orders are later finalised atomically, using Just-in-time liquidity.
Fermi DEX optimistically matches orders on a Price-Time priority basis; the orders are later finalised atomically, using Just-in-time liquidity.
How orders are Matched on Fermi
Our internal accounting model adapts the serum/openbook dex model, to make it compatible with just-in-time liquidity. We briefly describe some important accounts below. Firstly, the open-orders struct stores user specific information:
How much of the base and quote currency that user has
in open orders orsettleableA list of open orders for that user on that market.
Market: holds metadata about the market (e.g. important constants like tick size and references to the other accounts below)
Base Currency Vault: an SPL token account that holds base currency balances
Quote Currency Vault: an SPL tokena account that holds quote currency balances
Crucially, on Fermi DEX, there is no concept of "locked liquidity", unlike OpenBook. All liquidity on Fermi is free to be withdrawn at any time, or used to open multiple orders. Trade finalisation happens atomically, and this ensures that users always have access to their assets.
Other important accounts:
Orderbook: Thereβs one account for bids and another for asks. For JIT purposes, we ensure every order is pushed to the orderbook (instead of just the unfilled quantity)
Event Queue: reports the list of outputs from order matching: trades. Also logs the outputs of FinaliseMatch - to ensure no double spending occurs.
Event Flags
Events are emitted when matching occurs.
If you have a flag state of 9, that would correspond to the binary representation 0b1001
, which means that the Fill
and Maker
flags are both set. If you have a flag state of 18, that would correspond to the binary representation 0b10010
, which means that the Bid
and ReleaseFunds
flags are both set.
Last updated