mirror of
				https://github.com/Instadapp/dsa-connectors.git
				synced 2024-07-29 22:37:00 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			138 lines
		
	
	
		
			4.8 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			138 lines
		
	
	
		
			4.8 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| import hre from "hardhat";
 | |
| import { ethers } from "hardhat";
 | |
| import { assert, expect } from "chai";
 | |
| 
 | |
| import {
 | |
|   DEFAULT_DECIMALS,
 | |
|   DEAD_ADDRESS,
 | |
|   toEther,
 | |
|   connectorName,
 | |
|   simpleToExactAmount,
 | |
|   getToken
 | |
| } from "./mstable.helpers";
 | |
| 
 | |
| import { IERC20Minimal, IERC20Minimal__factory } from "../../../typechain";
 | |
| import { BigNumber, Contract, Wallet } from "ethers";
 | |
| 
 | |
| import { encodeSpells } from "../../../scripts/tests/encodeSpells";
 | |
| 
 | |
| const provider = hre.waffle.provider;
 | |
| 
 | |
| let imUsdToken: IERC20Minimal = IERC20Minimal__factory.connect(getToken("imUSD").tokenAddress, provider);
 | |
| let imUsdVault: IERC20Minimal = IERC20Minimal__factory.connect(getToken("imUSDVault").tokenAddress, provider);
 | |
| 
 | |
| export const executeAndAssertSwap = async (
 | |
|   method: string,
 | |
|   tokenFrom: IERC20Minimal,
 | |
|   tokenFromDecimals: number,
 | |
|   tokenTo: IERC20Minimal,
 | |
|   tokenToDecimals: number,
 | |
|   swapAmount: BigNumber,
 | |
|   dsaWallet0: Contract,
 | |
|   wallet0: Wallet,
 | |
|   args?: any[]
 | |
| ) => {
 | |
|   const diffFrom = ethers.BigNumber.from(10).pow(DEFAULT_DECIMALS - tokenFromDecimals);
 | |
|   const diffTo = ethers.BigNumber.from(10).pow(DEFAULT_DECIMALS - tokenToDecimals);
 | |
| 
 | |
|   const tokenFromBalanceBefore = (await tokenFrom.balanceOf(dsaWallet0.address)).mul(diffFrom);
 | |
|   console.log("Token From balance before: ", toEther(tokenFromBalanceBefore));
 | |
| 
 | |
|   const tokenToBalanceBefore = (await tokenTo.balanceOf(dsaWallet0.address)).mul(diffTo);
 | |
|   console.log("Token To balance before: ", toEther(tokenToBalanceBefore));
 | |
| 
 | |
|   const spells = [
 | |
|     {
 | |
|       connector: connectorName,
 | |
|       method,
 | |
|       args: [tokenFrom.address, tokenTo.address, swapAmount, 1, ...(args ? args : []), 0, 0]
 | |
|     }
 | |
|   ];
 | |
| 
 | |
|   console.log("Swapping...", toEther(swapAmount));
 | |
| 
 | |
|   const tx = await dsaWallet0.connect(wallet0).cast(...encodeSpells(spells), DEAD_ADDRESS);
 | |
| 
 | |
|   const tokenFromBalanceAfter = (await tokenFrom.balanceOf(dsaWallet0.address)).mul(diffFrom);
 | |
|   console.log("Token From balance after: ", toEther(tokenFromBalanceAfter));
 | |
| 
 | |
|   const tokenToBalanceAfter = (await tokenTo.balanceOf(dsaWallet0.address)).mul(diffTo);
 | |
|   console.log("Token To balance after: ", toEther(tokenToBalanceAfter));
 | |
| 
 | |
|   expect(tokenFromBalanceAfter).to.be.eq(tokenFromBalanceBefore.sub(swapAmount));
 | |
|   expect(tokenToBalanceAfter).to.be.gt(tokenToBalanceBefore);
 | |
| };
 | |
| 
 | |
| export const executeAndAssertDeposit = async (
 | |
|   method: string,
 | |
|   tokenFrom: IERC20Minimal,
 | |
|   depositAmount: BigNumber,
 | |
|   dsaWallet0: Contract,
 | |
|   wallet0: Wallet,
 | |
|   args?: any[]
 | |
| ) => {
 | |
|   const FromBalanceBefore = await tokenFrom.balanceOf(dsaWallet0.address);
 | |
|   console.log("Balance before: ", toEther(FromBalanceBefore));
 | |
| 
 | |
|   const imUsdVaultBalanceBefore = await imUsdVault.balanceOf(dsaWallet0.address);
 | |
|   console.log("imUSD Vault balance before: ", toEther(imUsdVaultBalanceBefore));
 | |
| 
 | |
|   const spells = [
 | |
|     {
 | |
|       connector: connectorName,
 | |
|       method,
 | |
|       args: [tokenFrom.address, depositAmount, ...(args ? args : []), 0, 0]
 | |
|     }
 | |
|   ];
 | |
| 
 | |
|   const tx = await dsaWallet0.connect(wallet0).cast(...encodeSpells(spells), DEAD_ADDRESS);
 | |
| 
 | |
|   const FromBalanceAfter = await tokenFrom.balanceOf(dsaWallet0.address);
 | |
|   console.log("Balance after: ", toEther(FromBalanceAfter));
 | |
| 
 | |
|   const imUsdBalance = await imUsdToken.balanceOf(dsaWallet0.address);
 | |
|   console.log("imUSD balance: ", toEther(imUsdBalance));
 | |
| 
 | |
|   const imUsdVaultBalance = await imUsdVault.balanceOf(dsaWallet0.address);
 | |
|   console.log("imUSD Vault balance: ", toEther(imUsdVaultBalance));
 | |
| 
 | |
|   // Should have something in the vault but no imUSD
 | |
|   expect(await imUsdToken.balanceOf(dsaWallet0.address)).to.be.eq(0);
 | |
|   expect(await imUsdVault.balanceOf(dsaWallet0.address)).to.be.gt(imUsdVaultBalanceBefore);
 | |
|   expect(FromBalanceAfter).to.eq(FromBalanceBefore.sub(depositAmount));
 | |
| };
 | |
| 
 | |
| export const executeAndAssertWithdraw = async (
 | |
|   method: string,
 | |
|   tokenTo: IERC20Minimal,
 | |
|   withdrawAmount: BigNumber,
 | |
|   dsaWallet0: Contract,
 | |
|   wallet0: Wallet,
 | |
|   args: any[]
 | |
| ) => {
 | |
|   const tokenToBalanceBefore = await tokenTo.balanceOf(dsaWallet0.address);
 | |
|   console.log("Balance before: ", toEther(tokenToBalanceBefore));
 | |
| 
 | |
|   const imUsdVaultBalanceBefore = await imUsdVault.balanceOf(dsaWallet0.address);
 | |
|   console.log("imUSD Vault balance before: ", toEther(imUsdVaultBalanceBefore));
 | |
| 
 | |
|   const spells = [
 | |
|     {
 | |
|       connector: connectorName,
 | |
|       method,
 | |
|       args: [tokenTo.address, withdrawAmount, ...(args ? args : []), 0, 0]
 | |
|     }
 | |
|   ];
 | |
| 
 | |
|   const tx = await dsaWallet0.connect(wallet0).cast(...encodeSpells(spells), DEAD_ADDRESS);
 | |
| 
 | |
|   const imUsdVaultBalanceAfter = await imUsdVault.balanceOf(dsaWallet0.address);
 | |
|   console.log("imUSD Vault balance after: ", toEther(imUsdVaultBalanceAfter));
 | |
| 
 | |
|   const tokenToBalanceAfter = await tokenTo.balanceOf(dsaWallet0.address);
 | |
|   console.log("Balance after: ", toEther(tokenToBalanceAfter));
 | |
| 
 | |
|   expect(imUsdVaultBalanceAfter).to.be.eq(imUsdVaultBalanceBefore.sub(withdrawAmount));
 | |
|   expect(tokenToBalanceAfter).to.gt(tokenToBalanceBefore);
 | |
| };
 | 
