Caloogy 文章
English

闪电贷与价格操纵

日期
2026 年 1 月 14 日
系列
链上
阅读
3 分钟
主题
OnchainDefiFlash loanOracle

一句话版本

闪电贷允许任何人不抵押、借出上亿美元,条件是在同一笔交易里还清,还不上整笔交易就作废。它让"本金"这个门槛彻底消失:任何依赖"操纵需要大量资金"的安全假设都失效了。 最常见的攻击是:借一大笔钱 → 砸歪某个交易池的价格 → 某个 DeFi 协议拿这个池子的即时价格当预言机,按错误价格放贷或清算 → 攻击者获利 → 还款。防御的关键是:永远不要用可以在一个区块内被操纵的价格。

全文分三层:

  1. 通俗理解:一秒钟的亿万富翁
  2. 实际用处:bZx、Mango Markets、Euler 等事件
  3. 原理与工程要点:恒定乘积做市商的价格为什么好砸、TWAP、去中心化预言机

第一层:通俗理解

1.1 一秒钟的亿万富翁

想象一家银行规定:你可以借任意金额,只要在离开柜台之前还上,否则这笔借款就当从没发生过。

普通人拿这个没用。但如果你在柜台前的这一分钟里,能用这笔钱做一笔稳赚的套利,那就是无本万利。区块链上,"一笔交易"就是这个柜台:交易里的所有步骤要么全部成功,要么全部回滚。

1.2 价格是怎么被砸歪的

很多去中心化交易所(AMM)里,价格完全由池子里两种资产的比例决定。往池子里砸一大笔 A 资产,A 的价格就会暴跌。

如果某个借贷协议说:"我按这个池子的当前价格来计算你的抵押品值多少钱",那攻击者只要先把池子价格拉高,他的抵押品就"值"很多钱,可以借走远超实际价值的资产。


第二层:实际用处

事件 经过
bZx(2020 年 2 月) 早期的闪电贷攻击:借来资金,在流动性较薄的交易所操纵价格,利用借贷协议读取这个价格的漏洞获利。两次攻击相隔几天
Harvest Finance(2020) 反复操纵稳定币池的价格,在"存入—取出"之间赚取差价,损失约 3400 万美元
Mango Markets(2022) 攻击者用两个账户在流动性很薄的市场里大幅拉高 MNGO 代币价格,抬高自己账户的抵押价值,借走约 1.1 亿美元。之后还公开声称这是"高利润的交易策略",后来被美国检方起诉
Euler Finance(2023) 利用闪电贷和一个"捐赠"函数的逻辑缺陷,制造出可以被清算获利的坏账,损失约 2 亿美元;攻击者后来归还了绝大部分资金

共同点:闪电贷只是放大器,真正的漏洞是协议自身的逻辑缺陷,尤其是信任了一个可以被瞬间操纵的价格。


第三层:原理与工程要点

3.1 恒定乘积做市商

Uniswap V2 式的池子维持

x⋅y=k,x \cdot y = k,

xx、yy 是两种资产的数量,价格 =y/x= y / x。用 Δy\Delta y 买入 A,能得到

Δx=x−ky+Δy.\Delta x = x - \frac{k}{y + \Delta y}.

池子越小(kk 越小),同样的资金能把价格推得越远。

一个小池子能被推多远

池子里有 100 ETH 和 200,000 USDC,价格 2000 USDC/ETH。 投入 200,000 USDC 买 ETH:得到 100−2×107400,000=50100 - \dfrac{2\times 10^7}{400{,}000} = 50 ETH,池子剩 50 ETH 和 400,000 USDC,价格变成 8000,是原来的 4 倍。

闪电贷借 20 万美元几乎没有成本。如果某个协议此刻读这个池子的价格,攻击者手里的 ETH 抵押品就"值"了 4 倍。

3.2 防御:别用即时价格

方法 原理 局限
TWAP(时间加权平均价) 取过去一段时间(如 30 分钟)的平均价格。闪电贷只能影响一个区块,平均下来几乎无影响 价格反应慢;长时间、高成本的操纵仍可能有效
去中心化预言机(如 Chainlink) 多个独立节点从多个交易所取价格,聚合后上链(见《多源交叉验证》) 有更新延迟;依赖预言机网络本身的安全
多预言机 + 偏差检查 两个来源偏差过大就暂停(见《Fail-closed》) 增加复杂度
限制低流动性资产 流动性差的代币不作为抵押品,或设很低的抵押率 限制了业务

3.3 测试方法

3.4 一个反直觉的结论

闪电贷本身不是漏洞,它甚至有正当用途(套利、清算、无需本金的债务再融资)。它的意义在于揭示了漏洞:任何"只要你没有足够多的钱就做不了"的安全假设,在 DeFi 里都不成立。


总结

层次 要点
闪电贷 无抵押借款,同一笔交易内还清;本金门槛消失
攻击模式 借钱 → 砸价格 → 协议按错误价格操作 → 获利 → 还款
根因 协议信任了一个区块内可被操纵的即时价格
防御 TWAP、去中心化预言机、偏差检查、分叉主网测试