mirror of
				https://github.com/Instadapp/aave-protocol-v2.git
				synced 2024-07-29 21:47:30 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			200 lines
		
	
	
		
			7.3 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			200 lines
		
	
	
		
			7.3 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
// import {
 | 
						|
//   LendingPoolInstance,
 | 
						|
//   LendingPoolCoreInstance,
 | 
						|
//   MintableERC20Instance,
 | 
						|
//   ATokenInstance,
 | 
						|
// } from "../utils/typechain-types/truffle-contracts"
 | 
						|
// import {
 | 
						|
//   iATokenBase,
 | 
						|
//   iAssetsWithoutETH,
 | 
						|
//   ITestEnvWithoutInstances,
 | 
						|
//   RateMode,
 | 
						|
// } from "../utils/types"
 | 
						|
// import {
 | 
						|
//   APPROVAL_AMOUNT_LENDING_POOL_CORE,
 | 
						|
//   ETHEREUM_ADDRESS,
 | 
						|
// } from "../utils/constants"
 | 
						|
// import { testEnvProviderWithoutInstances} from "../utils/truffle/dlp-tests-env"
 | 
						|
// import {convertToCurrencyDecimals} from "../utils/misc-utils"
 | 
						|
 | 
						|
// const expectRevert = require("@openzeppelin/test-helpers").expectRevert
 | 
						|
 | 
						|
// contract("LendingPool - stable rate economy tests", async ([deployer, ...users]) => {
 | 
						|
//   let _testEnvProvider: ITestEnvWithoutInstances
 | 
						|
//   let _lendingPoolInstance: LendingPoolInstance
 | 
						|
//   let _lendingPoolCoreInstance: LendingPoolCoreInstance
 | 
						|
//   let _aTokenInstances: iATokenBase<ATokenInstance>
 | 
						|
//   let _tokenInstances: iAssetsWithoutETH<MintableERC20Instance>
 | 
						|
 | 
						|
//   let _daiAddress: string
 | 
						|
 | 
						|
//   let _depositorAddress: string
 | 
						|
//   let _borrowerAddress: string
 | 
						|
 | 
						|
//   let _web3: Web3
 | 
						|
 | 
						|
//   before("Initializing LendingPool test variables", async () => {
 | 
						|
//     console.time('setup-test');
 | 
						|
//     _testEnvProvider = await testEnvProviderWithoutInstances(
 | 
						|
//       artifacts,
 | 
						|
//       [deployer, ...users]
 | 
						|
//     )
 | 
						|
 | 
						|
//     const {
 | 
						|
//       getWeb3,
 | 
						|
//       getAllAssetsInstances,
 | 
						|
//       getFirstBorrowerAddressOnTests,
 | 
						|
//       getFirstDepositorAddressOnTests,
 | 
						|
//       getLendingPoolInstance,
 | 
						|
//       getLendingPoolCoreInstance,
 | 
						|
//       getATokenInstances
 | 
						|
//     } = _testEnvProvider
 | 
						|
 | 
						|
//     const instances = await Promise.all([
 | 
						|
//       getLendingPoolInstance(),
 | 
						|
//       getLendingPoolCoreInstance(),
 | 
						|
//       getATokenInstances(),
 | 
						|
//       getAllAssetsInstances()
 | 
						|
//     ])
 | 
						|
//     _lendingPoolInstance = instances[0]
 | 
						|
//     _lendingPoolCoreInstance = instances[1]
 | 
						|
//     _aTokenInstances = instances[2]
 | 
						|
//     _tokenInstances = instances[3]
 | 
						|
//     _daiAddress = _tokenInstances.DAI.address
 | 
						|
//     _depositorAddress = await getFirstDepositorAddressOnTests()
 | 
						|
//     _borrowerAddress = await getFirstBorrowerAddressOnTests()
 | 
						|
 | 
						|
//     _web3 = await getWeb3()
 | 
						|
//     console.timeEnd('setup-test');
 | 
						|
//   })
 | 
						|
 | 
						|
//   it("BORROW - Test user cannot borrow using the same currency as collateral", async () => {
 | 
						|
//     const {aDAI: aDaiInstance} = _aTokenInstances
 | 
						|
//     const {DAI: daiInstance} = _tokenInstances
 | 
						|
 | 
						|
//     //mints DAI to depositor
 | 
						|
//     await daiInstance.mint(await convertToCurrencyDecimals(daiInstance.address, "1000"), {
 | 
						|
//       from: _depositorAddress,
 | 
						|
//     })
 | 
						|
 | 
						|
//     //mints DAI to borrower
 | 
						|
//     await daiInstance.mint(await convertToCurrencyDecimals(daiInstance.address, "1000"), {
 | 
						|
//       from: _borrowerAddress,
 | 
						|
//     })
 | 
						|
 | 
						|
//     //approve protocol to access depositor wallet
 | 
						|
//     await daiInstance.approve(_lendingPoolCoreInstance.address, APPROVAL_AMOUNT_LENDING_POOL_CORE, {
 | 
						|
//       from: _depositorAddress,
 | 
						|
//     })
 | 
						|
 | 
						|
//     //approve protocol to access borrower wallet
 | 
						|
//     await daiInstance.approve(_lendingPoolCoreInstance.address, APPROVAL_AMOUNT_LENDING_POOL_CORE, {
 | 
						|
//       from: _borrowerAddress,
 | 
						|
//     })
 | 
						|
 | 
						|
//     const amountDAItoDeposit = await convertToCurrencyDecimals(_daiAddress, "1000")
 | 
						|
 | 
						|
//     //user 1 deposits 1000 DAI
 | 
						|
//     const txResult = await _lendingPoolInstance.deposit(_daiAddress, amountDAItoDeposit, "0", {
 | 
						|
//       from: _depositorAddress,
 | 
						|
//     })
 | 
						|
 | 
						|
//     //user 2 deposits 1000 DAI, tries to borrow. Needs to be reverted as you can't borrow at a stable rate with the same collateral as the currency.
 | 
						|
//     const amountDAIToDepositBorrower = await convertToCurrencyDecimals(_daiAddress, "1000")
 | 
						|
//     await _lendingPoolInstance.deposit(_daiAddress, amountDAIToDepositBorrower, "0", {
 | 
						|
//       from: _borrowerAddress,
 | 
						|
//     })
 | 
						|
 | 
						|
//     const data: any = await _lendingPoolInstance.getReserveData(_daiAddress)
 | 
						|
 | 
						|
//     //user 2 tries to borrow
 | 
						|
//     const amountDAIToBorrow = await convertToCurrencyDecimals(_daiAddress, "250")
 | 
						|
 | 
						|
//     //user 2 tries to borrow
 | 
						|
//     await expectRevert(
 | 
						|
//       _lendingPoolInstance.borrow(_daiAddress, amountDAIToBorrow, RateMode.Stable, "0", {
 | 
						|
//         from: _borrowerAddress,
 | 
						|
//       }),
 | 
						|
//       "User cannot borrow the selected amount with a stable rate",
 | 
						|
//     )
 | 
						|
//   })
 | 
						|
 | 
						|
//   it("BORROW - Test user cannot borrow more than 25% of the liquidity available", async () => {
 | 
						|
//     const {aDAI: aDaiInstance} = _aTokenInstances
 | 
						|
//     const {DAI: daiInstance} = _tokenInstances
 | 
						|
 | 
						|
//     //redeem the DAI previously deposited
 | 
						|
//     const amountADAIToRedeem = await convertToCurrencyDecimals(aDaiInstance.address, "1000")
 | 
						|
//     await aDaiInstance.redeem(amountADAIToRedeem, {
 | 
						|
//       from: _borrowerAddress,
 | 
						|
//     })
 | 
						|
 | 
						|
//     //user 2 deposits 5 ETH tries to borrow. needs to be reverted as you can't borrow more than 25% of the available reserve (250 DAI)
 | 
						|
//     const amountETHToDeposit = await convertToCurrencyDecimals(ETHEREUM_ADDRESS, "5")
 | 
						|
//     await _lendingPoolInstance.deposit(ETHEREUM_ADDRESS, amountETHToDeposit, "0", {
 | 
						|
//       from: _borrowerAddress,
 | 
						|
//       value: amountETHToDeposit,
 | 
						|
//     })
 | 
						|
 | 
						|
//     const data: any = await _lendingPoolInstance.getReserveData(_daiAddress)
 | 
						|
 | 
						|
//     const amountDAIToBorrow = await convertToCurrencyDecimals(_daiAddress, "500")
 | 
						|
 | 
						|
//     //user 2 tries to borrow
 | 
						|
//     await expectRevert(
 | 
						|
//       _lendingPoolInstance.borrow(_daiAddress, amountDAIToBorrow, RateMode.Stable, "0", {
 | 
						|
//         from: _borrowerAddress,
 | 
						|
//       }),
 | 
						|
//       "User is trying to borrow too much liquidity at a stable rate",
 | 
						|
//     )
 | 
						|
//   })
 | 
						|
 | 
						|
//   it("BORROW - Test user can still borrow  a currency that he previously deposited as a collateral but he transferred/redeemed", async () => {
 | 
						|
//     const {aDAI: aDaiInstance} = _aTokenInstances
 | 
						|
//     const {DAI: daiInstance} = _tokenInstances
 | 
						|
 | 
						|
//     const user = users[2]
 | 
						|
 | 
						|
//     //user deposits 1000 DAI
 | 
						|
//     await daiInstance.mint(await convertToCurrencyDecimals(daiInstance.address, "1000"), {
 | 
						|
//       from: user,
 | 
						|
//     })
 | 
						|
//     await daiInstance.approve(_lendingPoolCoreInstance.address, APPROVAL_AMOUNT_LENDING_POOL_CORE, {
 | 
						|
//       from: user,
 | 
						|
//     })
 | 
						|
 | 
						|
//     const amountDAIToDeposit = await convertToCurrencyDecimals(daiInstance.address, "1000")
 | 
						|
//     await _lendingPoolInstance.deposit(daiInstance.address, amountDAIToDeposit, "0", {
 | 
						|
//       from: user,
 | 
						|
//     })
 | 
						|
 | 
						|
//     //user deposits 5 ETH as collateral
 | 
						|
//     const amountETHToDeposit = await convertToCurrencyDecimals(ETHEREUM_ADDRESS, "5")
 | 
						|
//     await _lendingPoolInstance.deposit(ETHEREUM_ADDRESS, amountETHToDeposit, "0", {
 | 
						|
//       from: user,
 | 
						|
//       value: amountETHToDeposit,
 | 
						|
//     })
 | 
						|
 | 
						|
//     //user transfers to another address all the overlying aDAI
 | 
						|
 | 
						|
//     const aDAIBalance = await aDaiInstance.balanceOf(user)
 | 
						|
 | 
						|
//     await aDaiInstance.transfer(users[3], aDAIBalance, {
 | 
						|
//       from: user,
 | 
						|
//     })
 | 
						|
 | 
						|
//     //check the underlying balance is 0
 | 
						|
//     const userData: any = await _lendingPoolInstance.getUserReserveData(daiInstance.address, user)
 | 
						|
 | 
						|
//     expect(userData.currentATokenBalance.toString()).to.be.equal("0")
 | 
						|
 | 
						|
//     //user tries to borrow the DAI at a stable rate using the ETH as collateral
 | 
						|
//     const amountDAIToBorrow = await convertToCurrencyDecimals(_daiAddress, "100")
 | 
						|
 | 
						|
//     //user tries to borrow. No revert expected
 | 
						|
//     await _lendingPoolInstance.borrow(_daiAddress, amountDAIToBorrow, RateMode.Stable, "0", {
 | 
						|
//       from: user,
 | 
						|
//     })
 | 
						|
//   })
 | 
						|
// })
 |