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,12 +1,49 @@
1
1
  "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
2
25
  var __importDefault = (this && this.__importDefault) || function (mod) {
3
26
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
27
  };
5
28
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.OnchainAccountCollateral = exports.OnchainAccountBorrowable = void 0;
29
+ exports.OnchainAccountCollateralV3 = exports.OnchainAccountBorrowableV3 = exports.OnchainAccountLendingPoolV3 = exports.OnchainAccountCollateralV2 = exports.OnchainAccountBorrowableV2 = exports.OnchainAccountLendingPoolV2 = exports.OnchainAccountCollateral = exports.OnchainAccountBorrowable = exports.nftlp = void 0;
30
+ const nftlp = __importStar(require("./nftlp"));
31
+ exports.nftlp = nftlp;
7
32
  const onchainAccountBorrowable_1 = __importDefault(require("./onchainAccountBorrowable"));
8
33
  exports.OnchainAccountBorrowable = onchainAccountBorrowable_1.default;
34
+ const onchainAccountBorrowableV2_1 = __importDefault(require("./onchainAccountBorrowableV2"));
35
+ exports.OnchainAccountBorrowableV2 = onchainAccountBorrowableV2_1.default;
36
+ const onchainAccountBorrowableV3_1 = __importDefault(require("./onchainAccountBorrowableV3"));
37
+ exports.OnchainAccountBorrowableV3 = onchainAccountBorrowableV3_1.default;
9
38
  const onchainAccountCollateral_1 = __importDefault(require("./onchainAccountCollateral"));
10
39
  exports.OnchainAccountCollateral = onchainAccountCollateral_1.default;
40
+ const onchainAccountCollateralV2_1 = __importDefault(require("./onchainAccountCollateralV2"));
41
+ exports.OnchainAccountCollateralV2 = onchainAccountCollateralV2_1.default;
42
+ const onchainAccountCollateralV3_1 = __importDefault(require("./onchainAccountCollateralV3"));
43
+ exports.OnchainAccountCollateralV3 = onchainAccountCollateralV3_1.default;
11
44
  const onchainAccountLendingPool_1 = __importDefault(require("./onchainAccountLendingPool"));
45
+ const onchainAccountLendingPoolV2_1 = __importDefault(require("./onchainAccountLendingPoolV2"));
46
+ exports.OnchainAccountLendingPoolV2 = onchainAccountLendingPoolV2_1.default;
47
+ const onchainAccountLendingPoolV3_1 = __importDefault(require("./onchainAccountLendingPoolV3"));
48
+ exports.OnchainAccountLendingPoolV3 = onchainAccountLendingPoolV3_1.default;
12
49
  exports.default = onchainAccountLendingPool_1.default;
@@ -0,0 +1,4 @@
1
+ import OnchainAccountNftlp from './onchainAccountNftlp';
2
+ import OnchainAccountNftlpUniswapV3 from './onchainAccountNftlpUniswapV3';
3
+ export { OnchainAccountNftlp, OnchainAccountNftlpUniswapV3, };
4
+ export default OnchainAccountNftlp;
@@ -0,0 +1,11 @@
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
+ exports.OnchainAccountNftlpUniswapV3 = exports.OnchainAccountNftlp = void 0;
7
+ const onchainAccountNftlp_1 = __importDefault(require("./onchainAccountNftlp"));
8
+ exports.OnchainAccountNftlp = onchainAccountNftlp_1.default;
9
+ const onchainAccountNftlpUniswapV3_1 = __importDefault(require("./onchainAccountNftlpUniswapV3"));
10
+ exports.OnchainAccountNftlpUniswapV3 = onchainAccountNftlpUniswapV3_1.default;
11
+ exports.default = onchainAccountNftlp_1.default;
@@ -0,0 +1,7 @@
1
+ import OnchainAccountLendingPoolV3 from "../onchainAccountLendingPoolV3";
2
+ export default abstract class OnchainAccountNftlp {
3
+ protected readonly lendingPool: OnchainAccountLendingPoolV3;
4
+ protected cache: {};
5
+ constructor(lendingPool: OnchainAccountLendingPoolV3);
6
+ cleanCache(): void;
7
+ }
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ class OnchainAccountNftlp {
4
+ constructor(lendingPool) {
5
+ this.cache = {};
6
+ this.lendingPool = lendingPool;
7
+ }
8
+ cleanCache() {
9
+ this.cache = {};
10
+ }
11
+ }
12
+ exports.default = OnchainAccountNftlp;
@@ -0,0 +1,4 @@
1
+ import OnchainAccountNftlp from "./onchainAccountNftlp";
2
+ export default class OnchainAccountNftlpUniswapV3 extends OnchainAccountNftlp {
3
+ protected cache: {};
4
+ }
@@ -0,0 +1,13 @@
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 onchainAccountNftlp_1 = __importDefault(require("./onchainAccountNftlp"));
7
+ class OnchainAccountNftlpUniswapV3 extends onchainAccountNftlp_1.default {
8
+ constructor() {
9
+ super(...arguments);
10
+ this.cache = {};
11
+ }
12
+ }
13
+ exports.default = OnchainAccountNftlpUniswapV3;
@@ -1,14 +1,19 @@
1
- import { PoolTokenType } from '../../../config/types';
1
+ import { Borrowable } from '../../../config/types';
2
2
  import OnchainAccountLendingPool from './index';
3
3
  import OnchainAccountPoolToken from '../onchainAccountPoolToken';
4
4
  import OnchainBorrowable from '../../impermaxFactory/lendingPool/onchainBorrowable';
5
5
  import OnchainInteractionsBorrowable from '../../interactions/lendingPool/onchainInteractionsBorrowable';
6
6
  import OffchainAccountBorrowable from '../../../offchain/account/lendingPool/offchainAccountBorrowable';
7
- export default class OnchainAccountBorrowable extends OnchainAccountPoolToken {
8
- private readonly lendingPool;
7
+ export default abstract class OnchainAccountBorrowable extends OnchainAccountPoolToken {
8
+ protected readonly lendingPool: OnchainAccountLendingPool;
9
9
  protected readonly poolToken: OnchainBorrowable;
10
- private borrowableCache;
11
- constructor(lendingPool: OnchainAccountLendingPool, poolTokenType: PoolTokenType);
10
+ protected borrowableCache: {
11
+ borrowed?: Promise<number>;
12
+ farmingShares?: Promise<number>;
13
+ availableFarmingReward?: Promise<number>;
14
+ availableRewarderReward?: Promise<number>;
15
+ };
16
+ constructor(lendingPool: OnchainAccountLendingPool, borrowable: Borrowable);
12
17
  getLendingPool: () => OnchainAccountLendingPool;
13
18
  getPoolToken: () => OnchainBorrowable;
14
19
  getAccount: () => import("..").default;
@@ -17,14 +22,14 @@ export default class OnchainAccountBorrowable extends OnchainAccountPoolToken {
17
22
  getOffchainAccountPoolToken(): Promise<OffchainAccountBorrowable>;
18
23
  getOffchainAccountBorrowable: () => Promise<OffchainAccountBorrowable>;
19
24
  cleanCache(): void;
20
- private getPoolTokenType;
25
+ protected getBorrowableType: () => Borrowable;
21
26
  getSupplyAPR: () => Promise<number>;
22
27
  getBorrowRate: () => Promise<number>;
23
28
  getAccrualTimestamp: () => Promise<number>;
24
29
  private initializeBorrowed;
25
30
  getBorrowed(): Promise<number>;
26
31
  getBorrowedUSD(): Promise<number>;
27
- getMaxBorrowable(): Promise<number>;
32
+ abstract getMaxBorrowable(): Promise<number>;
28
33
  private initializeFarmingShares;
29
34
  getFarmingShares(): Promise<number>;
30
35
  private initializeAvailableFarmingReward;
@@ -12,10 +12,9 @@ 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 types_1 = require("../../../config/types");
16
15
  const onchainAccountPoolToken_1 = __importDefault(require("../onchainAccountPoolToken"));
17
16
  class OnchainAccountBorrowable extends onchainAccountPoolToken_1.default {
18
- constructor(lendingPool, poolTokenType) {
17
+ constructor(lendingPool, borrowable) {
19
18
  super();
20
19
  this.borrowableCache = {};
21
20
  this.getLendingPool = () => this.lendingPool;
@@ -24,20 +23,20 @@ class OnchainAccountBorrowable extends onchainAccountPoolToken_1.default {
24
23
  this.getInteractionsBorrowable = this.getInteractionsPoolToken;
25
24
  this.getOffchainAccountBorrowable = this.getOffchainAccountPoolToken;
26
25
  // Shortcuts
27
- this.getPoolTokenType = () => this.poolToken.getPoolTokenType();
26
+ this.getBorrowableType = () => this.poolToken.getBorrowableType();
28
27
  this.getSupplyAPR = () => __awaiter(this, void 0, void 0, function* () { return (yield this.poolToken.getOffchainPoolToken()).getSupplyAPR(); });
29
28
  this.getBorrowRate = () => __awaiter(this, void 0, void 0, function* () { return (yield this.poolToken.getOffchainPoolToken()).getBorrowRate(); });
30
29
  this.getAccrualTimestamp = () => __awaiter(this, void 0, void 0, function* () { return (yield this.poolToken.getOffchainPoolToken()).getAccrualTimestamp(); });
31
30
  this.lendingPool = lendingPool;
32
- this.poolToken = lendingPool.getLendingPool().getPoolToken(poolTokenType);
31
+ this.poolToken = lendingPool.getLendingPool().getBorrowable(borrowable);
33
32
  }
34
33
  getInteractionsPoolToken() {
35
- return this.lendingPool.getInteractionsLendingPool().getPoolToken(this.getPoolTokenType());
34
+ return this.lendingPool.getInteractionsLendingPool().getBorrowable(this.getBorrowableType());
36
35
  }
37
36
  getOffchainAccountPoolToken() {
38
37
  return __awaiter(this, void 0, void 0, function* () {
39
38
  const offchainAccountLendingPool = yield this.lendingPool.getOffchainAccountLendingPool();
40
- return offchainAccountLendingPool.getPoolToken(this.getPoolTokenType());
39
+ return offchainAccountLendingPool.getBorrowable(this.getBorrowableType());
41
40
  });
42
41
  }
43
42
  cleanCache() {
@@ -69,50 +68,6 @@ class OnchainAccountBorrowable extends onchainAccountPoolToken_1.default {
69
68
  return borrowed * tokenPrice;
70
69
  });
71
70
  }
72
- // Max OffchainBorrowable
73
- /*public async getMaxBorrowable() : Promise<number> {
74
- const availableCash = await this.poolToken.getTotalBalance();
75
- const { valueCollateral, valueA, valueB } = await this.lendingPool.getValues(NO_CHANGES);
76
- const [valueBorrowed, valueOther] = this.getPoolTokenType() == PoolTokenType.BorrowableA ? [valueA, valueB] : [valueB, valueA];
77
- const safetyMargin = (await this.lendingPool.getSafetyMargin()) * this.getUiMargin();
78
- const liquidationPenalty = await this.lendingPool.getLiquidationPenalty();
79
- const actualCollateral = valueCollateral / liquidationPenalty;
80
- const totalValueBorrowable1 = (actualCollateral * Math.sqrt(safetyMargin) - valueOther) / safetyMargin;
81
- const totalValueBorrowable2 = (actualCollateral / Math.sqrt(safetyMargin) - valueOther) * safetyMargin;
82
- const maxValueBorrowable = Math.min(totalValueBorrowable1, totalValueBorrowable2) - valueBorrowed;
83
- const price = await this.poolToken.getMarketPriceDenomLP();
84
- return Math.max(0, Math.min(availableCash, maxValueBorrowable / price));
85
- }*/
86
- // binary search approach
87
- getMaxBorrowable() {
88
- return __awaiter(this, void 0, void 0, function* () {
89
- const availableCash = yield this.poolToken.getTotalBalance();
90
- const twapPrice = yield this.lendingPool.getLendingPool().getTWAPPrice();
91
- // start search
92
- let borrowAmount = availableCash;
93
- let borrowAmountPrev = 0;
94
- let bestAmount = 0;
95
- for (let i = 0; i < 1000; i++) {
96
- const jump = Math.abs(borrowAmount - borrowAmountPrev) / 2;
97
- if (jump / availableCash < 1e-9)
98
- break;
99
- borrowAmountPrev = borrowAmount;
100
- const changeCollateral = 0;
101
- const changeBorrowedA = this.getPoolTokenType() == types_1.PoolTokenType.BorrowableA ? borrowAmount : 0;
102
- const changeBorrowedB = this.getPoolTokenType() == types_1.PoolTokenType.BorrowableB ? borrowAmount : 0;
103
- const changes = { changeCollateral, changeBorrowedA, changeBorrowedB };
104
- const [liqPriceA, liqPriceB] = yield this.lendingPool.getLiquidationPrices(changes);
105
- if (liqPriceA * this.getUiMargin() > twapPrice || liqPriceB / this.getUiMargin() < twapPrice)
106
- borrowAmount -= jump;
107
- else {
108
- bestAmount = borrowAmount;
109
- borrowAmount += jump;
110
- }
111
- }
112
- bestAmount = bestAmount > availableCash ? availableCash : bestAmount;
113
- return bestAmount;
114
- });
115
- }
116
71
  // Farming Shares
117
72
  initializeFarmingShares() {
118
73
  return __awaiter(this, void 0, void 0, function* () {
@@ -0,0 +1,10 @@
1
+ import OnchainAccountBorrowable from "./onchainAccountBorrowable";
2
+ import OnchainAccountLendingPoolV2 from "./onchainAccountLendingPoolV2";
3
+ import { OnchainBorrowableV2 } from "../../impermaxFactory/lendingPool";
4
+ export default class OnchainAccountBorrowableV2 extends OnchainAccountBorrowable {
5
+ protected readonly lendingPool: OnchainAccountLendingPoolV2;
6
+ protected readonly poolToken: OnchainBorrowableV2;
7
+ getLendingPool: () => OnchainAccountLendingPoolV2;
8
+ getPoolToken: () => OnchainBorrowableV2;
9
+ getMaxBorrowable(): Promise<number>;
10
+ }
@@ -0,0 +1,55 @@
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 onchainAccountBorrowable_1 = __importDefault(require("./onchainAccountBorrowable"));
17
+ class OnchainAccountBorrowableV2 extends onchainAccountBorrowable_1.default {
18
+ constructor() {
19
+ super(...arguments);
20
+ this.getLendingPool = () => this.lendingPool;
21
+ this.getPoolToken = () => this.poolToken;
22
+ }
23
+ // Max OffchainBorrowable
24
+ // binary search approach
25
+ getMaxBorrowable() {
26
+ return __awaiter(this, void 0, void 0, function* () {
27
+ const availableCash = yield this.poolToken.getTotalBalance();
28
+ const twapPrice = yield this.lendingPool.getLendingPool().getTWAPPrice();
29
+ // start search
30
+ let borrowAmount = availableCash;
31
+ let borrowAmountPrev = 0;
32
+ let bestAmount = 0;
33
+ for (let i = 0; i < 1000; i++) {
34
+ const jump = Math.abs(borrowAmount - borrowAmountPrev) / 2;
35
+ if (jump / availableCash < 1e-9)
36
+ break;
37
+ borrowAmountPrev = borrowAmount;
38
+ const changeCollateral = 0;
39
+ const changeBorrowedA = this.getBorrowableType() == types_1.Borrowable.A ? borrowAmount : 0;
40
+ const changeBorrowedB = this.getBorrowableType() == types_1.Borrowable.B ? borrowAmount : 0;
41
+ const changes = { changeCollateral, changeBorrowedA, changeBorrowedB };
42
+ const [liqPriceA, liqPriceB] = yield this.lendingPool.getLiquidationPrices(changes);
43
+ if (liqPriceA * this.getUiMargin() > twapPrice || liqPriceB / this.getUiMargin() < twapPrice)
44
+ borrowAmount -= jump;
45
+ else {
46
+ bestAmount = borrowAmount;
47
+ borrowAmount += jump;
48
+ }
49
+ }
50
+ bestAmount = bestAmount > availableCash ? availableCash : bestAmount;
51
+ return bestAmount;
52
+ });
53
+ }
54
+ }
55
+ exports.default = OnchainAccountBorrowableV2;
@@ -0,0 +1,10 @@
1
+ import OnchainAccountBorrowable from "./onchainAccountBorrowable";
2
+ import { OnchainBorrowableV3 } from "../../impermaxFactory/lendingPool";
3
+ import OnchainAccountLendingPoolV3 from "./onchainAccountLendingPoolV3";
4
+ export default class OnchainAccountBorrowableV3 extends OnchainAccountBorrowable {
5
+ protected readonly lendingPool: OnchainAccountLendingPoolV3;
6
+ protected readonly poolToken: OnchainBorrowableV3;
7
+ getLendingPool: () => OnchainAccountLendingPoolV3;
8
+ getPoolToken: () => OnchainBorrowableV3;
9
+ getMaxBorrowable(): Promise<number>;
10
+ }
@@ -0,0 +1,28 @@
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 onchainAccountBorrowable_1 = __importDefault(require("./onchainAccountBorrowable"));
16
+ class OnchainAccountBorrowableV3 extends onchainAccountBorrowable_1.default {
17
+ constructor() {
18
+ super(...arguments);
19
+ this.getLendingPool = () => this.lendingPool;
20
+ this.getPoolToken = () => this.poolToken;
21
+ }
22
+ getMaxBorrowable() {
23
+ return __awaiter(this, void 0, void 0, function* () {
24
+ return 0;
25
+ });
26
+ }
27
+ }
28
+ exports.default = OnchainAccountBorrowableV3;
@@ -1,23 +1,10 @@
1
1
  import OnchainAccountLendingPool from './index';
2
- import OnchainAccountPoolToken from '../onchainAccountPoolToken';
3
- import OnchainCollateral from '../../impermaxFactory/lendingPool/onchainCollateral';
4
- import OnchainInteractionsCollateral from '../../interactions/lendingPool/onchainInteractionsCollateral';
5
2
  import OffchainAccountCollateral from '../../../offchain/account/lendingPool/offchainAccountCollateral';
6
- export default class OnchainAccountCollateral extends OnchainAccountPoolToken {
7
- private readonly lendingPool;
8
- protected readonly poolToken: OnchainCollateral;
9
- private collateralCache;
10
- constructor(lendingPool: OnchainAccountLendingPool);
11
- getLendingPool: () => OnchainAccountLendingPool;
12
- getPoolToken: () => OnchainCollateral;
3
+ export default abstract class OnchainAccountCollateral {
4
+ abstract getLendingPool(): OnchainAccountLendingPool;
5
+ abstract cleanCache(): any;
13
6
  getAccount: () => import("..").default;
14
- getInteractionsPoolToken(): OnchainInteractionsCollateral;
15
- getInteractionsCollateral: () => OnchainInteractionsCollateral;
16
- getOffchainAccountPoolToken(): Promise<OffchainAccountCollateral>;
17
- getOffchainAccountCollateral: () => Promise<OffchainAccountCollateral>;
18
- cleanCache(): void;
19
- fixStakedLPExchangeRate(n: Promise<number>): Promise<number>;
20
- getAvailableBalanceUSD(): Promise<number>;
21
- getDepositedUSD(): Promise<number>;
22
- getMaxWithdrawable(): Promise<number>;
7
+ getInteractionsCollateral(): import("../../..").OnchainInteractionsCollateral;
8
+ getOffchainAccountCollateral(): Promise<OffchainAccountCollateral>;
9
+ abstract getDepositedUSD(): Promise<number>;
23
10
  }
@@ -8,102 +8,19 @@ 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
- const onchainTypes_1 = require("../../onchainTypes");
16
- const onchainAccountPoolToken_1 = __importDefault(require("../onchainAccountPoolToken"));
17
- class OnchainAccountCollateral extends onchainAccountPoolToken_1.default {
18
- constructor(lendingPool) {
19
- super();
20
- this.collateralCache = {};
21
- this.getLendingPool = () => this.lendingPool;
22
- this.getPoolToken = () => this.poolToken;
23
- this.getAccount = () => this.lendingPool.getAccount();
24
- this.getInteractionsCollateral = this.getInteractionsPoolToken;
25
- this.getOffchainAccountCollateral = this.getOffchainAccountPoolToken;
26
- this.lendingPool = lendingPool;
27
- this.poolToken = lendingPool.getLendingPool().getCollateral();
12
+ class OnchainAccountCollateral {
13
+ constructor() {
14
+ this.getAccount = () => this.getLendingPool().getAccount();
28
15
  }
29
- getInteractionsPoolToken() {
30
- return this.lendingPool.getInteractionsLendingPool().getCollateral();
16
+ getInteractionsCollateral() {
17
+ return this.getLendingPool().getInteractionsLendingPool().getCollateral();
31
18
  }
32
- getOffchainAccountPoolToken() {
19
+ getOffchainAccountCollateral() {
33
20
  return __awaiter(this, void 0, void 0, function* () {
34
- const offchainAccountLendingPool = yield this.lendingPool.getOffchainAccountLendingPool();
21
+ const offchainAccountLendingPool = yield this.getLendingPool().getOffchainAccountLendingPool();
35
22
  return offchainAccountLendingPool.getCollateral();
36
23
  });
37
24
  }
38
- cleanCache() {
39
- super.cleanCache();
40
- this.collateralCache = {};
41
- }
42
- fixStakedLPExchangeRate(n) {
43
- return __awaiter(this, void 0, void 0, function* () {
44
- const stakedLPExchangeRate = yield this.poolToken.getLendingPool().getStakedLPExchangeRate();
45
- return (yield n) / stakedLPExchangeRate;
46
- });
47
- }
48
- getAvailableBalanceUSD() {
49
- const _super = Object.create(null, {
50
- getAvailableBalanceUSD: { get: () => super.getAvailableBalanceUSD }
51
- });
52
- return __awaiter(this, void 0, void 0, function* () {
53
- return this.fixStakedLPExchangeRate(_super.getAvailableBalanceUSD.call(this));
54
- });
55
- }
56
- getDepositedUSD() {
57
- const _super = Object.create(null, {
58
- getDepositedUSD: { get: () => super.getDepositedUSD }
59
- });
60
- return __awaiter(this, void 0, void 0, function* () {
61
- return this.fixStakedLPExchangeRate(_super.getDepositedUSD.call(this));
62
- });
63
- }
64
- // Max Withdrawable
65
- /*public async getMaxWithdrawable() : Promise<number> {
66
- const deposited = await this.getDeposited();
67
- const availableCash = await this.poolToken.getTotalBalance();
68
- const { valueCollateral, valueA, valueB } = await this.lendingPool.getValues(NO_CHANGES);
69
- const safetyMargin = (await this.lendingPool.getSafetyMargin()) * this.getUiMargin();
70
- const liquidationPenalty = await this.lendingPool.getLiquidationPenalty();
71
- const actualCollateral = valueCollateral / liquidationPenalty;
72
- const maxWithdrawable1 = (actualCollateral - (valueA + valueB * safetyMargin) / Math.sqrt(safetyMargin)) * liquidationPenalty / this.getDust();
73
- const maxWithdrawable2 = (actualCollateral - (valueB + valueA * safetyMargin) / Math.sqrt(safetyMargin)) * liquidationPenalty / this.getDust();
74
- return Math.max(0, Math.min(deposited, availableCash, maxWithdrawable1, maxWithdrawable2));
75
- }*/
76
- // binary search approach
77
- getMaxWithdrawable() {
78
- return __awaiter(this, void 0, void 0, function* () {
79
- const collateralAmount = yield this.getDeposited();
80
- const twapPrice = yield this.lendingPool.getLendingPool().getTWAPPrice();
81
- const [liqPriceA, liqPriceB] = yield this.lendingPool.getLiquidationPrices(onchainTypes_1.NO_CHANGES);
82
- // start search
83
- let withdrawAmount = collateralAmount;
84
- let withdrawAmountPrev = 0;
85
- let bestAmount = 0;
86
- for (let i = 0; i < 1000; i++) {
87
- const jump = Math.abs(withdrawAmount - withdrawAmountPrev) / 2;
88
- if (jump / collateralAmount < 0.000001)
89
- break;
90
- withdrawAmountPrev = withdrawAmount;
91
- const changeCollateral = -1 * Math.min(withdrawAmount, collateralAmount);
92
- const changeBorrowedA = 0;
93
- const changeBorrowedB = 0;
94
- const changes = { changeCollateral, changeBorrowedA, changeBorrowedB };
95
- const [liqPriceA, liqPriceB] = yield this.lendingPool.getLiquidationPrices(changes);
96
- if (liqPriceA * this.getUiMargin() > twapPrice || liqPriceB / this.getUiMargin() < twapPrice)
97
- withdrawAmount -= jump;
98
- else {
99
- bestAmount = withdrawAmount;
100
- withdrawAmount += jump;
101
- if (withdrawAmount > collateralAmount)
102
- break;
103
- }
104
- }
105
- return bestAmount * this.getDust();
106
- });
107
- }
108
25
  }
109
26
  exports.default = OnchainAccountCollateral;
@@ -0,0 +1,25 @@
1
+ import OnchainAccountPoolToken from '../onchainAccountPoolToken';
2
+ import OffchainAccountCollateral from '../../../offchain/account/lendingPool/offchainAccountCollateral';
3
+ import OnchainAccountCollateral from "./onchainAccountCollateral";
4
+ import { OnchainCollateralV2 } from "../../impermaxFactory/lendingPool";
5
+ import OnchainAccountLendingPoolV2 from "./onchainAccountLendingPoolV2";
6
+ import OnchainInteractionsCollateralV2 from "../../interactions/lendingPool/onchainInteractionsCollateralV2";
7
+ export default class OnchainAccountCollateralV2 extends OnchainAccountPoolToken implements OnchainAccountCollateral {
8
+ protected readonly lendingPool: OnchainAccountLendingPoolV2;
9
+ protected readonly poolToken: OnchainCollateralV2;
10
+ protected collateralCache: {};
11
+ constructor(lendingPool: OnchainAccountLendingPoolV2);
12
+ getLendingPool: () => OnchainAccountLendingPoolV2;
13
+ getPoolToken: () => OnchainCollateralV2;
14
+ getCollateral: () => OnchainCollateralV2;
15
+ getAccount: () => import("..").default;
16
+ getInteractionsPoolToken(): OnchainInteractionsCollateralV2;
17
+ getInteractionsCollateral: () => OnchainInteractionsCollateralV2;
18
+ getOffchainAccountPoolToken(): Promise<OffchainAccountCollateral>;
19
+ getOffchainAccountCollateral: () => Promise<OffchainAccountCollateral>;
20
+ cleanCache(): void;
21
+ fixStakedLPExchangeRate(n: Promise<number>): Promise<number>;
22
+ getAvailableBalanceUSD(): Promise<number>;
23
+ getDepositedUSD(): Promise<number>;
24
+ getMaxWithdrawable(): Promise<number>;
25
+ }
@@ -0,0 +1,99 @@
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 onchainTypes_1 = require("../../onchainTypes");
16
+ const onchainAccountPoolToken_1 = __importDefault(require("../onchainAccountPoolToken"));
17
+ class OnchainAccountCollateralV2 extends onchainAccountPoolToken_1.default {
18
+ constructor(lendingPool) {
19
+ super();
20
+ this.collateralCache = {};
21
+ this.getLendingPool = () => this.lendingPool;
22
+ this.getPoolToken = () => this.poolToken;
23
+ this.getCollateral = () => this.poolToken;
24
+ this.getAccount = () => this.lendingPool.getAccount();
25
+ this.getInteractionsCollateral = this.getInteractionsPoolToken;
26
+ this.getOffchainAccountCollateral = this.getOffchainAccountPoolToken;
27
+ this.lendingPool = lendingPool;
28
+ this.poolToken = lendingPool.getLendingPool().getCollateral();
29
+ }
30
+ getInteractionsPoolToken() {
31
+ return this.lendingPool.getInteractionsLendingPool().getCollateral();
32
+ }
33
+ getOffchainAccountPoolToken() {
34
+ return __awaiter(this, void 0, void 0, function* () {
35
+ const offchainAccountLendingPool = yield this.lendingPool.getOffchainAccountLendingPool();
36
+ return offchainAccountLendingPool.getCollateral();
37
+ });
38
+ }
39
+ cleanCache() {
40
+ super.cleanCache();
41
+ this.collateralCache = {};
42
+ }
43
+ fixStakedLPExchangeRate(n) {
44
+ return __awaiter(this, void 0, void 0, function* () {
45
+ const stakedLPExchangeRate = yield this.poolToken.getLendingPool().getStakedLPExchangeRate();
46
+ return (yield n) / stakedLPExchangeRate;
47
+ });
48
+ }
49
+ getAvailableBalanceUSD() {
50
+ const _super = Object.create(null, {
51
+ getAvailableBalanceUSD: { get: () => super.getAvailableBalanceUSD }
52
+ });
53
+ return __awaiter(this, void 0, void 0, function* () {
54
+ return this.fixStakedLPExchangeRate(_super.getAvailableBalanceUSD.call(this));
55
+ });
56
+ }
57
+ getDepositedUSD() {
58
+ const _super = Object.create(null, {
59
+ getDepositedUSD: { get: () => super.getDepositedUSD }
60
+ });
61
+ return __awaiter(this, void 0, void 0, function* () {
62
+ return this.fixStakedLPExchangeRate(_super.getDepositedUSD.call(this));
63
+ });
64
+ }
65
+ // Max Withdrawable
66
+ // binary search approach
67
+ getMaxWithdrawable() {
68
+ return __awaiter(this, void 0, void 0, function* () {
69
+ const collateralAmount = yield this.getDeposited();
70
+ const twapPrice = yield this.lendingPool.getLendingPool().getTWAPPrice();
71
+ const [liqPriceA, liqPriceB] = yield this.lendingPool.getLiquidationPrices(onchainTypes_1.NO_CHANGES);
72
+ // start search
73
+ let withdrawAmount = collateralAmount;
74
+ let withdrawAmountPrev = 0;
75
+ let bestAmount = 0;
76
+ for (let i = 0; i < 1000; i++) {
77
+ const jump = Math.abs(withdrawAmount - withdrawAmountPrev) / 2;
78
+ if (jump / collateralAmount < 0.000001)
79
+ break;
80
+ withdrawAmountPrev = withdrawAmount;
81
+ const changeCollateral = -1 * Math.min(withdrawAmount, collateralAmount);
82
+ const changeBorrowedA = 0;
83
+ const changeBorrowedB = 0;
84
+ const changes = { changeCollateral, changeBorrowedA, changeBorrowedB };
85
+ const [liqPriceA, liqPriceB] = yield this.lendingPool.getLiquidationPrices(changes);
86
+ if (liqPriceA * this.getUiMargin() > twapPrice || liqPriceB / this.getUiMargin() < twapPrice)
87
+ withdrawAmount -= jump;
88
+ else {
89
+ bestAmount = withdrawAmount;
90
+ withdrawAmount += jump;
91
+ if (withdrawAmount > collateralAmount)
92
+ break;
93
+ }
94
+ }
95
+ return bestAmount * this.getDust();
96
+ });
97
+ }
98
+ }
99
+ exports.default = OnchainAccountCollateralV2;
@@ -0,0 +1,18 @@
1
+ import OffchainAccountCollateral from '../../../offchain/account/lendingPool/offchainAccountCollateral';
2
+ import OnchainAccountCollateral from "./onchainAccountCollateral";
3
+ import { OnchainCollateralV3 } from "../../impermaxFactory/lendingPool";
4
+ import OnchainAccountLendingPoolV3 from "./onchainAccountLendingPoolV3";
5
+ import { OnchainInteractionsCollateralV3 } from "../../interactions/lendingPool";
6
+ export default class OnchainAccountCollateralV3 extends OnchainAccountCollateral {
7
+ protected readonly lendingPool: OnchainAccountLendingPoolV3;
8
+ protected readonly collateral: OnchainCollateralV3;
9
+ protected collateralCache: {};
10
+ constructor(lendingPool: OnchainAccountLendingPoolV3);
11
+ getLendingPool: () => OnchainAccountLendingPoolV3;
12
+ getCollateral: () => OnchainCollateralV3;
13
+ getAccount: () => import("..").default;
14
+ getInteractionsCollateral(): OnchainInteractionsCollateralV3;
15
+ getOffchainAccountCollateral(): Promise<OffchainAccountCollateral>;
16
+ cleanCache(): void;
17
+ getDepositedUSD(): Promise<number>;
18
+ }