Pricing fundamentals
worst_price scale: The v2 indexer endpoints return worst_price in human-readable scale (e.g. "14.85"), not 1e18-scaled integers. Reading it as a raw integer from a v1 endpoint (which would return 14850000000000000000) will cause worst price exceeds limit rejections. Always use the v2 endpoint values directly.
Scale spread to volatility: Your spread represents the compensation for the risk you take by being on the other side of a trade. In low-volatility periods, tight spreads win more flow. In high-volatility periods, widen accordingly, as the risk of being picked off is higher.
A simple starting model:
Numerical spread construction example
Below is a worked example of building a competitive two-sided quote for an INJ/USDC RFQ. Inputs:- Mid-market: $25.00
- 30-second realised volatility: 0.08% (annualised ~40%; intraday spike)
- Request size: 500 INJ (~$12,500 notional)
- Reference size: 100 INJ
- Current inventory: +300 INJ net long (skew toward selling)
1 + 0.5 × (5-1) = 3× → spread = 4 bps × 3 = 12 bps each side
Step 4 — Inventory skew: +300 INJ net long → tighten offer (selling), widen bid (buying). Apply −2 bps to offer, +2 bps to bid.
Final quote:
- Bid: $25.00 × (1 − 0.0014) = $24.965
- Offer: $25.00 × (1 + 0.0010) = $25.025
- Half-spread: 10 bps bid / 10 bps offer (asymmetric due to inventory skew)
$5.00 / $12,500 = 4 bps each side. The 10 bps half-spread above earns $12.50 gross spread minus $5.00 fee = $7.50 net spread income, before hedging costs.
Response rate
Always try to quote inside the collection window. TrueCurrent currently uses 500 ms. A consistent response rate is important both for your standing and for the quality of the RFQ system. Traders who request quotes and receive none get their order cancelled - a worse experience for them and lost flow for the maker pool. Fail gracefully. If you genuinely can’t price a request (e.g. your pricing feed is down, your margin is depleted), it’s better to not submit a quote than to submit one. The system handles no-quote correctly: the request expires and the taker is told to retry. Monitor latency. The collection window includes network round-trip time. If your system is co-located far from the indexer, account for that latency. A quote that arrives after the active window is ignored.Tracking the mark price
To minimize adverse selection and avoid rejected quotes, makers should price around the same reference the contract validates against: the current onchain mark price. TrueCurrent’s RFQ validation usesmark_price directly. The market’s mark_price is the reference used for quote validation, worst_price validation, trigger evaluation, and liquidation checks. Position P&L display uses the streamed indexPrice, so do not use UI P&L or index price as the source for contract-facing quote bands.
To track it:
- Query the relevant derivative market from the Injective exchange module.
- Read the current
mark_price. - Normalize price decimals and tick size before using it in quote logic.
- Refresh continuously and treat stale or unavailable mark price data as a no-quote condition.

