Order to confirmation

Timed from order submit to the order appearing on the venue's own account feed, not to an acknowledgement of receipt: confirmation is the point the order is live in the book and can be filled.

Order → Confirmation

Updated

3-day windowLower is better

Each mark = one measured order20× slow motion

Order-to-confirmation latency by endpoint: median and number of measured orders.
EndpointMedian latencyOrders measured
Bullet (direct)7.9ms mediann=4,299
Lighter9.9ms mediann=4,319
Bullet (via Cloudflare)12.8ms mediann=4,278
Nado15.9ms mediann=4,104
Pacifica18.3ms mediann=4,319
Aster101ms mediann=4,315
Hyperliquid451ms mediann=3,714

Tail latency

Median To p99 To p99.9 Slowest order 100 ms
Endpointp99Slowest
  1. Bullet (direct)35.0 ms58.1 msBullet (direct): median 7.9 ms, p99 35.0 ms, p99.9 54.6 ms, slowest 58.1 ms.
  2. Lighter62.0 ms721 msLighter: median 9.9 ms, p99 62.0 ms, p99.9 269 ms, slowest 721 ms.
  3. Bullet (via Cloudflare)30.5 ms236 msBullet (via Cloudflare): median 12.8 ms, p99 30.5 ms, p99.9 105 ms, slowest 236 ms.
  4. Nado4,499 ms8,428 msNado: median 15.9 ms, p99 4,499 ms, p99.9 6,732 ms, slowest 8,428 ms.
  5. Pacifica40.8 ms69.0 msPacifica: median 18.3 ms, p99 40.8 ms, p99.9 58.2 ms, slowest 69.0 ms.
  6. Aster147 ms219 msAster: median 101 ms, p99 147 ms, p99.9 189 ms, slowest 219 ms.
  7. Hyperliquid874 ms7,282 msHyperliquid: median 451 ms, p99 874 ms, p99.9 2,277 ms, slowest 7,282 ms.

Log scale. Lower is better.

Tail latency by endpoint: measured orders, median, 99th percentile, 99.9th percentile, slowest measured order, and the number of orders slower than 100, 250, 500 milliseconds.
EndpointOrdersp50p99p99.9SlowestOver 100 msOver 250 msOver 500 ms
Bullet (direct)4,2997.9 ms35.0 ms54.6 ms58.1 ms000
Lighter4,3199.9 ms62.0 ms269 ms721 ms2661
Bullet (via Cloudflare)4,27812.8 ms30.5 ms105 ms236 ms1300
Nado4,10415.9 ms4,499 ms6,732 ms8,428 ms1,2641,051873
Pacifica4,31918.3 ms40.8 ms58.2 ms69.0 ms000
Aster4,315101 ms147 ms189 ms219 ms2,22500
Hyperliquid3,714451 ms874 ms2,277 ms7,282 ms3,7143,7141,066

Quoting means cancelling: every time the price moves, the order resting at the old one has to go. Cancels carry the same tail as orders, so one cancel in a hundred takes at least your p99 to land. Until it lands, your stale quote is still resting where the fastest taker on the other side can lift it. That is latency arbitrage, and it is paid out of your PnL.

The length of each exposure is set by p99, not p50. The frequency is set by your quote rate. Per $1M quoted, one basis point of adverse selection is $100. At 100 orders a second you settle that bill once a second.

Window
72 hours to 2026-10-16 20:11 UTC · 29,348 orders · 7 endpoints
Timed
One interval per order: submit to account-feed confirmation. The cancel that follows is not in it, and neither is signing. No network-floor subtraction, no speed-bump adjustment.
Harness
One m8gd.2xlarge in ap-northeast-1d. One client, one clock, identical for every endpoint.
Orders
One order per measurement, one measurement a minute per endpoint, submitted singly and cancelled once it confirms. Post-only, so it rests or is rejected and never trades. Batch submissions are excluded.
Transport
One WebSocket per endpoint, held open across measurements. No order opens a connection, so no figure here includes a TCP or TLS handshake. What is timed is the venue and the round trip.
Endpoints
Bullet (direct) hits our trading API load balancer with nothing in front of it. Bullet (via Cloudflare) is the same engine behind Cloudflare, which is there to absorb abuse and charges latency and a good deal of jitter for it, so market makers take the direct path.
Volleys
A display grouping on the track. Orders do not arrive synchronised across venues.
Cancels
Measured separately by the same collector and not shown here: a long order tail means a long cancel tail.
Prior art
Inspired by Check the Chain's benchmark. Ours is written from scratch in Rust, so no garbage collector can pause the harness in the middle of a measurement.