b biangogo.com
~ / biangogo.com / shan-dian-dai-gong-ji-shi-zhan-jiao-chen

闪电贷攻击实战教程:用 Foundry 在本地复现一次完整攻击

published: 2026-05-24T06:12:23.099780+00:00 updated: 2026-05-24T17:37:41.066096+00:00
闪电贷攻击实战教程 - 闪电贷攻击实战教程:用 Foundry 在本地复现一次完整攻击

实验目标与前置准备

本教程的目标是用 Foundry 在本地完整复现一次基于单源预言机操纵的闪电贷攻击。完成后你不仅能掌握攻击代码骨架,更重要的是理解链上事务的执行顺序与资金流向。

开始之前请确认本地已安装 Foundry、获取一个稳定的归档节点 RPC(推荐 Alchemy 或自建 Erigon),并准备一份近似 50G 的硬盘空间用于缓存状态。如果你正在 Binance 等中心化平台同时做相关研究,建议把研究地址与日常交易地址严格隔离,避免本地 fork 状态被真实操作污染。

项目结构设计

推荐建立如下目录:

这种分层结构便于将攻击逻辑、协议接口与测试用例分离,未来扩展时维护成本最低。

编写攻击合约骨架

合约需实现 IFlashLoanReceiver 接口,在 executeOperation 回调内完成「价格扰动 → 借贷 → 清算 → 归还」四步动作。注意每一步都要使用 SafeERC20 转账,避免某些不规范的代币因返回值不一致而中断攻击。

在调试阶段强烈建议把每一步的链上变量打印到 console,用 Foundry 的 console2 工具配合 forge test -vvv,能清晰看到每次外部调用的入参与返回。这种「白盒可观察性」是攻击合约能否上线的关键。如果你打算在 必安 等场所进行场外对冲,也需要在脚本里预留出资金提取分支。

编排事务与计算收益

攻击事务通常长这样:先从 Aave 借入 10000 ETH 等价资产,在 Uniswap 池里把价格推到极值,再到目标借贷协议触发清算获得抵押折扣,最后还回贷款。这一切必须在同一笔交易内完成。

收益计算公式为:(清算获得的抵押 USD - 闪贷手续费 USD - gas USD)。手续费通常 0.05% 到 0.09%,gas 在主网约 0.05 ETH 到 0.2 ETH。把所有数值代入后,若结果为正才值得真实上链。

调试与失败排查

常见失败原因有三:

  1. revert with reason「INSUFFICIENT_OUTPUT_AMOUNT」,意味着滑点估算错误
  2. revert with reason「TRANSFER_FROM_FAILED」,多半是 approve 不足或 USDT 这类无返回值代币兼容问题
  3. 利润为负但交易成功,意味着模拟时未把 gas 与手续费扣除

逐项排查后基本可以让攻击稳定收益。完成全部步骤后,强烈建议把脚本与报告写成可分享的 Markdown 公开发布,这是积累技术影响力最快的方式。再去研究 Binance合约 等专业平台的清算引擎,你会发现去中心化与中心化的清算逻辑差异不再难以理解。

结语

这套教程的真正价值并非「教你赚钱」,而是把闪电贷攻击的每一个抽象概念落在可观察、可调试的代码中。完成一次完整复现后,你的合约审计能力会出现明显跃迁。