# 闪电贷开发

目前闪电贷是面向开发人员的。 您必须对以太坊，编程和智能合约有充分的了解，才能利用它们。

考虑到闪电贷gas成本，目前建议用是基于AAVE借贷协议开发的闪电贷，支持闪电贷，稳定贷等功能的借贷平台，并且支持批量闪电贷，闪电贷策略合约代码也能够与AAVE的闪电贷代码共用。

概述

对于开发人员，在开发闪电贷策略时，需要考虑以下步骤：

1. 你的策略合约需要调&#x7528;**`LendingPool`**&#x667A;能合约，通&#x8FC7;**`flashLoan()`**&#x63A5;口请求一定数量的闪电贷贷款。
2. 经过一些合理性检查后，**`LendingPool`**&#x5C06;请求的贷款币及一定额度转移到你的策略合同中，然后调&#x7528;**`executeOperation()`**。该函数有操&#x4F5C;**`approve`**&#x4E00;定量的币(总贷款+手续费)&#x7ED9;**`LendingPool`**&#x5730;址。
3. 策略代码执行完后，**`LendingPool`**&#x667A;能合约会更新存款的相关详细信息，并从策略合约提取闪电贷借款+手续费。
4. 以上所有操作均发生在1个交易内(因此在单个区块中)，之间有任何交易失败都将导致交易回退。
5. 策略合约记得预留提币接口用来获取闪电贷奖励。

```
 // LendingPool 闪电贷接口
   function flashLoan(
    address receiverAddress,     // 用来接收闪电贷资金的合约地址
    address[] calldata assets,   // 闪电贷的贷款资产代币地址，支持批量闪电贷
    uint256[] calldata amounts,  // 闪电贷的额度
    uint256[] calldata modes,    // 贷款模式，0为立即还款，1为稳定贷，2为可变贷，闪电贷一般使用模式0即可
    address onBehalfOf,          // 在模式为1或2的情况下，将收到债务的地址
    bytes calldata params,       // 额外信息作为可变参数打包传递给receiver
    uint16 referralCode          // 邀请码，可以忽略
  )
```

```
// executeOperation 闪电贷策略合约必须实现的函数，一般用于授权还款额度给LendPool合约地址
  function executeOperation(
        address[] calldata assets,      // 闪电贷的贷款资产代币地址
        uint256[] calldata amounts,     // 闪电贷的额度
        uint256[] calldata premiums,    // 闪电贷手续费
        address initiator,              // call 地址
        bytes calldata params           // 额外信息作为可变参数打包
  )
```
