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