Overview

Create custom options through a sealed-bid auction — choose any strike, expiry, and structure, then let market makers compete to fill your request.

What is RFQ / Factory?

The RFQ (Request for Quotation) system, also called the Factory, lets you create fully custom options that are not listed on the OptionBook. You specify exactly what you want — underlying asset, strike(s), expiry, direction, and structure — and market makers respond with encrypted, competitive offers. The best offer wins and an option contract is deployed atomically at settlement.

Under the hood the OptionFactory contract acts as both auctioneer and deployer: it collects encrypted MM offers, runs the reveal auction, and mints a fresh EIP-1167 proxy option contract (or transfers an existing one) when the trade settles.

Key Features

  • Privacy via sealed-bid auction — Offers are encrypted with ECDH until the reveal phase. No MM can see a competitor's bid, preventing front-running and last-second sniping.

  • Competitive pricing — Multiple market makers respond to each RFQ; the best price (lowest for BUY, highest for SELL) wins.

  • Full collateralization — Every option created through the factory is 100% collateralized. Collateral is pulled at settlement, not at RFQ creation.

  • Atomic settlement — Option deployment and collateral/premium transfer happen in a single transaction.

  • Multi-leg structures — Vanilla, spreads (2-leg), butterflies (3-leg), condors and iron condors (4-leg), plus physically settled variants.

  • Cash-settled by default, physical optional — RFQs are cash-settled by default via buildRFQRequest(). Cash settlement pays out the price difference in the collateral token (USDC for PUTs, WETH/cbBTC for CALLs). For physically settled options (actual delivery of underlying at expiry), use buildPhysicalOptionRFQ() instead (vanilla only).

OptionBook vs RFQ (Factory)

OptionBook

RFQ (Factory)

What

Fill existing market-maker orders

Create custom options via sealed-bid auction

When to use

Quick trades on listed options (vanilla and multi-leg)

Custom options via sealed-bid auction: any strike, any expiry, cash-settled or physically settled

Structures

Vanilla, spread, butterfly, condor, iron condor (cash-settled)

Vanilla, spread, butterfly, condor, iron condor (cash-settled or physically settled for vanilla)

Key methods

fillOrder(), previewFillOrder()

buildRFQRequest(), requestForQuotation()

Pricing

Order prices from fetchOrders()

MM pricing from getAllPricing()

Data source

Book indexer (/api/v1/book/)

Factory indexer (/api/v1/factory/)

User data

getUserPositionsFromIndexer()

getUserRfqs(), getUserOptionsFromRfq()

Collateral

Paid upfront by taker

collateralAmount = 0 (held by factory)

Settlement

Cash-settled (payout in USDC/WETH/cbBTC based on price difference at expiry)

Cash-settled by default; physically settled optional via buildPhysicalOptionRFQ()

When to Use RFQ

RFQ uses the same cash-settled implementation contracts as OptionBook (PUT, INVERSE_CALL, spreads, etc.). The difference is that you choose the parameters instead of filling an existing order.

Choose the RFQ system when you need:

  • A cash-settled option with custom parameters ... any strike price, any expiry date, any structure ... that isn't currently listed on the OptionBook (use buildRFQRequest())

  • Price competition ... you want multiple MMs to submit sealed bids rather than taking a single listed price

  • A specific multi-leg structure (spread, butterfly, condor, iron condor) at your chosen strikes and expiry

  • A physically settled option where actual tokens are delivered at expiry (use buildPhysicalOptionRFQ(), vanilla only)

  • To close an existing position by specifying existingOptionAddress

Choose OptionBook when an existing maker order already matches what you want. OptionBook is faster (instant fill vs ~60 second auction).

Quick Example

High-Level Flow

Supported Structures

Strikes
Structure
Settlement
Implementation
SDK Method

1

Vanilla

Cash

PUT / INVERSE_CALL

buildRFQRequest()

1

Vanilla

Physical

PHYSICAL_PUT / PHYSICAL_CALL

buildPhysicalOptionRFQ()

2

Spread

Cash

PUT_SPREAD / CALL_SPREAD

buildRFQRequest() or buildSpreadRFQ()

3

Butterfly

Cash

PUT_FLY / CALL_FLY

buildRFQRequest() or buildButterflyRFQ()

4

Condor

Cash

PUT_CONDOR / CALL_CONDOR

buildRFQRequest() or buildCondorRFQ()

4

Iron Condor

Cash

IRON_CONDOR

buildRFQRequest() or buildIronCondorRFQ()

The SDK detects the structure automatically from the length of the strikes array passed to buildRFQParams() or buildRFQRequest().


Advanced: Swap and Create in One Tx

client.optionFactory.swapAndCall(params) lets a user swap a source token through a DEX aggregator and then call any OptionFactory function (most commonly requestForQuotation) in a single atomic transaction. Useful when the user holds the wrong token for collateral and doesn't want to send two separate transactions.

The aggregator's calldata must be quoted client-side; the SDK passes it through unchanged.


See Also

Last updated