Skip to main content
Request-for-quote (RFQ) is one of the liquidity sources the Arcus spot router draws on — alongside on-chain AMM pools — when filling a spot trade. In the RFQ flow a taker asks for a price, professional makers respond with firm quotes, and the server settles the single best quote against the taker’s signed intent in one atomic settlement transaction. Takers sign an intent that caps their downside; makers sign quotes that bind their terms; nothing settles unless every leg is satisfied at once.
This page explains the model and the message flow. It is conceptual — for the wire formats and endpoints, see the API reference.

Why RFQ

Spot markets for tokenized assets are often thin and fragmented. RFQ lets the exchange source liquidity from many makers on demand and pick the best quote per trade, instead of requiring makers to post resting depth. The taker gets one signed, slippage-bounded outcome; the maker only commits capital when its quote is actually selected.

Roles

The flow

1

Quote

The taker sends quote parameters. The server requests indicative liquidity from makers and returns a price ladder; the taker computes a minBuyAmount floor client-side (typically from the indicative price and their chosen slippage tolerance) — it is signed into the intent, not derived server-side.
2

Sign intent

The taker signs the intent (EIP-712 typed data) and returns it to the server.
3

Firm quote

The server forwards the intent to makers without minBuyAmount, so makers cannot price against the taker’s limit. Each maker quotes the entire sellAmount; the server ranks the firm quotes by output amount and discards any below minBuyAmount.
4

Submit

The server bundles the signed taker intent with the single winning firm quote and submits one transaction to the settlement contract. Every leg is atomic — all fill or none do.

Quote parameters

What the taker sends to request a quote. The server forwards the same shape to each maker. There is no slippage parameter — slippage protection is the taker-signed minBuyAmount on the intent, computed client-side.

Intent

The server builds the intent from maker indicative liquidity and returns it to the taker for signing. Correlation between the intent, each maker’s firm quote, and the fill status uses a router-issued per-maker quoteId (bytes32) — the taker does not sign it, and each maker sees only its own.
minBuyAmount is the taker’s protection against bad fills. Because it stays server-side, makers price the trade on its own merits and the server enforces the floor when ranking firm quotes.

Firm quote

A firm quote is a maker’s binding response. Each maker quotes the entire sellAmount — quotes are never split — and the server settles at most one winning quote per round. Trade terms are bound inside signedPayload.message.witness: chainId lives in signedPayload.domain.chainId. The Permit2 message.deadline must stay valid through settlement — makers enforce a minimum time-to-live so the server can submit before it lapses.

Settlement guarantees

  • Atomic. The signed intent and the winning firm quote settle in one transaction. If any leg fails, the whole trade reverts.
  • Slippage-bounded. The server only submits when the winning quote’s output meets the taker’s minBuyAmount.
  • Non-custodial. Token movements are authorized by the taker’s intent signature and each maker’s Permit2 signature — no party pre-deposits funds with the exchange.