# 闪电贷相关知识

By [想住大房子的java程序员](https://paragraph.com/@java-3) · 2022-10-13

---

### 提供闪电贷的资金哪里来

来自于 DeFi 项目

*   Decentralized Exchanges 去中心化交易所: Uniswap, Sushiswap, etc.
    
*   Lending Protocols 借贷协议: Aave, Compound, etc.
    
*   Stablecoins 稳定币协议: MakerDAO
    

不是所有 DeFi 项目都支持闪电贷，最早支持的项目是 Aave，后来还有其他链的 DeFi 项目比如 BSC 的 DODO 也添加了这个功能，比较早期或者规模较小的链上存在大量的套利空间，需求更多，同时闪电贷可以给 DeFi 项目带来手续费收益。

    function flashLoan(
    address receiverAddress,    // 接收资产的地址
    address asset,              // 资产名称
    uint256 amount,             // 数量
    bytes calldata params       // 自定义执行参数
    ) {
     // 1. 记录余额, 把指定数量的资产转给 receiverAddress
        uint256 balance = IERC20(asset).balanceOf(this);
        IERC20(asset).transferTo(receiverAddress, amount);
    
        // 2. 执行自定义方法
        IFlashLoanReceiver receiver = IFlashLoanReceiver(receiverAddress);
        // receiver.executeOperation 里可以做任何事情, 但最后需要把 asset 转回来
    receiver.executeOperation(params);
    
        // 3. 检查 receiverAddress 是否在步骤 2 执行完以后归还资产并支付手续费 0.3%
        require(IERC20(asset).balanceOf(this) >= balance * 1003 / 1000);
    
        // 4. 如果上面的检查失败, 则 flashLoan 执行失败, 交易回滚（状态变更不会被记录）
    
    }

---

*Originally published on [想住大房子的java程序员](https://paragraph.com/@java-3/x2KWHLuFw5Fl1wuQog0q)*
