mirror of
				https://github.com/Instadapp/Gelato-automations.git
				synced 2024-07-29 22:28:07 +00:00 
			
		
		
		
	Add VAT fees
This commit is contained in:
		
							parent
							
								
									20e82596b7
								
							
						
					
					
						commit
						a7a204be5e
					
				|  | @ -4,3 +4,6 @@ pragma solidity 0.7.4; | ||||||
| function GAS_COSTS_FOR_FULL_REFINANCE() pure returns (uint256[4] memory) { | function GAS_COSTS_FOR_FULL_REFINANCE() pure returns (uint256[4] memory) { | ||||||
|     return [uint256(2519000), 3140500, 3971000, 4345000]; |     return [uint256(2519000), 3140500, 3971000, 4345000]; | ||||||
| } | } | ||||||
|  | 
 | ||||||
|  | uint256 constant VAT = 20; | ||||||
|  | uint256 constant VAULT_CREATION_COST = 100000; | ||||||
|  |  | ||||||
|  | @ -2,12 +2,16 @@ | ||||||
| pragma solidity 0.7.4; | pragma solidity 0.7.4; | ||||||
| pragma experimental ABIEncoderV2; | pragma experimental ABIEncoderV2; | ||||||
| 
 | 
 | ||||||
| import {add, sub, wmul, wdiv} from "../../vendor/DSMath.sol"; | import {add, sub, mul, wmul, wdiv} from "../../vendor/DSMath.sol"; | ||||||
| import { | import { | ||||||
|     INSTA_POOL_RESOLVER, |     INSTA_POOL_RESOLVER, | ||||||
|     ROUTE_1_TOLERANCE |     ROUTE_1_TOLERANCE | ||||||
| } from "../../constants/CInstaDapp.sol"; | } from "../../constants/CInstaDapp.sol"; | ||||||
| import {GAS_COSTS_FOR_FULL_REFINANCE} from "../../constants/CDebtBridge.sol"; | import { | ||||||
|  |     GAS_COSTS_FOR_FULL_REFINANCE, | ||||||
|  |     VAT, | ||||||
|  |     VAULT_CREATION_COST | ||||||
|  | } from "../../constants/CDebtBridge.sol"; | ||||||
| import { | import { | ||||||
|     IInstaPoolResolver |     IInstaPoolResolver | ||||||
| } from "../../interfaces/InstaDapp/resolvers/IInstaPoolResolver.sol"; | } from "../../interfaces/InstaDapp/resolvers/IInstaPoolResolver.sol"; | ||||||
|  | @ -77,14 +81,23 @@ function _getGasCostMakerToMaker(bool _newVault, uint256 _route) | ||||||
| { | { | ||||||
|     _checkRouteIndex(_route); |     _checkRouteIndex(_route); | ||||||
|     return |     return | ||||||
|  |         _getGasCostVAT( | ||||||
|             _newVault |             _newVault | ||||||
|             ? add(GAS_COSTS_FOR_FULL_REFINANCE()[_route], 0) |                 ? add( | ||||||
|             : GAS_COSTS_FOR_FULL_REFINANCE()[_route]; |                     GAS_COSTS_FOR_FULL_REFINANCE()[_route], | ||||||
|  |                     VAULT_CREATION_COST | ||||||
|  |                 ) | ||||||
|  |                 : GAS_COSTS_FOR_FULL_REFINANCE()[_route] | ||||||
|  |         ); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| function _getGasCostMakerToCompound(uint256 _route) pure returns (uint256) { | function _getGasCostMakerToCompound(uint256 _route) pure returns (uint256) { | ||||||
|     _checkRouteIndex(_route); |     _checkRouteIndex(_route); | ||||||
|     return GAS_COSTS_FOR_FULL_REFINANCE()[_route]; |     return _getGasCostVAT(GAS_COSTS_FOR_FULL_REFINANCE()[_route]); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | function _getGasCostVAT(uint256 _rawGasCost) pure returns (uint256) { | ||||||
|  |     return mul(_rawGasCost, add(100, VAT)) / 100; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| function _getRealisedDebt(uint256 _debtToMove) pure returns (uint256) { | function _getRealisedDebt(uint256 _debtToMove) pure returns (uint256) { | ||||||
|  |  | ||||||
							
								
								
									
										6
									
								
								test/helpers/constants/GasConstant.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								test/helpers/constants/GasConstant.js
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,6 @@ | ||||||
|  | module.exports = async () => { | ||||||
|  |   return { | ||||||
|  |     VAT: 20, | ||||||
|  |     VAULT_CREATION_COST: 100000, | ||||||
|  |   }; | ||||||
|  | }; | ||||||
							
								
								
									
										26
									
								
								test/helpers/services/gelato/getGasCostForFullRefinance.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								test/helpers/services/gelato/getGasCostForFullRefinance.js
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,26 @@ | ||||||
|  | const gasConstants = require("../../constants/GasConstant"); | ||||||
|  | 
 | ||||||
|  | module.exports = async function (route, withVaultCreation) { | ||||||
|  |   let rawGasCost; | ||||||
|  |   const gasCons = await gasConstants(); | ||||||
|  |   switch (route) { | ||||||
|  |     case 0: | ||||||
|  |       rawGasCost = 2519000; // 2290000 * 1,1 // gas left method measure : 2290000 - 2106637 = 183363 | gas reporter : 2290000 - 1789126 = 500874
 | ||||||
|  |       break; | ||||||
|  |     case 1: | ||||||
|  |       rawGasCost = 3140500; // 2855000 * 1,1 // gas left method measure : 2855000 - 2667325 = 187675 | gas reporter : 2855000 - 2244814 = 610186
 | ||||||
|  |       break; | ||||||
|  |     case 2: | ||||||
|  |       rawGasCost = 3971000; // 3610000 * 1,1 // gas left method measure : 3610000 - 3423279 = 186721 | gas reporter : 3610000 - 3031103 = 578897
 | ||||||
|  |       break; | ||||||
|  |     case 3: | ||||||
|  |       rawGasCost = 4345000; // 3950000 * 1,1 // gas left method measure : 3950000 - 3764004 = 185996 | gas reporter : 3950000 - 3313916 = 636084
 | ||||||
|  |       break; | ||||||
|  |     default: | ||||||
|  |       break; | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   return withVaultCreation | ||||||
|  |     ? ((rawGasCost + gasCons.VAULT_CREATION_COST) * (100 + gasCons.VAT)) / 100 | ||||||
|  |     : (rawGasCost * (100 + gasCons.VAT)) / 100; | ||||||
|  | }; | ||||||
|  | @ -6,7 +6,7 @@ const GelatoCoreLib = require("@gelatonetwork/core"); | ||||||
| 
 | 
 | ||||||
| const setupFullRefinanceMakerToCompound = require("./helpers/setupFullRefinanceMakerToCompound"); | const setupFullRefinanceMakerToCompound = require("./helpers/setupFullRefinanceMakerToCompound"); | ||||||
| const getInstaPoolV2Route = require("../../../../helpers/services/InstaDapp/getInstaPoolV2Route"); | const getInstaPoolV2Route = require("../../../../helpers/services/InstaDapp/getInstaPoolV2Route"); | ||||||
| const getGasCostForFullRefinance = require("./helpers/services/getGasCostForFullRefinance"); | const getGasCostForFullRefinance = require("../../../../helpers/services/gelato/getGasCostForFullRefinance"); | ||||||
| 
 | 
 | ||||||
| // This test showcases how to submit a task refinancing a Users debt position from
 | // This test showcases how to submit a task refinancing a Users debt position from
 | ||||||
| // Maker to Compound using Gelato
 | // Maker to Compound using Gelato
 | ||||||
|  |  | ||||||
|  | @ -5,7 +5,7 @@ const GelatoCoreLib = require("@gelatonetwork/core"); | ||||||
| 
 | 
 | ||||||
| const setupFullRefinanceMakerToMakerWithVaultBCreation = require("./helpers/setupFullRefinanceMakerToMakerWithVaultBCreation"); | const setupFullRefinanceMakerToMakerWithVaultBCreation = require("./helpers/setupFullRefinanceMakerToMakerWithVaultBCreation"); | ||||||
| const getInstaPoolV2Route = require("../../../../helpers/services/InstaDapp/getInstaPoolV2Route"); | const getInstaPoolV2Route = require("../../../../helpers/services/InstaDapp/getInstaPoolV2Route"); | ||||||
| const getGasCostForFullRefinance = require("./helpers/services/getGasCostForFullRefinance"); | const getGasCostForFullRefinance = require("./../../../../helpers/services/gelato/getGasCostForFullRefinance"); | ||||||
| 
 | 
 | ||||||
| // This test showcases how to submit a task refinancing a Users debt position from
 | // This test showcases how to submit a task refinancing a Users debt position from
 | ||||||
| // Maker to Compound using Gelato
 | // Maker to Compound using Gelato
 | ||||||
|  | @ -223,7 +223,7 @@ describe("Full Debt Bridge refinancing loan from ETH-A to ETH-B with vault creat | ||||||
|       ); |       ); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     const gasCost = await getGasCostForFullRefinance(route); |     const gasCost = await getGasCostForFullRefinance(route, true); | ||||||
| 
 | 
 | ||||||
|     const gasFeesPaidFromCol = ethers.BigNumber.from(gasCost).mul( |     const gasFeesPaidFromCol = ethers.BigNumber.from(gasCost).mul( | ||||||
|       gelatoGasPrice |       gelatoGasPrice | ||||||
|  |  | ||||||
|  | @ -5,7 +5,7 @@ const GelatoCoreLib = require("@gelatonetwork/core"); | ||||||
| 
 | 
 | ||||||
| const setupFullRefinanceMakerToMaker = require("./helpers/setupFullRefinanceMakerToMaker"); | const setupFullRefinanceMakerToMaker = require("./helpers/setupFullRefinanceMakerToMaker"); | ||||||
| const getInstaPoolV2Route = require("../../../../helpers/services/InstaDapp/getInstaPoolV2Route"); | const getInstaPoolV2Route = require("../../../../helpers/services/InstaDapp/getInstaPoolV2Route"); | ||||||
| const getGasCostForFullRefinance = require("./helpers/services/getGasCostForFullRefinance"); | const getGasCostForFullRefinance = require("../../../../helpers/services/gelato/getGasCostForFullRefinance"); | ||||||
| 
 | 
 | ||||||
| // This test showcases how to submit a task refinancing a Users debt position from
 | // This test showcases how to submit a task refinancing a Users debt position from
 | ||||||
| // Maker to Compound using Gelato
 | // Maker to Compound using Gelato
 | ||||||
|  |  | ||||||
|  | @ -5,7 +5,7 @@ const GelatoCoreLib = require("@gelatonetwork/core"); | ||||||
| 
 | 
 | ||||||
| const setupFullRefinanceMakerToMaker = require("./helpers/setupFullRefinanceMakerToMaker"); | const setupFullRefinanceMakerToMaker = require("./helpers/setupFullRefinanceMakerToMaker"); | ||||||
| const getInstaPoolV2Route = require("../../../../helpers/services/InstaDapp/getInstaPoolV2Route"); | const getInstaPoolV2Route = require("../../../../helpers/services/InstaDapp/getInstaPoolV2Route"); | ||||||
| const getGasCostForFullRefinance = require("./helpers/services/getGasCostForFullRefinance"); | const getGasCostForFullRefinance = require("../../../../helpers/services/gelato/getGasCostForFullRefinance"); | ||||||
| 
 | 
 | ||||||
| // This test showcases how to submit a task refinancing a Users debt position from
 | // This test showcases how to submit a task refinancing a Users debt position from
 | ||||||
| // Maker to Compound using Gelato
 | // Maker to Compound using Gelato
 | ||||||
|  | @ -244,7 +244,7 @@ describe("Full Debt Bridge refinancing loan from ETH-A to ETH-B with Vault B cre | ||||||
|       ); |       ); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     const gasCost = await getGasCostForFullRefinance(route); |     const gasCost = await getGasCostForFullRefinance(route, true); | ||||||
| 
 | 
 | ||||||
|     const gasFeesPaidFromCol = ethers.BigNumber.from(gasCost).mul( |     const gasFeesPaidFromCol = ethers.BigNumber.from(gasCost).mul( | ||||||
|       gelatoGasPrice |       gelatoGasPrice | ||||||
|  |  | ||||||
|  | @ -1,14 +0,0 @@ | ||||||
| module.exports = async function (route) { |  | ||||||
|   switch (route) { |  | ||||||
|     case 0: |  | ||||||
|       return 2519000; // 2290000 * 1,1 // gas left method measure : 2290000 - 2106637 = 183363 | gas reporter : 2290000 - 1789126 = 500874
 |  | ||||||
|     case 1: |  | ||||||
|       return 3140500; // 2855000 * 1,1 // gas left method measure : 2855000 - 2667325 = 187675 | gas reporter : 2855000 - 2244814 = 610186
 |  | ||||||
|     case 2: |  | ||||||
|       return 3971000; // 3610000 * 1,1 // gas left method measure : 3610000 - 3423279 = 186721 | gas reporter : 3610000 - 3031103 = 578897
 |  | ||||||
|     case 3: |  | ||||||
|       return 4345000; // 3950000 * 1,1 // gas left method measure : 3950000 - 3764004 = 185996 | gas reporter : 3950000 - 3313916 = 636084
 |  | ||||||
|     default: |  | ||||||
|       break; |  | ||||||
|   } |  | ||||||
| }; |  | ||||||
|  | @ -3,6 +3,7 @@ const hre = require("hardhat"); | ||||||
| const { deployments, ethers } = hre; | const { deployments, ethers } = hre; | ||||||
| 
 | 
 | ||||||
| const InstaPoolResolver = require("../../../artifacts/contracts/interfaces/InstaDapp/resolvers/IInstaPoolResolver.sol/IInstaPoolResolver.json"); | const InstaPoolResolver = require("../../../artifacts/contracts/interfaces/InstaDapp/resolvers/IInstaPoolResolver.sol/IInstaPoolResolver.json"); | ||||||
|  | const getGasCostForFullRefinance = require("./../../helpers/services/gelato/getGasCostForFullRefinance"); | ||||||
| const DAI = hre.network.config.DAI; | const DAI = hre.network.config.DAI; | ||||||
| 
 | 
 | ||||||
| describe("FGelatoDebtBridge Unit Tests", function () { | describe("FGelatoDebtBridge Unit Tests", function () { | ||||||
|  | @ -74,52 +75,60 @@ describe("FGelatoDebtBridge Unit Tests", function () { | ||||||
|     ).to.be.revertedWith("FGelatoDebtBridge._getFlashLoanRoute: illiquid"); |     ).to.be.revertedWith("FGelatoDebtBridge._getFlashLoanRoute: illiquid"); | ||||||
|   }); |   }); | ||||||
| 
 | 
 | ||||||
|   it("getGasCostMakerToMaker should return 2519000 gas limit for route 0 (Dydx) and new vault", async function () { |   it("getGasCostMakerToMaker should return 3142800 gas limit for route 0 (Dydx) and new vault", async function () { | ||||||
|  |     const expectedGasCost = await getGasCostForFullRefinance(0, true); | ||||||
|     expect( |     expect( | ||||||
|       await fGelatoDebtBridgeMock.getGasCostMakerToMaker(true, 0) |       await fGelatoDebtBridgeMock.getGasCostMakerToMaker(true, 0) | ||||||
|     ).to.be.equal(2519000); |     ).to.be.equal(expectedGasCost); | ||||||
|   }); |   }); | ||||||
| 
 | 
 | ||||||
|   it("getGasCostMakerToMaker should return 2519000 gas limit for route 0 (Dydx)", async function () { |   it("getGasCostMakerToMaker should return 3022800 gas limit for route 0 (Dydx)", async function () { | ||||||
|  |     const expectedGasCost = await getGasCostForFullRefinance(0); | ||||||
|     expect( |     expect( | ||||||
|       await fGelatoDebtBridgeMock.getGasCostMakerToMaker(false, 0) |       await fGelatoDebtBridgeMock.getGasCostMakerToMaker(false, 0) | ||||||
|     ).to.be.equal(2519000); |     ).to.be.equal(expectedGasCost); | ||||||
|   }); |   }); | ||||||
| 
 | 
 | ||||||
|   it("getGasCostMakerToMaker should return 3140500 gas limit for route 1 (maker) and new vault", async function () { |   it("getGasCostMakerToMaker should return 3888600 gas limit for route 1 (maker) and new vault", async function () { | ||||||
|  |     const expectedGasCost = await getGasCostForFullRefinance(1, true); | ||||||
|     expect( |     expect( | ||||||
|       await fGelatoDebtBridgeMock.getGasCostMakerToMaker(true, 1) |       await fGelatoDebtBridgeMock.getGasCostMakerToMaker(true, 1) | ||||||
|     ).to.be.equal(3140500); |     ).to.be.equal(expectedGasCost); | ||||||
|   }); |   }); | ||||||
| 
 | 
 | ||||||
|   it("getGasCostMakerToMaker should return 3140500 gas limit for route 1 (maker)", async function () { |   it("getGasCostMakerToMaker should return 3768600 gas limit for route 1 (maker)", async function () { | ||||||
|  |     const expectedGasCost = await getGasCostForFullRefinance(1); | ||||||
|     expect( |     expect( | ||||||
|       await fGelatoDebtBridgeMock.getGasCostMakerToMaker(false, 1) |       await fGelatoDebtBridgeMock.getGasCostMakerToMaker(false, 1) | ||||||
|     ).to.be.equal(3140500); |     ).to.be.equal(expectedGasCost); | ||||||
|   }); |   }); | ||||||
| 
 | 
 | ||||||
|   it("getGasCostMakerToMaker should return 3971000 gas limit for route 2 (compound) and new vault", async function () { |   it("getGasCostMakerToMaker should return 4885200 gas limit for route 2 (compound) and new vault", async function () { | ||||||
|  |     const expectedGasCost = await getGasCostForFullRefinance(2, true); | ||||||
|     expect( |     expect( | ||||||
|       await fGelatoDebtBridgeMock.getGasCostMakerToMaker(true, 2) |       await fGelatoDebtBridgeMock.getGasCostMakerToMaker(true, 2) | ||||||
|     ).to.be.equal(3971000); |     ).to.be.equal(expectedGasCost); | ||||||
|   }); |   }); | ||||||
| 
 | 
 | ||||||
|   it("getGasCostMakerToMaker should return 3971000 gas limit for route 2 (compound)", async function () { |   it("getGasCostMakerToMaker should return 4765200 gas limit for route 2 (compound)", async function () { | ||||||
|  |     const expectedGasCost = await getGasCostForFullRefinance(2); | ||||||
|     expect( |     expect( | ||||||
|       await fGelatoDebtBridgeMock.getGasCostMakerToMaker(false, 2) |       await fGelatoDebtBridgeMock.getGasCostMakerToMaker(false, 2) | ||||||
|     ).to.be.equal(3971000); |     ).to.be.equal(expectedGasCost); | ||||||
|   }); |   }); | ||||||
| 
 | 
 | ||||||
|   it("getGasCostMakerToMaker should return 4345000 gas limit for route 3 (aave) and new vault", async function () { |   it("getGasCostMakerToMaker should return 5334000 gas limit for route 3 (aave) and new vault", async function () { | ||||||
|  |     const expectedGasCost = await getGasCostForFullRefinance(3, true); | ||||||
|     expect( |     expect( | ||||||
|       await fGelatoDebtBridgeMock.getGasCostMakerToMaker(true, 3) |       await fGelatoDebtBridgeMock.getGasCostMakerToMaker(true, 3) | ||||||
|     ).to.be.equal(4345000); |     ).to.be.equal(expectedGasCost); | ||||||
|   }); |   }); | ||||||
| 
 | 
 | ||||||
|   it("getGasCostMakerToMaker should return 4345000 gas limit for route 3 (aave)", async function () { |   it("getGasCostMakerToMaker should return 5214000 gas limit for route 3 (aave)", async function () { | ||||||
|  |     const expectedGasCost = await getGasCostForFullRefinance(3); | ||||||
|     expect( |     expect( | ||||||
|       await fGelatoDebtBridgeMock.getGasCostMakerToMaker(false, 3) |       await fGelatoDebtBridgeMock.getGasCostMakerToMaker(false, 3) | ||||||
|     ).to.be.equal(4345000); |     ).to.be.equal(expectedGasCost); | ||||||
|   }); |   }); | ||||||
| 
 | 
 | ||||||
|   it("getGasCostMakerToMaker should revert with invalid route index when the inputed route exceed 4", async function () { |   it("getGasCostMakerToMaker should revert with invalid route index when the inputed route exceed 4", async function () { | ||||||
|  | @ -130,28 +139,32 @@ describe("FGelatoDebtBridge Unit Tests", function () { | ||||||
|     ); |     ); | ||||||
|   }); |   }); | ||||||
| 
 | 
 | ||||||
|   it("getGasCostMakerToCompound should return 2519000 gas limit for route 0 (Dydx)", async function () { |   it("getGasCostMakerToCompound should return 3022800 gas limit for route 0 (Dydx)", async function () { | ||||||
|  |     const expectedGasCost = await getGasCostForFullRefinance(0); | ||||||
|     expect( |     expect( | ||||||
|       await fGelatoDebtBridgeMock.getGasCostMakerToCompound(0) |       await fGelatoDebtBridgeMock.getGasCostMakerToCompound(0) | ||||||
|     ).to.be.equal(2519000); |     ).to.be.equal(expectedGasCost); | ||||||
|   }); |   }); | ||||||
| 
 | 
 | ||||||
|   it("getGasCostMakerToCompound should return 3140500 gas limit for route 1 (Maker)", async function () { |   it("getGasCostMakerToCompound should return 3768600 gas limit for route 1 (Maker)", async function () { | ||||||
|  |     const expectedGasCost = await getGasCostForFullRefinance(1); | ||||||
|     expect( |     expect( | ||||||
|       await fGelatoDebtBridgeMock.getGasCostMakerToCompound(1) |       await fGelatoDebtBridgeMock.getGasCostMakerToCompound(1) | ||||||
|     ).to.be.equal(3140500); |     ).to.be.equal(expectedGasCost); | ||||||
|   }); |   }); | ||||||
| 
 | 
 | ||||||
|   it("getGasCostMakerToCompound should return 3971000 gas limit for route 2 (Compound)", async function () { |   it("getGasCostMakerToCompound should return 4765200 gas limit for route 2 (Compound)", async function () { | ||||||
|  |     const expectedGasCost = await getGasCostForFullRefinance(2); | ||||||
|     expect( |     expect( | ||||||
|       await fGelatoDebtBridgeMock.getGasCostMakerToCompound(2) |       await fGelatoDebtBridgeMock.getGasCostMakerToCompound(2) | ||||||
|     ).to.be.equal(3971000); |     ).to.be.equal(expectedGasCost); | ||||||
|   }); |   }); | ||||||
| 
 | 
 | ||||||
|   it("getGasCostMakerToCompound should return 4345000 gas limit for route 3 (Aave)", async function () { |   it("getGasCostMakerToCompound should return 5214000 gas limit for route 3 (Aave)", async function () { | ||||||
|  |     const expectedGasCost = await getGasCostForFullRefinance(3); | ||||||
|     expect( |     expect( | ||||||
|       await fGelatoDebtBridgeMock.getGasCostMakerToCompound(3) |       await fGelatoDebtBridgeMock.getGasCostMakerToCompound(3) | ||||||
|     ).to.be.equal(4345000); |     ).to.be.equal(expectedGasCost); | ||||||
|   }); |   }); | ||||||
| 
 | 
 | ||||||
|   it("getGasCostMakerToCompound should revert with invalid route index when the inputed route exceed 4", async function () { |   it("getGasCostMakerToCompound should revert with invalid route index when the inputed route exceed 4", async function () { | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Shivva
						Shivva