你可能听说过 ERC-4626 是 DeFi 的“存款金库标准”,但很少有人注意到它的 换汇率(Exchange Rate) 特性也可被用来放大风险。本文用通俗案例拆解 Yield-Bearing Vault 的运行逻辑、极低成本操纵换汇价 的攻击手法,以及 2025 年 Venus zkSync 的真实事故细节,并给出防御策略。
1. 年化 4626:Vault 是如何赚钱的?
在 ERC-4626 出现之前,每个收益协议都要写一套“如何分钱+如何清算”的定制逻辑,重复造轮子既烧钱又易出错。
4626 抽象出一条极简路径:
- 存资产 = 换「份额 token」(share)。
- 份额 token 的 红利率 跟随底层策略金库的资产余额同步增长。
- 赎回 = 把份数按当前换汇率折算成底层资产+全部利息。
因此,1 份额值多少 完全由 金库总资产 ÷ 总供应量 决定——这就是可被操纵的换汇率。
常被忽略的是:金库收益除了来自策略,也接受任何人 直接转币进合约,而这种“捐赠”行为不会铸造新份额。于是,金库总资产可以瞬增,而总份额不变——换汇率立刻被拉高。
2. “送 30 万、赚 30 万”的攻击细节
下图所示是典型的 EzMoney 场景(精确数字来自 Venus 实例):
| 步骤 | 金库资产 | 总份额 | 换汇率(资产/份额) |
|---|---|---|---|
| 初始 | 1,000,000 | 1,000,000 | 1.0 |
| 攻击者 捐 320,000 | 1,320,000 | 1,000,000 | 1.32 |
攻击者只花 260 USD 手续费 左右,就能把换汇率 第一时间抬高 32%。如果协议用它做抵押物定价,等于硬把借款人的 LTV 直接“魂穿”成爆仓线。
关键点:
- 攻击不可逆——再也回不去了;
- 其它用户套利赚不到差价——因为换汇率已被 ERC-4626 内部锁死,想赎回也得照 1.32 来。
于是,火被点燃,烧到谁全凭运气。
3. DeFi 真实代价:Venus 2025 zkSync 事故复盘
时间:2025 年 2 月 4 日
金额:≈ 86 WETH 利润,留下 countless 坏账
Phase 1 - 杠杆堆栈
攻击者用闪电贷拿到 2100 WETH,循环“借 wUSDM → 存回” 10 次,把抵押系数玩到天花板。
Phase 2 - 拉价
他铸造 303,000 枚 wUSDM,拿出 107,000 枚给“打款地址”,然后 捐赠 439,000 USDM 进金库——在短短几秒内把换汇率从 1.0 抬到 1.7。
Phase 3 - 花式清算
借用 自己账户 B 清算 自己账户 A。由于 A 的债务定价在 1.7 倍的新换汇率,立刻触发超额抵押清算,B 用 wUSDM 换来别人抢不到的 WETH 套利。
Phase 4 - 再借一笔
清理完 A,B 持仓已囊括 1498 清算所得 + 空放 526 抵押,协议还认为他富得流油——顺势再借 162 WETH,完美套现跑路。
整个过程,Venus zkSync 没有额外持仓者、无需链上套利者、价格再也掉不下 1.7。
4. AMM TWAP 为什么救不了你?
很多人乐观地想:“只要用长周期 TWAP 价格,就不怕快照拉高。”
但 ERC-4626 的升值是 永久定调——没人能“砸盘”跌回去;TWAP 只是在 30 分钟里平均这条直线上升曲线,最终结果仍是越来越贵。
攻击者可以预见到 TWAP 慢慢追上 1.7 X,于是事先做空,回收更多糖果—— double kill。
5. 防范方案:CAPO + Kill Switch
5.1 关联资产价格预言机 (CAPO)
- SNAPSHOT_TIME:首次记录换汇率的时间戳。
- MAX_YEARLY_GROWTH:设定 最高年化涨幅(如 8%)。
- 动态天花板:当前换汇率 >
SNAPSHOT_RATIO × (1+t/365 × MAX_YEARLY_GROWTH)时,直接截断。
这样就能把你的 ERC-4626 定价扔进 减速舱,即使有人捐 1,000,000 USDM,也只能影响一个“小时鳞次栉比”的增长量。
5.2 处置级「断闸器」(Kill Switch)
传统治理投票可能要等几天才能 暂停市场;攻击者只需要 30 秒。
快速断闸器可以与 CAPO 实时联动——换汇率 1 分钟飙 10% 直接封账户、封借贷、封清算,「情绪冷却 4 小时」后再重启。
多数用户甚至不会察觉,却有效防止系统性溃堤。
6. 常被问到的 6 个问题
Q1:我是不是只要看代码里没有 donate 函数就安全了?
A:ERC-4626 原生的 totalAssets() 包含所有底层余额,无论捐赠发生在哪一处,攻击仍有效。物理隔离没有用。
Q2:限流 100 USD/s 的涨幅可以吗?
A:如果你的金库规模大 但流动性极差(高 TVL 低交易量),一个 100 USD 的 limit 也可能被数以万计的交易秒杀。CAPO 的 年率封顶 往往比固定值更温和。
Q3:DeFi 原有 TWAP 可否提速到 1 分钟?
A:缩短平均窗口 = 秒级操纵也能 1:1 上链,反而更容易被买空。更好的组合是「CAPO + 高频 TWAP 交叉验证」。
Q4:ERC-4626 还有其他攻击面吗?
A:当然有,如「份额抢跑」「Inflation Attack」等用虚拟份额稀释早期用户,但这与本文讲解的换汇率操纵互不冲突,需要 联合防御。
Q5:我团队想做多链部署,zkSync 与主网相比风险差异如何?
A:低流动性是高风险放大器。相同情况下,跨链桥通道小、TVL 薄的链更易被小额砸盘操纵换汇率,谨慎评估。
Q6:有没有现成的开源库?
A:OpenZeppelin 4.9+ 已对 _decimalsOffset() 做防护;Chainlink、Pyth 亦开放 ERC-4626 适配的 CAPO 示例;但要针对业务逻辑微调,没有完全放之四海而皆准的方案。
7. 小结
ERC-4626 让开发者用 10 行代码就能拥有 带息存款,却也打开了一扇精准操纵定价的大门。
只要 换汇率可被外部打款瞬间拉高 这一特性没被正视,市场永远有人靠 捐赠背刺 赚快钱。
与其坏事发生后再治理票决,“CAPO 限速 + Kill Switch 断叉” 才是把黑天鹅关在笼子里的办法。