工程问题
财务完整性不能依赖每个调用方都牢记所有规则。重复请求、并发提现及直接数据库操作都可能破坏单次正常流程中的假设。
Ledger 是独立项目,包含 TypeScript/Fastify API、PostgreSQL 和 React 仪表盘。关键不变量由数据库强制执行。
原子分录
API 验证分录,用内容指纹领取幂等键,按确定顺序锁定账户,计算余额并在同一事务写入条目。延迟触发器在提交时再次验证借贷平衡和币种一致。
成功请求的重放返回原始交易。同键不同内容产生冲突。失败事务连同幂等键领取一起回滚,允许修正问题后重试。
金额、并发与历史
金额以最小货币单位的整数存储,API 使用字符串保持精度。账户锁串行化冲突写入。历史禁止修改或删除,纠正通过关联冲销完成。试算平衡报告从条目重算余额并暴露偏差。
仓库中的测试使用真实 PostgreSQL 验证不变量、重复请求和并发。仅模拟应用层无法证明数据库约束及锁行为。
保证与局限
悲观锁简化冲突,但会串行化热点账户更新。同时存储余额和历史优化读取,也带来对账责任。认证、多租户隔离和事务 outbox 属于路线图。下方演示为本地模型,实际保证由服务和数据库实现。