Skip to main content
This page is operational guidance for running Arkade Intents at volume: what the relay layer can absorb, where the real limits are, and how relays, solvers, and applications should deploy. It describes deployment choices, not new wire behavior — the wire contract remains the RFQ protocol, and directions that would change it are collected in Future Work.

The Relay Is Not the Bottleneck

An addressed swap costs four to six relay events of roughly a kilobyte each: request, quote, and best-effort status. Funding, filling, and claiming never touch the relay. Under an aggressive profile — every user swapping twice a day, all cross-corridor, peak traffic ten times the average: Concurrent sockets assume connect-on-demand clients: they track active negotiations — swaps per second times the ~30-second session — not user count. A single production-grade relay ingests thousands of events per second and holds hundreds of thousands of sockets. Cryptography sits three orders of magnitude below the line: one solver core clears several hundred full verify-decrypt-price-sign cycles per second with generous overhead. The ephemeral negotiation kinds also mean the relay stores nothing for the hot path — an expired negotiation leaves no disk behind.
Scaling the RFQ wire is not a throughput problem at any plausible volume. The binding constraints are economic and operational, and each has a deployment answer below.

What Binds First

Deployment Guidance

Relays

Run dedicated RFQ relays, not general-purpose public ones — the conclusion every production machine-to-machine Nostr protocol reached:
  • Gate reads and writes with NIP-42 AUTH, and serve a p-tagged addressed event only to its tagged recipient — this also stops the who-quotes-whom graph from being public.
  • Require authors, #p, or #t on every subscription; reject open-ended queries.
  • Rate-limit per pubkey and source address in the relay’s write policy.
  • Run at least two independent operators, geo-spread and mirrored. Publish addressed traffic to two or more relays and deduplicate by event id — the working defense against a relay selectively delaying one solver’s quotes to steer flow.
Solver cards already carry the relay list per rendezvous, so all of this is deployment policy, not a wire change.

Solvers

  • Hold persistent, backoff-managed connections to the transaction stream, and reconcile from the indexer after every gap — the stream replays nothing. Alert on gap-minutes: that is capital at risk, not UX.
  • Treat price-cache freshness as a pricing decision. Quote risk scales with feed staleness plus the validity window; shortening either is worth orders of magnitude more than any network optimization (see the arithmetic below).
  • Shed load with rfq_refusal — it is penalty-free and already in the wire. Signed refusals are also attribution: applications can keep per-solver fill and refusal statistics as a selection input.
  • Refresh price feeds on a timer, never synchronously on an unauthenticated event.

Applications

  • Connect on demand and hold nothing open between swaps. The protocol was built for it: correlation by RFQ identifier across reconnects, best-effort status, contract and destination-network evidence authoritative.
  • Follow the transport requirements, and deduplicate by event id — multi-relay publication delivers duplicates by design.
  • Warm the relay connection when the swap UI opens. A cold cross-continent handshake costs 200–330 ms — the largest avoidable latency in the flow, fixed by connection timing, not server placement.

Co-Location

The answer splits by how the fill is won.

Quoted routes: proximity is noise

Every quantity a datacenter removes is 100–1000× smaller than the protocol’s own time constants — validity windows of tens of seconds, price caches of seconds, claim headroom and refund horizons of hours: The economics agree. A quote is a free option for the user across feed staleness plus the validity window — roughly 45 seconds at reference defaults, costing a solver several basis points of break-even spread at typical BTC volatility. Full co-location trims about 0.2 s of that window, worth about 0.01 bps. Cutting the price cache from 15 s to 1 s is worth about 0.8 bps — eighty times more — and tightening the validity window from 30 s to 10 s another ~1.6 bps. Where proximity matters for pricing, it is solver to price feed and hedging venue, not solver to relay or user.

Raced fills: proximity is real

An intra-Arkade swap is filled by whichever solver spends the funded contract first, discovered from the transaction stream — a pure latency race, and cancellation races the fill the same way. Solver-to-arkd latency decides who wins, so solver fill infrastructure will rationally sit near the operator. Published-request bidding is a milder race for the application’s selection — one more argument for bounded panels and deadline-based selection over speed.
Never make relay, solver, and operator one failure domain. The one place an hours-scale outage converts to principal loss is near refund locktimes: a single-datacenter deployment puts quoting, fill detection, and claim submission in the same blast radius exactly where the deadlines live. Keep the relay set multi-operator and multi-region even if every solver’s fill loop sits in one metro.

Future Work

The design directions these constraints point at.

RFQ Protocol

The wire family and relay this page deploys.