> ## Documentation Index
> Fetch the complete documentation index at: https://docs.joyride.exchange/llms.txt
> Use this file to discover all available pages before exploring further.

# The Signed Quote

> What a maker signs when it quotes an RFQ and how the venue checks the signature

Every quote carries an Ed25519 signature by the maker's wallet key. The maker signs the quote's contents and sends only the signature, as `maker_signature` in `rfq.maker.respond`, together with the fields in the respond frame. The venue rebuilds the same contents from the open request and that frame, checks the signature against them, and reports a `quote_id` that identifies the signed quote in every later message.

## What the signature covers

| Field            | Where the value comes from                                                                                                              |
| ---------------- | --------------------------------------------------------------------------------------------------------------------------------------- |
| Deployment       | the `deployment` object on the open request: program id and deployment id. A quote signed for one deployment is rejected on every other |
| Request          | the `rfq_id` being answered                                                                                                             |
| Maker subaccount | the maker's margin-vault subaccount, returned by `GET /api/query/vault-subaccount`                                                      |
| Taker subaccount | `taker_subaccount` on the open request                                                                                                  |
| Legs             | the request's legs, in the order the taker submitted them                                                                               |
| Prices           | `bid` and `ask` in the frame, one price each for the whole package                                                                      |
| Nonce            | `quote_nonce` in the frame                                                                                                              |
| Times            | `issued_at` and `expires_at` in the frame                                                                                               |

The program ids and config accounts for each cluster are on [Program Addresses](/exchange/programs).

## Nonce and expiry

`quote_nonce` must be higher than every nonce the account has used before, across restarts. `expires_at` can be at most one hour after `issued_at`, and a quote must reach the venue with more than 2 seconds of life left. The full rules are under Responding on [Quoting RFQs](/market-makers/rfq-quoting#responding).

## When a signature is refused

* `RFQ_INVALID_SIGNATURE`: the signature does not verify over the contents the venue rebuilt. Usually the maker serialized a field differently, or signed with a key other than the wallet that owns the maker subaccount.
* `RFQ_CANONICAL_MISMATCH`: the contents decoded, but a field differs from the venue's record of the request, such as the deployment, the legs, or a subaccount that does not belong to the signing wallet. Resending the same frame produces the same result.

## Serialization

The byte-level format of the signed quote, with test vectors and a reference signer, is shared with market makers during onboarding. Email [support@joyride.exchange](mailto:support@joyride.exchange).

Next: [Devnet Sandbox](/market-makers/sandbox)
