Every matching engine bug is a financial bug. Price-time priority violations, race conditions, and phantom fills destroy trader trust in minutes.
A matching engine is the financial source of truth for your exchange. When an order enters the system, the engine must determine in microseconds whether it crosses, partially fills, or rests in the book — and it must do this atomically, in strict price-time priority, with no race conditions under concurrent load. The execution journal is the audit trail that proves every fill is correct. A matching engine that produces incorrect fills is not an engineering problem — it is a legal and financial problem. PROPELOO designs matching engines around correctness first: deterministic order processing, complete audit journaling, and correctness tests that run on every build before latency is ever measured.
Frequently Asked Questions
What throughput can a matching engine handle?
Throughput depends on order complexity and hardware. A Go-based single-threaded event loop on a modern CPU processes 50,000–150,000 simple limit orders per second. A Rust implementation can exceed 500,000 OPS. Real-world exchange throughput requirements are typically much lower — the question is sustained throughput under burst with bounded latency, not peak throughput under ideal conditions. We design for your expected peak, validate with load tests, and document the hardware requirements for that performance.
How do you handle the matching engine going down mid-trade?
Crash recovery is a first-class design requirement. The execution journal is append-only and written before acknowledgements are sent — on restart, the engine replays the journal to reconstruct in-memory state from the last snapshot. Snapshot frequency (every N trades or every T seconds) determines recovery time. We test crash recovery scenarios explicitly during development, not at deployment.
Do you build the matching engine as a standalone service or integrated into the exchange?
The matching engine is always a standalone service — it owns the order book state and exposes an API for order submission, cancellation and market data. Other exchange components (user API, wallet, admin) integrate with it via that API. This isolation allows independent deployment, scaling and testing of the matching engine.
Can you build a matching engine that supports derivatives (futures, perpetuals)?
Yes. Derivatives matching requires additional components beyond spot: mark price oracle (to prevent manipulation-based liquidations), funding rate calculation engine, liquidation engine (which submits forced market orders when margin drops below maintenance), cross-margin and isolated margin accounting, and index price aggregation. We have designed derivatives matching architecture and can build it.
Can we use your matching engine with our existing wallet and user system?
Yes. We design the matching engine with clear API boundaries — order submission, order status, trade feed, market data. Your existing wallet and user system integrates via those APIs. We will review your current architecture to identify the integration points and any data model changes required.
How do you test matching engine correctness?
Correctness testing covers: all order type combinations (limit vs limit, limit vs market, IOC, FOK, stop-limit), price-time priority invariants under concurrent load, partial fill accuracy, order book state consistency after every operation, self-trade prevention, and kill switch behaviour. We use property-based testing (generating random order sequences) to find edge cases that unit tests miss.