Liquidity & Quoting
How does a desk provide liquidity?
By answering RFQs with firm, signed quotes. There is no order book to post into and no resting size. A taker sends a request for quote; the relayer routes it to your inbox; you price the ones you want and let the rest expire. Liquidity on CRX is on-demand pricing, not standing depth.
You choose what to quote on every request. That choice — which pairs, how wide, how much margin — is what it means to curate.
Which pairs can I quote?
Any of the 20 USD-base FX pairs the operator has whitelisted. Each is a USD/XXX pair priced off a Pyth feed.
| Group | Pairs | Trading window |
|---|---|---|
| Majors | USD/CAD, USD/CHF, USD/JPY, USD/SEK, USD/NOK, USD/SGD, USD/HKD | continuous on weekdays, closed weekends |
| Asia NDF | USD/INR, USD/KRW, USD/TWD, USD/PHP, USD/IDR, USD/CNH, USD/MXN, USD/TRY, USD/ZAR | continuous on weekdays, closed weekends |
| LatAm session-windowed | USD/CLP, USD/COP, USD/PEN | live only during the local bank session, ~09:00–16:00 ET |
| Other | USD/BRL | weekday daytime, ~08:00–17:00 ET |
The full feed and schedule for each pair is in config/pairs.json, the single source the frontend, the bot, and the contract all read.
Why do sessions matter to me?
Because three LatAm pairs only publish a live price during their local bank session. Outside that window the feed does not update, and the desk shows the pair closed.
- USD/CLP, USD/COP, USD/PEN are live in-session and frozen out-of-session. They are not dead — do not treat an out-of-session quiet as a stalled feed.
- No liquidation runs while a pair is closed. The cascade marks against the last trusted rate when the session is shut, so a default still resolves overnight. But a managed currency can gap in one step when the session reopens.
Therefore: size the margin on a session-windowed or managed pair to the move that can happen across the closed window, not the move you see intraday. See Security Considerations (~6 min).
How big should I quote?
As big as the margin you are willing to have both sides post. There is no minimum and no maximum imposed by the venue — the binding constraint is collateral. You post your side's initial margin into the SCA; the taker posts its side. Notional is whatever the two of you sign.
Size against one question: how far can the price move before a defaulter's collateral runs out during close-out?
| Pair character | Why | Rate to set |
|---|---|---|
| Calm, continuously marked | CRX marks on the Pyth EMA and liquidates in hours | ~1–2% of notional |
| Gappy or managed currency | can devalue in one step; the session closes nights and weekends | higher — e.g. USD/PHP ~12%, USD/INR ~8% |
These are sizing guidance, not a floor the contract enforces. The rate that protects you is the one you write into the quote as imLongBps/imShortBps.
Am I obliged to quote?
No. You answer the RFQs you want and decline the rest. Quoting is never mandatory, on any pair, at any size.
What is firm is the quote itself. Once you sign Terms and the taker confirms within the validity window, the price is binding — the relayer anchors it on-chain and hands back a bundle to bind. A quote you signed is a price you will trade.
- The inbox window is short. An RFQ shows in your inbox for about 30 seconds. Price it or lose it.
- Your quote carries its own validity. Set
valid_untilto a timestamp you can stand behind; after it passes, the quote is dead.
A standing desk quotes consistently even when it has no obligation to. Takers route repeat flow to the desk that answers, not the one that ghosts. Consistency, not obligation, is what builds the book.
How does a quote become a position?
The relayer brokers it; the two firms bind it on-chain.
- Taker submits an RFQ directed at your desk.
- You price it (
POST /rfq/:id/quote) and sign Terms (POST /rfq/:id/confirm). - The taker confirms; the relayer anchors the agreed quote on-chain.
- The bundle (
GET /rfq/:id/bundle) is submitted; the position binds, and each side's IM is allocated to its SCA.
The mechanics of the relayer are in RFQ Relayer (~4 min). The endpoint registry is in CRX API (~4 min).
Next: Security Considerations (~6 min) — the risks you carry and how to bound them.