B. Digital wallet¶
Тип материала — инженерный walkthrough. HYPOTHETICAL — все операции, схемы и учебные числа.
Компоненты и границы¶
flowchart LR
A["Wallet API"] --> B["Spend guard"] --> C["Ledger and hold store"] --> D["Balance projection"]
Нормальная последовательность¶
Booked 100, hold 60, available 40. Два запроса по 30 сериализуются на позиции. Первый резервирует 30, второй видит 10 и получает отказ. Capture переносит 30 из hold в posted debit одной транзакцией.
sequenceDiagram
participant A as Wallet API
participant B as Spend guard
participant C as Ledger and hold store
participant D as Balance projection
A->>B: Supply stable input
B->>C: Reserve against locked available
C-->>B: Return recorded evidence
B->>D: Advance downstream work
Отказ и восстановление¶
После ledger commit UI потерял event. Booked стал 70, остаток holds 60, available 10. Устаревший UI не участвует в spend. Выстроить shadow view по snapshot frontier, применить хвост, сравнить поколения.
sequenceDiagram
participant B as Spend guard
participant C as Ledger and hold store
participant R as Recovery owner
B->>C: Begin operation
Note over B,C: Projection misses committed debit
R->>C: Rebuild from ledger and holds
C-->>R: Record verified outcome
Контроль завершения¶
Проверить account-level recomputation и суммы по валютам. Row locking требует реального multi-session PostgreSQL теста для проверки выбранного interleaving.
Интеграционный прогон сценария имеет статус NOT_RUN. Локальные результаты приведены отдельно. Практические примеры