Summary
A sandbox with the same protocol and payloads runs on Solana Devnet at devnet.joyride.exchange.
How an RFQ works
- A taker sends a request naming its legs. Each leg is one instrument, one side, and one quantity. All legs share one underlying and one expiry.
- The venue publishes the request as an
openevent on therfq_makerchannel of the trading WebSocket. Every quoter subscribed to that channel receives it on its own connection and prices the package inside the request window. - Quoters respond with a signed two-sided quote, a bid and an ask for the whole package, that is binding until the expiry the quoter set, at most one hour later.
- The taker accepts one side of the quote, bid or ask, for the whole package.
- The fill executes on-chain in one transaction against both parties’ collateral. Every leg lands or none does. The resulting positions settle at expiry against the settlement price.
Who quotes
Quoting requires a provisioned account and the quoter role. Joyride creates the account with its margin policy and fee tier, and provisions the role together with the maker’s on-chain subaccount during onboarding. Once the subaccount is funded, the maker authenticates with its wallet and starts receiving requests.Timing
What is not supported
- No quote cancel or replace. A delivered quote is firm until its expiry. The quote TTL is the only bound on exposure.
- No notification to losing quoters. The first firm quote wins the request; later quotes receive no message and expire on their own. Makers need a local expiry timer per quote to release reserved risk.
- No partial fills. A package is all-or-nothing: every leg fills in one transaction or none does, and a quote fills for its full quantity or not at all.
- No cross-asset or calendar packages. A request carries between one and thirteen legs on one underlying and one expiry.
- No API keys. Every session opens with a wallet signature.