secp256k1 signature over the SignQuote typed-data payload. The contract verifies that signature during settlement.
1. Decide whether to quote
For each request, decide:- whether your maker is willing to fill it,
- how much quantity and margin to provide,
- what price to quote,
- how long the quote remains valid,
- and which maker subaccount nonce backs the quote.
Your quoted
margin and quantity may be smaller than the taker’s request for partial fills.
2. Canonicalize decimals
Decimal fields are signed as exact UTF-8 strings. These are different signed messages:"14.85""14.850""14.8500"
3. EIP-712 domain
Quotes use this EIP-712 domain:
The domain
chainId is the EVM chain ID. It is not the Cosmos chain ID. This is the main naming collision in RFQ: chainId in the EIP-712 domain is not the same field as quote.chain_id in the MakerStream payload.
Current testnet RFQ contract:
4. SignQuote typed-data layout
The SignQuote message has 16 fields. Field order matters.
The final digest is:
bindingKind from whether taker is present. For current maker integrations, pass the taker address from the RFQ request. Do not add bindingKind to the quote payload, and do not pass a binding-kind helper argument for live taker-bound RFQs.
5. Sign with the helper
Usesign_quote_v2 from injective-rfq-toolkit.
0x-prefixed 65-byte signature (r || s || v) with compact y-parity v=0/1.
6. Send the same values
Send the exact strings and numbers you signed.chain_id is still the Cosmos chain ID. evm_chain_id is the EVM chain ID embedded in the EIP-712 domain. Do not send 1439 or 1776 in chain_id.
Common failures
Next: Sending quotes.

