开发者如何玩转 Aave 闪电贷

这篇文章主要介绍了开发者如何玩转 Aave 闪电贷 ,文中通过代码以及文档配合进行讲解,很详细,它对在座的每个人的研究和工作具有很经典的参考价值。 如果需要,让我们与区块链资料网一起学习。

https://www.interchains.cc/19341.html

开发者如何玩转 Aave 闪电贷是很好的区块链资料,他说明了区块链当中的经典原理,可以给我们提供资料,开发者如何玩转 Aave 闪电贷学习起来其实是很简单的,

不多的几个较为抽象的概念也很容易理解,之所以很多人感觉开发者如何玩转 Aave 闪电贷比较复杂,一方面是因为大多数的文档没有做到由浅入深地讲解,概念上没有注意先后顺序,给读者的理解带来困难

开发者如何玩转 Aave 闪电贷

  • 闪电贷

我们在之前的文章中提到了Aave 、Dydx 和 uniswap 这些闪电贷的区别。今天我们就尝试在 Aave 上发起一笔闪电贷,上车!

Aave 很贴心已经为我们准备好了 Truffle Box:https://github.com/aave/flashloan-box。

我们在之前的文章中提到了 Aave 、Dydx 和 uniswap 这些闪电贷的区别。今天我们就尝试在 Aave 上发起一笔闪电贷,上车!

Aave 很贴心已经为我们准备好了 Truffle Box:https://github.com/aave/flashloan-box。

安装和设置

我们需要全局安装 truffle,了解 node 的人不会陌生

npm install -g truffle@latest

安装完之后,开始第 2 步

安装 aave flashloan-box

truffle unbox aave/flashloan-box

这个过程中需要特殊的上网技巧,下载完 flashloan-box, 我们会得到 1 个完整的基于 Truffle 框架的合约代码。

├── README.md ├── contracts (1) ├── env (2) ├── migrations ├── node_modules ├── package.json └── truffle-config.js (3)

(1) 是合约文件

(2) 环境变量,保存 INFURA_API_KEY、DEPLOYMENT_ACCOUNT_KEY 这些变量

(3) 是 truffle 的配置文件

闪电贷智能合约

来看下 contracts/Flashloan.sol

 import "https://github.com/aave/flashloan-box/blob/Remix/contracts/aave/FlashLoanReceiverBase.sol"; import "https://github.com/aave/flashloan-box/blob/Remix/contracts/aave/ILendingPoolAddressesProvider.sol"; import "https://github.com/aave/flashloan-box/blob/Remix/contracts/aave/ILendingPool.sol";  contract Flashloan is FlashLoanReceiverBase {     constructor(address _addressProvider) FlashLoanReceiverBase(_addressProvider) public {} }

这是导入所必要的依赖项,Flashloan 合约继承自FlashLoanReceiverBase,它是一个抽象合约,提供了一些有用的方法,比如如偿还闪电贷的方式。 Flashloan.sol 构造函数接受 Aave 的一个贷款池提供者的地址。我们会稍后将介绍。

flashloan 方法

我们先来看 flashLoan 函数。

function flashloan(address _asset) public { // 去掉 onlyOwner,任何人都可调用 flashloan     bytes memory data = "";     uint amount = 1 ether;      ILendingPool lendingPool = ILendingPool(addressesProvider.getLendingPool());     lendingPool.flashLoan(address(this), _asset, amount, data); }

flashLoan 的参数_asset是我们要用闪电贷借款的资产地址,比如 ETH 或 DAI。

uint amount = 1 ether; 在这里,我们定义的借款金额的单位是ether,如果把 ETH 地址传过去,我们就会借到 1 个 ETH,即 10^18 wei。如果把 DAI 地址传给 _asset,我们就会借到 1 个 DAI。

现在,我们可以使用 Aave 提供的 ILendingPool接口,调用flashLoan函数,其中包含所有需要的参数,如我们想要借入的资产、该资产的金额和一个额外的data参数。

我们还要关注 executeOperation

executeOperation 方法

executeOperation 函数将被 LendingPool 合约在闪电贷中请求有效的资产后被调用。

    function executeOperation(         address _reserve, uint256 _amount,         uint256 _fee, bytes calldata _params     )         external override     {         require(_amount <= getBalanceInternal(address(this), _reserve), "Invalid balance, was the flashLoan successful?");          //         // Your logic goes here.         // !! Ensure that *this contract* has enough of `_reserve` funds to payback the `_fee` !!         //          uint totalDebt = _amount.add(_fee);         transferFundsBackToPoolInternal(_reserve, totalDebt);     }

在使用 flashLoan 函数触发有效的闪电贷后,executeOperation 函数的所有参数都将被自动传递。require 用来确保收到的闪电贷金额是否正确。

接下来,我们可以插入任何想要执行的逻辑。在这个步骤中,我们拥有了来自闪电贷的所有可用资金,因此,我们可以尝试套利机会。

我们在用完闪电贷后,就需要偿还资金了。

uint totalDebt = _amount.add(_fee);

在这里,我们要计算还多少钱,也就是 借款金额 + 借款金额的 0.09%Aave 的闪电贷需要手续费

最后一步就是调用 transferFundsBackToPoolInternal 来偿还闪电贷。

Kovan 测试网

分析完闪电贷合约,已经可以部署了,假设我们要借出 Dai,但还要准备 2 个必要的东西:

  • LendingPoolAddressesProvider —— 为了部署合约,我们需要找到 Aave 在 Kovan 测试网上的借贷合约的地址。它地址是0x506B0B2CF20FAA8f38a4E2B524EE43e1f4458Cc5。你可以在Aave 文档 找到所有的地址。

  • DAI 地址,我们需要 DAI(或你想借用的任何其他资产)在 Kovan 测试网的合约地址。它的地址是0xFf795577d9AC8bD7D90Ee22b6C1703490b6512FD

编译合约

运行 truffle compile,将编译合约,我们把 Solidity 的版本设定为0.6.12,成功后的提示是:

> Compiled successfully using:    - solc: 0.6.12+commit.27d51765.Emscripten.clang

获取测试币

给0x505A51009FdA1A20131C87c34Cfad6FDe6B82A36 发一些测试币。

我们还需要一些 DAI。要获得 DAI,访问 http://testnet.aave.com/faucet 并点击 DAI,然后点击 “提交” 按钮,我们将会收到 10,000 个 Dai。

部署合约

我们在 env 文件中配置好 infura 的 api key 以及 0x505A51009FdA1A20131C87c34Cfad6FDe6B82A36 对应的私钥

INFURA_API_KEY = "API_KEY" DEPLOYMENT_ACCOUNT_KEY = "地址私钥"

运行 truffle migrate --network kovan --reset --skip-dry-run,给 Flashloan 合约的构造函数传递的 lendingPoolProvider 是0x506B0B2CF20FAA8f38a4E2B524EE43e1f4458Cc5

// migrations/2_deploy_contracts.js  let lendingPoolProviderAddr;  switch (network) {   case "mainnet":     lendingPoolProviderAddr = "0x24a42fD28C976A61Df5D00D0599C34c4f90748c8";     break   case "kovan":     lendingPoolProviderAddr = "0x506B0B2CF20FAA8f38a4E2B524EE43e1f4458Cc5";     break   default:     throw Error(``) }  await deployer.deploy(Flashloan, lendingPoolProviderAddr)

部署好后,合约地址是 0x3cC064c6A0b8629A05f38Bc57b6A290AC9489E38。

发起闪电贷

我们先给合约地址充值 100 Dai,然后在 合约页面调用flashLoan函数并通过 Metamask 接受 Ethereum 交易后,你应该会看到一个交易。

恭喜你!你刚完成了一笔闪电贷交易!

开发者如何玩转 Aave 闪电贷

部分转自网络,侵权联系删除www.interchains.cchttps://www.interchains.cc/19341.html

区块链毕设网(www.interchains.cc)全网最靠谱的原创区块链毕设代做网站 部分资料来自网络,侵权联系删除! 最全最大的区块链源码站 ! QQ3039046426
区块链知识分享网, 以太坊dapp资源网, 区块链教程, fabric教程下载, 区块链书籍下载, 区块链资料下载, 区块链视频教程下载, 区块链基础教程, 区块链入门教程, 区块链资源 » 开发者如何玩转 Aave 闪电贷

提供最优质的资源集合

立即查看 了解详情