# \[Makers] How to integrate in the RFQ

Rysk allows any participant to become a counterparty by integrating as a market maker into the RFQ system. Market makers connect via WebSocket, subscribe to RFQs for specific assets, and submit signed quotes in real time. Quotes compete during a short aggregation window, and the best price is forwarded to the app. Once accepted, settlement occurs on-chain using Rysk’s accounting and options contracts.

Below are the technical details and instructions required to participate.

### RFQ System

The RFQ system operates by enabling buyers to connect to Rysk via a WebSocket and subscribe to requests for specific assets.

When a user submits an RFQ, a **2-second aggregation period** begins, during which market makers submit their quotes. The system selects the most competitive quote and forwards it to the user. Market makers receive immediate feedback on whether their submitted quote is currently the best or falls short.

Before finalising a quote, the system verifies that the market maker has sufficient **USDT0** deposited in our accounting and settlement contract to fulfil the request.

Before quoting you must deposit some funds either through our UI <https://app.rysk.finance/mm> or via one of the packages listed below.

All interactions with Rysk must comply with [**JSON-RPC** specification](https://www.jsonrpc.org/specification).

<figure><img src="https://2559665757-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F7tHAl50whbE5aof8T5A2%2Fuploads%2FawZokQus2ryLgKFzCwn8%2Fimage.png?alt=media&#x26;token=35c9cebc-78d0-405a-867e-feba32401e7b" alt=""><figcaption></figcaption></figure>

If the taker accepts the winning quote, they submit a confirmation to our system, initiating on-chain settlement. The accounting contract then deducts the quoted amount from the market maker’s account and transfers it to the taker. Simultaneously, oTokens representing the options are credited to the market maker’s account within our accounting contract.

#### Data structures

The following structures will be used as JsonRPC params objects in both requests and responses.

```typescript
type Request = {    
  asset:           string // 0x
	assetName:       string
	chainId:         number 
	expiry:          number // unix 
	isPut:           boolean 
	isTakerBuy:      boolean   
	quantity:        string // e18
	strike:          string // e8
	taker:           string
	usd:             string // address of the stablecoin to be paid premium in
	collateralAsset: string
}

type Quote = {    
  assetAddress:    string // must match the request asset param
	chainId:         number // must match the request chainId param
	expiry:          number // must match the request expiry param
	isPut:           boolean // must match the request isPut param
	isTakerBuy:      boolean // must match the request isTakerBuy param
	quantity:        string // must match the request quantity param
	strike:          string // must match the request strike param
	maker:           string 
	nonce:           string // stringified uint64
	price:           string // e18 (for one unit basis, we will do the maths * quantity)
	validUntil:      number
	signature:       string
	usd:             string // must match the request usd param
	collateralAsset: string // must match the request collateralAsset param
}
```

#### RPC responses and notifications

Upon submitting a quote you either receive:

`OK` indicating your quote is the best one or

`A better quote exists` with attached the current best price If a newer quote dethrones yours you receive a `skill_issue` message with information regarding yours and the new quote.

When a taker accepts your quote you receive a `trade` message with details of the trade.

#### Fees

*MIN(0.01 UnderlyingPrice, 0.125 \* OptionPrice) \* Quantity*<br>

### UI

URL: <https://app.rysk.finance/mm/>

<figure><img src="https://2559665757-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F7tHAl50whbE5aof8T5A2%2Fuploads%2FmR9xU6YUbTHW0I227dkP%2FScreenshot%202026-01-13%20at%2010.47.48.png?alt=media&#x26;token=0ed6c841-aea4-4c14-9b07-77e6fe916fc0" alt=""><figcaption></figcaption></figure>

Options contract details

The options contracts are fully on-chain, utilising the highly battle-tested and audited Opyn/Rysk Gamma Smart Contracts. Below is a summary of the contract specifications:

#### Contract Specifications:

* **European-style** options
* **Physical settlement** – The underlying assets are exchanged at the specified strike price upon expiry.
* **Fully collateralised** – No collateral re-hypothecation. Rysk will support alternative asset collateralisation, meaning if an asset is 1:1 redeemable for the underlying and passes specific risk checks, it can be used as collateral. While the strike price remains denominated in the underlying asset, physical delivery will occur against the collateral asset, with this factor expected to be reflected in the option premium.
* **Options priced in USD**
* **Symbol:**\
  ![](https://2559665757-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F7tHAl50whbE5aof8T5A2%2Fuploads%2FZJZUtmxEDQ6VYA6DJBbT%2Fimage.png?alt=media\&token=c0771d00-ff26-4cdd-b156-3ed3ed1d160f)
* **Strike prices and expiry** – Matches Deribit’s strike prices and expiries (Friday, 8:00 AM UTC).

For all options, strike prices, tick sizes, and minimum/maximum trade sizes will be determined based on the specific asset and communicated accordingly.

### Settlement

All contracts are **physically settled**. This means that for **in-the-money (ITM) call options**, the buyer must provide USDT0 in exchange for the collateral asset at expiry and the risk asset in the case of puts. To simplify the process for buyers, they only need to ensure they have sufficient USDT or Asset available on their wallet. The settlement process works as follows:

The buyer should monitor their contracts and assesses the likelihood of them expiring ITM. The positions can be monitored by connecting their wallet on [app.rysk.finance/mm](https://app.rysk.finance/mm/)

* **IMPORTANT: On the mm page, you will see several tick boxes next to a position. This MUST be handled before expiry which is 8am UTC on Friday.**

  * **If the tickbox is ticked it is expected that you will be providing the necessary USD or Asset to physically redeem the option IF it expires ITM. You can either exercise your options all at once or in tranches. (For the early stages, contact the rysk team on our respective chats and make it clear what your intentions are, normally the exercise window will be 60 minutes but for the first time it will be 120 minutes). If you choose to execute in tranches, you just need to let the rysk team know when you are ready and your exercise will be triggered on demand.**

  \*\*The next COMPULSORY step to exercise is to approve the necessary amount of USD or ASSET to REDEEM on the dropdown UI shown below on the MMarket page (image shown below). This will approve your funds for spending on <https://hyperevmscan.io/address/0x24a44f1dc25540c62c1196FfC297dFC951C91aB4> and the system will be able to exercise for you. You should ideally do this BEFORE expiry.

  FUNDS SHOULD BE LEFT ON YOUR EOA, not inside the rysk account.\*\*

  Eg. You have 5.5 ETH options with 4000 strike in the money and want to redeem all. Then you need to have 5.5 \* 4000 = 22000 USDT0 on your EOA on HyperEVM, and at least 22000 approved.

<figure><img src="https://2559665757-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F7tHAl50whbE5aof8T5A2%2Fuploads%2F6FEgcnXboLRm64jv0VHp%2FScreenshot%202026-01-13%20at%2010.47.24.png?alt=media&#x26;token=ba21beb7-0997-4885-9f05-c2ca601f0035" alt=""><figcaption></figcaption></figure>

<figure><img src="https://2559665757-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F7tHAl50whbE5aof8T5A2%2Fuploads%2FUYkcPqdrKvgtpXfJHbeO%2Fimage.png?alt=media&#x26;token=5cccfe87-5b13-480c-a3c1-f197e5cc6f4e" alt=""><figcaption></figcaption></figure>

At expiry, the prices of the underlying and collateral assets are determined based on an aggregate index price derived from **Stork** and **Pyth** price feeds.

### Clients

Python client: <https://github.com/rysk-finance/ryskV12_py>

Typescript client: <https://github.com/rysk-finance/ryskV12_ts>

Go cli: <https://github.com/rysk-finance/ryskV12-cli>

**Note: During the early stages of launch for security reasons, to interact with the systems as a buyer you must first be whitelisted, please contact the team to do so.**&#x20;

Onboarding will include: a call, 2 days of your bot running on testnet and multiple trade executions on testnet.

**Telegram for makers and integration questions:** <https://t.me/+zaGUMXoJyXJmNWFk>


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.rysk.finance/getting-started/protocol-and-product/makers-how-to-integrate-in-the-rfq.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
