Overview
Fill existing market-maker orders for options on-chain without needing a counterparty.
What is OptionBook?
OptionBook is the order-book side of the Thetanuts protocol. Market makers post signed orders for options (vanilla PUTs/CALLs, spreads, butterflies, condors, and iron condors on ETH and BTC). As a taker, you browse those orders, pick one you like, and fill it in a single transaction.
The number of strikes in order.strikes[] tells you the product type:
1 strike = Vanilla (PUT or CALL)
2 strikes = Spread
3 strikes = Butterfly
4 strikes = Condor or Iron Condor
Collateral is paid upfront by the taker. All OptionBook options are cash-settled: at expiry, the payout is calculated based on the difference between the strike price and the settlement price (Chainlink oracle), and paid out in the collateral token:
PUT options: Collateral and payout in USDC
CALL options (Inverse Call): Collateral and payout in the underlying token (WETH for ETH, cbBTC for BTC)
No physical delivery of assets occurs. For physically settled options (actual delivery of underlying at expiry), use RFQ/Factory instead.
OptionBook vs RFQ
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()
Stats
getBookProtocolStats(), getBookDailyStats()
getFactoryProtocolStats(), getFactoryDailyStats()
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()
Both OptionBook and RFQ create cash-settled options using the same on-chain implementation contracts (PUT, INVERSE_CALL, spreads, etc.). The difference is how you get there:
OptionBook: Fill a pre-priced order instantly. The strike, expiry, and price are already set by the maker.
RFQ: Request your own custom strike and expiry. Market makers compete via sealed-bid auction (~60 seconds for offers).
If OptionBook has an order matching your trade, use it. It's faster. Use RFQ when you need parameters that aren't currently listed.
Core Flow
Every OptionBook trade follows the same four steps:
Quick Example
OptionBook Implementations
All OptionBook options are cash-settled. The implementation address on each order determines the product type:
Use client.chainConfig.implementations for the current Base r12 implementation addresses. Orders from fetchOrders() may reference current or earlier implementation versions; the SDK reverse lookup handles both transparently.
Data Source
OptionBook orders come from the Book indexer at /api/v1/book/. The SDK abstracts this — you call client.api.fetchOrders() and receive typed OrderWithSignature objects with pre-computed Greeks and metadata.
Module Access
All OptionBook operations go through two modules:
client.api
Fetch orders, positions, stats (read-only, no signer)
client.optionBook
Fill/cancel orders, claim fees (write ops require signer)
See Also
Last updated

