Skip to main content
TrueCurrent’s offchain coordination uses two bidirectional streams:
  • TakerStream for takers to request quotes and receive maker responses.
  • MakerStream for whitelisted makers to receive RFQs and submit signed quotes.
For a runnable maker/taker validation path, use the Runbook.

Market price updates

For market-data consumers, indexPrice is streamed with the same cadence and freshness expectations as markPrice. Use indexPrice as the primary source for displayed Index Price and unrealized P&L. Continue to use markPrice or onchain mark_price for contract-facing quote validation, trigger evaluation, liquidation risk, and funding logic.

Endpoints

The public service alias is injective_rfq_rpc.InjectiveRfqRPC. Do not replace it with an internal proto package name. The injective-rfq-toolkit clients store the base URL and append the stream path internally.

TakerStream

TakerStream is used by traders or applications acting on their behalf. Connection path:
Connect with the taker’s Injective address as request_address metadata. Add auth_version: v1 to request the optional taker authentication handshake. The Python toolkit adds both metadata values when TakerStreamClient is configured with request_address, auth_private_key, and auth_contract_address.

Authentication challenge

Taker authentication proves that the signer controls request_address directly or through an AuthZ grant. It is currently informational: a failed result does not close the stream or block requests. Integrations should still complete the handshake because authenticated request provenance may be used when prioritizing requests. The v1 signature uses TakerStreamAuthChallenge(address taker,bytes32 nonce,uint64 expiresAt) and a chain-independent EIP712Domain(string name,string version,address verifyingContract). Do not include an EVM chain ID. Decode the nonce to raw 32 bytes and encode the taker as the left-padded 20-byte EVM form of request_address.

Request

client_id is your correlation key. The indexer assigns the settlement rfq_id and returns it in the request ACK. Use that ACK-returned rfq_id for quote collection and settlement.

Quote delivery

Quotes delivered to TakerStream are signed maker quotes:
Collect for a short window, select one or more quotes, then submit AcceptQuote. TrueCurrent currently uses 500 ms; the value can vary by frontend and protocol configuration, and API takers can tune their own timeout. Waiting near the full quote expiry leaves little time for transaction inclusion.

MakerStream

MakerStream is used by whitelisted makers. A maker must be registered, funded, and authorized before quotes can settle. Connection path:

Authentication challenge

After connection, the indexer sends a one-shot MakerChallenge. The maker signs a StreamAuthChallenge EIP-712 v2 message and replies with MakerAuth. Until auth succeeds, the stream may remain open but no RFQ request messages are forwarded. Using the reference client:

Incoming messages

MakerStream can broadcast requests unrelated to the taker you are testing. Always filter by taker/request address plus rfq_id, then market and side, before signing. rfq_id alone is timestamp-like and can collide across takers.

Submitting quotes

sign_mode="v2" and evm_chain_id are mandatory for the current signing path. chain_id is the Cosmos chain ID; keep it as injective-888 on testnet. Raw MakerStream JSON uses snake_case field names (evm_chain_id, chain_id); camelCase names are only for EIP-712 typed data or generated client properties. quote_ack.status="success" means the indexer accepted and routed the quote. It does not mean the taker accepted or filled it. Use settlement_update or onchain transaction state for fill confirmation.

Reconnection

Both streams should reconnect with exponential backoff. During downtime, missed RFQs are not replayed; request a new quote as taker, or resume normal quoting as maker. Authentication is per connection. After reconnecting, answer the new challenge and wait for its auth result before resuming taker requests or maker quoting. Do not reuse a challenge nonce or signature from the previous connection.

Last modified on August 21, 2026