一、闪电贷基础:什么是闪电贷、工作原理与典型应用场景
1.1 什么是闪电贷?
闪电贷,说白了就是「借了马上还」的贷款。
传统贷款你得抵押资产、填表格、等审批。闪电贷不一样——它要求你在同一笔交易里完成「借→用→还」三个动作。只要还不上,整笔交易就回滚,就像什么都没发生过。
我刚开始接触这个概念时,也觉得挺反直觉的。借钱不用抵押?那岂不是随便借?后来才明白,它的安全机制不在链下,而在链上——靠的是以太坊交易的原子性。
1.2 闪电贷的工作原理
理解闪电贷,你只需要记住一个词:原子性。
什么意思呢?就是一笔交易要么全部执行成功,要么全部失败回滚。没有「借了一半被打断」这种中间状态。
具体流程是这样的:
- 借款请求:你调用闪电贷合约,说要借 1000 ETH。
- 资金划转:合约把 1000 ETH 转给你(或你的合约)。
- 执行操作:你用这笔钱做套利、清算或其他事情。
- 还款检查:操作完成后,合约检查你是否还回了 1000 ETH + 手续费。
- 成功或回滚:还上了,交易确认。没还上,整笔交易回滚,资金原路返回。
嗯,这里要注意:闪电贷的「还款」不是主动转账,而是合约在回调函数结束后自动检查余额。如果余额不够,交易直接 revert。
我曾经在审计一个项目时,发现他们把还款检查写在了回调函数之前。你想想看,钱还没还呢就先检查余额,那肯定永远通不过。这种低级错误其实挺常见的。
下面这张图可以帮你快速理解整个流程:
1.3 典型应用场景
闪电贷不是用来买咖啡的。它的真正价值在下面三个场景里体现得最充分。
场景一:套利
这是最常见的用法。不同 DEX 之间同一资产的价格经常有差异。比如 Uniswap 上 ETH 卖 2000 USDC,Sushiswap 上卖 2010 USDC。你借一笔闪电贷,在低价平台买入,高价平台卖出,差价就是利润。
我记得有个项目方找我审计时,信誓旦旦说他们的套利机器人「稳赚不赔」。结果我一看代码——滑点设置写死了 0.1%,但实际交易滑点经常超过 0.5%。说白了,赚的钱全喂给滑点了。
场景二:清算
在借贷协议里,当借款人的抵押率低于阈值时,任何人都可以触发清算。清算人偿还部分债务,获得抵押品(通常有折扣)。
但清算需要你先有资金去还债。闪电贷完美解决了这个问题——你借一笔钱去还债,拿到抵押品后卖掉,还掉闪电贷,剩下的就是利润。
我审计过一个清算合约,发现清算人拿到的抵押品价格是按预言机快照算的。但问题是,预言机快照可能已经过时了。如果市场剧烈波动,清算人可能反而亏钱。嗯,这种细节很容易被忽略。
场景三:抵押品交换
这个场景稍微进阶一点。假设你在 MakerDAO 里抵押了 ETH,借出了 DAI。现在你想把抵押品换成 WBTC,但不想还清债务重新抵押。
闪电贷可以帮你做到:借一笔 DAI 还掉债务,取出 ETH,换成 WBTC,重新抵押进去,再借出 DAI 还掉闪电贷。整个过程在一笔交易里完成,你的债务头寸保持不变,但抵押品从 ETH 变成了 WBTC。
| 应用场景 | 核心逻辑 | 常见风险点 |
|---|---|---|
| 套利 | 利用价差低买高卖 | 滑点设置、gas 成本、三明治攻击 |
| 清算 | 偿还债务获取折扣抵押品 | 预言机价格滞后、竞争清算 |
| 抵押品交换 | 不还债的情况下更换抵押品 | 多步操作中的重入风险 |
好了,闪电贷的基础就讲到这里。记住三个关键词:原子性、无抵押、单笔交易。后面的章节我们会深入每个场景的具体实现和攻击手法。