Infrastructure
Designing a Double-Entry Ledger for Financial Products
A practical guide to account models, balance derivation, holds and multi-currency support in a production ledger.
3 chapters · 18 min read · Updated June 27, 2026
What you'll learn
- Account and entry models that hold up under audit
- Deriving balances safely at scale
- Holds, reservations and pending states
- Multi-currency and multi-rail considerations
CHAPTER 01
Accounts and Entries
A ledger is a set of accounts and immutable entries. Everything a product shows a user is a projection of those entries.
- Entries are append-only and never edited.
- Corrections are new entries, not mutations.
- Every entry references the instruction that caused it.
CHAPTER 02
Balances
Balances should be derivable from entries, with materialised views used for performance rather than as the record of truth.
- Available, pending and reserved balances are distinct.
- Materialised balances must be reconstructable on demand.
- Concurrency control belongs at the account level.
CHAPTER 03
Multi-Currency
Multi-currency support added late is expensive. Model currency on the account and rate context on the entry from the beginning.
- No implicit currency conversion inside the ledger.
- FX handled as explicit paired entries.
- Rate and timestamp captured with each converted movement.