impermax-sdk 1.0.1 → 1.0.2

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 (209) hide show
  1. package/lib/esm/abis/ImpermaxABI.d.ts +2 -0
  2. package/lib/esm/abis/ImpermaxABI.js +3 -0
  3. package/lib/esm/abis/contracts/ClaimAggregator.json +2015 -0
  4. package/lib/esm/abis/contracts/IBorrowable.json +13207 -0
  5. package/lib/esm/abis/contracts/IClaimable.json +406 -0
  6. package/lib/esm/abis/contracts/ICollateral.json +8952 -0
  7. package/lib/esm/abis/contracts/IERC20.json +2376 -0
  8. package/lib/esm/abis/contracts/IFactory.json +3660 -0
  9. package/lib/esm/abis/contracts/IFarmingPool.json +3584 -0
  10. package/lib/esm/abis/contracts/IMerkleDistributor.json +1134 -0
  11. package/lib/esm/abis/contracts/IRouter02.json +7283 -0
  12. package/lib/esm/abis/contracts/ISimpleUniswapOracle.json +1469 -0
  13. package/lib/esm/abis/contracts/IStakedLPToken.json +7309 -0
  14. package/lib/esm/abis/contracts/IStakingRewards.json +1036 -0
  15. package/lib/esm/abis/contracts/IUniswapV2Factory.json +1690 -0
  16. package/lib/esm/abis/contracts/IUniswapV2Pair.json +6761 -0
  17. package/lib/esm/abis/contracts/ImpermaxChef.json +20945 -0
  18. package/lib/esm/config/amms.d.ts +25 -0
  19. package/lib/esm/config/amms.js +196 -0
  20. package/lib/esm/config/contracts/claim-aggregators.d.ts +2 -0
  21. package/lib/esm/config/contracts/claim-aggregators.js +18 -0
  22. package/lib/esm/config/contracts/impermax-chef.d.ts +2 -0
  23. package/lib/esm/config/contracts/impermax-chef.js +18 -0
  24. package/lib/esm/config/contracts/imxes.d.ts +2 -0
  25. package/lib/esm/config/contracts/imxes.js +18 -0
  26. package/lib/esm/config/contracts/merkle-distributors.d.ts +4 -0
  27. package/lib/esm/config/contracts/merkle-distributors.js +13 -0
  28. package/lib/esm/config/contracts/routers.d.ts +2 -0
  29. package/lib/esm/config/contracts/routers.js +38 -0
  30. package/lib/esm/config/contracts/simple-uniswap-oracles.d.ts +2 -0
  31. package/lib/esm/config/contracts/simple-uniswap-oracles.js +35 -0
  32. package/lib/esm/config/contracts/weths.d.ts +2 -0
  33. package/lib/esm/config/contracts/weths.js +19 -0
  34. package/lib/esm/config/debank-ids.d.ts +2 -0
  35. package/lib/esm/config/debank-ids.js +17 -0
  36. package/lib/esm/config/endpoints/merkle-distributors.d.ts +4 -0
  37. package/lib/esm/config/endpoints/merkle-distributors.js +13 -0
  38. package/lib/esm/config/eth.d.ts +3 -0
  39. package/lib/esm/config/eth.js +32 -0
  40. package/lib/esm/config/factories.d.ts +6 -0
  41. package/lib/esm/config/factories.js +24 -0
  42. package/lib/esm/config/farms.d.ts +59 -0
  43. package/lib/esm/config/farms.js +114 -0
  44. package/lib/esm/config/general.d.ts +3 -0
  45. package/lib/esm/config/general.js +8 -0
  46. package/lib/esm/config/subgraphs.d.ts +5 -0
  47. package/lib/esm/config/subgraphs.js +68 -0
  48. package/lib/esm/config/types.d.ts +67 -0
  49. package/lib/esm/config/types.js +54 -0
  50. package/lib/esm/impermax-router/Account.d.ts +31 -0
  51. package/lib/esm/impermax-router/Account.js +154 -0
  52. package/lib/esm/impermax-router/AccountBorrowable.d.ts +22 -0
  53. package/lib/esm/impermax-router/AccountBorrowable.js +141 -0
  54. package/lib/esm/impermax-router/AccountCollateral.d.ts +11 -0
  55. package/lib/esm/impermax-router/AccountCollateral.js +63 -0
  56. package/lib/esm/impermax-router/AccountLendingPool.d.ts +57 -0
  57. package/lib/esm/impermax-router/AccountLendingPool.js +266 -0
  58. package/lib/esm/impermax-router/AccountPoolToken.d.ts +29 -0
  59. package/lib/esm/impermax-router/AccountPoolToken.js +89 -0
  60. package/lib/esm/impermax-router/Borrowable.d.ts +27 -0
  61. package/lib/esm/impermax-router/Borrowable.js +128 -0
  62. package/lib/esm/impermax-router/Collateral.d.ts +9 -0
  63. package/lib/esm/impermax-router/Collateral.js +45 -0
  64. package/lib/esm/impermax-router/ContractsHelper.d.ts +28 -0
  65. package/lib/esm/impermax-router/ContractsHelper.js +50 -0
  66. package/lib/esm/impermax-router/ImpermaxFactory.d.ts +15 -0
  67. package/lib/esm/impermax-router/ImpermaxFactory.js +42 -0
  68. package/lib/esm/impermax-router/Interactions.d.ts +16 -0
  69. package/lib/esm/impermax-router/Interactions.js +105 -0
  70. package/lib/esm/impermax-router/InteractionsLendingPool.d.ts +43 -0
  71. package/lib/esm/impermax-router/InteractionsLendingPool.js +124 -0
  72. package/lib/esm/impermax-router/InteractionsPoolToken.d.ts +23 -0
  73. package/lib/esm/impermax-router/InteractionsPoolToken.js +194 -0
  74. package/lib/esm/impermax-router/LendingPool.d.ts +69 -0
  75. package/lib/esm/impermax-router/LendingPool.js +291 -0
  76. package/lib/esm/impermax-router/PoolToken.d.ts +36 -0
  77. package/lib/esm/impermax-router/PoolToken.js +140 -0
  78. package/lib/esm/impermax-router/index.d.ts +20 -0
  79. package/lib/esm/impermax-router/index.js +34 -0
  80. package/lib/esm/impermax-router/interfaces.d.ts +218 -0
  81. package/lib/esm/impermax-router/interfaces.js +15 -0
  82. package/{index.ts → lib/esm/index.d.ts} +1 -3
  83. package/lib/esm/index.js +10 -0
  84. package/lib/esm/subgraph/Account.d.ts +18 -0
  85. package/lib/esm/subgraph/Account.js +111 -0
  86. package/lib/esm/subgraph/AccountLendingPool.d.ts +19 -0
  87. package/lib/esm/subgraph/AccountLendingPool.js +71 -0
  88. package/lib/esm/subgraph/AccountPoolToken.d.ts +14 -0
  89. package/lib/esm/subgraph/AccountPoolToken.js +75 -0
  90. package/lib/esm/subgraph/LendingPool.d.ts +38 -0
  91. package/lib/esm/subgraph/LendingPool.js +204 -0
  92. package/lib/esm/subgraph/PoolToken.d.ts +64 -0
  93. package/lib/esm/subgraph/PoolToken.js +462 -0
  94. package/lib/esm/subgraph/PriceHelper.d.ts +21 -0
  95. package/lib/esm/subgraph/PriceHelper.js +166 -0
  96. package/lib/esm/subgraph/SolidexHelper.d.ts +16 -0
  97. package/lib/esm/subgraph/SolidexHelper.js +58 -0
  98. package/lib/esm/subgraph/index.d.ts +73 -0
  99. package/lib/esm/subgraph/index.js +185 -0
  100. package/lib/esm/subgraph/initializer.d.ts +34 -0
  101. package/lib/esm/subgraph/initializer.js +517 -0
  102. package/lib/esm/subgraph/query.d.ts +10 -0
  103. package/lib/esm/subgraph/query.js +229 -0
  104. package/lib/esm/utils/ether-utils.d.ts +5 -0
  105. package/lib/esm/utils/ether-utils.js +26 -0
  106. package/lib/esm/utils/index.d.ts +3 -0
  107. package/lib/esm/utils/index.js +16 -0
  108. package/package.json +9 -3
  109. package/.idea/impermax-sdk.iml +0 -12
  110. package/.idea/misc.xml +0 -6
  111. package/.idea/modules.xml +0 -8
  112. package/.idea/workspace.xml +0 -642
  113. package/abis/ImpermaxABI.ts +0 -3
  114. package/abis/contracts/BAllowance.json +0 -4735
  115. package/abis/contracts/BDeployer.json +0 -1195
  116. package/abis/contracts/BInterestRateModel.json +0 -10796
  117. package/abis/contracts/BSetter.json +0 -6219
  118. package/abis/contracts/BStorage.json +0 -2613
  119. package/abis/contracts/Borrowable.json +0 -19937
  120. package/abis/contracts/CDeployer.json +0 -1104
  121. package/abis/contracts/CSetter.json +0 -5094
  122. package/abis/contracts/CStorage.json +0 -516
  123. package/abis/contracts/ClaimAggregator.json +0 -2015
  124. package/abis/contracts/Collateral.json +0 -21615
  125. package/abis/contracts/ERC20.json +0 -819
  126. package/abis/contracts/Factory.json +0 -21986
  127. package/abis/contracts/FarmingPool.json +0 -8601
  128. package/abis/contracts/IBDeployer.json +0 -351
  129. package/abis/contracts/IBorrowTracker.json +0 -346
  130. package/abis/contracts/IBorrowable.json +0 -13207
  131. package/abis/contracts/ICDeployer.json +0 -294
  132. package/abis/contracts/IClaimable.json +0 -406
  133. package/abis/contracts/ICollateral.json +0 -8952
  134. package/abis/contracts/IERC20.json +0 -2376
  135. package/abis/contracts/IFactory.json +0 -3660
  136. package/abis/contracts/IFarmingPool.json +0 -3584
  137. package/abis/contracts/IImpermaxCallee.json +0 -679
  138. package/abis/contracts/IMerkleDistributor.json +0 -1134
  139. package/abis/contracts/IPoolToken.json +0 -5343
  140. package/abis/contracts/IRouter01.json +0 -6891
  141. package/abis/contracts/IRouter02.json +0 -7283
  142. package/abis/contracts/ISimpleUniswapOracle.json +0 -1469
  143. package/abis/contracts/IStakedLPToken.json +0 -7309
  144. package/abis/contracts/IStakingRewards.json +0 -1036
  145. package/abis/contracts/IUniswapV2Callee.json +0 -403
  146. package/abis/contracts/IUniswapV2ERC20.json +0 -3155
  147. package/abis/contracts/IUniswapV2Factory.json +0 -1690
  148. package/abis/contracts/IUniswapV2Pair.json +0 -6761
  149. package/abis/contracts/IWETH.json +0 -561
  150. package/abis/contracts/ImpermaxChef.json +0 -20945
  151. package/abis/contracts/ImpermaxERC20.json +0 -12095
  152. package/abis/contracts/Math.json +0 -1966
  153. package/abis/contracts/MockERC20.json +0 -8884
  154. package/abis/contracts/PoolToken.json +0 -10784
  155. package/abis/contracts/Router01.json +0 -43963
  156. package/abis/contracts/SafeMath.json +0 -6828
  157. package/abis/contracts/SimpleUniswapOracle.json +0 -9640
  158. package/abis/contracts/TransferHelper.json +0 -4875
  159. package/abis/contracts/UQ112x112.json +0 -1201
  160. package/abis/contracts/UniswapV2ERC20.json +0 -10969
  161. package/abis/contracts/UniswapV2Factory.json +0 -5521
  162. package/abis/contracts/UniswapV2Library.json +0 -13789
  163. package/abis/contracts/UniswapV2Pair.json +0 -30782
  164. package/abis/contracts/WETH9.json +0 -6613
  165. package/config/amms.ts +0 -199
  166. package/config/contracts/claim-aggregators.ts +0 -16
  167. package/config/contracts/impermax-chef.ts +0 -16
  168. package/config/contracts/imxes.ts +0 -16
  169. package/config/contracts/merkle-distributors.ts +0 -13
  170. package/config/contracts/routers.ts +0 -36
  171. package/config/contracts/simple-uniswap-oracles.ts +0 -33
  172. package/config/contracts/weths.ts +0 -18
  173. package/config/debank-ids.ts +0 -15
  174. package/config/endpoints/merkle-distributors.ts +0 -13
  175. package/config/eth.ts +0 -32
  176. package/config/factories.ts +0 -26
  177. package/config/farms.ts +0 -119
  178. package/config/general.ts +0 -8
  179. package/config/subgraphs.ts +0 -69
  180. package/config/types.ts +0 -81
  181. package/impermax-router/Account.ts +0 -123
  182. package/impermax-router/AccountBorrowable.ts +0 -110
  183. package/impermax-router/AccountCollateral.ts +0 -40
  184. package/impermax-router/AccountLendingPool.ts +0 -231
  185. package/impermax-router/AccountPoolToken.ts +0 -76
  186. package/impermax-router/Borrowable.ts +0 -86
  187. package/impermax-router/Collateral.ts +0 -26
  188. package/impermax-router/ContractsHelper.ts +0 -64
  189. package/impermax-router/ImpermaxFactory.ts +0 -47
  190. package/impermax-router/Interactions.ts +0 -94
  191. package/impermax-router/InteractionsLendingPool.ts +0 -129
  192. package/impermax-router/InteractionsPoolToken.ts +0 -187
  193. package/impermax-router/LendingPool.ts +0 -256
  194. package/impermax-router/PoolToken.ts +0 -112
  195. package/impermax-router/index.ts +0 -49
  196. package/impermax-router/interfaces.ts +0 -233
  197. package/subgraph/Account.ts +0 -93
  198. package/subgraph/AccountLendingPool.ts +0 -60
  199. package/subgraph/AccountPoolToken.ts +0 -60
  200. package/subgraph/LendingPool.ts +0 -179
  201. package/subgraph/PoolToken.ts +0 -381
  202. package/subgraph/PriceHelper.ts +0 -150
  203. package/subgraph/SolidexHelper.ts +0 -54
  204. package/subgraph/index.ts +0 -166
  205. package/subgraph/initializer.ts +0 -509
  206. package/subgraph/query.ts +0 -224
  207. package/tsconfig.json +0 -16
  208. package/utils/ether-utils.ts +0 -22
  209. package/utils/index.ts +0 -12
@@ -1,93 +0,0 @@
1
- import { UserData } from "../impermax-router/interfaces";
2
-
3
- import Subgraph from ".";
4
- import AccountLendingPool from "./AccountLendingPool";
5
- import { Address, Factory, FactoryIndex, LendingPoolIndex, PoolTokenType } from '../config/types';
6
-
7
- export default class Account {
8
- subgraph: Subgraph;
9
- account: Address;
10
- accountLLPs: LendingPoolIndex<Promise<AccountLendingPool>>;
11
-
12
- constructor(subgraph: Subgraph, account: Address) {
13
- this.subgraph = subgraph;
14
- this.account = account;
15
- this.accountLLPs = {}
16
- }
17
-
18
- private async initializeAccountLendingPool(factory: Factory, pair: Address) : Promise<AccountLendingPool> {
19
- const lendingPool = await this.subgraph.getLendingPool(factory, pair);
20
- return new AccountLendingPool(this, lendingPool);
21
- }
22
- async getAccountLendingPool(factory: Factory, pair: Address) : Promise<AccountLendingPool> {
23
- if (!this.accountLLPs[factory]) this.accountLLPs[factory] = {};
24
- if (!this.accountLLPs[factory][pair]) this.accountLLPs[factory][pair] = this.initializeAccountLendingPool(factory, pair);
25
- return this.accountLLPs[factory][pair];
26
- }
27
-
28
- async getUserData() : Promise<FactoryIndex<UserData>> {
29
- return this.subgraph.getUserData(this.account);
30
- }
31
-
32
- async getBorrowPositions() : Promise<FactoryIndex<Address[]>> {
33
- const result: FactoryIndex<Address[]> = {};
34
- const userData = await this.getUserData();
35
- for (const factory of Object.keys(userData) as Factory[]) {
36
- result[factory] = Object.keys(userData[factory].collateralPositions);
37
- }
38
- return result;
39
- }
40
-
41
- async getSupplyPositions() : Promise<FactoryIndex<Address[]>> {
42
- const result: FactoryIndex<Address[]> = {};
43
- const userData = await this.getUserData();
44
- for (const factory of Object.keys(userData) as Factory[]) {
45
- result[factory] = Object.keys(userData[factory].supplyPositions);
46
- }
47
- return result;
48
- }
49
-
50
- async getAccountTotalValueLocked() : Promise<number> {
51
- const borrowPositions = await this.getBorrowPositions();
52
- const supplyPositions = await this.getSupplyPositions();
53
- let tvl = 0;
54
- for (const factory of Object.keys(borrowPositions) as Factory[]) {
55
- for (const uniswapV2PairAddress of borrowPositions[factory]) {
56
- const accountLendingPool = await this.getAccountLendingPool(factory, uniswapV2PairAddress);
57
- tvl += await accountLendingPool.getBorrowerEquityValue();
58
- }
59
- for (const uniswapV2PairAddress of supplyPositions[factory]) {
60
- const accountLendingPool = await this.getAccountLendingPool(factory, uniswapV2PairAddress);
61
- tvl += await accountLendingPool.accountPoolTokens[PoolTokenType.BorrowableA].getSuppliedValue();
62
- tvl += await accountLendingPool.accountPoolTokens[PoolTokenType.BorrowableB].getSuppliedValue();
63
- }
64
- }
65
- return tvl;
66
- }
67
-
68
- async getAccountTotalValueSupplied() : Promise<number> {
69
- const supplyPositions = await this.getSupplyPositions();
70
- let tvl = 0;
71
- for (const factory of Object.keys(supplyPositions) as Factory[]) {
72
- for (const uniswapV2PairAddress of supplyPositions[factory]) {
73
- const accountLendingPool = await this.getAccountLendingPool(factory, uniswapV2PairAddress);
74
- tvl += await accountLendingPool.accountPoolTokens[PoolTokenType.BorrowableA].getSuppliedValue();
75
- tvl += await accountLendingPool.accountPoolTokens[PoolTokenType.BorrowableB].getSuppliedValue();
76
- }
77
- }
78
- return tvl;
79
- }
80
-
81
- async getAccountTotalValueBorrowed() : Promise<number> {
82
- const borrowPositions = await this.getBorrowPositions();
83
- let tvl = 0;
84
- for (const factory of Object.keys(borrowPositions) as Factory[]) {
85
- for (const uniswapV2PairAddress of borrowPositions[factory]) {
86
- const accountLendingPool = await this.getAccountLendingPool(factory, uniswapV2PairAddress);
87
- tvl += await accountLendingPool.accountPoolTokens[PoolTokenType.BorrowableA].getBorrowedValue();
88
- tvl += await accountLendingPool.accountPoolTokens[PoolTokenType.BorrowableB].getBorrowedValue();
89
- }
90
- }
91
- return tvl;
92
- }
93
- }
@@ -1,60 +0,0 @@
1
- import { CollateralPosition, UserData } from "../impermax-router/interfaces";
2
- import Account from "./Account";
3
- import AccountPoolToken from "./AccountPoolToken";
4
-
5
- import LendingPool from "./LendingPool";
6
- import { PoolTokenType } from '../config/types';
7
-
8
- export default class AccountLendingPool {
9
- account: Account;
10
- lendingPool: LendingPool;
11
- accountPoolTokens: {
12
- [key in PoolTokenType]?: AccountPoolToken
13
- }
14
-
15
- constructor(account: Account, lendingPool: LendingPool) {
16
- this.account = account;
17
- this.lendingPool = lendingPool;
18
- this.accountPoolTokens = {};
19
- this.accountPoolTokens[PoolTokenType.Collateral] = new AccountPoolToken(this, PoolTokenType.Collateral);
20
- this.accountPoolTokens[PoolTokenType.BorrowableA] = new AccountPoolToken(this, PoolTokenType.BorrowableA);
21
- this.accountPoolTokens[PoolTokenType.BorrowableB] = new AccountPoolToken(this, PoolTokenType.BorrowableB);
22
- }
23
-
24
- getAccountPoolToken(poolTokenType: PoolTokenType) : AccountPoolToken {
25
- return this.accountPoolTokens[poolTokenType];
26
- }
27
-
28
- async getUserData() : Promise<UserData> {
29
- const userData = await this.account.getUserData();
30
- if(!userData) return null;
31
- return userData[this.lendingPool.factory];
32
- }
33
-
34
- async getCollateralPosition() : Promise<CollateralPosition> {
35
- const userData = await this.getUserData();
36
- if(!userData) return null;
37
- return userData.collateralPositions[this.lendingPool.pairAddress];
38
- }
39
-
40
- async getCollateralAmount() : Promise<number> {
41
- const collateralPosition = await this.getCollateralPosition();
42
- if(!collateralPosition) return 0;
43
- const exchangeRate = await this.lendingPool.poolTokens[PoolTokenType.Collateral].getExchangeRate();
44
- const collateralBalance = parseFloat(collateralPosition.balance);
45
- return collateralBalance * exchangeRate;
46
- }
47
-
48
- async getCollateralValue() : Promise<number> {
49
- const tokenPrice = await this.lendingPool.poolTokens[PoolTokenType.Collateral].getTokenPriceAccurate();
50
- const collateralAmount = await this.getCollateralAmount();
51
- return collateralAmount * tokenPrice;
52
- }
53
-
54
- async getBorrowerEquityValue() : Promise<number> {
55
- const collateralValue = await this.getCollateralValue();
56
- const borrowedValueA = await this.accountPoolTokens[PoolTokenType.BorrowableA].getBorrowedValue();
57
- const borrowedValueB = await this.accountPoolTokens[PoolTokenType.BorrowableB].getBorrowedValue();
58
- return collateralValue - borrowedValueA - borrowedValueB;
59
- }
60
- }
@@ -1,60 +0,0 @@
1
- import { BorrowPosition, SupplyPosition } from "../impermax-router/interfaces";
2
- import AccountLendingPool from "./AccountLendingPool";
3
-
4
- import PoolToken from "./PoolToken";
5
- import { PoolTokenType } from '../config/types';
6
-
7
- export default class AccountPoolToken {
8
- accountLendingPool: AccountLendingPool;
9
- poolToken: PoolToken;
10
-
11
- constructor(accountLendingPool: AccountLendingPool, poolTokenType: PoolTokenType) {
12
- this.accountLendingPool = accountLendingPool;
13
- this.poolToken = accountLendingPool.lendingPool.poolTokens[poolTokenType];
14
- }
15
-
16
- private async getBorrowPosition() : Promise<BorrowPosition> {
17
- const userData = await this.accountLendingPool.getUserData();
18
- if(!userData) return null;
19
- const borrowPositions = userData.borrowPositions[this.poolToken.lendingPool.pairAddress];
20
- if(!borrowPositions) return null;
21
- return borrowPositions[this.poolToken.poolTokenType];
22
- }
23
-
24
- private async getSupplyPosition() : Promise<SupplyPosition> {
25
- const userData = await this.accountLendingPool.getUserData();
26
- if(!userData) return null;
27
- const supplyPositions = userData.supplyPositions[this.poolToken.lendingPool.pairAddress];
28
- if(!supplyPositions) return null;
29
- return supplyPositions[this.poolToken.poolTokenType];
30
- }
31
-
32
- async getBorrowedAmount() : Promise<number> {
33
- const borrowPosition = await this.getBorrowPosition();
34
- const borrowIndex = await this.poolToken.getBorrowIndex();
35
- if(!borrowPosition) return 0;
36
- const borrowBalance = parseFloat(borrowPosition.borrowBalance);
37
- const userBorrowIndex = parseFloat(borrowPosition.borrowIndex);
38
- return borrowBalance * borrowIndex / userBorrowIndex;
39
- }
40
-
41
- async getBorrowedValue() : Promise<number> {
42
- const tokenPrice = await this.poolToken.getTokenPriceAccurate();
43
- const borrowedAmount = await this.getBorrowedAmount();
44
- return borrowedAmount * tokenPrice;
45
- }
46
-
47
- async getSuppliedAmount() : Promise<number> {
48
- const supplyPosition = await this.getSupplyPosition();
49
- if(!supplyPosition) return 0;
50
- const exchangeRate = await this.poolToken.getExchangeRate();
51
- const supplyBalance = parseFloat(supplyPosition.balance);
52
- return supplyBalance * exchangeRate;
53
- }
54
-
55
- async getSuppliedValue() : Promise<number> {
56
- const tokenPrice = await this.poolToken.getTokenPriceAccurate();
57
- const suppliedAmount = await this.getSuppliedAmount();
58
- return suppliedAmount * tokenPrice;
59
- }
60
- }
@@ -1,179 +0,0 @@
1
- import { LendingPoolData, LendingPoolPastData } from "../impermax-router/interfaces";
2
-
3
- import Subgraph from ".";
4
- import PoolToken from "./PoolToken";
5
- import { toAPR } from "../utils";
6
- import { Address, Amms, Factory, PoolTokenType } from '../config/types';
7
- import { getAmmByFactory } from '../config/amms';
8
- import { OLD_KINK_MULTIPLIER_FACTORIES } from '../config/factories';
9
- import { Farms, getFarmByStakedLPFactory } from '../config/farms';
10
-
11
- export default class LendingPool {
12
- subgraph: Subgraph;
13
- factory: Factory;
14
- pairAddress: Address;
15
- poolTokens: {
16
- [key in PoolTokenType]?: PoolToken
17
- };
18
-
19
- constructor(subgraph: Subgraph, factory: Factory, pairAddress: Address) {
20
- this.subgraph = subgraph;
21
- this.factory = factory;
22
- this.pairAddress = pairAddress;
23
- this.poolTokens = {};
24
- this.poolTokens[PoolTokenType.Collateral] = new PoolToken(this, PoolTokenType.Collateral);
25
- this.poolTokens[PoolTokenType.BorrowableA] = new PoolToken(this, PoolTokenType.BorrowableA);
26
- this.poolTokens[PoolTokenType.BorrowableB] = new PoolToken(this, PoolTokenType.BorrowableB);
27
- }
28
-
29
- getPoolToken(poolTokenType: PoolTokenType) : PoolToken {
30
- return this.poolTokens[poolTokenType];
31
- }
32
-
33
- // Subgraph calls
34
- async getLendingPoolData() : Promise<LendingPoolData> {
35
- return this.subgraph.getLendingPoolData(this.factory, this.pairAddress);
36
- }
37
-
38
- // Safety Margin
39
- async getSafetyMargin() : Promise<number> {
40
- const lendingPoolData = await this.getLendingPoolData();
41
- return parseFloat(lendingPoolData[PoolTokenType.Collateral].safetyMargin);
42
- }
43
-
44
- // Liquidation Penalty
45
- async getLiquidationIncentive() : Promise<number> {
46
- const lendingPoolData = await this.getLendingPoolData();
47
- return parseFloat(lendingPoolData[PoolTokenType.Collateral].liquidationIncentive);
48
- }
49
- async getLiquidationFee() : Promise<number> {
50
- const lendingPoolData = await this.getLendingPoolData();
51
- const liquidationFee = lendingPoolData[PoolTokenType.Collateral].liquidationFee;
52
- return liquidationFee ? parseFloat(liquidationFee) : 0;
53
- }
54
- async getLiquidationPenalty() : Promise<number> {
55
- return await this.getLiquidationIncentive() + await this.getLiquidationFee();
56
- }
57
-
58
- // Uniswap APR
59
- async getUniswapAPR() : Promise<number> {
60
- const lendingPoolData = await this.getLendingPoolData();
61
- return lendingPoolData.pair.uniswapAPR;
62
- }
63
-
64
- // Staking
65
- async isStakedLPToken() : Promise<boolean> {
66
- const lendingPoolData = await this.getLendingPoolData();
67
- return lendingPoolData.pair.isStakedLPToken;
68
- }
69
- async getStakedLPExchangeRate() : Promise<number> {
70
- const lendingPoolData = await this.getLendingPoolData();
71
- return parseFloat(lendingPoolData.pair.exchangeRate);
72
- }
73
- async getStakingRewards(): Promise<Array<{
74
- APR: number,
75
- symbol: string,
76
- }>> {
77
- const farm = await this.getFarm();
78
- const lendingPoolData = await this.getLendingPoolData();
79
-
80
- if (farm === Farms.solidex || farm === Farms.solidexB || farm === Farms.solidexUSDC || farm === Farms.solidexUSDCB) {
81
- const solidexLPDetails = await this.subgraph.solidexHelper.getSolidexLPDetails();
82
- const result = solidexLPDetails[lendingPoolData.pair.uniswapV2PairAddress];
83
- if (result) return result;
84
- }
85
-
86
- const FINISH_DELAY = 3600 * 24 * 1;
87
- const rewards = [];
88
- const stakedTotalSupply = parseFloat(lendingPoolData.pair.stakedTotalSupply);
89
- const underlyingLPPrice = await this.getUnderlyingLPPrice(true);
90
- for(const reward of lendingPoolData.pair.rewards) {
91
- const multiplier = farm === Farms.traderJoeV2 ? 0.5 : 1;
92
- const periodFinish = parseInt(reward.periodFinish);
93
- if ((new Date).getTime() / 1000 - FINISH_DELAY > periodFinish && periodFinish !== 0) continue;
94
- let rewardRate = parseFloat(reward.rewardRate);
95
- if (farm == Farms.traderJoeV4) rewardRate = rewardRate * 0.45;
96
- const rewardPrice = await this.subgraph.priceHelper.getDebankTokenPrice(reward.rewardsToken.id);
97
- rewards.push({
98
- APR: toAPR((rewardPrice * rewardRate) / (stakedTotalSupply * underlyingLPPrice) * multiplier),
99
- symbol: reward.rewardsToken.symbol,
100
- });
101
- }
102
- return rewards;
103
- }
104
- async getStakingAPR() : Promise<number> {
105
- const rewards = await this.getStakingRewards();
106
- let APR = 0;
107
- for (const reward of rewards) {
108
- APR += reward.APR
109
- }
110
- return APR;
111
- }
112
-
113
- //Shown Leverage
114
- async getShownLeverage() : Promise<number> {
115
- const safetyMargin = await this.getSafetyMargin();
116
- if (safetyMargin < 1.25) return 20;
117
- if (safetyMargin < 1.51) return 10;
118
- if (safetyMargin < 2.01) return 5;
119
- return 3;
120
- }
121
-
122
- // Past Data
123
- async getLendingPoolDataPast24h() : Promise<LendingPoolPastData> {
124
- return (await this.getLendingPoolData()).past24h;
125
- }
126
- async getLendingPoolDataPast7d() : Promise<LendingPoolPastData> {
127
- return (await this.getLendingPoolData()).past7d;
128
- }
129
-
130
- // Amms and farms
131
- async getAmm() : Promise<Amms> {
132
- const lendingPoolData = await this.getLendingPoolData();
133
- return getAmmByFactory(this.subgraph.network, lendingPoolData.pair.uniswapV2Factory);
134
- }
135
- async getFarm() : Promise<Farms> {
136
- const lendingPoolData = await this.getLendingPoolData();
137
- return getFarmByStakedLPFactory(this.subgraph.network, lendingPoolData.pair.factory);
138
- }
139
-
140
- // getCollateralPrice -> returns the price of the collateral, not necessarily of the underlying LP
141
- private calculateCollateralPrice(reserve0: number, reserve1: number, totalSupply: number, price0: number, price1: number) : number {
142
- if (totalSupply === 0) return 0;
143
- const reserve0USD = reserve0 * price0;
144
- const reserve1USD = reserve1 * price1;
145
- // adjust reserves taking the latest price passed as parameters
146
- const adjustedReserveUSD = Math.sqrt(reserve0USD * reserve1USD) * 2;
147
- return adjustedReserveUSD / totalSupply;
148
- }
149
- async getCollateralPrice(fast: boolean = true) : Promise<number> {
150
- const lendingPoolData = await this.getLendingPoolData();
151
- return this.calculateCollateralPrice(
152
- parseFloat(lendingPoolData.pair.reserve0),
153
- parseFloat(lendingPoolData.pair.reserve1),
154
- parseFloat(lendingPoolData.pair.totalSupply),
155
- fast ?
156
- await this.poolTokens[PoolTokenType.BorrowableA].getTokenPriceFast() :
157
- await this.poolTokens[PoolTokenType.BorrowableA].getTokenPriceAccurate(),
158
- fast ?
159
- await this.poolTokens[PoolTokenType.BorrowableB].getTokenPriceFast() :
160
- await this.poolTokens[PoolTokenType.BorrowableB].getTokenPriceAccurate(),
161
- );
162
- }
163
- async getUnderlyingLPPrice(fast: boolean = true) {
164
- return await this.getCollateralPrice(fast) / await this.getStakedLPExchangeRate();
165
- }
166
-
167
- // Kink Multiplier
168
- getKinkMultiplier() {
169
- if (OLD_KINK_MULTIPLIER_FACTORIES.includes(this.factory)) return 5;
170
- return 2;
171
- }
172
-
173
- // Stats
174
- async getTotalBorrowsUSD() {
175
- const totalBorrowsUSDA = await this.poolTokens[PoolTokenType.BorrowableA].getTotalBorrowsUSD();
176
- const totalBorrowsUSDB = await this.poolTokens[PoolTokenType.BorrowableB].getTotalBorrowsUSD();
177
- return totalBorrowsUSDA + totalBorrowsUSDB;
178
- }
179
- }