Quote Signing
This page covers the signature underneath the API quote path. The maker signs the Terms first; CRX signs second. The maker's signature binds the quote to the exact anchored offer, inside a deadline that kills any replay.
What does the maker sign, and when?
The maker signs first. When the maker prices an RFQ, the relayer returns a canonical Terms object built from the maker's rate and margin schedule, and the maker signs it with EIP-712. The counterparty on this leg is CRX: the maker's signature is the first of the two that bind the trade; CRX signs the same Terms when it accepts. When both signatures exist and the quote is anchored, the contract accepts the bind. The Terms shape, the domain, and how the id derives are the shared model: see Accepting a Quote (~2 min).
This is why the quote path needs no session to authorize. Login is only to read the inbox. The bind authority is the Terms signature the maker produces, not the token.
The following diagram shows the signing flow:
What the maker authors vs what the relayer fills
The maker authors the price-bearing fields; the relayer fills the rest from the RFQ, then returns the whole canonical Terms to sign. The maker's are:
- The locked rate: the forward rate the maker stands behind — the price.
- The long-side and short-side initial-margin rates: the cushion required per side — the margin schedule.
Everything else (the agreement id, pair, side flag, notional, VM thresholds, calendar terms, and the binding nonces) is filled from the RFQ. The full field list is in Accepting a Quote (~2 min). The maker signs exactly what the relayer returns; a Terms is never hand-built.
Why is there a signing deadline?
The deadline exists to prevent the quote being replayed against the maker later. The signing deadline is the timestamp past which the contract rejects the Terms; it bounds the rate to the moment it was priced. If CRX does not bind inside it, the quote expires: nothing is owed, nothing is posted. The deadline limits exposure to the validity window; a standing signed quote against a moving market is exactly what it prevents.
The maker signs the canonical Terms the relayer returns, then posts the signature to confirm. On confirm the relayer anchors the quote on-chain, and CRX can take the agreed quote and bind.
Edge cases at bind time
Two branches follow, and both are clean:
- It binds. CRX signed the same Terms and submitted the bind inside the signing deadline. The position opens; allocate the IM into the agreement's SCA and the position marks for and against the maker continuously.
- It expires or reverts. CRX did not bind before the window closed, or the Terms drifted from the anchor. The quote expires; nothing is posted. Re-price under a fresh RFQ; do not re-quote under a live offer.
WarningSign exactly what the relayer returned. The contract verifies the signed Terms, not the maker's intent.
The desk-UI path that produces this same signature with one click is Answer an RFQ (~6 min). The exact EIP-712 struct and signing code live in Quote: Get Started.