impermax-sdk 1.2.112 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (171) hide show
  1. package/lib/abis/contracts/IAllowanceTransfer.json +3772 -0
  2. package/lib/abis/contracts/IERC721.json +3515 -0
  3. package/lib/abis/contracts/ITokenizedUniswapV2Position.json +4167 -0
  4. package/lib/abis/contracts/ITokenizedUniswapV3Position.json +5539 -0
  5. package/lib/abis/contracts/IUniswapV3Pool.json +6606 -0
  6. package/lib/abis/contracts/ImpermaxV3Borrowable.json +22131 -0
  7. package/lib/abis/contracts/ImpermaxV3Collateral.json +22988 -0
  8. package/lib/abis/contracts/ImpermaxV3Factory.json +17645 -0
  9. package/lib/abis/contracts/ImpermaxV3UniV2Router01.json +32488 -0
  10. package/lib/abis/contracts/ImpermaxV3UniV3Router01.json +37742 -0
  11. package/lib/abis/contracts/PoolTokenRouter01.json +9058 -0
  12. package/lib/config/amms.d.ts +0 -2
  13. package/lib/config/amms.js +0 -3
  14. package/lib/config/chainId.d.ts +2 -0
  15. package/lib/config/chainId.js +26 -0
  16. package/lib/config/contracts/routers.d.ts +3 -2
  17. package/lib/config/contracts/routers.js +46 -22
  18. package/lib/config/factories.js +1 -0
  19. package/lib/config/farms.d.ts +0 -2
  20. package/lib/config/farms.js +0 -3
  21. package/lib/config/types.d.ts +14 -1
  22. package/lib/config/types.js +15 -1
  23. package/lib/index.d.ts +6 -5
  24. package/lib/index.js +11 -4
  25. package/lib/offchain/account/index.d.ts +4 -2
  26. package/lib/offchain/account/index.js +7 -3
  27. package/lib/offchain/account/lendingPool/index.d.ts +2 -1
  28. package/lib/offchain/account/lendingPool/index.js +3 -1
  29. package/lib/offchain/account/lendingPool/offchainAccountBorrowable.d.ts +0 -3
  30. package/lib/offchain/account/lendingPool/offchainAccountBorrowable.js +1 -27
  31. package/lib/offchain/account/lendingPool/offchainAccountCollateral.d.ts +0 -2
  32. package/lib/offchain/account/lendingPool/offchainAccountCollateral.js +2 -14
  33. package/lib/offchain/account/lendingPool/offchainAccountLendingPool.d.ts +11 -4
  34. package/lib/offchain/account/lendingPool/offchainAccountLendingPool.js +16 -15
  35. package/lib/offchain/account/lendingPool/offchainLeveragedPosition.d.ts +25 -0
  36. package/lib/offchain/account/lendingPool/offchainLeveragedPosition.js +116 -0
  37. package/lib/offchain/account/offchainAccount.d.ts +6 -6
  38. package/lib/offchain/account/offchainAccount.js +7 -7
  39. package/lib/offchain/account/offchainMultichainAccount.d.ts +34 -0
  40. package/lib/offchain/account/offchainMultichainAccount.js +66 -0
  41. package/lib/offchain/account/vault/index.d.ts +3 -0
  42. package/lib/offchain/account/vault/index.js +7 -0
  43. package/lib/offchain/account/vault/offchainAccountVault.d.ts +16 -0
  44. package/lib/offchain/account/{offchainAccountLendingVault.js → vault/offchainAccountVault.js} +14 -14
  45. package/lib/offchain/index.d.ts +3 -2
  46. package/lib/offchain/index.js +5 -3
  47. package/lib/offchain/lendingPool/offchainCollateral.d.ts +1 -0
  48. package/lib/offchain/lendingPool/offchainCollateral.js +6 -0
  49. package/lib/offchain/lendingPool/offchainLendingPool.d.ts +14 -1
  50. package/lib/offchain/lendingPool/offchainLendingPool.js +47 -0
  51. package/lib/offchain/offchain.d.ts +8 -15
  52. package/lib/offchain/offchain.js +16 -19
  53. package/lib/offchain/offchainAPRHelper.js +0 -1
  54. package/lib/offchain/offchainInitializer.d.ts +4 -4
  55. package/lib/offchain/offchainInitializer.js +4 -4
  56. package/lib/offchain/offchainMultichain.d.ts +50 -0
  57. package/lib/offchain/offchainMultichain.js +75 -0
  58. package/lib/offchain/offchainTypes.d.ts +1 -1
  59. package/lib/offchain/vault/index.d.ts +6 -0
  60. package/lib/offchain/vault/index.js +14 -0
  61. package/lib/offchain/vault/offchainHedgedVault.d.ts +9 -0
  62. package/lib/offchain/vault/offchainHedgedVault.js +57 -0
  63. package/lib/offchain/vault/offchainLendingVault.d.ts +16 -0
  64. package/lib/offchain/vault/offchainLendingVault.js +73 -0
  65. package/lib/offchain/vault/offchainLeveragedVault.d.ts +9 -0
  66. package/lib/offchain/vault/offchainLeveragedVault.js +57 -0
  67. package/lib/offchain/{offchainLendingVault.d.ts → vault/offchainVault.d.ts} +16 -7
  68. package/lib/offchain/{offchainLendingVault.js → vault/offchainVault.js} +33 -17
  69. package/lib/onchain/account/lendingPool/index.d.ts +8 -1
  70. package/lib/onchain/account/lendingPool/index.js +38 -1
  71. package/lib/onchain/account/lendingPool/nftlp/index.d.ts +4 -0
  72. package/lib/onchain/account/lendingPool/nftlp/index.js +11 -0
  73. package/lib/onchain/account/lendingPool/nftlp/onchainAccountNftlp.d.ts +7 -0
  74. package/lib/onchain/account/lendingPool/nftlp/onchainAccountNftlp.js +12 -0
  75. package/lib/onchain/account/lendingPool/nftlp/onchainAccountNftlpUniswapV3.d.ts +4 -0
  76. package/lib/onchain/account/lendingPool/nftlp/onchainAccountNftlpUniswapV3.js +13 -0
  77. package/lib/onchain/account/lendingPool/onchainAccountBorrowable.d.ts +12 -7
  78. package/lib/onchain/account/lendingPool/onchainAccountBorrowable.js +5 -50
  79. package/lib/onchain/account/lendingPool/onchainAccountBorrowableV2.d.ts +10 -0
  80. package/lib/onchain/account/lendingPool/onchainAccountBorrowableV2.js +55 -0
  81. package/lib/onchain/account/lendingPool/onchainAccountBorrowableV3.d.ts +10 -0
  82. package/lib/onchain/account/lendingPool/onchainAccountBorrowableV3.js +28 -0
  83. package/lib/onchain/account/lendingPool/onchainAccountCollateral.d.ts +6 -19
  84. package/lib/onchain/account/lendingPool/onchainAccountCollateral.js +7 -90
  85. package/lib/onchain/account/lendingPool/onchainAccountCollateralV2.d.ts +25 -0
  86. package/lib/onchain/account/lendingPool/onchainAccountCollateralV2.js +99 -0
  87. package/lib/onchain/account/lendingPool/onchainAccountCollateralV3.d.ts +18 -0
  88. package/lib/onchain/account/lendingPool/onchainAccountCollateralV3.js +44 -0
  89. package/lib/onchain/account/lendingPool/onchainAccountLendingPool.d.ts +19 -34
  90. package/lib/onchain/account/lendingPool/onchainAccountLendingPool.js +17 -227
  91. package/lib/onchain/account/lendingPool/onchainAccountLendingPoolV2.d.ts +44 -0
  92. package/lib/onchain/account/lendingPool/onchainAccountLendingPoolV2.js +285 -0
  93. package/lib/onchain/account/lendingPool/onchainAccountLendingPoolV3.d.ts +27 -0
  94. package/lib/onchain/account/lendingPool/onchainAccountLendingPoolV3.js +32 -0
  95. package/lib/onchain/account/onchainAccount.js +1 -2
  96. package/lib/onchain/account/onchainAccountLendingVault.d.ts +3 -3
  97. package/lib/onchain/impermaxFactory/index.d.ts +3 -1
  98. package/lib/onchain/impermaxFactory/index.js +5 -1
  99. package/lib/onchain/impermaxFactory/lendingPool/index.d.ts +8 -1
  100. package/lib/onchain/impermaxFactory/lendingPool/index.js +39 -1
  101. package/lib/onchain/impermaxFactory/lendingPool/nftlp/index.d.ts +4 -0
  102. package/lib/onchain/impermaxFactory/lendingPool/nftlp/index.js +11 -0
  103. package/lib/onchain/impermaxFactory/lendingPool/nftlp/onchainNftlp.d.ts +22 -0
  104. package/lib/onchain/impermaxFactory/lendingPool/nftlp/onchainNftlp.js +19 -0
  105. package/lib/onchain/impermaxFactory/lendingPool/nftlp/onchainNftlpUniswapV3.d.ts +24 -0
  106. package/lib/onchain/impermaxFactory/lendingPool/nftlp/onchainNftlpUniswapV3.js +90 -0
  107. package/lib/onchain/impermaxFactory/lendingPool/onchainBorrowable.d.ts +15 -11
  108. package/lib/onchain/impermaxFactory/lendingPool/onchainBorrowable.js +5 -24
  109. package/lib/onchain/impermaxFactory/lendingPool/onchainBorrowableV2.d.ts +9 -0
  110. package/lib/onchain/impermaxFactory/lendingPool/onchainBorrowableV2.js +36 -0
  111. package/lib/onchain/impermaxFactory/lendingPool/onchainBorrowableV3.d.ts +7 -0
  112. package/lib/onchain/impermaxFactory/lendingPool/onchainBorrowableV3.js +23 -0
  113. package/lib/onchain/impermaxFactory/lendingPool/onchainCollateral.d.ts +5 -16
  114. package/lib/onchain/impermaxFactory/lendingPool/onchainCollateral.js +6 -43
  115. package/lib/onchain/impermaxFactory/lendingPool/onchainCollateralV2.d.ts +20 -0
  116. package/lib/onchain/impermaxFactory/lendingPool/onchainCollateralV2.js +58 -0
  117. package/lib/onchain/impermaxFactory/lendingPool/onchainCollateralV3.d.ts +13 -0
  118. package/lib/onchain/impermaxFactory/lendingPool/onchainCollateralV3.js +36 -0
  119. package/lib/onchain/impermaxFactory/lendingPool/onchainLendingPool.d.ts +32 -47
  120. package/lib/onchain/impermaxFactory/lendingPool/onchainLendingPool.js +28 -314
  121. package/lib/onchain/impermaxFactory/lendingPool/onchainLendingPoolV2.d.ts +76 -0
  122. package/lib/onchain/impermaxFactory/lendingPool/onchainLendingPoolV2.js +338 -0
  123. package/lib/onchain/impermaxFactory/lendingPool/onchainLendingPoolV3.d.ts +42 -0
  124. package/lib/onchain/impermaxFactory/lendingPool/onchainLendingPoolV3.js +39 -0
  125. package/lib/onchain/impermaxFactory/onchainImpermaxFactory.d.ts +19 -9
  126. package/lib/onchain/impermaxFactory/onchainImpermaxFactory.js +16 -26
  127. package/lib/onchain/impermaxFactory/onchainImpermaxFactoryV2.d.ts +16 -0
  128. package/lib/onchain/impermaxFactory/onchainImpermaxFactoryV2.js +81 -0
  129. package/lib/onchain/impermaxFactory/onchainImpermaxFactoryV3.d.ts +16 -0
  130. package/lib/onchain/impermaxFactory/onchainImpermaxFactoryV3.js +88 -0
  131. package/lib/onchain/interactions/lendingPool/index.d.ts +8 -1
  132. package/lib/onchain/interactions/lendingPool/index.js +38 -1
  133. package/lib/onchain/interactions/lendingPool/nftlp/index.d.ts +4 -0
  134. package/lib/onchain/interactions/lendingPool/nftlp/index.js +11 -0
  135. package/lib/onchain/interactions/lendingPool/nftlp/onchainInteractionsNftlp.d.ts +7 -0
  136. package/lib/onchain/interactions/lendingPool/nftlp/onchainInteractionsNftlp.js +12 -0
  137. package/lib/onchain/interactions/lendingPool/nftlp/onchainInteractionsNftlpUniswapV3.d.ts +4 -0
  138. package/lib/onchain/interactions/lendingPool/nftlp/onchainInteractionsNftlpUniswapV3.js +13 -0
  139. package/lib/onchain/interactions/lendingPool/onchainInteractionsBorrowable.d.ts +6 -10
  140. package/lib/onchain/interactions/lendingPool/onchainInteractionsBorrowable.js +5 -37
  141. package/lib/onchain/interactions/lendingPool/onchainInteractionsBorrowableV2.d.ts +15 -0
  142. package/lib/onchain/interactions/lendingPool/onchainInteractionsBorrowableV2.js +63 -0
  143. package/lib/onchain/interactions/lendingPool/onchainInteractionsBorrowableV3.d.ts +9 -0
  144. package/lib/onchain/interactions/lendingPool/onchainInteractionsBorrowableV3.js +14 -0
  145. package/lib/onchain/interactions/lendingPool/onchainInteractionsCollateral.d.ts +3 -15
  146. package/lib/onchain/interactions/lendingPool/onchainInteractionsCollateral.js +5 -37
  147. package/lib/onchain/interactions/lendingPool/onchainInteractionsCollateralV2.d.ts +20 -0
  148. package/lib/onchain/interactions/lendingPool/onchainInteractionsCollateralV2.js +48 -0
  149. package/lib/onchain/interactions/lendingPool/onchainInteractionsCollateralV3.d.ts +13 -0
  150. package/lib/onchain/interactions/lendingPool/onchainInteractionsCollateralV3.js +20 -0
  151. package/lib/onchain/interactions/lendingPool/onchainInteractionsLendingPool.d.ts +16 -31
  152. package/lib/onchain/interactions/lendingPool/onchainInteractionsLendingPool.js +12 -94
  153. package/lib/onchain/interactions/lendingPool/onchainInteractionsLendingPoolV2.d.ts +42 -0
  154. package/lib/onchain/interactions/lendingPool/onchainInteractionsLendingPoolV2.js +114 -0
  155. package/lib/onchain/interactions/lendingPool/onchainInteractionsLendingPoolV3.d.ts +27 -0
  156. package/lib/onchain/interactions/lendingPool/onchainInteractionsLendingPoolV3.js +32 -0
  157. package/lib/onchain/interactions/onchainInteractions.js +3 -4
  158. package/lib/onchain/interactions/onchainInteractionsLendingVault.d.ts +1 -1
  159. package/lib/onchain/interactions/onchainInteractionsLendingVault.js +1 -1
  160. package/lib/onchain/interactions/onchainInteractionsPoolToken.d.ts +13 -13
  161. package/lib/onchain/interactions/onchainInteractionsPoolToken.js +33 -85
  162. package/lib/onchain/onchain.d.ts +3 -0
  163. package/lib/onchain/onchain.js +11 -3
  164. package/lib/onchain/onchainContractsHelper.d.ts +19 -8
  165. package/lib/onchain/onchainContractsHelper.js +55 -21
  166. package/lib/onchain/onchainLendingVault.d.ts +3 -3
  167. package/lib/onchain/onchainPermitHelper.d.ts +21 -0
  168. package/lib/onchain/onchainPermitHelper.js +198 -0
  169. package/lib/onchain/onchainTypes.d.ts +6 -0
  170. package/package.json +1 -1
  171. package/lib/offchain/account/offchainAccountLendingVault.d.ts +0 -16
@@ -1,46 +1,31 @@
1
1
  import OnchainInteractions from '../index';
2
- import { PoolTokenType } from '../../../config/types';
2
+ import { Borrowable } from '../../../config/types';
3
3
  import OnchainInteractionsCollateral from './onchainInteractionsCollateral';
4
4
  import OnchainInteractionsBorrowable from './onchainInteractionsBorrowable';
5
- import { PermitData } from '../../onchainTypes';
6
- import { BigNumber } from 'ethers';
7
- import OnchainInteractionsPoolToken from '../onchainInteractionsPoolToken';
8
5
  import OnchainLendingPool from '../../impermaxFactory/lendingPool';
9
6
  import OnchainAccountLendingPool from '../../account/lendingPool';
10
- export default class OnchainInteractionsLendingPool {
11
- private readonly interactions;
12
- private readonly lendingPool;
13
- private readonly poolTokens;
7
+ export default abstract class OnchainInteractionsLendingPool {
8
+ protected readonly interactions: OnchainInteractions;
9
+ protected readonly lendingPool: OnchainLendingPool;
10
+ protected readonly collateral: OnchainInteractionsCollateral;
11
+ protected readonly borrowables: {
12
+ [Borrowable.A]: OnchainInteractionsBorrowable;
13
+ [Borrowable.B]: OnchainInteractionsBorrowable;
14
+ };
15
+ protected abstract getNewCollateralObject(): OnchainInteractionsCollateral;
16
+ protected abstract getNewBorrowableObject(borrowable: Borrowable): OnchainInteractionsBorrowable;
14
17
  constructor(interactions: OnchainInteractions, lendingPool: OnchainLendingPool);
15
18
  getInteractions: () => OnchainInteractions;
16
19
  getLendingPool: () => OnchainLendingPool;
17
- getPoolToken(poolTokenType: PoolTokenType): OnchainInteractionsPoolToken;
18
- getAccountLendingPool(): OnchainAccountLendingPool;
20
+ getBorrowable: (borrowable: Borrowable) => OnchainInteractionsBorrowable;
19
21
  getBorrowableA: () => OnchainInteractionsBorrowable;
20
22
  getBorrowableB: () => OnchainInteractionsBorrowable;
21
23
  getCollateral: () => OnchainInteractionsCollateral;
22
- private getFactory;
23
- private getPairAddress;
24
- getRouterContract: () => any;
24
+ protected getFactory: () => import("../../../config/types").Factory;
25
+ protected getId: () => string;
26
+ getPoolTokenRouter: () => any;
25
27
  getAccountAddress: () => string;
28
+ getAccountLendingPool(): OnchainAccountLendingPool;
26
29
  send: (method: any, onTransactionHash: Function) => Promise<any>;
27
- getLeverageAmounts(leverage: number, slippage: number): Promise<{
28
- bAmountA: number;
29
- bAmountB: number;
30
- cAmount: number;
31
- bAmountAMin: number;
32
- bAmountBMin: number;
33
- cAmountMin: number;
34
- }>;
35
- leverage(amountA: BigNumber, amountB: BigNumber, amountAMin: BigNumber, amountBMin: BigNumber, permitDataA: PermitData, permitDataB: PermitData, onTransactionHash: Function): Promise<any>;
36
- getDeleverageAmounts(changeCollateralValue: number, slippage: number): Promise<{
37
- bAmountA: number;
38
- bAmountB: number;
39
- cAmount: number;
40
- bAmountAMin: number;
41
- bAmountBMin: number;
42
- }>;
43
- deleverage(tokens: BigNumber, amountAMin: BigNumber, amountBMin: BigNumber, permitData: PermitData, onTransactionHash: Function): Promise<any>;
44
30
  trackBorrows(onTransactionHash: Function): Promise<any>;
45
- reinvest(onTransactionHash: Function): Promise<any>;
46
31
  }
@@ -8,108 +8,32 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
8
8
  step((generator = generator.apply(thisArg, _arguments || [])).next());
9
9
  });
10
10
  };
11
- var __importDefault = (this && this.__importDefault) || function (mod) {
12
- return (mod && mod.__esModule) ? mod : { "default": mod };
13
- };
14
11
  Object.defineProperty(exports, "__esModule", { value: true });
15
12
  const types_1 = require("../../../config/types");
16
- const onchainInteractionsCollateral_1 = __importDefault(require("./onchainInteractionsCollateral"));
17
- const onchainInteractionsBorrowable_1 = __importDefault(require("./onchainInteractionsBorrowable"));
18
- const utils_1 = require("../../../utils");
19
- const general_1 = require("../../../config/general");
20
13
  class OnchainInteractionsLendingPool {
21
14
  constructor(interactions, lendingPool) {
15
+ // Shortcuts
22
16
  this.getInteractions = () => this.interactions;
23
17
  this.getLendingPool = () => this.lendingPool;
24
- // Shortcuts
25
- this.getBorrowableA = () => this.poolTokens[types_1.PoolTokenType.BorrowableA];
26
- this.getBorrowableB = () => this.poolTokens[types_1.PoolTokenType.BorrowableB];
27
- this.getCollateral = () => this.poolTokens[types_1.PoolTokenType.Collateral];
18
+ this.getBorrowable = (borrowable) => this.borrowables[borrowable];
19
+ this.getBorrowableA = () => this.getBorrowable(types_1.Borrowable.A);
20
+ this.getBorrowableB = () => this.getBorrowable(types_1.Borrowable.B);
21
+ this.getCollateral = () => this.collateral;
28
22
  this.getFactory = () => this.lendingPool.getImpermaxFactory().getFactory();
29
- this.getPairAddress = () => this.lendingPool.getPairAddress();
30
- this.getRouterContract = () => this.lendingPool.getImpermaxFactory().getRouter();
23
+ this.getId = () => this.lendingPool.getId();
24
+ this.getPoolTokenRouter = () => this.lendingPool.getImpermaxFactory().getPoolTokenRouter();
31
25
  this.getAccountAddress = () => this.interactions.getAccountAddress();
32
26
  this.send = (method, onTransactionHash) => this.interactions.send(method, onTransactionHash);
33
27
  this.interactions = interactions;
34
28
  this.lendingPool = lendingPool;
35
- this.poolTokens = {
36
- [types_1.PoolTokenType.Collateral]: new onchainInteractionsCollateral_1.default(this),
37
- [types_1.PoolTokenType.BorrowableA]: new onchainInteractionsBorrowable_1.default(this, types_1.PoolTokenType.BorrowableA),
38
- [types_1.PoolTokenType.BorrowableB]: new onchainInteractionsBorrowable_1.default(this, types_1.PoolTokenType.BorrowableB),
29
+ this.collateral = this.getNewCollateralObject();
30
+ this.borrowables = {
31
+ [types_1.Borrowable.A]: this.getNewBorrowableObject(types_1.Borrowable.A),
32
+ [types_1.Borrowable.B]: this.getNewBorrowableObject(types_1.Borrowable.B),
39
33
  };
40
34
  }
41
- getPoolToken(poolTokenType) {
42
- return this.poolTokens[poolTokenType];
43
- }
44
35
  getAccountLendingPool() {
45
- return this.interactions.getAccount().getLendingPool(this.getFactory(), this.getPairAddress());
46
- }
47
- getLeverageAmounts(leverage, slippage) {
48
- return __awaiter(this, void 0, void 0, function* () {
49
- const [priceA, priceB] = yield this.lendingPool.getMarketPriceDenomLP();
50
- // This function must use the market price, but the account leverage is calculated with the TWAP, so we need an adjustFactor
51
- const [priceATWAP, priceBTWAP] = yield this.lendingPool.getPriceDenomLP();
52
- const diff = priceA > priceATWAP ? priceA / priceATWAP : priceATWAP / priceA;
53
- const adjustFactor = Math.pow((0, utils_1.impermanentLoss)(Math.pow(diff, 2)), leverage);
54
- const accountLendingPool = yield this.getAccountLendingPool();
55
- const currentLeverage = yield accountLendingPool.getLeverage();
56
- const collateralValue = yield accountLendingPool.getCollateral().getDeposited();
57
- const changeCollateralValue = (collateralValue * leverage / currentLeverage - collateralValue) * adjustFactor;
58
- const [reservesWeightA, reservesWeightB] = yield this.lendingPool.getMarketReservesWeights();
59
- const changeValueA = changeCollateralValue * reservesWeightA;
60
- const changeValueB = changeCollateralValue * reservesWeightB;
61
- const bAmountA = priceA > 0 ? changeValueA / priceA : 0;
62
- const bAmountB = priceB > 0 ? changeValueB / priceB : 0;
63
- const cAmount = changeCollateralValue ? changeCollateralValue : 0;
64
- return {
65
- bAmountA: bAmountA,
66
- bAmountB: bAmountB,
67
- cAmount: cAmount,
68
- bAmountAMin: bAmountA / slippage,
69
- bAmountBMin: bAmountB / slippage,
70
- cAmountMin: cAmount / Math.sqrt(slippage),
71
- };
72
- });
73
- }
74
- leverage(amountA, amountB, amountAMin, amountBMin, permitDataA, permitDataB, onTransactionHash) {
75
- return __awaiter(this, void 0, void 0, function* () {
76
- const router = this.getRouterContract();
77
- const dataA = permitDataA ? permitDataA.permitData : '0x';
78
- const dataB = permitDataB ? permitDataB.permitData : '0x';
79
- if (permitDataA && permitDataB && !permitDataA.deadline.eq(permitDataB.deadline))
80
- return console.error("Permits deadline are not equal");
81
- const deadline = permitDataA ? permitDataA.deadline : permitDataB ? permitDataB.deadline : general_1.DEADLINE;
82
- const pairAddress = this.getPairAddress();
83
- const account = this.getAccountAddress();
84
- return this.send(router.methods.leverage(pairAddress, amountA, amountB, amountAMin, amountBMin, account, deadline, dataA, dataB), onTransactionHash);
85
- });
86
- }
87
- getDeleverageAmounts(changeCollateralValue, slippage) {
88
- return __awaiter(this, void 0, void 0, function* () {
89
- changeCollateralValue = changeCollateralValue !== null && changeCollateralValue !== void 0 ? changeCollateralValue : 0;
90
- const [priceA, priceB] = yield this.lendingPool.getMarketPriceDenomLP();
91
- const [reservesWeightA, reservesWeightB] = yield this.lendingPool.getMarketReservesWeights();
92
- const changeValueA = changeCollateralValue * reservesWeightA;
93
- const changeValueB = changeCollateralValue * reservesWeightB;
94
- const bAmountA = priceA > 0 ? changeValueA / priceA : 0;
95
- const bAmountB = priceB > 0 ? changeValueB / priceB : 0;
96
- return {
97
- bAmountA: bAmountA,
98
- bAmountB: bAmountB,
99
- cAmount: changeCollateralValue,
100
- bAmountAMin: bAmountA / Math.sqrt(slippage),
101
- bAmountBMin: bAmountB / Math.sqrt(slippage),
102
- };
103
- });
104
- }
105
- deleverage(tokens, amountAMin, amountBMin, permitData, onTransactionHash) {
106
- return __awaiter(this, void 0, void 0, function* () {
107
- const router = this.getRouterContract();
108
- const data = permitData ? permitData.permitData : '0x';
109
- const deadline = permitData ? permitData.deadline : general_1.DEADLINE;
110
- const pairAddress = this.getPairAddress();
111
- return this.send(router.methods.deleverage(pairAddress, tokens, amountAMin, amountBMin, deadline, data), onTransactionHash);
112
- });
36
+ return this.interactions.getAccount().getLendingPool(this.getFactory(), this.getId());
113
37
  }
114
38
  trackBorrows(onTransactionHash) {
115
39
  return __awaiter(this, void 0, void 0, function* () {
@@ -125,11 +49,5 @@ class OnchainInteractionsLendingPool {
125
49
  return this.send(claimAggregator.methods.trackBorrows(account, toTrack), onTransactionHash);
126
50
  });
127
51
  }
128
- reinvest(onTransactionHash) {
129
- return __awaiter(this, void 0, void 0, function* () {
130
- const stakedLPToken = yield this.lendingPool.getStakedLPToken();
131
- return this.send(stakedLPToken.methods.reinvest(), onTransactionHash);
132
- });
133
- }
134
52
  }
135
53
  exports.default = OnchainInteractionsLendingPool;
@@ -0,0 +1,42 @@
1
+ import { Borrowable } from '../../../config/types';
2
+ import { PermitData } from '../../onchainTypes';
3
+ import { BigNumber } from 'ethers';
4
+ import { OnchainLendingPoolV2 } from '../../impermaxFactory/lendingPool';
5
+ import { OnchainAccountLendingPoolV2 } from '../../account/lendingPool';
6
+ import OnchainInteractionsLendingPool from "./onchainInteractionsLendingPool";
7
+ import OnchainInteractionsCollateralV2 from "./onchainInteractionsCollateralV2";
8
+ import OnchainInteractionsBorrowableV2 from "./onchainInteractionsBorrowableV2";
9
+ export default class OnchainInteractionsLendingPoolV2 extends OnchainInteractionsLendingPool {
10
+ protected readonly lendingPool: OnchainLendingPoolV2;
11
+ protected readonly collateral: OnchainInteractionsCollateralV2;
12
+ protected readonly borrowables: {
13
+ [Borrowable.A]: OnchainInteractionsBorrowableV2;
14
+ [Borrowable.B]: OnchainInteractionsBorrowableV2;
15
+ };
16
+ protected getNewCollateralObject(): OnchainInteractionsCollateralV2;
17
+ protected getNewBorrowableObject(borrowable: Borrowable): OnchainInteractionsBorrowableV2;
18
+ getLendingPool: () => OnchainLendingPoolV2;
19
+ getBorrowable: (borrowable: Borrowable) => OnchainInteractionsBorrowableV2;
20
+ getBorrowableA: () => OnchainInteractionsBorrowableV2;
21
+ getBorrowableB: () => OnchainInteractionsBorrowableV2;
22
+ getCollateral: () => OnchainInteractionsCollateralV2;
23
+ getAccountLendingPool(): OnchainAccountLendingPoolV2;
24
+ getLeverageAmounts(leverage: number, slippage: number): Promise<{
25
+ bAmountA: number;
26
+ bAmountB: number;
27
+ cAmount: number;
28
+ bAmountAMin: number;
29
+ bAmountBMin: number;
30
+ cAmountMin: number;
31
+ }>;
32
+ leverage(amountA: BigNumber, amountB: BigNumber, amountAMin: BigNumber, amountBMin: BigNumber, permitDataA: PermitData, permitDataB: PermitData, onTransactionHash: Function): Promise<any>;
33
+ getDeleverageAmounts(changeCollateralValue: number, slippage: number): Promise<{
34
+ bAmountA: number;
35
+ bAmountB: number;
36
+ cAmount: number;
37
+ bAmountAMin: number;
38
+ bAmountBMin: number;
39
+ }>;
40
+ deleverage(tokens: BigNumber, amountAMin: BigNumber, amountBMin: BigNumber, permitData: PermitData, onTransactionHash: Function): Promise<any>;
41
+ reinvest(onTransactionHash: Function): Promise<any>;
42
+ }
@@ -0,0 +1,114 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ const types_1 = require("../../../config/types");
16
+ const utils_1 = require("../../../utils");
17
+ const general_1 = require("../../../config/general");
18
+ const onchainInteractionsLendingPool_1 = __importDefault(require("./onchainInteractionsLendingPool"));
19
+ const onchainInteractionsCollateralV2_1 = __importDefault(require("./onchainInteractionsCollateralV2"));
20
+ const onchainInteractionsBorrowableV2_1 = __importDefault(require("./onchainInteractionsBorrowableV2"));
21
+ class OnchainInteractionsLendingPoolV2 extends onchainInteractionsLendingPool_1.default {
22
+ constructor() {
23
+ super(...arguments);
24
+ // Shortcuts
25
+ this.getLendingPool = () => this.lendingPool;
26
+ this.getBorrowable = (borrowable) => this.borrowables[borrowable];
27
+ this.getBorrowableA = () => this.getBorrowable(types_1.Borrowable.A);
28
+ this.getBorrowableB = () => this.getBorrowable(types_1.Borrowable.B);
29
+ this.getCollateral = () => this.collateral;
30
+ }
31
+ getNewCollateralObject() {
32
+ return new onchainInteractionsCollateralV2_1.default(this);
33
+ }
34
+ getNewBorrowableObject(borrowable) {
35
+ return new onchainInteractionsBorrowableV2_1.default(this, borrowable);
36
+ }
37
+ getAccountLendingPool() {
38
+ return this.interactions.getAccount().getLendingPool(this.getFactory(), this.getId());
39
+ }
40
+ getLeverageAmounts(leverage, slippage) {
41
+ return __awaiter(this, void 0, void 0, function* () {
42
+ const [priceA, priceB] = yield this.lendingPool.getMarketPriceDenomLP();
43
+ // This function must use the market price, but the account leverage is calculated with the TWAP, so we need an adjustFactor
44
+ const [priceATWAP, priceBTWAP] = yield this.lendingPool.getPriceDenomLP();
45
+ const diff = priceA > priceATWAP ? priceA / priceATWAP : priceATWAP / priceA;
46
+ const adjustFactor = Math.pow((0, utils_1.impermanentLoss)(Math.pow(diff, 2)), leverage);
47
+ const accountLendingPool = yield this.getAccountLendingPool();
48
+ const currentLeverage = yield accountLendingPool.getLeverage();
49
+ const collateralValue = yield accountLendingPool.getCollateral().getDeposited();
50
+ const changeCollateralValue = (collateralValue * leverage / currentLeverage - collateralValue) * adjustFactor;
51
+ const [reservesWeightA, reservesWeightB] = yield this.lendingPool.getMarketReservesWeights();
52
+ const changeValueA = changeCollateralValue * reservesWeightA;
53
+ const changeValueB = changeCollateralValue * reservesWeightB;
54
+ const bAmountA = priceA > 0 ? changeValueA / priceA : 0;
55
+ const bAmountB = priceB > 0 ? changeValueB / priceB : 0;
56
+ const cAmount = changeCollateralValue ? changeCollateralValue : 0;
57
+ return {
58
+ bAmountA: bAmountA,
59
+ bAmountB: bAmountB,
60
+ cAmount: cAmount,
61
+ bAmountAMin: bAmountA / slippage,
62
+ bAmountBMin: bAmountB / slippage,
63
+ cAmountMin: cAmount / Math.sqrt(slippage),
64
+ };
65
+ });
66
+ }
67
+ leverage(amountA, amountB, amountAMin, amountBMin, permitDataA, permitDataB, onTransactionHash) {
68
+ return __awaiter(this, void 0, void 0, function* () {
69
+ const router = this.getPoolTokenRouter();
70
+ const dataA = permitDataA ? permitDataA.permitData : '0x';
71
+ const dataB = permitDataB ? permitDataB.permitData : '0x';
72
+ if (permitDataA && permitDataB && !permitDataA.deadline.eq(permitDataB.deadline))
73
+ return console.error("Permits deadline are not equal");
74
+ const deadline = permitDataA ? permitDataA.deadline : permitDataB ? permitDataB.deadline : general_1.DEADLINE;
75
+ const pairAddress = this.getId();
76
+ const account = this.getAccountAddress();
77
+ return this.send(router.methods.leverage(pairAddress, amountA, amountB, amountAMin, amountBMin, account, deadline, dataA, dataB), onTransactionHash);
78
+ });
79
+ }
80
+ getDeleverageAmounts(changeCollateralValue, slippage) {
81
+ return __awaiter(this, void 0, void 0, function* () {
82
+ changeCollateralValue = changeCollateralValue !== null && changeCollateralValue !== void 0 ? changeCollateralValue : 0;
83
+ const [priceA, priceB] = yield this.lendingPool.getMarketPriceDenomLP();
84
+ const [reservesWeightA, reservesWeightB] = yield this.lendingPool.getMarketReservesWeights();
85
+ const changeValueA = changeCollateralValue * reservesWeightA;
86
+ const changeValueB = changeCollateralValue * reservesWeightB;
87
+ const bAmountA = priceA > 0 ? changeValueA / priceA : 0;
88
+ const bAmountB = priceB > 0 ? changeValueB / priceB : 0;
89
+ return {
90
+ bAmountA: bAmountA,
91
+ bAmountB: bAmountB,
92
+ cAmount: changeCollateralValue,
93
+ bAmountAMin: bAmountA / Math.sqrt(slippage),
94
+ bAmountBMin: bAmountB / Math.sqrt(slippage),
95
+ };
96
+ });
97
+ }
98
+ deleverage(tokens, amountAMin, amountBMin, permitData, onTransactionHash) {
99
+ return __awaiter(this, void 0, void 0, function* () {
100
+ const router = this.getPoolTokenRouter();
101
+ const data = permitData ? permitData.permitData : '0x';
102
+ const deadline = permitData ? permitData.deadline : general_1.DEADLINE;
103
+ const pairAddress = this.getId();
104
+ return this.send(router.methods.deleverage(pairAddress, tokens, amountAMin, amountBMin, deadline, data), onTransactionHash);
105
+ });
106
+ }
107
+ reinvest(onTransactionHash) {
108
+ return __awaiter(this, void 0, void 0, function* () {
109
+ const stakedLPToken = yield this.lendingPool.getStakedLPToken();
110
+ return this.send(stakedLPToken.methods.reinvest(), onTransactionHash);
111
+ });
112
+ }
113
+ }
114
+ exports.default = OnchainInteractionsLendingPoolV2;
@@ -0,0 +1,27 @@
1
+ import { Borrowable } from '../../../config/types';
2
+ import { OnchainLendingPoolV3 } from '../../impermaxFactory/lendingPool';
3
+ import { OnchainAccountLendingPoolV3 } from '../../account/lendingPool';
4
+ import OnchainInteractionsLendingPool from "./onchainInteractionsLendingPool";
5
+ import OnchainInteractionsBorrowableV3 from "./onchainInteractionsBorrowableV3";
6
+ import OnchainInteractionsCollateralV3 from './onchainInteractionsCollateralV3';
7
+ import OnchainInteractions from "../index";
8
+ import OnchainInteractionsNftlp from "./nftlp";
9
+ export default class OnchainInteractionsLendingPoolV3 extends OnchainInteractionsLendingPool {
10
+ protected readonly lendingPool: OnchainLendingPoolV3;
11
+ protected readonly collateral: OnchainInteractionsCollateralV3;
12
+ protected readonly borrowables: {
13
+ [Borrowable.A]: OnchainInteractionsBorrowableV3;
14
+ [Borrowable.B]: OnchainInteractionsBorrowableV3;
15
+ };
16
+ protected readonly nftlp: OnchainInteractionsNftlp;
17
+ constructor(interactions: OnchainInteractions, lendingPool: OnchainLendingPoolV3);
18
+ protected getNewCollateralObject(): OnchainInteractionsCollateralV3;
19
+ protected getNewBorrowableObject(borrowable: Borrowable): OnchainInteractionsBorrowableV3;
20
+ getLendingPool: () => OnchainLendingPoolV3;
21
+ getBorrowable: (borrowable: Borrowable) => OnchainInteractionsBorrowableV3;
22
+ getBorrowableA: () => OnchainInteractionsBorrowableV3;
23
+ getBorrowableB: () => OnchainInteractionsBorrowableV3;
24
+ getCollateral: () => OnchainInteractionsCollateralV3;
25
+ getNftlp: () => OnchainInteractionsNftlp;
26
+ getAccountLendingPool(): OnchainAccountLendingPoolV3;
27
+ }
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const types_1 = require("../../../config/types");
7
+ const onchainInteractionsLendingPool_1 = __importDefault(require("./onchainInteractionsLendingPool"));
8
+ const onchainInteractionsBorrowableV3_1 = __importDefault(require("./onchainInteractionsBorrowableV3"));
9
+ const onchainInteractionsCollateralV3_1 = __importDefault(require("./onchainInteractionsCollateralV3"));
10
+ class OnchainInteractionsLendingPoolV3 extends onchainInteractionsLendingPool_1.default {
11
+ constructor(interactions, lendingPool) {
12
+ super(interactions, lendingPool);
13
+ // Shortcuts
14
+ this.getLendingPool = () => this.lendingPool;
15
+ this.getBorrowable = (borrowable) => this.borrowables[borrowable];
16
+ this.getBorrowableA = () => this.getBorrowable(types_1.Borrowable.A);
17
+ this.getBorrowableB = () => this.getBorrowable(types_1.Borrowable.B);
18
+ this.getCollateral = () => this.collateral;
19
+ this.getNftlp = () => this.nftlp;
20
+ this.nftlp = lendingPool.getNftlp().getNewInteractionsNftlpObject(this);
21
+ }
22
+ getNewCollateralObject() {
23
+ return new onchainInteractionsCollateralV3_1.default(this);
24
+ }
25
+ getNewBorrowableObject(borrowable) {
26
+ return new onchainInteractionsBorrowableV3_1.default(this, borrowable);
27
+ }
28
+ getAccountLendingPool() {
29
+ return this.interactions.getAccount().getLendingPool(this.getFactory(), this.getId());
30
+ }
31
+ }
32
+ exports.default = OnchainInteractionsLendingPoolV3;
@@ -12,7 +12,6 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
12
12
  return (mod && mod.__esModule) ? mod : { "default": mod };
13
13
  };
14
14
  Object.defineProperty(exports, "__esModule", { value: true });
15
- const lendingPool_1 = __importDefault(require("./lendingPool"));
16
15
  const onchainInteractionsLendingVault_1 = __importDefault(require("./onchainInteractionsLendingVault"));
17
16
  const routers_1 = require("../../config/contracts/routers");
18
17
  const ethers_1 = require("ethers");
@@ -40,7 +39,7 @@ class OnchainInteractions {
40
39
  }
41
40
  initializeLendingPool(factory, pair) {
42
41
  const lendingPool = this.onchain.getImpermaxFactory(factory).getLendingPool(pair);
43
- return new lendingPool_1.default(this, lendingPool);
42
+ return lendingPool.getNewInteractionLendingPoolObject(this);
44
43
  }
45
44
  getLendingPool(factory, pair) {
46
45
  if (!this.lendingPools[factory])
@@ -78,12 +77,12 @@ class OnchainInteractions {
78
77
  }
79
78
  getDefaultRouterContract() {
80
79
  if (!this.cache.defaultRouterContract) {
81
- const address = routers_1.DEFAULT_ROUTER[this.onchain.network];
80
+ const address = routers_1.POOL_TOKEN_ROUTER[this.onchain.network];
82
81
  if (!address) {
83
82
  console.error("DefaultRouter address not found");
84
83
  return null;
85
84
  }
86
- this.cache.defaultRouterContract = this.onchain.getContractHelper().newRouter(address);
85
+ this.cache.defaultRouterContract = this.onchain.getContractHelper().newRouterV2(address);
87
86
  }
88
87
  return this.cache.defaultRouterContract;
89
88
  }
@@ -10,5 +10,5 @@ export default class OnchainInteractionsLendingVault extends OnchainInteractions
10
10
  getVaultAddress: () => string;
11
11
  getAccountPoolToken(): OnchainAccountLendingVault;
12
12
  getAccountLendingVault: () => OnchainAccountLendingVault;
13
- getRouterContract: () => any;
13
+ getPoolTokenRouter: () => any;
14
14
  }
@@ -10,7 +10,7 @@ class OnchainInteractionsLendingVault extends onchainInteractionsPoolToken_1.def
10
10
  this.getInteractions = () => this.interactions;
11
11
  this.getVaultAddress = () => this.poolToken.getVaultAddress();
12
12
  this.getAccountLendingVault = this.getAccountPoolToken;
13
- this.getRouterContract = () => this.interactions.getDefaultRouterContract();
13
+ this.getPoolTokenRouter = () => this.interactions.getDefaultRouterContract();
14
14
  this.interactions = interactions;
15
15
  this.poolToken = lendingVault;
16
16
  }
@@ -1,5 +1,5 @@
1
1
  import { ethers, BigNumber } from "ethers";
2
- import { ApprovalType, Contract, PermitData } from "../onchainTypes";
2
+ import { Contract, Permits } from "../onchainTypes";
3
3
  import OnchainInteractions from './index';
4
4
  import OnchainPoolToken from '../onchainPoolToken';
5
5
  import OnchainAccountPoolToken from '../account/onchainAccountPoolToken';
@@ -9,27 +9,27 @@ export default abstract class OnchainInteractionsPoolToken {
9
9
  abstract getInteractions(): OnchainInteractions;
10
10
  abstract getAccountPoolToken(): OnchainAccountPoolToken;
11
11
  getAccountAddress: () => string;
12
- protected abstract getRouterContract(): Contract;
12
+ protected abstract getPoolTokenRouter(): Contract;
13
13
  protected getOnchain: () => import("..").default;
14
+ protected getPermitHelper: () => import("../onchainPermitHelper").default;
14
15
  protected send(method: any, onTransactionHash: Function, value?: BigNumber): Promise<any>;
15
16
  getOwnerSpender(): {
16
17
  owner: string;
17
18
  spender: any;
18
19
  };
19
20
  isWETH(): Promise<boolean>;
20
- getAllowance(approvalType: ApprovalType): Promise<ethers.BigNumber>;
21
- approve(approvalType: ApprovalType, amount: BigNumber, onTransactionHash: Function): Promise<any>;
22
- protected _getPermitData(approvalType: ApprovalType, amount: BigNumber, deadlineArg: BigNumber | null, callBack: (permitData: PermitData | null) => void): Promise<void>;
23
- getPermitData(approvalType: ApprovalType, amount: BigNumber, deadlineArg: BigNumber | null, callBack: (permitData: PermitData | null) => void): Promise<void>;
24
- protected getSendData(permitData: PermitData | null): Promise<{
21
+ getPoolTokenAllowance(): Promise<ethers.BigNumber>;
22
+ getUnderlyingAllowance(): Promise<ethers.BigNumber>;
23
+ approvePoolToken(amount: BigNumber, onTransactionHash: Function): Promise<any>;
24
+ approveUnderlying(amount: BigNumber, onTransactionHash: Function): Promise<any>;
25
+ protected getSendData(permits: Permits): Promise<{
25
26
  router: any;
26
27
  ptAddress: any;
27
28
  account: string;
28
- data: string;
29
- deadline: ethers.BigNumber;
29
+ permitsData: string;
30
30
  }>;
31
- protected mintETH(amount: BigNumber, permitData: PermitData, onTransactionHash: Function): Promise<any>;
32
- protected mint(amount: BigNumber, permitData: PermitData, onTransactionHash: Function): Promise<any>;
33
- deposit(amount: BigNumber, permitData: PermitData, onTransactionHash: Function): Promise<any>;
34
- withdraw(tokens: BigNumber, permitData: PermitData, onTransactionHash: Function): Promise<any>;
31
+ protected mintETH(amount: BigNumber, onTransactionHash: Function): Promise<any>;
32
+ protected mint(amount: BigNumber, permits: Permits, onTransactionHash: Function): Promise<any>;
33
+ deposit(amount: BigNumber, permits: Permits, onTransactionHash: Function): Promise<any>;
34
+ withdraw(tokens: BigNumber, permits: Permits, onTransactionHash: Function): Promise<any>;
35
35
  }