π€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.
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
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