Double-Entry Core Ledger
Append-only double-entry ledger that guarantees financial data integrity and handles contention on hot accounts with pessimistic locking.
Two simulated banking infrastructure systems in Java/Spring: a double-entry Core Banking ledger and an ISO 20022 Interbank Payment Gateway
These are two simulated core banking systems built with Java/Spring Boot, following a 3–6 month roadmap. Each one focuses on a different class of engineering problems:
pain.001, pacs.008) and batch end-of-day settlement.Core Banking System has completed Phase 1 (45/45 tests passing on both PostgreSQL and Oracle, overdraft protection verified across 3 Kubernetes Pods). Payment Gateway is the next phase. Detailed progress: Project status and Devlog.
Sub-project A: Interbank Payment Gateway
pain.001 / pacs.008Calls Core Banking over internal REST with an Idempotency-Key header:
Sub-project B: Core Banking System
Transaction aggregate root — append-only double-entry ledger, guarantees Debit = CreditSELECT ... FOR UPDATE), verified across 3 K8s PodsThe Payment Gateway calls into Core Banking to update real balances (integration happens in Phase 3).
| Criterion | Sub-project B: Core Banking System | Sub-project A: Payment Gateway |
|---|---|---|
| Core business | Account management, double-entry bookkeeping | Interbank transfers, ISO 20022 messages |
| Hardest problem | Race conditions & data integrity | Distributed state & failure handling (Saga) |
| Consistency model | Strong consistency (ACID + DB locks) | Eventual consistency (Saga Orchestration) |
| Batch processing | — | EOD settlement with Spring Batch (chunk-oriented) |
| Security | Spring Security (Phase 3) | Spring Security (Phase 3) |