openport 0.3.0
openport 0.3.0
Built from ba2fa77.
Install
- Docker (amd64 and arm64):
docker run --rm -p 127.0.0.1:8080:8080 -v openport:/var/lib/openport ghcr.io/38st/openport:0.3.0, then open the link it prints, which carries its write token; ordocker build -t openport .from this tag. - Linux archives (amd64 and arm64): need OpenSSL 3, zlib and zstd (
apt install libssl3t64 zlib1g libzstd1on Ubuntu 24.04). Unpack one and runbin/openportd. - macOS archive (Apple silicon): needs nothing installed. Unpack it with
tar -xzfand runbin/openportd. Unpacked in Finder, macOS may refuse to run it as from an unidentified developer;xattr -dr com.apple.quarantineon the folder allows it.
Then open http://127.0.0.1:8080. openportd --help lists every option. SHA256SUMS covers every archive.
What's new since 0.2.1
Faster, however long the account's history
- Quote handling no longer grows with the history. After 10,000 fills, a quote batch took 10.1 ms of CPU in 0.2.1; it now takes about 8 µs, and one holding a position under 25 µs instead of 26.6 ms. A submit went from 33 ms to about 45 µs. A transaction's copy of the account and each published snapshot now share the history in persistent trees. The risk checks read positions and working orders instead of building whole snapshots, trade reviews update as fills arrive, and a journal record's change is found field by field. The journal format is unchanged, and journals from older builds recover to the same state.
- Submits stay flat past 100,000 fills. A write copies a tree path instead of a list of every chunk: after 100,000 fills a submit took about 95 µs against 250 µs with flat lists.
- Calendar lookups are cached per thread under the published holiday schedule. A session lookup takes about 135 ns instead of 10 µs, and every answer is the same.
- Replay journals sync to disk in batches, every 250 ms and at pause, stop and finish. A replay writing 906 records took 2.6 s instead of 11.8 s. Live accounts still sync every record before a transaction is published. A power cut during a replay can lose its last quarter second.
Fixed
- An announced closure without a name now closes the market. It used to count as a business day with a regular session.
Checks
OPENPORT_VERIFY_REVIEWS=1andOPENPORT_VERIFY_JOURNAL=1make the simulator check its reviews and journal changes against full rebuilds on every transaction. CI runs the whole suite with both.
Measured on an Apple M2 Max, as described in docs/architecture.md.