Quote Testing
Soft vs firm quotes and the three safety labels — quote-only, execution-preparatory, blocked.
The quote tester is the primary trader workflow. It supports two request shapes — soft (indicative) and firm (carries ABI-encoded calldata). Track A adds an explicit safety label to every firm-quote attempt so the UI never silently slides from "testing" to "preparing to execute".
Soft vs firm
- Soft quote —
POST /api/v1/quotes/soft. Price, spread, and notional only. No calldata, no on-chain validation. Safe to request freely. - Firm quote —
POST /api/v1/quotes/firm. Includescalldata,settlement_address,chain_id, and avalid_untiltimestamp. On-chain state is validated before issuance (issuance hours, oracle freshness, vault balance for vault-buy path).
Three safety labels
- quote-only — simulated in preview environments. The engine returns a quote payload but the console never touches execution calldata paths.
- execution-preparatory — staging default. The full firm quote is prepared and visible in the UI, but the console does not submit the transaction.
- blocked — the environment, role, or feature flag forbids any firm-quote attempt. The UI surfaces the reason string from the engine's capability response.
Environment matrix
| Environment | Soft quotes | Firm quotes | Execution submission |
|---|---|---|---|
| Preview | Simulated | quote-only | Never |
| Staging | Bounded (real engine, test accounts) | execution-preparatory | Never |
| Production | Live | Gated on FIRM_QUOTES_PROD_ENABLED | Executor service, not the console |