obcore
A single threaded, zero dependency price-time priority orderbook implementation in Rust.
design
The orderbook separates state evaluation from state mutation:
eval: evaluates operations against current state, returns matches and instructions without modifying the bookapply: takes instructions from eval and commits them to the book
benchmark
Run with: cargo bench --features bench
| Operation | Benchmark | Eval | Apply | Total |
|---|---|---|---|---|
| Insert | Empty book | 6.0 ns | 38.9 ns | 45 ns (22 M/s) |
| Insert | Depth 100 | 9.8 ns | 30.9 ns | 41 ns (24 M/s) |
| Insert | Depth 1000 | 15.9 ns | 41.6 ns | 58 ns (17 M/s) |
| Cancel | Single | 5.9 ns | 15.0 ns | 21 ns (48 M/s) |
| Cancel | Depth 100 | 9.4 ns | 32.3 ns | 42 ns (24 M/s) |
| Cancel | Depth 1000 | 17.3 ns | 25.2 ns | 43 ns (23 M/s) |
| Match | 1 level | 16.9 ns | 15.8 ns | 33 ns (30 M/s) |
| Match | 5 levels | 54.2 ns | 116 ns | 170 ns (5.9 M/s) |
| Match | 10 levels | 107 ns | 257 ns | 364 ns (2.7 M/s) |
Total = Eval + Apply. Throughput in millions of ops/sec.
usage
Implement the OrderInterface trait for your order type:
use ;
let mut ob = default;
let mut eval = default;
// Evaluate without mutating the book
let instructions = eval.eval;
// Apply instructions to commit state changes
for instr in instructions
license
Apache-2.0 or MIT