mirror of
				https://github.com/Instadapp/dsa-connectors-2.0.git
				synced 2024-07-29 21:57:39 +00:00 
			
		
		
		
	feat: setup fluid mainnet tests
This commit is contained in:
		
							parent
							
								
									bcc7bbfd15
								
							
						
					
					
						commit
						27941ae1da
					
				|  | @ -6,22 +6,113 @@ import { deployAndEnableConnector } from "../../../scripts/tests/deployAndEnable | ||||||
| import { getMasterSigner } from "../../../scripts/tests/getMasterSigner"; | import { getMasterSigner } from "../../../scripts/tests/getMasterSigner"; | ||||||
| import { buildDSAv2 } from "../../../scripts/tests/buildDSAv2"; | import { buildDSAv2 } from "../../../scripts/tests/buildDSAv2"; | ||||||
| import { ConnectV2Fluid, ConnectV2Fluid__factory } from "../../../typechain"; | import { ConnectV2Fluid, ConnectV2Fluid__factory } from "../../../typechain"; | ||||||
| import { parseEther } from "@ethersproject/units"; | import { parseEther, parseUnits } from "@ethersproject/units"; | ||||||
| import { encodeSpells } from "../../../scripts/tests/encodeSpells"; | import { encodeSpells } from "../../../scripts/tests/encodeSpells"; | ||||||
| import { tokens } from "../../../scripts/tests/mainnet/tokens"; |  | ||||||
| import { constants } from "../../../scripts/constant/constant"; | import { constants } from "../../../scripts/constant/constant"; | ||||||
| import { addLiquidity } from "../../../scripts/tests/addLiquidity"; | import { network, ethers } from "hardhat"; | ||||||
| const { ethers } = hre; |  | ||||||
| import type { Signer, Contract } from "ethers"; | import type { Signer, Contract } from "ethers"; | ||||||
|  | import { BigNumber } from "bignumber.js"; | ||||||
| 
 | 
 | ||||||
| describe("Fluid", function () { | describe("Fluid", function () { | ||||||
|   const connectorName = "FLUID"; |   const connectorName = "FLUID"; | ||||||
|   let connector: any; |   let connector: any; | ||||||
| 
 | 
 | ||||||
|   let wallet0: Signer, wallet1:Signer; |   let wallet0: Signer, wallet1: Signer, wstethHolderSigner: Signer; | ||||||
|  |   let nftId = "6"; | ||||||
|   let dsaWallet0: any; |   let dsaWallet0: any; | ||||||
|   let instaConnectorsV2: Contract; |   let instaConnectorsV2: any; | ||||||
|   let masterSigner: Signer; |   let masterSigner: Signer; | ||||||
|  | 
 | ||||||
|  |   const vaultWstethEth = "0x28680f14C4Bb86B71119BC6e90E4e6D87E6D1f51"; | ||||||
|  | 
 | ||||||
|  |   const wstethHolder = "0x17170904077C84F26c190eC05fF414B7045F4652"; | ||||||
|  | 
 | ||||||
|  |   const WSTETH = "0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0"; | ||||||
|  | 
 | ||||||
|  |   const erc20Abi = [ | ||||||
|  |     { | ||||||
|  |       constant: false, | ||||||
|  |       inputs: [ | ||||||
|  |         { | ||||||
|  |           name: "_spender", | ||||||
|  |           type: "address" | ||||||
|  |         }, | ||||||
|  |         { | ||||||
|  |           name: "_value", | ||||||
|  |           type: "uint256" | ||||||
|  |         } | ||||||
|  |       ], | ||||||
|  |       name: "approve", | ||||||
|  |       outputs: [ | ||||||
|  |         { | ||||||
|  |           name: "", | ||||||
|  |           type: "bool" | ||||||
|  |         } | ||||||
|  |       ], | ||||||
|  |       payable: false, | ||||||
|  |       stateMutability: "nonpayable", | ||||||
|  |       type: "function" | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |       constant: true, | ||||||
|  |       inputs: [], | ||||||
|  |       name: "totalSupply", | ||||||
|  |       outputs: [ | ||||||
|  |         { | ||||||
|  |           name: "", | ||||||
|  |           type: "uint256" | ||||||
|  |         } | ||||||
|  |       ], | ||||||
|  |       payable: false, | ||||||
|  |       stateMutability: "view", | ||||||
|  |       type: "function" | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |       constant: true, | ||||||
|  |       inputs: [ | ||||||
|  |         { | ||||||
|  |           name: "_owner", | ||||||
|  |           type: "address" | ||||||
|  |         } | ||||||
|  |       ], | ||||||
|  |       name: "balanceOf", | ||||||
|  |       outputs: [ | ||||||
|  |         { | ||||||
|  |           name: "balance", | ||||||
|  |           type: "uint256" | ||||||
|  |         } | ||||||
|  |       ], | ||||||
|  |       payable: false, | ||||||
|  |       stateMutability: "view", | ||||||
|  |       type: "function" | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |       constant: false, | ||||||
|  |       inputs: [ | ||||||
|  |         { | ||||||
|  |           name: "_to", | ||||||
|  |           type: "address" | ||||||
|  |         }, | ||||||
|  |         { | ||||||
|  |           name: "_value", | ||||||
|  |           type: "uint256" | ||||||
|  |         } | ||||||
|  |       ], | ||||||
|  |       name: "transfer", | ||||||
|  |       outputs: [ | ||||||
|  |         { | ||||||
|  |           name: "", | ||||||
|  |           type: "bool" | ||||||
|  |         } | ||||||
|  |       ], | ||||||
|  |       payable: false, | ||||||
|  |       stateMutability: "nonpayable", | ||||||
|  |       type: "function" | ||||||
|  |     } | ||||||
|  |   ]; | ||||||
|  | 
 | ||||||
|  |   const wstethToken = new ethers.Contract(WSTETH, erc20Abi); | ||||||
|  | 
 | ||||||
|   before(async () => { |   before(async () => { | ||||||
|     await hre.network.provider.request({ |     await hre.network.provider.request({ | ||||||
|       method: "hardhat_reset", |       method: "hardhat_reset", | ||||||
|  | @ -30,17 +121,20 @@ describe("Fluid", function () { | ||||||
|           forking: { |           forking: { | ||||||
|             // @ts-ignore
 |             // @ts-ignore
 | ||||||
|             jsonRpcUrl: hre.config.networks.hardhat.forking.url, |             jsonRpcUrl: hre.config.networks.hardhat.forking.url, | ||||||
|             blockNumber: 12796965, |             blockNumber: 19261868, | ||||||
|           }, |           }, | ||||||
|         }, |         }, | ||||||
|       ], |       ], | ||||||
|     }); |     }); | ||||||
|  | 
 | ||||||
|     [wallet0, wallet1] = await ethers.getSigners(); |     [wallet0, wallet1] = await ethers.getSigners(); | ||||||
|     masterSigner = await getMasterSigner(); |     masterSigner = await getMasterSigner(); | ||||||
|     instaConnectorsV2 = await ethers.getContractAt( |     instaConnectorsV2 = await ethers.getContractAt( | ||||||
|       abis.core.connectorsV2, |       abis.core.connectorsV2, | ||||||
|       addresses.core.connectorsV2 |       addresses.core.connectorsV2, | ||||||
|  |       masterSigner | ||||||
|     ); |     ); | ||||||
|  |      | ||||||
|     connector = await deployAndEnableConnector({ |     connector = await deployAndEnableConnector({ | ||||||
|       connectorName, |       connectorName, | ||||||
|       contractArtifact: ConnectV2Fluid__factory, |       contractArtifact: ConnectV2Fluid__factory, | ||||||
|  | @ -62,25 +156,74 @@ describe("Fluid", function () { | ||||||
|       expect(!!dsaWallet0.address).to.be.true; |       expect(!!dsaWallet0.address).to.be.true; | ||||||
|     }); |     }); | ||||||
| 
 | 
 | ||||||
|     it("Deposit ETH into DSA wallet", async function () { |     it("Deposit 20 Wsteth into DSA wallet", async function () { | ||||||
|       await wallet0.sendTransaction({ |       await wallet0.sendTransaction({ | ||||||
|         to: dsaWallet0.address, |         to: wstethHolder, | ||||||
|         value: parseEther("10"), |         value: parseEther("200"), | ||||||
|       }); |       }); | ||||||
|       expect(await ethers.provider.getBalance(dsaWallet0.address)).to.be.gte( | 
 | ||||||
|         parseEther("10") |       await hre.network.provider.request({ | ||||||
|       ); |         method: "hardhat_impersonateAccount", | ||||||
|  |         params: [wstethHolder] | ||||||
|  |       }); | ||||||
|  |    | ||||||
|  |       wstethHolderSigner = await ethers.getSigner(wstethHolder); | ||||||
|  |    | ||||||
|  |       await wstethToken.connect(wstethHolderSigner).transfer(dsaWallet0.address, ethers.utils.parseEther("20")); | ||||||
|  | 
 | ||||||
|  |       expect(await wstethToken.connect(wstethHolderSigner).balanceOf(dsaWallet0.address)).to.be.gte(ethers.utils.parseEther("20")); | ||||||
|     }); |     }); | ||||||
|   }); |   }); | ||||||
| 
 | 
 | ||||||
|  |   // 200 wsteth
 | ||||||
|  | 
 | ||||||
|   describe("Main", function () { |   describe("Main", function () { | ||||||
|     it("should deposit ETH in Aave V2", async function () { |     it("should deposit 10 wsteth in Fluid", async function () { | ||||||
|       const amt = parseEther("1"); |       const amtDeposit = parseEther("10"); | ||||||
|  | 
 | ||||||
|       const spells = [ |       const spells = [ | ||||||
|         { |         { | ||||||
|           connector: connectorName, |           connector: connectorName, | ||||||
|           method: "deposit", |           method: "operate", | ||||||
|           args: [tokens.eth.address, amt, 0, 0], |           args: [ | ||||||
|  |             vaultWstethEth, | ||||||
|  |             '0', // new nft
 | ||||||
|  |             amtDeposit, // +10 collateral
 | ||||||
|  |             '0', // 0 debt
 | ||||||
|  |             '0' | ||||||
|  |           ], | ||||||
|  |         }, | ||||||
|  |       ]; | ||||||
|  | 
 | ||||||
|  |       const tx = await dsaWallet0 | ||||||
|  |         .connect(wallet0) | ||||||
|  |         .cast(...encodeSpells(spells), wallet1.getAddress()); | ||||||
|  | 
 | ||||||
|  |       const receipt = await tx.wait(); | ||||||
|  | 
 | ||||||
|  |       const eventName = "LogOperate(address,uint256,int256,int256)"; | ||||||
|  |       const eventSignatureHash = ethers.utils.keccak256(ethers.utils.toUtf8Bytes(eventName)); | ||||||
|  | 
 | ||||||
|  |       const log = receipt.logs.find((log: { topics: string[]; }) => log.topics[0] === eventSignatureHash); | ||||||
|  | 
 | ||||||
|  |       // expect(await ethers.provider.getBalance(dsaWallet0.address)).to.gte(
 | ||||||
|  |       //   parseEther("1000")
 | ||||||
|  |       // );
 | ||||||
|  |     }); | ||||||
|  |     // 90 wsteth
 | ||||||
|  | 
 | ||||||
|  |     it("should deposit max wsteth in Fluid", async function () { | ||||||
|  |       const spells = [ | ||||||
|  |         { | ||||||
|  |           connector: connectorName, | ||||||
|  |           method: "operate", | ||||||
|  |           args: [ | ||||||
|  |             vaultWstethEth, // matic-usdc vault
 | ||||||
|  |             nftId, // new nft
 | ||||||
|  |             ethers.constants.MaxInt256, // + max collateral
 | ||||||
|  |             0, // 0 debt
 | ||||||
|  |             0 | ||||||
|  |           ], | ||||||
|         }, |         }, | ||||||
|       ]; |       ]; | ||||||
| 
 | 
 | ||||||
|  | @ -90,24 +233,27 @@ describe("Fluid", function () { | ||||||
| 
 | 
 | ||||||
|       await tx.wait(); |       await tx.wait(); | ||||||
| 
 | 
 | ||||||
|       expect(await ethers.provider.getBalance(dsaWallet0.address)).to.eq( |       // expect(await ethers.provider.getBalance(dsaWallet0.address)).to.lte(
 | ||||||
|         parseEther("9") |       //   parseEther("1")
 | ||||||
|       ); |       // );
 | ||||||
|     }); |     }); | ||||||
| 
 | 
 | ||||||
|     it("Should borrow and payback DAI from Aave V2", async function () { |     // 0 wsteth
 | ||||||
|       const amt = parseEther("100"); // 100 DAI
 | 
 | ||||||
|       const setId = "83478237"; |     it("Should borrow 1 ETH", async function () { | ||||||
|  |       const amtBorrow = parseEther("1"); // 1 eth
 | ||||||
|  |        | ||||||
|       const spells = [ |       const spells = [ | ||||||
|         { |         { | ||||||
|           connector: connectorName, |           connector: connectorName, | ||||||
|           method: "borrow", |           method: "operate", | ||||||
|           args: [tokens.dai.address, amt, 2, 0, setId], |           args: [ | ||||||
|         }, |             vaultWstethEth, | ||||||
|         { |             nftId, | ||||||
|           connector: connectorName, |             0, | ||||||
|           method: "payback", |             amtBorrow, | ||||||
|           args: [tokens.dai.address, amt, 2, setId, 0], |             0 | ||||||
|  |           ], | ||||||
|         }, |         }, | ||||||
|       ]; |       ]; | ||||||
| 
 | 
 | ||||||
|  | @ -115,59 +261,31 @@ describe("Fluid", function () { | ||||||
|         .connect(wallet0) |         .connect(wallet0) | ||||||
|         .cast(...encodeSpells(spells), wallet1.getAddress()); |         .cast(...encodeSpells(spells), wallet1.getAddress()); | ||||||
|       await tx.wait(); |       await tx.wait(); | ||||||
|       expect(await ethers.provider.getBalance(dsaWallet0.address)).to.be.lte( |        | ||||||
|         ethers.utils.parseEther("9") |       // expect(await ethers.provider.getBalance(dsaWallet0.address)).to.be.gte(
 | ||||||
|       ); |       //   parseEther("0.099")
 | ||||||
|  |       // );
 | ||||||
|     }); |     }); | ||||||
| 
 | 
 | ||||||
|     it("Should borrow and payback half DAI from Aave V2", async function () { |     // 0 wsteth, 1 eth
 | ||||||
|       const amt = parseEther("100"); // 100 DAI
 |  | ||||||
|       // const setId = "83478237";
 |  | ||||||
|       await addLiquidity("dai", dsaWallet0.address, parseEther("1")); |  | ||||||
|       let spells = [ |  | ||||||
|         { |  | ||||||
|           connector: connectorName, |  | ||||||
|           method: "borrow", |  | ||||||
|           args: [tokens.dai.address, amt, 2, 0, 0], |  | ||||||
|         }, |  | ||||||
|         { |  | ||||||
|           connector: connectorName, |  | ||||||
|           method: "payback", |  | ||||||
|           args: [tokens.dai.address, amt.div(2), 2, 0, 0], |  | ||||||
|         }, |  | ||||||
|       ]; |  | ||||||
| 
 | 
 | ||||||
|       let tx = await dsaWallet0 |     it("Should payback max eth", async function () { | ||||||
|         .connect(wallet0) |       await network.provider.send("hardhat_setBalance", [ | ||||||
|         .cast(...encodeSpells(spells), wallet1.getAddress()); |         dsaWallet0.address, | ||||||
|       await tx.wait(); |         ethers.utils.parseEther("2.0").toHexString(), | ||||||
|       expect(await ethers.provider.getBalance(dsaWallet0.address)).to.be.lte( |       ]); | ||||||
|         ethers.utils.parseEther("9") |  | ||||||
|       ); |  | ||||||
| 
 | 
 | ||||||
|       spells = [ |  | ||||||
|         { |  | ||||||
|           connector: connectorName, |  | ||||||
|           method: "payback", |  | ||||||
|           args: [tokens.dai.address, constants.max_value, 2, 0, 0], |  | ||||||
|         }, |  | ||||||
|       ]; |  | ||||||
| 
 |  | ||||||
|       tx = await dsaWallet0 |  | ||||||
|         .connect(wallet0) |  | ||||||
|         .cast(...encodeSpells(spells), wallet1.getAddress()); |  | ||||||
|       await tx.wait(); |  | ||||||
|       expect(await ethers.provider.getBalance(dsaWallet0.address)).to.be.lte( |  | ||||||
|         ethers.utils.parseEther("9") |  | ||||||
|       ); |  | ||||||
|     }); |  | ||||||
| 
 |  | ||||||
|     it("Should deposit all ETH in Aave V2", async function () { |  | ||||||
|       const spells = [ |       const spells = [ | ||||||
|         { |         { | ||||||
|           connector: connectorName, |           connector: connectorName, | ||||||
|           method: "deposit", |           method: "operate", | ||||||
|           args: [tokens.eth.address, constants.max_value, 0, 0], |           args: [ | ||||||
|  |             vaultWstethEth, | ||||||
|  |             nftId, | ||||||
|  |             0, | ||||||
|  |             ethers.constants.MinInt256, | ||||||
|  |             new BigNumber(parseEther("1").toString()), | ||||||
|  |           ], | ||||||
|         }, |         }, | ||||||
|       ]; |       ]; | ||||||
| 
 | 
 | ||||||
|  | @ -175,52 +293,70 @@ describe("Fluid", function () { | ||||||
|         .connect(wallet0) |         .connect(wallet0) | ||||||
|         .cast(...encodeSpells(spells), wallet1.getAddress()); |         .cast(...encodeSpells(spells), wallet1.getAddress()); | ||||||
|       await tx.wait(); |       await tx.wait(); | ||||||
|       expect(await ethers.provider.getBalance(dsaWallet0.address)).to.be.lte( |        | ||||||
|         ethers.utils.parseEther("0") |       // expect(await ethers.provider.getBalance(dsaWallet0.address)).to.be.lte(
 | ||||||
|       ); |       //   ethers.utils.parseEther("0.2")
 | ||||||
|  |       // );
 | ||||||
|     }); |     }); | ||||||
| 
 | 
 | ||||||
|     it("Should withdraw all ETH from Aave V2", async function () { |     // 0 wsteth, 1 eth
 | ||||||
|  | 
 | ||||||
|  |     it("Should withdraw 2 wsteth", async function () { | ||||||
|  |       const amt = new BigNumber(parseEther("2").toString()).multipliedBy(-1); // 100 Matic
 | ||||||
|  | 
 | ||||||
|       const spells = [ |       const spells = [ | ||||||
|         { |         { | ||||||
|           connector: connectorName, |           connector: connectorName, | ||||||
|           method: "withdraw", |           method: "operate", | ||||||
|           args: [tokens.eth.address, constants.max_value, 0, 0], |           args: [ | ||||||
|  |             vaultWstethEth, | ||||||
|  |             nftId, | ||||||
|  |             amt, | ||||||
|  |             0, // 0 debt
 | ||||||
|  |             0 | ||||||
|  |           ], | ||||||
|         }, |         }, | ||||||
|       ]; |       ]; | ||||||
| 
 | 
 | ||||||
|       const tx = await dsaWallet0 |       const tx = await dsaWallet0 | ||||||
|         .connect(wallet0) |         .connect(wallet0) | ||||||
|         .cast(...encodeSpells(spells), wallet1.getAddress()); |         .cast(...encodeSpells(spells), wallet1.getAddress()); | ||||||
|  | 
 | ||||||
|       await tx.wait(); |       await tx.wait(); | ||||||
|       expect(await ethers.provider.getBalance(dsaWallet0.address)).to.be.gte( | 
 | ||||||
|         ethers.utils.parseEther("10") |       // expect(await ethers.provider.getBalance(dsaWallet0.address)).to.gte(
 | ||||||
|       ); |       //   parseEther("100")
 | ||||||
|  |       // );
 | ||||||
|     }); |     }); | ||||||
| 
 | 
 | ||||||
|     it("should deposit and withdraw", async () => { |     // 2 wsteth, 1 eth
 | ||||||
|       const amt = parseEther("1"); // 1 eth
 | 
 | ||||||
|       const setId = "834782373"; |     it("Should withdraw max wsteth", async function () { | ||||||
|       const spells = [ |       const spells = [ | ||||||
|         { |         { | ||||||
|           connector: connectorName, |           connector: connectorName, | ||||||
|           method: "deposit", |           method: "operate", | ||||||
|           args: [tokens.eth.address, amt, 0, setId], |           args: [ | ||||||
|         }, |             vaultWstethEth, | ||||||
|         { |             nftId, | ||||||
|           connector: connectorName, |             ethers.constants.MinInt256, // min integer value
 | ||||||
|           method: "withdraw", |             0, | ||||||
|           args: [tokens.eth.address, amt, setId, 0], |             0 | ||||||
|  |           ], | ||||||
|         }, |         }, | ||||||
|       ]; |       ]; | ||||||
| 
 | 
 | ||||||
|       const tx = await dsaWallet0 |       const tx = await dsaWallet0 | ||||||
|         .connect(wallet0) |         .connect(wallet0) | ||||||
|         .cast(...encodeSpells(spells), wallet1.getAddress()); |         .cast(...encodeSpells(spells), wallet1.getAddress()); | ||||||
|  | 
 | ||||||
|       await tx.wait(); |       await tx.wait(); | ||||||
|       expect(await ethers.provider.getBalance(dsaWallet0.address)).to.be.gte( | 
 | ||||||
|         ethers.utils.parseEther("10") |       // expect(await ethers.provider.getBalance(dsaWallet0.address)).to.eq(
 | ||||||
|       ); |       //   parseEther("2000")
 | ||||||
|     }); |       // );
 | ||||||
|  |     }); | ||||||
|  | 
 | ||||||
|  |     //  wsteth, 1 eth
 | ||||||
|   }); |   }); | ||||||
| }); | }); | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Shriya Tyagi
						Shriya Tyagi