Skip to content

Latest commit

 

History

History
90 lines (72 loc) · 4.17 KB

README-CN.md

File metadata and controls

90 lines (72 loc) · 4.17 KB

前言

基于 Hardhat 测试框架,通过样例合约的演示,了解如何在 AAVE 上进行借贷,在 Uniswap 上进行兑换,并通过 AAVE 和 Uniswap 进行做多和做空。

合约交互

AAVE 合约

Lending Pool Addresses Provider 是 AAVE 交互的入口,通过它可以和 AAVE 进行交互。 同时因为 AAVE 会更新 LendingPool / ProtocolDataProvider / PriceOracle 合约的地址以便修复发现的 Bug ,而通过 Lending Pool Addresses Provider 可以获取这三个合约的最新的地址,而不必修改代码:

  • LendingPool: 负责 存入/借贷 功能
  • ProtocolDataProvider: 提供 用户/池子 中相关的借贷信息
  • PriceOracle: 价格预言机

uniswapv2 合约

UniswapV2 的交互入口为 Router02,通过它可以完成和 UniswapV2 的所有交互

功能要点

AaveApe 合约主要有四个功能,分别是
1)质押资产到 AAVE
2)从 AAVE 进行借贷
3) 到 Uniswap 进行资产置换
4)从 AAVE 进行闪电贷
通过组合这四个功能,可以实现自动做多,做空 以及 赎回 的操作。

做多

假设你有两种资产,其中一种资产 A 你想要做多,另一种资产 B 你想要做空。 Ape 合约通过如下操作,在一笔交易中便可以帮用户达到同时对两种资产做多和做空的目的。

  • 根据用户当前在 AAVE 质押的资产 A 的价值,计算用户可借的最大数额的资产 B
  • 从 AAVE 中借贷资产 B

需要注意的是,在上述 "从 AAVE 中借贷资产 B " 时,需要用户预先授权 Ape 合约,以便 Ape 可以以用户的名义进行借贷,详细内容可参考 AAVE 的 Credit Delegation。

做空

从 AAVE 借出资产 B 后,Ape 进行如下操作做空 B。

  • 通过 Uniswap V2, 把借出的资产 B 全部兑换为 资产 A
  • 把兑换出的资产 A 继续存入 AAVE

赎回

通过 AAVE V2 的闪电贷偿还从 AAVE 借出的资产.
详细逻辑, 参考 aave-ape

操作步骤

  • 配置环境变量
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 上借贷所支付的所有利息
  • 部署合约
// depoly aaveape
hardhat run scripts/deploy.js --network  matic
  • 验证合约
// contract verify
npx hardhat verify --network matic 0xddb2d92d5a0EDcb03c013322c7BAe92734AA4597 "0xd05e3E715d945B59290df0ae8eF85c1BdB684744" "0x1b02da8cb0d097eb8d57a175b88c7d8b47997506"
  • 进行借贷
// open maxposition on aave
hardhat run scripts/loan.js --network matic    
  • 查询用户支付利息总额
    需要注意的是,应该在 matic 上,所有的可借贷币种的 APY 使用的都是浮动 APY,如果使用其他网络的话需要修改下代码中 “计算 interest” 部分传入 getDebtToken 接口的参数
hardhat run scripts/query.js --network matic

参考链接