Tulip is a distributed transaction system with mechanized proofs of correctness.
Warning
This project is still a work in progress.
Tulip exposes a strong (i.e., strict serializability) and simple transactional key-value store interface to users. It supports the following features:
- Multi-version concurrency control (MVCC)
- Cross-partition consistency via two-phase commit (2PC)
- Fault tolerance with Paxos-based replication
- Single network-roundtrip 2PC latency with inconsistent replication (IR)
- Transaction coordinator recovery
Tulip's proofs are formalized with the Perennial framework, which is built on the Iris separation logic framework and mechanized in the Rocq theorem prover.
Low-level packages:
params: just constantsutil: low-level utilities (especially encoding/decoding)tulip: basic definitions for interface (TODO: move internal defs out)tuple: a single tuple of the database, with MVCC historyquorum: pure integer quorum computationsmessage: structs for txn requests/responses (and serialization)index: key to tuple indexing data structure (safe for concurrent access)
Intermediate packages:
paxos: struct implementing the MultiPaxos algorithmtxnlog: wraps paxos with encoding/decoding of txn commandsbackup: backup transaction and group coordinatorgcoord: group coordinator for replicas involved in a transaction
Top-level packages:
replica: top-level struct for one replica of the databasetxn: library for clients to submit transactions