返回

文章详情

金融科技工程手册

Hacker News2026年6月27日 10:28

欢迎来到金融科技工程手册。本资源旨在描述软件工程中使用的最重要模式,其中资金是系统的主要关注点。可以整本阅读以获得全面理解,或在处理特定问题时选择部分阅读。适用人群:刚加入金融科技的人。为了熟悉该领域及使资金系统值得信赖的模式。已经在金融科技领域的人。作为在面对特定问题时的参考,和指向同事的共享词汇。金融科技外的人。为了了解为钱构建系统的方法与他们所习惯的有何不同,以及原因。旨在作为一个活文档,欢迎贡献。原则:您在下面阅读的所有内容都是遵循三个原则的方式:无虚构数据。资金不能凭空创造,因此我们不能容忍重复或任意的余额更新。我们通过幂等性、去重和调解来执行这个原则。无丢失数据。所有与资金相关的行动必须被追踪和持久化。我们通过全精度、至少一次交付、事件溯源、审计跟踪和不可变性来保护这一点。无信任。对外部提供者、内部组件或世界都不信任。我们通过验证Webhook、跨源数据交叉检查,以及对于破裂假设大声失败来维护这一点。表示资金:在您能移动或记录资金之前,您必须先表示它。这是关于如何建模、存储、计算和转换货币价值的决策。错误的决定会导致上层继承错误。精度处理:资金表示是金融系统中最基本的决策之一。有四种主要方式:浮点。内建的浮点或双精度类型。这可能会产生不可预测的精度损失,几乎从来都不是一个好主意。但它是最快和最节省内存的,不需要额外的库或数据结构。任意精度。像Java的BigDecimal这样的类型可以让您精确控制计算的精度。代码是可预测的,我们可以决定四舍五入何时以及如何发生。它适合中间工作,如外汇或定价数学,其中许多操作是链式的。小单位精度。对于大多数法定货币,仅保持固定精度是可以的,这与连接的中央银行系统中使用的精度相同。数字的位数由ISO 4217描述(不要假设它总是2位,它并非如此!)。在实践中,这意味着将金额存储为其最小单位的整数—€12.34变为1234。加密货币使用相同的整数-最小单位的思想(BTC的satoshi,ETH的wei),但有两个变化:精度为每种资产定义,并由代币本身决定(例如ERC-20的decimals),通常为18位数字,并且结果的幅度会溢出64位整数,因此您需要任意宽度的整数来容纳它们。理性数。当没有精度损失可以接受时。这是最强大的方法,但有自己的一些警告。首先,它比其他选择慢。其次,它不能在不丧失精度的情况下转换为其他格式。第三,通常需要自定义数据类型或库。选择一个或另一个取决于系统的类别及其职责。这里没有经验法则,除了不使用浮点数。这些表示法也不是相互排斥的—如何存储金额和如何进行计算是独立的决策,系统通常会结合它们,例如整数存储与BigDecimal进行中间计算。序列化金额时也需要同样的谨慎。大多数解析器中的原始JSON数字在IEEE-754双精度浮点数中,因此将资金序列化为数字会在边缘重新引入浮点问题,无论您在内部代表它时有多小心。将资金发送为字符串("12.34")或作为其最小单位的整数。所涉及的原则:无丢失数据。错误的表示法默默丢失不能恢复的精度。四舍五入策略:四舍五入是不可避免的。它应明确进行:任何除法、货币转换、费用、利息或利率应用,或在精度之间移动都可能需要四舍五入。这是一个商业决策。不同的四舍五入策略有不同的影响。有时您必须保持保守(例如,不花费没有的资金)并向下取整;有时您关心统计效应并使用四舍六入法。决定谁获得分数可能会有法律/税务影响。尽量减少四舍五入的频率。您保持完全精度的时间越长,您在正确上下文中做出正确决策的选项就越多。四舍五入通常应该发生在边界,例如在数字被持久化或显示给用户之前。四舍五入会打破总和。如果一个数字被拆分成部分并应用了四舍五入,部分的总和可能不再等于原始数字。根据上下文,这可能需要明确的...

赞助内容

NordVPN Next-gen Antivirus

本站免费、广告极少。如果觉得有帮助,可以请我们喝杯咖啡 —— 任何金额都对持续运营有实际帮助。

请我喝杯咖啡