aave币有未来么,aave官网

  

  在不到一个月的时间里,区块链DeFi协议锁定的资产价值翻了一番,超过20亿美元。Aave是第五大也是第一个支持闪贷的DeFi平台。在本文中,我们将学习如何在DApp应用程序中接口Aave协议,以实现存款和赎回资产的功能。本教程中使用的开发语言是JavaScript。   

  

     

  

  用熟悉的语言学习以太坊DApp开发:Java | PHP | Python |。NET/c# | Golang | node . js | Flutter/dart   

  

  1、Aave协议简介目前支持17个市场:瑞士联邦理工学院、戴、USDC、SUSD、TUSD、USDT、BUSD、英美烟草、KNC、Lend、Link、Mana、MKR、REP、SNX、WBTC和ZRX。   

  

  我们以LINK为例来说明Aave的作用。通过LINK存入Aave协议,表示您允许该协议出借您的资产,从而获得利息收入。你可以随时取回你存放的加密资产,就像一个储蓄账户。   

  

  将你的链接存入协议后,你可以做一些其他的操作,比如查询当前利率,借入其他资产等等。   

  

  那么从技术角度来看,2、Aave协议技术概述的上述过程是什么样的呢?与Compound相比,Aave的协议流程稍微复杂一点,但并不难控制。   

  

  Aave协议的核心是LendingPools智能合约,这也是整个Aave协议的切入点。开发者可以使用LendingPool契约的deposit()方法存放加密资产。此外,开发者还可以获得Aave的一些储备数据,比如用户流动性、当前利率、整体流动性等等。   

  

  在Aave协议中,LendingPool契约是可伸缩的。这意味着它的部署地址将来可能会改变。为了让DApp与未来的地址兼容,Aave提供了LendingPoolAddressesProvider智能合约来解决这个问题。这个契约永远不会升级,可以用来获取最新的LendingPool契约的地址。只要拿到最新LendingPool合同的地址,就可以对接Aave协议。   

  

  但是,我们不能用LendingPool合约赎回存放的资产,这需要其他智能合约,即aTokens。ATokens是一种兼容ERC 20的智能合约,用于实现与各种基础资产的交换。例如,当存入链接令牌时,我们将收到按当前汇率兑换的aLink令牌。aLink合约提供了rename()方法来赎回以前存放的资产。   

  

  一般来说,与Aave的交互主要包括以下几个环节:   

  

  使用LendingPoolAddressesProvider合约获取LendingPool合约的最新部署地址,使用LendingPool合约存放资产,使用aToken合约赎回资产。上述步骤使得Aave协议的对接比复合协议更复杂,因为DApp需要几个不同的智能合约和ABI。   

  

  首先,3、向Aave协议存入资产,让我们学习如何将资产存入资产池。主要步骤如下:   

  

  加载LendingPoolDresssProvider合同获取LendingPool地址,加载LendingPool合同并将ETH存入LendingPool合同在3.1 载入LendingPoolAddressesProvider合约.我们需要的第一个ABI是LendingPoolDresssProvider合同。本合同在不同网络的部署地址可以在Aave官方文档中找到,本合同在以太坊主网上的部署地址为0x 24 a 42 FD 28 c 976 a 61 df 5d 00d 0599 c 34 C4 f 90748 c 8。以下示例代码显示了如何加载提供者协定:   

  

  const provider instance=new web 3 . eth . contract(addressProviderABI,'0x 24 a 42 FD 28 c 976 a 61 df 5d 00d 0599 c 34 C4 f 90748 c8 ');3.2 获取LendingPool合约的部署地址AAVE的提供者契约提供getLendingPool()方法返回LendingPool契约的最新部署地址。例如,下面的示例代码显示了如何调用此方法来获取最新的LendingPool协定地址:   

  

  const lending pool address=await provider instance . methods . getlending pool()。调用()。catch((e)={ throw Error(`获取借出时出错   

ingPool address: ${e.message}`) });3.3 载入LendingPool合约实例LendingPool ABI 是我们需要使用的第二个ABI。下面的示例代码展示了如何利用前面获得地址载入LendingPool合约实例:

  

const lendingPoolInstance = new web3.eth.Contract(lendingPoolABI, lendingPoolAddress);3.4 向LendingPool合约存入以太币当向Aave协议存入资产时,需要告诉LendingPool我们将存入的资产类型和数量。 这需要传入标的资产的储备地址,不同类型资产对应的储备地址清单可以查阅Aave文档。 对于ETH而言,其储备地址是0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE。

  

下面的示例代码展示了如何向LendingPool合约存入ETH:

  

lendingPoolInstance.methods.deposit("0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE", supplyValue, 0) .send({from: account, value: supplyValue}) .once('transactionHash', (hash) => { // transaction hash }) .on('confirmation', (number, receipt) => { // number of confirmations }) .on('error', (error) => { console.log(error); });在上面的代码中,supplyValue表示要存入的ETH数量,单位:wei。

  

下面是到目前为止我们已经实现的与Aave协议对接的全部代码:

  

// Load the address providerconst providerInstance = new web3.eth.Contract(addressProviderABI, "0x24a42fD28C976A61Df5D00D0599C34c4f90748c8");// Get lending pool addressconst lendingPoolAddress = await providerInstance.methods.getLendingPool().call() .catch((e) => { throw Error(`Error getting lendingPool address: ${e.message}`) });// Load lending poolconst lendingPoolInstance = new web3.eth.Contract(lendingPoolABI, lendingPoolAddress);// Deposit fundslendingPoolInstance.methods.deposit("0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE", supplyValue, 0) .send({from: account, value: supplyValue}) .once('transactionHash', (hash) => { // transaction hash }) .on('confirmation', (number, receipt) => { // number of confirmations }) .on('error', (error) => { console.log(error); });好了,现在已经将ETH存入Aave了,等着赚利息吧!

  

4、从Aave协议赎回资产为了赎回之前存入的资产,我们首先需要了解应该使用哪个aToken合约,然后调用该合约 的redeem()方法就可以收到赎回的ETH了。具体步骤如下:

  

从LendingPool合约获取储备数据使用储备数据载入aToken合约赎回以太币1、获取资产储备数据

  

储备数据(Reserve Data)描述了所存入资产的信息,例如总体流动性和当前利率。我们可以利用 储备数据获取aToken的地址。下面的代码展示了这一过程:

  

const reserveData = await lendingPool.methods .getReserveData("0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE") .call() .catch((e) => { throw Error(`Error getting aave reserve data: ${e.message}`) });const aTokenAddress = reserveData.aTokenAddress;2、载入aToken实例

  

aToken ABI 是我们要用到的最后一个ABI,下面的代码展示了如何载入aToken实例:

  

const aTokenInstance = new web3.eth.Contract(aTokenABI, aTokenAddress);3、赎回资产

  

最后,下面的代码展示了如何赎回标的资产:

  

aTokenInstance.methods.redeem(withdrawAmount) .send({from: account}) .once('transactionHash', (hash) => { // transaction hash }) .on('confirmation', (number, receipt) => { // number of confirmations }) .on('error', (error) => { console.log(error); });withdrawAmount表示要从Aave协议中赎回的ETH数量,单位还是wei。

  

下面是Aave协议资产赎回功能的完整代码:

  

// Get reserve dataconst reserveData = await lendingPool.methods .getReserveData("0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE") .call() .catch((e) => { throw Error(`Error getting aave reserve data: ${e.message}`) }); // Get aToken addressconst aTokenAddress = reserveData.aTokenAddress;// Load aTokenconst aTokenInstance = new web3.eth.Contract(aTokenABI, aTokenAddress);// Redeem assetaTokenInstance.methods.redeem(withdrawAmount) .send({from: account}) .once('transactionHash', (hash) => { // transaction hash }) .on('confirmation', (number, receipt) => { // number of confirmations }) .on('error', (error) => { console.log(error); });5、Aave协议接入教程小结随着DeFi变得越来越简单易用,学习如何与这些协议交互将迅速成为 开发人员工具箱中的有力武器。

  

原文链接:http://blog.hubwiz.com/2020/07/19/aave-programming/

相关文章