diff --git a/basic/21-aave-uni-loan/.env.example b/basic/21-aave-uni-loan/.env.example index e7d34929b..858eb541d 100644 --- a/basic/21-aave-uni-loan/.env.example +++ b/basic/21-aave-uni-loan/.env.example @@ -1,4 +1,5 @@ ETHERSCAN_API_KEY=ABC123ABC123ABC123ABC123ABC123ABC1 INFURA_ID=yyyy -ALCHEMY_ID=XXXX -PRIVATE_KEY=xxxxx +ALCHEMY_ID=zzz +PRIVATE_KEY=tttt +TARGET_ADDRESS=ttttt \ No newline at end of file diff --git a/basic/21-aave-uni-loan/.env.template b/basic/21-aave-uni-loan/.env.template deleted file mode 100644 index 861d3b1a3..000000000 --- a/basic/21-aave-uni-loan/.env.template +++ /dev/null @@ -1,3 +0,0 @@ -ETHERSCAN_API_KEY=ABC123ABC123ABC123ABC123ABC123ABC1 -ROPSTEN_URL=https://eth-ropsten.alchemyapi.io/v2/ -PRIVATE_KEY=0xabc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc1 diff --git a/basic/21-aave-uni-loan/README-CN.md b/basic/21-aave-uni-loan/README-CN.md index 4e17e072a..8c94bd263 100644 --- a/basic/21-aave-uni-loan/README-CN.md +++ b/basic/21-aave-uni-loan/README-CN.md @@ -1,20 +1,25 @@ -# 项目介绍 -基于 Hardhat 测试框架,通过样例合约的演示,了解如何在 AAVE 上进行借贷,在 Uniswap 上进行兑换。 +# 前言 +基于 Hardhat 测试框架,通过样例合约的演示,了解如何在 AAVE 上进行借贷,在 Uniswap 上进行兑换,并通过 AAVE 和 Uniswap 进行做多和做空。 -### AAVE +## 合约交互 +### AAVE 合约 Lending Pool Addresses Provider 是 AAVE 交互的入口,通过它可以和 AAVE 进行交互。 同时因为 AAVE 会更新 LendingPool / ProtocolDataProvider / PriceOracle 合约的地址以便修复发现的 Bug ,而通过 Lending Pool Addresses Provider 可以获取这三个合约的最新的地址,而不必修改代码: - LendingPool: 负责 存入/借贷 功能 - ProtocolDataProvider: 提供 用户/池子 中相关的借贷信息 - PriceOracle: 价格预言机 -### uniswapv2 +### uniswapv2 合约 UniswapV2 的交互入口为 Router02,通过它可以完成和 UniswapV2 的所有交互 -## 要点 -首先,在部署合约的时候,会传入两个参数,AddressesProvider 和 Router 的地址,之后便可以通过调用合约接口,获取 AAVE 当前池子的状态信息。 - +## 功能要点 +AaveApe 合约主要有四个功能,分别是 +1)质押资产到 AAVE +2)从 AAVE 进行借贷 +3) 到 Uniswap 进行资产置换 +4)从 AAVE 进行闪电贷 +通过组合这四个功能,可以实现自动做多,做空 以及 赎回 的操作。 ### 做多 假设你有两种资产,其中一种资产 A 你想要做多,另一种资产 B 你想要做空。 Ape 合约通过如下操作,在一笔交易中便可以帮用户达到同时对两种资产做多和做空的目的。 - 根据用户当前在 AAVE 质押的资产 A 的价值,计算用户可借的最大数额的资产 B @@ -29,22 +34,44 @@ UniswapV2 的交互入口为 Router02,通过它可以完成和 UniswapV2 的 - 把兑换出的资产 A 继续存入 AAVE -## unwindApe 介绍 +### 赎回 通过 AAVE V2 的闪电贷偿还从 AAVE 借出的资产. 详细逻辑, 参考 [aave-ape](https://azfuller20.medium.com/aave-ape-with-%EF%B8%8F-scaffold-eth-c687874c079e ) ## 操作步骤 +- 配置环境变量 +```shell +cp .env.example .env +# 配置其中的 ETHERSCAN_API_KEY, INFURA_ID,ALCHEMY_ID,PRIVATE_KEY, TARGET_ADDRESS +# ETHERSCAN_API_KEY 用于合约验证 +# INFURA_ID 用于连接到各个以太网络 +# ALCHEMY_ID 在使用 polygon 网路进行借贷的时候发现因为 Infura 网络延迟,造成交易失败的情况,所以这里使用 Alchemy 的网络进行验证 +# PRIVATE_KEY 用于发送交易 +# TARGET_ADDRESS: 目标用户 ,查询用户在 AAVE 上借贷所支付的所有利息 +``` +- 部署合约 ```shell // depoly aaveape -hardhat run --network matic scripts/deploy.js +hardhat run scripts/deploy.js --network +``` +- 验证合约 +```shell // contract verify npx hardhat verify --network matic 0xddb2d92d5a0EDcb03c013322c7BAe92734AA4597 "0xd05e3E715d945B59290df0ae8eF85c1BdB684744" "0x1b02da8cb0d097eb8d57a175b88c7d8b47997506" +``` +- 进行借贷 +```shell // open maxposition on aave -hardhat run --network matic scripts/loan.js +hardhat run scripts/loan.js --network matic +``` +- 查询用户支付利息总额 +需要注意的是,应该在 matic 上,所有的可借贷币种的 APY 使用的都是浮动 APY,如果使用其他网络的话需要修改下代码中 “计算 interest” 部分传入 getDebtToken 接口的参数 +```shell +hardhat run scripts/query.js --network matic ```