Quote Pipeline & Auction#
The RFQ auction engine is the core of TetraFi's execution layer. It broadcasts trade requests to qualified solvers, collects competing quotes, and selects the winner using UCCP pricing.
RFQ Flow#
RFQ Auction Flow
RFQ Sequence
const rfq = await tetrafi.rfq.create({ pair: "USDC/USDT", side: "buy", amount: "1000000.00", corridor: "ethereum-optimism", maxSlippage: 0.001,});console.log(`RFQ: {rfq.id}, status: {rfq.status}`);Quote Preferences#
Four modes via quotePreference parameter:
- Default Ranked ascending by
eta- fastest fill wins - Taker pays small premium for speed
- Use: urgent treasury ops, rebalancing
Swap Types#
Every RFQ is either Exact Input ("I have X, how much Y?") or Exact Output ("I need Y, how much X does it cost?"). The swap type is carried on the MandateOutput context byte and resolved by the OutputSettler at fill time.
See Settlement Flows → Order Types for the full context-byte reference, including Limit, Dutch Auction, and Exclusive variants.
Selection Strategies#
Solver selection is configured per-request via solverOptions. Three strategies control which solvers receive the RFQ:
| Strategy | Mechanism | When Used |
|---|---|---|
| All | Query every viable solver, sorted by compatibility score | Low solver count - maximum competition |
| Sampled | Weighted random selection with exponential decay by rank | High solver count - reduces fan-out |
| Priority | Only solvers above a configurable compatibility threshold | Quality filtering, SLA enforcement |
Solver Reputation#
Solver reliability is tracked on a 24-hour rolling window. Fill rate = successful_fills / (successful_fills + repudiations).
| Fill Rate | Status | Effect |
|---|---|---|
| ≥ 90% | Active | Full RFQ participation |
| 80–89% | Warning | Logged to evidence ledger, no ranking penalty |
| 50–79% | Probation | Ranking weight reduced 50% |
| under 50% | Disabled | Excluded from RFQ, admin reset required |
Batch Auction & Intent Netting#
When multiple RFQs arrive for the same corridor within a batch window, the engine can net them - offsetting flows cancel out, reducing solver capital and gas costs. Four netting modes (Simple, Batch, Intermediate, Ring) are covered in detail in the Intent Netting page.
Dutch Auction Fallback#
If no solver responds within the RFQ window, the order can fall back to a Dutch auction mode with three time-based phases:
| Phase | Window | Max Fee | Solver Tier |
|---|---|---|---|
| SAFE | 0–2 min | 1 bps | Highest-rated solvers only |
| BALANCED | 2–10 min | 3 bps (linear ramp from 1 bps) | Broader solver set |
| FAST | 10+ min | Premium | Widest solver set, or cancel |
The fee ramps linearly between phases, attracting solvers by offering improving economics over time.
Solver Adapter Architecture#
Two-layer adapter pattern normalizes solver protocols:
- Layer 1 (
SolverAdapter) - protocol-specific → standardGetQuoteRequest/Response - Layer 2 (
SolverAdapterTrait) - runtime config, metrics, error categorization, timeouts
TetraFi#
Native protocol. Full routes + assets. Direct WebSocket, lowest latency.
OIF#
ERC-7683 compatible. Standardized discovery via Open Intents Framework.
Across#
Bridge integration. Route-based quoting mapped to TetraFi corridors.
Timeout Configuration#
| Parameter | Default | Range |
|---|---|---|
per_solver_timeout_ms | 0ms | 100–30,000 ms |
global_timeout_ms | 0ms | 100–60,000 ms |
fill_deadline | 0s | On-chain deadline |
The aggregator terminates early once min_quotes have been received, avoiding unnecessary wait time.