CRXDocs
Get StartedLearnBuildCurateTools
  • Get Started
  • RFQ Flow
  • Binding & Terms
  • Request a Quote
  • Get Data
  • Get Started
  • Inbox
  • Margin & Allocation
  • Answer an RFQ
  • Get Data
  • Monetize
  • Get Started
  • Build a DF

RFQ Flow

Why request a quote at all?

Because a forward rate is a firm price for a future date, and only the maker who carries the risk can name it. You do not read a rate off a book. You ask a maker, the maker answers with a price it will stand behind, and you decide whether to bind. The request for quote (RFQ) is that exchange.

CRX never prices the trade and never holds your funds. The relayer is a matchmaker and a courier. The price comes from the maker; the binding happens between the two firms, on-chain.

What is the lifecycle?

Five moves, from your side:

  1. You open the request. Pair, notional, direction, tenor, and the maker you direct it to.
  2. The maker prices it. They compute a rate and the margin schedule, and sign the Terms.
  3. The relayer anchors the agreed quote on-chain. This is what makes the quote bindable.
  4. You fetch the bundle and sign the same Terms. Two signatures now exist over one Terms object.
  5. You bind on-chain. The position opens.
POST /rfq · both parties named · session-authroute to named counterparty (both parties named)signed Quote (EIP-712) · restates both partiesthe named counterparty signs a QuoteBindBundle (the Quote)bind(terms, 2 sigs)verify sigs + whitelist · pull IMPosition OPENTakerRelayerMakerCRXTakerRelayerMakerCRX
The relayer routes a directed RFQ to one named counterparty; the chain is the authority. Only bind is wallet-signed.

Why is the quote anchored on-chain before you bind?

So the price you bind to is the price both sides agreed. Anchoring writes the maker's signed quote where the contract can read it. The contract will only accept a bind whose Terms match the anchor. That is what removes the gap between "the price I was shown" and "the price I got."

A bundle is not ready until that anchor confirms.

Anchoring takes a few seconds. A client that polls GET /rfq/:id/bundle once and gives up will read "no bundle" and conclude no maker answered — when one did, and the anchor was still confirming. Poll with a short delay until the bundle returns.

Why is the request directed to one maker?

Because an NDF is a bilateral agreement, not an order on a shared book. A Master Agreement pairs exactly one maker with one taker. You direct your RFQ to a specific maker so the relayer routes it to that desk's inbox, where it priced or expires. Read the live desks from GET /makers and pick one.

You face that maker directly. There is no central counterparty in between.

Why does a quote expire?

Because a firm rate is only firm for a moment. FX moves; a maker cannot stand behind a stale price. Each quote carries a validity window, and each inbox item the maker sees expires on a short timer. If you let the bundle window pass without binding, the quote dies and you request again. This protects the maker, and it protects you from binding to a price the market has left behind.

A forward rate is only honest while it is fresh.

Where the value lands once you are bound

The position marks continuously. Variation margin clears your profit and loss into your general balance every cycle — there is no margin call, no request you can fail to answer. The collateral is already posted; the contract moves it. See Variation Margin (~4 min) and RFQ Relayer (~3 min).

Next: Binding & Terms (~5 min) — the two signatures and the Terms object they sign.

PreviousBuild · 3 min readGet StartedNextBuild · 3 min readBinding & Terms
CRX
DocsDeskLaunch app
On-chain FX hedging. Confidential.