COBOL 在 Big 25
Source: Dev.to
💀 灵感:浮点数幽灵
在 Web3 和现代 SaaS 的世界里,我们已经忘记了古老的神祇。我们在 JavaScript 和 Python 上构建金融系统,这些语言依赖 IEEE 754 浮点算术。在标准的现代环境中,简单的加法就可能因为二进制近似误差而产生可怕的结果:
0.1 + 0.2 = 0.30000000000000004
在一次 10,000,000 美元的工资发放中,这些“微小分”会累计。在传统银行业,这会导致审计失败;在加密世界,交易是不可变的,这会导致不可逆的金融损失。
我们自问:“如果把死去的东西复活来拯救未来会怎样?”
⚡ 它是什么
DarkLedger(前称 Ledger‑De‑Main)是一种“弗兰肯斯坦”架构,它将最古老、最可靠的金融引擎(COBOL)与最新、最快的结算层(Base L2)缝合在一起。
- 核心工资逻辑运行在编译后的 COBOL 二进制文件中——同样的技术支撑着全球 95 % 的 ATM 刷卡——确保 100 % 的十进制精度。
- 一个 Python “神经系统”在区块链上执行付款。
🏗 我们是如何构建的(架构)
大脑:COBOL(遗留核心)
我们使用 Vibe Coding 生成了一个 GnuCOBOL 程序。该组件使用定点算术处理毛额到净额的逻辑。
对于以整数 (I) 存储、比例为 (10^2) 的货币值 (V):
[ V = \frac{I}{10^{2}} ]
这保证了税额计算的精确,例如:
[ \text{净工资} = (\text{工时} \times \text{时薪}) - \lfloor \text{毛额} \times 0.15 \rfloor - \lfloor \text{毛额} \times 0.05 \rfloor ]
缝合:Python 与 Agent Hooks
最大挑战是将现代基于 JSON 的前端连接到期待定宽文本文件的遗留二进制。我们使用 Kiro Agent Hooks 自动化了缝合过程。
Hook 行为:
每当保存 payroll.cbl 时,Kiro 解析 DATA DIVISION,提取字节位置(例如 PIC X(10)),并自动生成 Python struct 解析器。
接口规范
| 方向 | 字节数 | 字段 |
|---|---|---|
| 输入 | 23 字节 | 员工 ID、工时、时薪、税码 |
| 输出 | 60 字节 | ID、毛额、税额、净额、状态 |
双手:在 Base 上结算
一旦“脑部”验证了数学计算,“身体”(Python)使用 Coinbase CDP SDK 将净工资转换为 Base L2 网络上的 USDC 交易。
🧟♂️ 挑战与经验教训
挑战 1:语言壁垒
COBOL 不说 JSON,它说字节。
经验: 现代的易用性会让我们对数据类型变得懒散。我们构建了一个刚性的字节级合约(在 design.md 中定义),确保 Python 永远不会向主机发送格式错误的数据。
挑战 2:容器化怪物
在云端运行 COBOL 并非标准做法。
经验: 我们创建了一个自定义 Docker 容器,充当“时间机器”:它安装轻量 Linux 操作系统,拉取 GnuCOBOL 编译器依赖,在构建时编译遗留代码,然后启动一个 FastAPI 服务器监听请求。
挑战 3:“审计防护”
“差不多就行”对工资来说根本不够。通过在 COBOL 中强制使用银行家舍入 (COMPUTE ROUNDED),我们达到了标准 JavaScript 库在不引入大量依赖的情况下难以复制的精度水平。
🚀 使用方法
运行容器
docker build -t ledger-de-main .
执行工资发放
进入 Retro‑Terminal UI 并运行批处理命令:
RUN PAYROLL --BATCH 2025-10-31
系统将会:
- 生成定宽的
input.dat。 - 启动子进程运行
cobol/bin/payroll。 - 读取
output.rpt。 - 在 Base 上执行免 gas 的 USDC 转账。
📜 Kiro 实现细节
- 规格:
requirements.md定义了 23 字节的输入约束。 - 引导:
.kiro/steering/tech.md中的 “神圣时间线” 规则禁止将 COBOL 逻辑重构到 Python。 - Hooks: 自动化二进制编译和 Python 模型更新。
用 💚(以及 🧟♂️)为 Kiroween 2025 构建。