How the archive works
Two small, dependency-free simulations that back the claims in the whitepaper. Both are plain Python 3 with no third-party packages, deterministic for a given seed, and re-run weekly by CI. Their output is rendered at /research.
We publish the measurements whether or not they flatter us.
replay.py: book vs pool under identical demand
Sends the same stream of buy and sell intents, with the same capital, through two venues:
- an OpenBell book: bids rest in USDC, asks rest in shares, and both cross
pro-rata at the reference print plus a 25 bps premium. An order stays active across rounds until its remainder is dust.
- a constant-product pool (
x·y=k) seeded with the same capital and
arbitraged back to every print.
Demand is a Poisson arrival process (twelve intents an hour, lognormal size with a ~$2,000 median) over a GBM reference path with an overnight gap at each open.
`` python3 research/replay.py --days 5 --seed 7 --capital 250000 ``
Reports fills, median cost in basis points against the reference price at arrival, median wait, and how much flow is still resting at the end. The honest result is a trade: the book is cheaper, the pool is immediate.
stale_dealer.py: what a fill-now vault loses on an old print
Reads CSV price histories (t,price). For every gap in the feed longer than 60 seconds it simulates fill-now arrivals, 70% of them informed, leaning toward where the price actually went, against a dealer still quoting the last print, and scores three policies:
| Policy | Rule |
|---|---|
| A | quote at any age |
| B | refuse prints older than --max-age (default 120 s) |
| C | widen the spread by +25 bps per stale hour |
`` python3 research/make_data.py # writes research/data/*.csv python3 research/stale_dealer.py research/data/*.csv ``
Policy B is what the program enforces on-chain (instant_max_age_secs), together with a per-trade cap of 20% of vault inventory.
Data
make_data.py generates three synthetic five-minute histories over two weeks with 60-hour weekend gaps, one carrying a 15% Monday opening gap. The generated CSVs are committed so results are reproducible without regenerating them.
Results
.github/workflows/research.yml runs both scripts and commits research/results/replay.json and research/results/stale_dealer.json.
Prior work
OpenBell descends from MOO, Market On Open: Standing liquidity at the next reference price, Zenodo 2026, doi:10.5281/zenodo.22730358, CC-BY 4.0. That report notes an execution advantage over pools has not been established; this archive is our attempt to measure one honestly.
Prior work: Market On Open: Standing liquidity at the next reference price, Zenodo 2026, doi:10.5281/zenodo.22730358, CC-BY 4.0.