aave-protocol-v2/tasks/scenarios/basic_flow.ts

64 lines
2.5 KiB
TypeScript
Raw Normal View History

2020-10-16 15:41:31 +00:00
import {task} from '@nomiclabs/buidler/config';
import {
getEthersSigners,
getLendingPool,
getMockedTokens,
MockTokenMap,
} from '../../helpers/contracts-helpers';
import AaveConfig from '../../config/aave';
import BigNumber from 'bignumber.js';
import {LendingPool} from '../../types/LendingPool';
import {ethers} from 'ethers';
task('aave:basicFlow', 'Execute protocol basic flow').setAction(async ({verify}, localBRE) => {
await localBRE.run('set-bre');
const [, , user1, user2] = await getEthersSigners();
2020-10-19 08:45:27 +00:00
const user1Address = await user1.getAddress();
const user2Address = await user2.getAddress();
2020-10-16 15:41:31 +00:00
2020-10-19 08:45:27 +00:00
const daiAmount = 10000;
2020-10-16 15:41:31 +00:00
const wethAmount = 1000;
const daiTokenAmount = new BigNumber(daiAmount).times(new BigNumber(10).pow(18)).toFixed(0);
const wethTokenAmount = new BigNumber(wethAmount).times(new BigNumber(10).pow(18)).toFixed(0);
console.log('Basic Flow started\n');
// deploy protocol
await localBRE.run('aave:dev');
const tokens: MockTokenMap = await getMockedTokens(AaveConfig);
// mint reserve tokens to user0
const DAI = tokens.DAI;
await DAI.connect(user1).mint(daiTokenAmount);
2020-10-19 08:45:27 +00:00
const daiDepositAmount = new BigNumber('10000').times(new BigNumber(10).pow(18)).toFixed(0);
2020-10-16 15:41:31 +00:00
// mint WETH for user2
const WETH = tokens.WETH;
await WETH.connect(user2).mint(wethTokenAmount);
2020-10-19 08:45:27 +00:00
const wethDepositAmount = new BigNumber('1000').times(new BigNumber(10).pow(18)).toFixed(0);
await WETH.connect(user1).mint(wethTokenAmount);
2020-10-16 15:41:31 +00:00
// user1 deposits DAI, user2 deposits WETH
const LendingPool: LendingPool = await getLendingPool();
await DAI.connect(user1).approve(LendingPool.address, ethers.constants.MaxUint256);
2020-10-19 08:45:27 +00:00
await LendingPool.connect(user1).deposit(DAI.address, daiDepositAmount, user1Address, 0);
2020-10-16 15:41:31 +00:00
await WETH.connect(user2).approve(LendingPool.address, ethers.constants.MaxUint256);
2020-10-19 08:45:27 +00:00
await LendingPool.connect(user2).deposit(WETH.address, wethDepositAmount, user2Address, 0);
2020-10-16 15:41:31 +00:00
// user1 borrows WETH token at stable rate
2020-10-19 08:45:27 +00:00
const wethBorrowAmount = new BigNumber('10').times(new BigNumber(10).pow(18)).toFixed(0);
await LendingPool.connect(user1).borrow(WETH.address, wethBorrowAmount, 1, 0, user1Address);
// user1 repays debt
await WETH.connect(user1).approve(LendingPool.address, ethers.constants.MaxUint256);
await LendingPool.connect(user1).repay(
2020-10-16 15:41:31 +00:00
WETH.address,
2020-10-19 08:45:27 +00:00
ethers.constants.MaxUint256,
2020-10-16 15:41:31 +00:00
1,
2020-10-19 08:45:27 +00:00
user1Address
2020-10-16 15:41:31 +00:00
);
// user1 withdraws collateral
2020-10-19 08:45:27 +00:00
await LendingPool.connect(user1).withdraw(DAI.address, ethers.constants.MaxUint256);
2020-10-16 15:41:31 +00:00
});