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.

Ready to build it?

Bring your architecture to the team that runs this infrastructure in production.