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