Machine Economy Simulator
给你一个 1000 用户、100 个 Agent 的经济体。你定九条规则,系统制造九类危机,看它撑不撑得住。
这是毕业项目里最高级那一项「Create a Machine Economy」的可玩版本。
设定和毕业项目一样:1000 个用户、100 个 Agent、一种结算稳定币、一条链、一个市场。你要为九个领域各定一条规则,然后系统会随机触发九类危机中的五类。
你不是在猜未来,你是在看自己的规则怎样失效。
先说清楚它是什么
这是一个规则模型,不是预测模型。
它不声称能预测真实世界的机器经济会怎么演化——没有人能。它只保证一件事:
同一套规则加同一个种子,永远得到同一个结果。
所以每一笔损失都能被追溯到某一条具体的规则。这正是它的教学价值所在:你不是在赌博,你是在做受控实验——只改一条规则,再跑一遍,看差别。
模型里每个数字都是我们定的,不是测出来的。你应该质疑这些数字,但更应该关注的是结构:哪条规则挡住了哪类事件,以及每条规则的代价是什么。
九条规则没有一条是免费的
这是整个模拟器最想传达的一点。每个选项都同时写着「它带来什么」和「它的代价」。
全选最安全的那一档,你会活下来,但成交量低得可怜、用户增长几乎停滞。全选最激进的那一档,前几拍数字很漂亮,然后一次事件就能让国库见底。
没有一套配置能在所有维度上最优。 这和毕业项目里「每修改一次制度都要回答六个追问」是同一件事。
开始
默认配置是一套「什么都不设防、只追增长」的选择——无准入、热钱包、先服务后付、不做声誉、不抽成、发币补贴、没有熔断。先直接跑一遍看它怎么死,再逐条改。
注意:崩盘之后模拟就停了,所以「崩盘时的缺口」和「累计损失」都只统计到这一拍为止。一套撑得更久的规则,缺口可能反而更深——因为它一边流血一边多活了几拍。跨配置比较时,先看「撑了几拍」。
- 完成任务 1,080,协议收入 0 美元
- 补贴支出 18,000 美元
- 完成任务 1,123,协议收入 0 美元
- 补贴支出 18,720 美元
- 完成任务 1,166,协议收入 0 美元
- 补贴支出 19,440 美元
- 事件:监管变化——主要市场要求所有参与方完成身份核验,否则关闭出入金通道。
- 用户流失 361:无法完成身份核验,出入金通道被关闭
- 损失 44,384 美元:紧急补建合规流程
- 完成任务 1,210,协议收入 0 美元
- 补贴支出 20,160 美元
- 完成任务 1,253,协议收入 0 美元
- 补贴支出 20,880 美元
- 完成任务 1,307,协议收入 0 美元
- 补贴支出 21,780 美元
- 完成任务 1,361,协议收入 0 美元
- 补贴支出 22,680 美元
- 事件:流动性危机——大量 Agent 同时想把收入换成稳定币退出,市场深度撑不住。
- 损失 18,837 美元:竞价市场瞬间无人接盘,成交价崩塌
- 损失 15,698 美元:国库没有收入来源,只能动用本金救市
- 完成任务 1,415,协议收入 0 美元
- 补贴支出 23,580 美元
- 完成任务 1,469,协议收入 0 美元
- 补贴支出 24,480 美元
- 完成任务 1,523,协议收入 0 美元
- 补贴支出 25,380 美元
- 完成任务 1,588,协议收入 0 美元
- 补贴支出 26,460 美元
- 事件:预言机失效——价格源停止更新,定价与结算全部基于过期数据。
- 损失 32,314 美元:没有熔断,系统拿过期价格一直结算到被发现为止
- 完成任务 1,652,协议收入 0 美元
- 补贴支出 27,540 美元
- 完成任务 1,717,协议收入 0 美元
- 补贴支出 28,620 美元
- 完成任务 1,782,协议收入 0 美元
- 补贴支出 29,700 美元
- 完成任务 1,858,协议收入 0 美元
- 补贴支出 30,960 美元
- 完成任务 1,933,协议收入 0 美元
- 补贴支出 32,220 美元
- 国库见底,经济体停止运转。
九类事件各自在考什么
每一类事件都在考特定的几条规则。事件本身不可控,但你的规则决定了它造成多大伤害。
| 事件 | 发生了什么 | 它在考哪几条规则 | 回去读 |
|---|---|---|---|
| 流动性危机 | 大量 Agent 同时想把收入换成稳定币退出,市场深度撑不住。 | Market、Protocol Fee | 第 15 章 |
| 预言机失效 | 价格源停止更新,定价与结算全部基于过期数据。 | Market、Security | T21 |
| Agent 攻击 | 有人批量注册 Agent,用虚假任务互相刷量骗取补贴。 | Agent Identity、Reputation、Token | T29 |
| 稳定币脱锚 | 结算用的稳定币跌到 0.93,所有以它计价的余额缩水。 | Payment、Security | 第 13 章 |
| Token 崩盘 | 协议代币在一周内跌掉 70%。 | Token、Protocol Fee | 第 21 章 |
| AI 幻觉 | 大批 Agent 基于一条编造的信息给出了错误结果,用户要求赔付。 | Reputation、Payment、Security | 第 31 章 |
| 模型失效 | 底层模型服务中断六小时,Agent 全部无法完成任务。 | Reputation、Payment | T35 |
| 钱包被盗 | 一批 Agent 的签名密钥泄露,攻击者开始转走余额。 | Wallet、Security | T34 |
| 监管变化 | 主要市场要求所有参与方完成身份核验,否则关闭出入金通道。 | Agent Identity、Governance | 第 24 章 |
怎么用它
先跑默认配置,读完整个日志。
不要急着改。看清楚它是怎么死的:哪一拍开始入不敷出、哪个事件给了最后一击、每一笔损失后面写的是哪条规则。
一次只改一条规则,种子不要动。
这是控制变量。把钱包从「单一主钱包」改成「会话密钥加额度」,其余不变,重跑——你会看到钱包被盗那一拍的损失掉了一个量级。
改了两条以上再跑,你就分不清是哪条起了作用。
换种子,用同一套规则再跑三次。
不同种子会触发不同的事件组合。一套规则只在一个种子下活下来,不叫稳健,叫运气好。
找出你这套配置最怕的那一类事件。
每套配置都有软肋。找到它,然后问自己:是补上这个洞,还是接受它并写进「我明确不防什么」?
后者是完全正当的答案,前提是你写下来了。这一点在 T30 讲威胁模型时说过。
几个值得自己验证的结论
下面这些是模型里确实成立的关系。别信我说的,自己跑一遍。
把 Token 设成「发 Token 并补贴」,前几拍的任务量和 Agent 增长明显更快。
然后看两件事:每拍的补贴支出怎样吃掉国库;以及触发「Agent 攻击」或「Token 崩盘」时,补贴怎样把伤害放大——零成本注册加补贴,等于给刷量工作室开了提款机。
对照第 17 章(收益从哪来)和第 28 章(空投停掉之后用户还在吗)。
保持其他规则不变,只改钱包这一条,找一个会触发「钱包被盗」的种子:
单一主钱包的损失是国库的 30%,会话密钥是 6%,多签几乎为零。
代价也在那里:多签会把成交量压掉四分之一。这就是 T34 里「会话密钥限制爆炸半径」那句话的数值版。
把手续费设成「不抽成」,国库只出不进,日常就在失血。
这时候任何一个事件都可能是最后一击——不是因为那个事件特别狠,而是因为你没有任何缓冲。
对照第 26 章:TVL 很高不等于协议赚到钱。
把安全设成「没有熔断」,预言机失效和稳定币脱锚的损失都会明显变大——因为系统会一直按错误数据跑到有人发现为止。
设成「限额加人工审批」几乎挡住一切,但成交量掉三成。
这个取舍没有标准答案,取决于你的经济体承受得起哪一种。
在默认配置上只加熔断、再加 5% 手续费,你会看到一个反直觉的结果:国库数字变得更负了(大约从 -2,000 变成 -38,000)。
第一反应是「加手续费反而更糟」。不是。看「撑了几拍」那一格:
默认 16 拍崩盘 缺口 -1,833 损失 111,233
加熔断 17 拍崩盘 缺口 -2,129 损失 78,049
加熔断 + 5% 手续费 18 拍崩盘 缺口 -38,005 损失 67,547
再把补贴关掉 撑满 24 拍 国库 +336,277 损失 165,435加手续费其实多撑了两拍。缺口更深,只是因为它一边流血一边多活了两拍——补贴每拍都在抽走钱,活得越久抽得越多。
真正的结论是:手续费救不了一个在补贴上流血的协议。 只有把补贴关掉,这套配置才真正活下来。
还要注意最后一行:撑满 24 拍的那套配置,累计损失反而是最高的——因为它活到了全部五个事件。早早崩盘的配置损失数字小,只是因为它没活到后面。
这个陷阱本身就是一课:选错了衡量指标,你会把「活得更久」读成「表现更差」。 第 26 章讲的 TVL 与 Revenue 之辨,是同一类错误。
Token 选「不发」,增长慢,任务量低,数字一点都不好看。
但「Token 崩盘」这个事件对它几乎无影响,「Agent 攻击」也失去了最大的诱因。
这正是第 30 章那个问题的数值版:什么时候根本不需要 Token?
它和毕业项目的关系
模拟器只覆盖了毕业项目的一部分——它替你执行规则,但不替你设计规则。
毕业项目要求的更多:你要自己定义事件的影响路径、自己论证每次修改的理由、自己回答「谁获益、谁承担成本、在什么条件下有效」。模拟器给你的是一个可以反复试错的沙盒,让你在写设计说明之前先摔几次。
完整要求见毕业项目最后一节。
引擎在哪
模拟逻辑全部在 packages/curriculum/src/simulator.ts,有 12 条单测覆盖,包括确定性、事件排期、以及「防御型配置的损失一定小于激进型配置」这类因果断言。
界面组件里不含任何模拟逻辑——一旦逻辑散进组件,「为什么亏了」就没法被测住了。这本身也是 T32 那条原则的应用:做判断的那部分必须是确定性的、可测试的。