闪电贷相关知识

提供闪电贷的资金哪里来

来自于 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 执行失败, 交易回滚(状态变更不会被记录)

}