Mainnet Changes

For aggregators/protocols who had our testnet deployment previously integrated.

Changes:

Individual markets are no longer in individual contracts. For example, instead of calling marketOrder(...) on the market contract like previously, you should now call marketOrder(marketAddress, ...) on the exchange contract. This also means you only have to approve the exchange contract instead of each individual market.

The event signatures have slightly changed. Notably, fill events are now emitted individually, allowing market makers to subscribe to their own fills only. Fill events also now carry both the remaining quantity and fill size as opposed to just the remaining quantity, allowing a L2 book to be maintained by subscribing to order updates and fills only.

There is now the addition of a decrease action, which decreases an order's size but does not change its priority. The size of the decrease is emitted rather than the remaining size, allowing a L2 book to be tracked without knowing of individual order sizes.

New Additions:

Each market now has an optional parameter to enable constant product AMM backstop liquidity. Trades are automatically routed/split between the orderbook and AMM to give users the best quote. The AMM likely won't be enabled on major/stable markets, but will function as the primary source of liquidity for newly graduated markets.

Crystal now has its own natively integrated launchpad. Tokens start on the bonding curve and migrate to the orderbook once graduated. The tokens collected in the bonding curve are deposited as AMM liquidity to begin with, but market makers can step in and place limit orders anytime post-graduation.

Maker rebates are now supported. The protocol taker fee is applied to matches against both the AMM and orderbook, while the maker rebate is only applicable when matching with the orderbook. In this case, the total net taker fee is takerFee + makerRebate.

Last updated