Skip to main content
This page is the compact protocol reference. Read it when you need to debug a message flow, map SDK fields to onchain settlement, or confirm which identifier belongs in which part of the RFQ stack. For conceptual background, start with SDK architecture. For runnable commands, use the Runbook.

Actors

ActorRuns whereResponsibilityTrust boundary
TakerClient or trading serviceRequests quotes, selects quotes, submits settlementOwns taker key and taker margin
MakerMarket-maker serviceReceives RFQs, signs executable quotes, manages maker inventoryOwns maker key and maker margin
RFQ indexer / executorTrueCurrent serviceRoutes requests and quotes, assigns rfq_id, monitors signed intents, emits ordinary RFQs when triggers fireCannot change signed fields or settle without valid signatures
RFQ contractInjective CosmWasmVerifies signatures, authz, expiries, constraints, then settlesOnchain enforcement point
Injective exchange moduleInjective chainOpens, closes, and liquidates derivative positionsFinal position and margin ledger

Live RFQ path (AcceptQuote)

quote_ack.status="success" means the indexer accepted and routed a syntactically valid quote. It is not a fill signal. The fill signal is either the onchain transaction result observed by the taker or the maker-side settlement_update.

Signed-intent path (AcceptSignedIntent)

TP/SL orders are pre-signed taker intents. The taker can go offline after submission; the executor fires the exit when the trigger condition is satisfied. Makers do not need to distinguish this from any other RFQ request. The TP/SL-specific state is owned by the taker and executor. For taker-side fields and signing, see Signed intents.

Settlement checks

The contract processes submitted quotes and skips quotes that fail quote-level validation. Settlement succeeds only if the selected valid quotes satisfy the taker’s fill constraints.
CheckFailure result
Maker signature verifies against the exact submitted fieldsQuote skipped
Quote sign_mode is v2 and evm_chain_id matches the EIP-712 domainQuote skipped
Quote taker plus rfq_id matches the request or signed intentQuote skipped or rfq_id mismatch
Quote has not expired at settlement block timeQuote skipped
Maker is whitelisted and uses the registered maker_subaccount_nonceQuote skipped or no fill
Maker and taker authz grants exist for the RFQ contractTransaction fails with authorization error
Maker and taker subaccounts have enough marginQuote skipped or transaction fails
Price satisfies taker worst_price and mark-band checksQuote skipped
Min-fill and unfilled-action rules are satisfiedPartial fill or no fill
Signed-intent trigger, deadline_ms, epoch, and lane_version are validAcceptSignedIntent fails

Identifier reference

FieldAssigned byUsed inNotes
client_idTakerTakerStream request onlyUUID correlation key for the client. It is not signed and is not the settlement nonce.
rfq_idIndexerRequest ACK, maker request, quote signature, settlementUse the ACK-returned value. Do not invent it locally.
chain_idEnvironment configQuote wire payloadCosmos chain ID: injective-888 on testnet, injective-1 on mainnet.
evm_chain_idEnvironment configEIP-712 domain and v2 wire fields1439 on testnet, 1776 on mainnet. Do not put this value in quote.chain_id.
contract_addressEnvironment configQuote wire payload and EIP-712 domainBech32 RFQ contract address on the wire; converted to EVM address inside the typed-data domain.
maker_subaccount_nonceMaker registrationQuote signature and settlementIf list_makers returns null, quote with nonce 0.
expiryMakerQuote signature and settlementMilliseconds. Live quotes must be at least now_ms + 1_500; now_ms + 2_000 or longer improves match odds but increases stale-price exposure.
epochContract stateSigned intentsBumped by CancelAllIntents; invalidates all older taker intents.
lane_versionContract stateSigned intentsBumped by CancelIntentLane; invalidates one (taker, market_id, subaccount_nonce) lane.

Testnet markets

MarketSymbolMarket IDPrice tick
INJ/USDC PERPINJ/USDC PERP0xdc70164d7120529c3cd84278c98df4151210c0447a65a2aab03459cf328de41e0.01
BTC/USDC PERPBTC/USDC PERP0xfd704649cf3a516c0c145ab0111717c44640d8dbe52a462ae35cadf2f6df15151
LINK/USDC PERPLINK/USDC PERP0xdbb9bb072015238096f6e821ee9aab7affd741f8662a71acc14ac30ee6b687a50.001
ETH/USDC PERPETH/USDC PERP0x135de28700392fb1c17d40d5170a74f30055a4ad522feddafec42fbbbb7808970.1
For integer-tick markets such as BTC/USDC, canonicalize prices without a decimal point. "76462" is valid; "76462.0" can fail signature or tick validation depending on where it is introduced.

Last modified on June 2, 2026