@defisaver/positions-sdk 0.0.201-fluid-dev-10 → 0.0.201-fluid-dev-11

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 (124) hide show
  1. package/.mocharc.json +4 -4
  2. package/.nvmrc +1 -1
  3. package/README.md +69 -69
  4. package/cjs/aaveV2/index.js +1 -1
  5. package/cjs/config/contracts.d.ts +87 -6
  6. package/cjs/config/contracts.js +15 -2
  7. package/cjs/helpers/liquityV2Helpers/index.js +2 -2
  8. package/cjs/helpers/morphoBlueHelpers/index.js +66 -66
  9. package/cjs/liquityV2/index.d.ts +9 -4
  10. package/cjs/liquityV2/index.js +69 -10
  11. package/cjs/markets/index.d.ts +1 -1
  12. package/cjs/markets/index.js +2 -1
  13. package/cjs/markets/liquityV2/index.d.ts +2 -1
  14. package/cjs/markets/liquityV2/index.js +12 -1
  15. package/cjs/markets/spark/marketAssets.js +1 -1
  16. package/cjs/morphoAaveV2/index.js +1 -1
  17. package/cjs/morphoAaveV3/index.js +1 -2
  18. package/cjs/spark/index.js +1 -2
  19. package/cjs/staking/staking.d.ts +1 -6
  20. package/cjs/staking/staking.js +20 -23
  21. package/cjs/types/contracts/generated/LiquityV2StabilityPool.d.ts +223 -0
  22. package/cjs/types/contracts/generated/LiquityV2StabilityPool.js +5 -0
  23. package/cjs/types/contracts/generated/LiquityV2View.d.ts +144 -2
  24. package/cjs/types/contracts/generated/index.d.ts +1 -0
  25. package/cjs/types/liquityV2.d.ts +1 -0
  26. package/esm/aaveV2/index.js +2 -2
  27. package/esm/config/contracts.d.ts +87 -6
  28. package/esm/config/contracts.js +15 -2
  29. package/esm/helpers/liquityV2Helpers/index.js +2 -2
  30. package/esm/helpers/morphoBlueHelpers/index.js +66 -66
  31. package/esm/liquityV2/index.d.ts +9 -4
  32. package/esm/liquityV2/index.js +64 -10
  33. package/esm/markets/index.d.ts +1 -1
  34. package/esm/markets/index.js +1 -1
  35. package/esm/markets/liquityV2/index.d.ts +2 -1
  36. package/esm/markets/liquityV2/index.js +10 -0
  37. package/esm/markets/spark/marketAssets.js +1 -1
  38. package/esm/morphoAaveV2/index.js +2 -2
  39. package/esm/morphoAaveV3/index.js +1 -2
  40. package/esm/spark/index.js +1 -2
  41. package/esm/staking/staking.d.ts +1 -6
  42. package/esm/staking/staking.js +24 -22
  43. package/esm/types/contracts/generated/LiquityV2StabilityPool.d.ts +223 -0
  44. package/esm/types/contracts/generated/LiquityV2StabilityPool.js +4 -0
  45. package/esm/types/contracts/generated/LiquityV2View.d.ts +144 -2
  46. package/esm/types/contracts/generated/index.d.ts +1 -0
  47. package/esm/types/liquityV2.d.ts +1 -0
  48. package/package.json +52 -51
  49. package/src/aaveV2/index.ts +227 -227
  50. package/src/aaveV3/index.ts +625 -625
  51. package/src/assets/index.ts +60 -60
  52. package/src/chickenBonds/index.ts +123 -123
  53. package/src/compoundV2/index.ts +220 -220
  54. package/src/compoundV3/index.ts +291 -291
  55. package/src/config/contracts.js +1135 -1122
  56. package/src/constants/index.ts +6 -6
  57. package/src/contracts.ts +134 -134
  58. package/src/curveUsd/index.ts +229 -229
  59. package/src/eulerV2/index.ts +303 -303
  60. package/src/exchange/index.ts +17 -17
  61. package/src/fluid/index.ts +343 -343
  62. package/src/helpers/aaveHelpers/index.ts +198 -198
  63. package/src/helpers/chickenBondsHelpers/index.ts +23 -23
  64. package/src/helpers/compoundHelpers/index.ts +246 -246
  65. package/src/helpers/curveUsdHelpers/index.ts +40 -40
  66. package/src/helpers/eulerHelpers/index.ts +232 -232
  67. package/src/helpers/fluidHelpers/index.ts +53 -53
  68. package/src/helpers/index.ts +11 -11
  69. package/src/helpers/liquityV2Helpers/index.ts +80 -80
  70. package/src/helpers/llamaLendHelpers/index.ts +53 -53
  71. package/src/helpers/makerHelpers/index.ts +94 -94
  72. package/src/helpers/morphoBlueHelpers/index.ts +365 -365
  73. package/src/helpers/sparkHelpers/index.ts +150 -150
  74. package/src/index.ts +52 -52
  75. package/src/liquity/index.ts +116 -116
  76. package/src/liquityV2/index.ts +295 -228
  77. package/src/llamaLend/index.ts +275 -275
  78. package/src/maker/index.ts +117 -117
  79. package/src/markets/aave/index.ts +152 -152
  80. package/src/markets/aave/marketAssets.ts +44 -44
  81. package/src/markets/compound/index.ts +213 -213
  82. package/src/markets/compound/marketsAssets.ts +82 -82
  83. package/src/markets/curveUsd/index.ts +69 -69
  84. package/src/markets/euler/index.ts +26 -26
  85. package/src/markets/fluid/index.ts +2010 -2010
  86. package/src/markets/index.ts +27 -27
  87. package/src/markets/liquityV2/index.ts +55 -44
  88. package/src/markets/llamaLend/contractAddresses.ts +141 -141
  89. package/src/markets/llamaLend/index.ts +235 -235
  90. package/src/markets/morphoBlue/index.ts +895 -895
  91. package/src/markets/spark/index.ts +29 -29
  92. package/src/markets/spark/marketAssets.ts +10 -10
  93. package/src/moneymarket/moneymarketCommonService.ts +80 -80
  94. package/src/morphoAaveV2/index.ts +256 -256
  95. package/src/morphoAaveV3/index.ts +630 -631
  96. package/src/morphoBlue/index.ts +202 -202
  97. package/src/multicall/index.ts +33 -33
  98. package/src/services/priceService.ts +91 -91
  99. package/src/services/utils.ts +59 -59
  100. package/src/setup.ts +8 -8
  101. package/src/spark/index.ts +460 -461
  102. package/src/staking/staking.ts +220 -220
  103. package/src/types/aave.ts +271 -271
  104. package/src/types/chickenBonds.ts +45 -45
  105. package/src/types/common.ts +84 -84
  106. package/src/types/compound.ts +131 -131
  107. package/src/types/contracts/generated/LiquityV2StabilityPool.ts +453 -0
  108. package/src/types/contracts/generated/LiquityV2View.ts +173 -2
  109. package/src/types/contracts/generated/index.ts +1 -0
  110. package/src/types/curveUsd.ts +118 -118
  111. package/src/types/euler.ts +171 -171
  112. package/src/types/fluid.ts +264 -264
  113. package/src/types/index.ts +11 -11
  114. package/src/types/liquity.ts +30 -30
  115. package/src/types/liquityV2.ts +119 -118
  116. package/src/types/llamaLend.ts +155 -155
  117. package/src/types/maker.ts +50 -50
  118. package/src/types/morphoBlue.ts +192 -192
  119. package/src/types/spark.ts +131 -131
  120. package/cjs/services/dsrService.d.ts +0 -3
  121. package/cjs/services/dsrService.js +0 -28
  122. package/esm/services/dsrService.d.ts +0 -3
  123. package/esm/services/dsrService.js +0 -21
  124. package/src/services/dsrService.ts +0 -16
@@ -115,73 +115,73 @@ const getApyAfterValuesEstimation = (selectedMarket, actions, web3, network) =>
115
115
  });
116
116
  exports.getApyAfterValuesEstimation = getApyAfterValuesEstimation;
117
117
  const API_URL = 'https://blue-api.morpho.org/graphql';
118
- const MARKET_QUERY = `
119
- query MarketByUniqueKey($uniqueKey: String!, $chainId: Int!) {
120
- marketByUniqueKey(uniqueKey: $uniqueKey, chainId: $chainId) {
121
- reallocatableLiquidityAssets
122
- targetBorrowUtilization
123
- loanAsset {
124
- address
125
- decimals
126
- priceUsd
127
- }
128
- state {
129
- liquidityAssets
130
- borrowAssets
131
- supplyAssets
132
- }
133
- publicAllocatorSharedLiquidity {
134
- assets
135
- vault {
136
- address
137
- name
138
- }
139
- allocationMarket {
140
- uniqueKey
141
- loanAsset {
142
- address
143
- }
144
- collateralAsset {
145
- address
146
- }
147
- irmAddress
148
- oracle {
149
- address
150
- }
151
- lltv
152
- }
153
- }
154
- loanAsset {
155
- address
156
- }
157
- collateralAsset {
158
- address
159
- }
160
- oracle {
161
- address
162
- }
163
- irmAddress
164
- lltv
165
- }
166
- }
118
+ const MARKET_QUERY = `
119
+ query MarketByUniqueKey($uniqueKey: String!, $chainId: Int!) {
120
+ marketByUniqueKey(uniqueKey: $uniqueKey, chainId: $chainId) {
121
+ reallocatableLiquidityAssets
122
+ targetBorrowUtilization
123
+ loanAsset {
124
+ address
125
+ decimals
126
+ priceUsd
127
+ }
128
+ state {
129
+ liquidityAssets
130
+ borrowAssets
131
+ supplyAssets
132
+ }
133
+ publicAllocatorSharedLiquidity {
134
+ assets
135
+ vault {
136
+ address
137
+ name
138
+ }
139
+ allocationMarket {
140
+ uniqueKey
141
+ loanAsset {
142
+ address
143
+ }
144
+ collateralAsset {
145
+ address
146
+ }
147
+ irmAddress
148
+ oracle {
149
+ address
150
+ }
151
+ lltv
152
+ }
153
+ }
154
+ loanAsset {
155
+ address
156
+ }
157
+ collateralAsset {
158
+ address
159
+ }
160
+ oracle {
161
+ address
162
+ }
163
+ irmAddress
164
+ lltv
165
+ }
166
+ }
167
167
  `;
168
- const REWARDS_QUERY = `
169
- query MarketByUniqueKey($uniqueKey: String!, $chainId: Int!) {
170
- marketByUniqueKey(uniqueKey: $uniqueKey, chainId: $chainId) {
171
- uniqueKey
172
- state {
173
- rewards {
174
- amountPerSuppliedToken
175
- supplyApr
176
- amountPerBorrowedToken
177
- borrowApr
178
- asset {
179
- address
180
- }
181
- }
182
- }
183
- }
184
- }
168
+ const REWARDS_QUERY = `
169
+ query MarketByUniqueKey($uniqueKey: String!, $chainId: Int!) {
170
+ marketByUniqueKey(uniqueKey: $uniqueKey, chainId: $chainId) {
171
+ uniqueKey
172
+ state {
173
+ rewards {
174
+ amountPerSuppliedToken
175
+ supplyApr
176
+ amountPerBorrowedToken
177
+ borrowApr
178
+ asset {
179
+ address
180
+ }
181
+ }
182
+ }
183
+ }
184
+ }
185
185
  `;
186
186
  /**
187
187
  * Get reallocatable liquidity to a given market and target borrow utilization
@@ -1,6 +1,6 @@
1
1
  import Web3 from 'web3';
2
2
  import { EthAddress, NetworkNumber } from '../types/common';
3
- import { InnerLiquityV2MarketData, LiquityV2AssetsData, LiquityV2MarketData, LiquityV2MarketInfo, LiquityV2TroveData } from '../types';
3
+ import { LiquityV2AssetsData, LiquityV2MarketData, LiquityV2MarketInfo, LiquityV2TroveData, LiquityV2Versions } from '../types';
4
4
  export declare const getLiquityV2MarketData: (web3: Web3, network: NetworkNumber, selectedMarket: LiquityV2MarketInfo, mainnetWeb3: Web3) => Promise<LiquityV2MarketData>;
5
5
  export declare const getLiquityV2UserTroveIds: (web3: Web3, network: NetworkNumber, selectedMarket: LiquityV2MarketInfo, troveNFTAddress: EthAddress, limitBlocksForEventFetching: boolean, account: EthAddress) => Promise<{
6
6
  troves: {
@@ -8,11 +8,16 @@ export declare const getLiquityV2UserTroveIds: (web3: Web3, network: NetworkNumb
8
8
  }[];
9
9
  nextFreeTroveIndex: string;
10
10
  }>;
11
- export declare const getDebtInFrontLiquityV2: (viewContract: any, marketAddress: EthAddress, troveId: string, accumulatedSum?: string, iterations?: number) => Promise<string>;
12
- export declare const getLiquityV2TroveData: (web3: Web3, network: NetworkNumber, { selectedMarket, assetsData, marketData, troveId, }: {
11
+ export declare const getDebtInFrontForSingleMarketLiquityV2: (viewContract: any, marketAddress: EthAddress, troveId: string, accumulatedSum?: string, iterations?: number) => Promise<string>;
12
+ export declare const getDebtInFrontForInterestRateSingleMarketLiquityV2: (viewContract: any, marketAddress: EthAddress, interestRate: string, troveId?: string, accumulatedSum?: string, iterations?: number) => Promise<string>;
13
+ export declare const getAllMarketsUnbackedDebts: (markets: Record<LiquityV2Versions, LiquityV2MarketData>, web3: Web3, network: NetworkNumber) => Promise<Record<LiquityV2Versions, string>>;
14
+ export declare const calculateDebtInFrontLiquityV2: (markets: Record<LiquityV2Versions, LiquityV2MarketData>, selectedMarket: LiquityV2Versions, allMarketsUnbackedDebts: Record<LiquityV2Versions, string>, interestRateDebtInFront: string) => string;
15
+ export declare const getDebtInFrontLiquityV2: (markets: Record<LiquityV2Versions, LiquityV2MarketData>, selectedMarket: LiquityV2Versions, web3: Web3, network: NetworkNumber, viewContract: any, troveId: string) => Promise<string>;
16
+ export declare const getDebtInFrontForInterestRateLiquityV2: (markets: Record<LiquityV2Versions, LiquityV2MarketData>, selectedMarket: LiquityV2Versions, web3: Web3, network: NetworkNumber, viewContract: any, interestRate: string) => Promise<string>;
17
+ export declare const getLiquityV2TroveData: (web3: Web3, network: NetworkNumber, { selectedMarket, assetsData, troveId, allMarketsData, }: {
13
18
  selectedMarket: LiquityV2MarketInfo;
14
19
  assetsData: LiquityV2AssetsData;
15
- marketData: InnerLiquityV2MarketData;
16
20
  troveId: string;
21
+ allMarketsData: Record<LiquityV2Versions, LiquityV2MarketData>;
17
22
  }) => Promise<LiquityV2TroveData>;
18
23
  export declare const getLiquityV2ClaimableCollateral: (collSurplusPoolAddress: EthAddress, account: EthAddress, web3: Web3, network: NetworkNumber) => Promise<string>;
@@ -12,7 +12,7 @@ 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
- exports.getLiquityV2ClaimableCollateral = exports.getLiquityV2TroveData = exports.getDebtInFrontLiquityV2 = exports.getLiquityV2UserTroveIds = exports.getLiquityV2MarketData = void 0;
15
+ exports.getLiquityV2ClaimableCollateral = exports.getLiquityV2TroveData = exports.getDebtInFrontForInterestRateLiquityV2 = exports.getDebtInFrontLiquityV2 = exports.calculateDebtInFrontLiquityV2 = exports.getAllMarketsUnbackedDebts = exports.getDebtInFrontForInterestRateSingleMarketLiquityV2 = exports.getDebtInFrontForSingleMarketLiquityV2 = exports.getLiquityV2UserTroveIds = exports.getLiquityV2MarketData = void 0;
16
16
  const decimal_js_1 = __importDefault(require("decimal.js"));
17
17
  const tokens_1 = require("@defisaver/tokens");
18
18
  const contracts_1 = require("../contracts");
@@ -21,6 +21,7 @@ const staking_1 = require("../staking");
21
21
  const liquityV2Helpers_1 = require("../helpers/liquityV2Helpers");
22
22
  const utils_1 = require("../services/utils");
23
23
  const constants_1 = require("../constants");
24
+ const markets_1 = require("../markets");
24
25
  const getLiquityV2MarketData = (web3, network, selectedMarket, mainnetWeb3) => __awaiter(void 0, void 0, void 0, function* () {
25
26
  const viewContract = (0, contracts_1.LiquityV2ViewContract)(web3, network);
26
27
  const { marketAddress, debtToken, collateralToken } = selectedMarket;
@@ -133,22 +134,78 @@ const getLiquityV2UserTroveIds = (web3, network, selectedMarket, troveNFTAddress
133
134
  return { troves: filteredTroves, nextFreeTroveIndex };
134
135
  });
135
136
  exports.getLiquityV2UserTroveIds = getLiquityV2UserTroveIds;
136
- const _getDebtInFront = (viewContract, marketAddress, troveId, accumulatedSum = '0', iterations = 2000) => __awaiter(void 0, void 0, void 0, function* () { return viewContract.methods.getDebtInFront(marketAddress, troveId, accumulatedSum, iterations).call(); });
137
- const getDebtInFrontLiquityV2 = (viewContract, marketAddress, troveId, accumulatedSum = '0', iterations = 2000) => __awaiter(void 0, void 0, void 0, function* () {
138
- const { debt, next } = yield _getDebtInFront(viewContract, marketAddress, troveId, accumulatedSum, iterations);
137
+ const _getDebtInFrontForSingleMarket = (viewContract, marketAddress, troveId, accumulatedSum = '0', iterations = 2000) => __awaiter(void 0, void 0, void 0, function* () { return viewContract.methods.getDebtInFront(marketAddress, troveId, accumulatedSum, iterations).call(); });
138
+ const getDebtInFrontForSingleMarketLiquityV2 = (viewContract, marketAddress, troveId, accumulatedSum = '0', iterations = 2000) => __awaiter(void 0, void 0, void 0, function* () {
139
+ const { debt, next } = yield _getDebtInFrontForSingleMarket(viewContract, marketAddress, troveId, accumulatedSum, iterations);
139
140
  if (next === '0')
140
141
  return (0, tokens_1.assetAmountInEth)(debt);
141
- return (0, exports.getDebtInFrontLiquityV2)(viewContract, marketAddress, next, debt, iterations);
142
+ return (0, exports.getDebtInFrontForSingleMarketLiquityV2)(viewContract, marketAddress, next, debt, iterations);
143
+ });
144
+ exports.getDebtInFrontForSingleMarketLiquityV2 = getDebtInFrontForSingleMarketLiquityV2;
145
+ const _getDebtInFrontForInterestRateSingleMarketLiquityV2 = (viewContract, marketAddress, troveId = '0', accumulatedSum = '0', iterations = 2000, interestRate) => __awaiter(void 0, void 0, void 0, function* () { return viewContract.methods.getDebtInFrontByInterestRate(marketAddress, troveId, accumulatedSum, iterations, interestRate).call(); });
146
+ const getDebtInFrontForInterestRateSingleMarketLiquityV2 = (viewContract, marketAddress, interestRate, troveId = '0', accumulatedSum = '0', iterations = 2000) => __awaiter(void 0, void 0, void 0, function* () {
147
+ if (+interestRate === 0 || !interestRate)
148
+ return '0';
149
+ const interestRateWei = new decimal_js_1.default(interestRate).times(1e16).toFixed(0).toString();
150
+ const res = yield _getDebtInFrontForInterestRateSingleMarketLiquityV2(viewContract, marketAddress, troveId, accumulatedSum, iterations, interestRateWei);
151
+ const { debt, next } = res;
152
+ if (next === '0')
153
+ return (0, tokens_1.assetAmountInEth)(debt);
154
+ return (0, exports.getDebtInFrontForInterestRateSingleMarketLiquityV2)(viewContract, marketAddress, interestRate, next, debt, iterations);
155
+ });
156
+ exports.getDebtInFrontForInterestRateSingleMarketLiquityV2 = getDebtInFrontForInterestRateSingleMarketLiquityV2;
157
+ const getUnbackedDebtForSingleMarket = (totalBorrowed, web3, network, stabilityPoolAddress) => __awaiter(void 0, void 0, void 0, function* () {
158
+ const stabilityPoolContract = (0, contracts_1.createContractWrapper)(web3, network, 'LiquityV2StabilityPool', stabilityPoolAddress);
159
+ const totalBoldDeposits = yield stabilityPoolContract.methods.getTotalBoldDeposits().call();
160
+ const totalBoldDepositsInEth = (0, tokens_1.assetAmountInEth)(totalBoldDeposits);
161
+ return decimal_js_1.default.max(new decimal_js_1.default(totalBorrowed).sub(totalBoldDepositsInEth), 0).toString();
162
+ });
163
+ const getAllMarketsUnbackedDebts = (markets, web3, network) => __awaiter(void 0, void 0, void 0, function* () {
164
+ const allMarketsUnbackedDebt = yield Promise.all(Object.entries(markets).map(([version, market]) => __awaiter(void 0, void 0, void 0, function* () {
165
+ const { assetsData, marketData } = market;
166
+ const unbackedDebt = yield getUnbackedDebtForSingleMarket(assetsData.BOLD.totalBorrow, web3, network, marketData.stabilityPoolAddress);
167
+ return [version, unbackedDebt];
168
+ })));
169
+ return Object.fromEntries(allMarketsUnbackedDebt);
170
+ });
171
+ exports.getAllMarketsUnbackedDebts = getAllMarketsUnbackedDebts;
172
+ const calculateDebtInFrontLiquityV2 = (markets, selectedMarket, allMarketsUnbackedDebts, interestRateDebtInFront) => {
173
+ const selectedMarketUnbackedDebt = new decimal_js_1.default(allMarketsUnbackedDebts[selectedMarket]);
174
+ if (selectedMarketUnbackedDebt.eq(0))
175
+ return 'N/A';
176
+ const amountBeingReedemedOnEachMarket = Object.entries(markets).map(([version, market]) => {
177
+ if (version === selectedMarket)
178
+ return new decimal_js_1.default(interestRateDebtInFront);
179
+ const { assetsData } = market;
180
+ const unbackedDebt = new decimal_js_1.default(allMarketsUnbackedDebts[version]);
181
+ const totalBorrow = new decimal_js_1.default(assetsData.BOLD.totalBorrow);
182
+ const amountToReedem = new decimal_js_1.default(interestRateDebtInFront).mul(unbackedDebt).div(selectedMarketUnbackedDebt);
183
+ return decimal_js_1.default.min(amountToReedem, totalBorrow);
184
+ });
185
+ return amountBeingReedemedOnEachMarket.reduce((acc, val) => acc.plus(val), new decimal_js_1.default(0)).toString();
186
+ };
187
+ exports.calculateDebtInFrontLiquityV2 = calculateDebtInFrontLiquityV2;
188
+ const getDebtInFrontLiquityV2 = (markets, selectedMarket, web3, network, viewContract, troveId) => __awaiter(void 0, void 0, void 0, function* () {
189
+ const allMarketsUnbackedDebts = yield (0, exports.getAllMarketsUnbackedDebts)(markets, web3, network);
190
+ const interestRateDebtInFront = yield (0, exports.getDebtInFrontForSingleMarketLiquityV2)(viewContract, (0, markets_1.LiquityV2Markets)(network)[selectedMarket].marketAddress, troveId);
191
+ return (0, exports.calculateDebtInFrontLiquityV2)(markets, selectedMarket, allMarketsUnbackedDebts, interestRateDebtInFront.toString());
142
192
  });
143
193
  exports.getDebtInFrontLiquityV2 = getDebtInFrontLiquityV2;
144
- const getLiquityV2TroveData = (web3, network, { selectedMarket, assetsData, marketData, troveId, }) => __awaiter(void 0, void 0, void 0, function* () {
194
+ const getDebtInFrontForInterestRateLiquityV2 = (markets, selectedMarket, web3, network, viewContract, interestRate) => __awaiter(void 0, void 0, void 0, function* () {
195
+ const allMarketsUnbackedDebts = yield (0, exports.getAllMarketsUnbackedDebts)(markets, web3, network);
196
+ const interestRateDebtInFront = new decimal_js_1.default(yield (0, exports.getDebtInFrontForInterestRateSingleMarketLiquityV2)(viewContract, (0, markets_1.LiquityV2Markets)(network)[selectedMarket].marketAddress, interestRate));
197
+ return (0, exports.calculateDebtInFrontLiquityV2)(markets, selectedMarket, allMarketsUnbackedDebts, interestRateDebtInFront.toString());
198
+ });
199
+ exports.getDebtInFrontForInterestRateLiquityV2 = getDebtInFrontForInterestRateLiquityV2;
200
+ const getLiquityV2TroveData = (web3, network, { selectedMarket, assetsData, troveId, allMarketsData, }) => __awaiter(void 0, void 0, void 0, function* () {
145
201
  const viewContract = (0, contracts_1.LiquityV2ViewContract)(web3, network);
146
- const { minCollRatio } = marketData;
202
+ const { minCollRatio } = allMarketsData[selectedMarket.value].marketData;
147
203
  const { collateralToken, marketAddress, debtToken } = selectedMarket;
148
- const [data, debtInFront] = yield Promise.all([
204
+ const [_data, debtInFront] = yield Promise.all([
149
205
  viewContract.methods.getTroveInfo(marketAddress, troveId).call(),
150
- (0, exports.getDebtInFrontLiquityV2)(viewContract, marketAddress, troveId),
206
+ (0, exports.getDebtInFrontLiquityV2)(allMarketsData, selectedMarket.value, web3, network, viewContract, troveId),
151
207
  ]);
208
+ const data = Object.assign(Object.assign({}, _data), { TCRatio: _data.TCRatio === utils_1.MAXUINT ? '0' : _data.TCRatio });
152
209
  const usedAssets = {};
153
210
  const debtAssetData = assetsData[debtToken];
154
211
  const borrowed = (0, tokens_1.assetAmountInEth)(data.debtAmount);
@@ -176,11 +233,13 @@ const getLiquityV2TroveData = (web3, network, { selectedMarket, assetsData, mark
176
233
  const collRatio = new decimal_js_1.default(data.TCRatio).div(1e16).toString();
177
234
  const interestRate = new decimal_js_1.default(data.annualInterestRate).div(1e16).toString();
178
235
  const interestBatchManager = data.interestBatchManager;
236
+ const lastInterestRateAdjTime = data.lastInterestRateAdjTime;
179
237
  const payload = Object.assign(Object.assign({ usedAssets,
180
238
  troveId,
181
239
  interestRate,
182
240
  interestBatchManager,
183
- debtInFront, troveStatus: types_1.LIQUITY_V2_TROVE_STATUS_ENUM[parseInt(data.status, 10)] }, (0, liquityV2Helpers_1.getLiquityV2AggregatedPositionData)({
241
+ debtInFront,
242
+ lastInterestRateAdjTime, troveStatus: types_1.LIQUITY_V2_TROVE_STATUS_ENUM[parseInt(data.status, 10)] }, (0, liquityV2Helpers_1.getLiquityV2AggregatedPositionData)({
184
243
  usedAssets, assetsData, minCollRatio, interestRate,
185
244
  })), { collRatio });
186
245
  return payload;
@@ -4,6 +4,6 @@ export { SparkMarkets } from './spark';
4
4
  export { CrvUsdMarkets } from './curveUsd';
5
5
  export { MorphoBlueMarkets, findMorphoBlueMarket } from './morphoBlue';
6
6
  export { LlamaLendMarkets } from './llamaLend';
7
- export { LiquityV2Markets } from './liquityV2';
7
+ export { LiquityV2Markets, findLiquityV2MarketByAddress } from './liquityV2';
8
8
  export { EulerV2Markets } from './euler';
9
9
  export { FluidMarkets, getFluidVersionsDataForNetwork, getFluidMarketInfoById, getFTokenAddress, } from './fluid';
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getFTokenAddress = exports.getFluidMarketInfoById = exports.getFluidVersionsDataForNetwork = exports.FluidMarkets = exports.EulerV2Markets = exports.LiquityV2Markets = exports.LlamaLendMarkets = exports.findMorphoBlueMarket = exports.MorphoBlueMarkets = exports.CrvUsdMarkets = exports.SparkMarkets = exports.v3USDTCollAssets = exports.v3USDCeCollAssets = exports.v3USDCCollAssets = exports.v3USDbCCollAssets = exports.v3ETHCollAssets = exports.compoundV2CollateralAssets = exports.CompoundMarkets = exports.getAaveV3MarketByMarketAddress = exports.morphoAaveV3AssetEthMarket = exports.morphoAaveV2AssetDefaultMarket = exports.aaveV3AssetsDefaultMarket = exports.aaveV2AssetsDefaultMarket = exports.aaveV1AssetsDefaultMarket = exports.AaveMarkets = void 0;
3
+ exports.getFTokenAddress = exports.getFluidMarketInfoById = exports.getFluidVersionsDataForNetwork = exports.FluidMarkets = exports.EulerV2Markets = exports.findLiquityV2MarketByAddress = exports.LiquityV2Markets = exports.LlamaLendMarkets = exports.findMorphoBlueMarket = exports.MorphoBlueMarkets = exports.CrvUsdMarkets = exports.SparkMarkets = exports.v3USDTCollAssets = exports.v3USDCeCollAssets = exports.v3USDCCollAssets = exports.v3USDbCCollAssets = exports.v3ETHCollAssets = exports.compoundV2CollateralAssets = exports.CompoundMarkets = exports.getAaveV3MarketByMarketAddress = exports.morphoAaveV3AssetEthMarket = exports.morphoAaveV2AssetDefaultMarket = exports.aaveV3AssetsDefaultMarket = exports.aaveV2AssetsDefaultMarket = exports.aaveV1AssetsDefaultMarket = exports.AaveMarkets = void 0;
4
4
  var aave_1 = require("./aave");
5
5
  Object.defineProperty(exports, "AaveMarkets", { enumerable: true, get: function () { return aave_1.AaveMarkets; } });
6
6
  Object.defineProperty(exports, "aaveV1AssetsDefaultMarket", { enumerable: true, get: function () { return aave_1.aaveV1AssetsDefaultMarket; } });
@@ -28,6 +28,7 @@ var llamaLend_1 = require("./llamaLend");
28
28
  Object.defineProperty(exports, "LlamaLendMarkets", { enumerable: true, get: function () { return llamaLend_1.LlamaLendMarkets; } });
29
29
  var liquityV2_1 = require("./liquityV2");
30
30
  Object.defineProperty(exports, "LiquityV2Markets", { enumerable: true, get: function () { return liquityV2_1.LiquityV2Markets; } });
31
+ Object.defineProperty(exports, "findLiquityV2MarketByAddress", { enumerable: true, get: function () { return liquityV2_1.findLiquityV2MarketByAddress; } });
31
32
  var euler_1 = require("./euler");
32
33
  Object.defineProperty(exports, "EulerV2Markets", { enumerable: true, get: function () { return euler_1.EulerV2Markets; } });
33
34
  var fluid_1 = require("./fluid");
@@ -1,4 +1,4 @@
1
- import { NetworkNumber } from '../../types/common';
1
+ import { EthAddress, NetworkNumber } from '../../types/common';
2
2
  import { LiquityV2MarketInfo } from '../../types/liquityV2';
3
3
  export declare const LIQUITY_V2_ETH_MARKET: (networkId?: NetworkNumber) => LiquityV2MarketInfo;
4
4
  export declare const LIQUITY_V2_WSTETH_MARKET: (networkId?: NetworkNumber) => LiquityV2MarketInfo;
@@ -8,3 +8,4 @@ export declare const LiquityV2Markets: (networkId: NetworkNumber) => {
8
8
  readonly liquityv2wsteth: LiquityV2MarketInfo;
9
9
  readonly liquityv2reth: LiquityV2MarketInfo;
10
10
  };
11
+ export declare const findLiquityV2MarketByAddress: (marketAddress: EthAddress) => LiquityV2MarketInfo | null;
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.LiquityV2Markets = exports.LIQUITY_V2_RETH_MARKET = exports.LIQUITY_V2_WSTETH_MARKET = exports.LIQUITY_V2_ETH_MARKET = void 0;
3
+ exports.findLiquityV2MarketByAddress = exports.LiquityV2Markets = exports.LIQUITY_V2_RETH_MARKET = exports.LIQUITY_V2_WSTETH_MARKET = exports.LIQUITY_V2_ETH_MARKET = void 0;
4
+ const utils_1 = require("../../services/utils");
4
5
  const common_1 = require("../../types/common");
5
6
  const liquityV2_1 = require("../../types/liquityV2");
6
7
  const LIQUITY_V2_ETH_MARKET = (networkId = common_1.NetworkNumber.Eth) => ({
@@ -45,3 +46,13 @@ const LiquityV2Markets = (networkId) => ({
45
46
  [liquityV2_1.LiquityV2Versions.LiquityV2REth]: (0, exports.LIQUITY_V2_RETH_MARKET)(networkId),
46
47
  });
47
48
  exports.LiquityV2Markets = LiquityV2Markets;
49
+ const findLiquityV2MarketByAddress = (marketAddress) => {
50
+ const markets = (0, exports.LiquityV2Markets)(common_1.NetworkNumber.Eth);
51
+ for (const market of Object.values(markets)) {
52
+ if ((0, utils_1.compareAddresses)(market.marketAddress, marketAddress)) {
53
+ return market;
54
+ }
55
+ }
56
+ return null;
57
+ };
58
+ exports.findLiquityV2MarketByAddress = findLiquityV2MarketByAddress;
@@ -2,7 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.sparkAssetsDefaultMarket = exports.sparkAssetsDefaultMarketEth = void 0;
4
4
  const common_1 = require("../../types/common");
5
- exports.sparkAssetsDefaultMarketEth = ['DAI', 'sDAI', 'USDC', 'ETH', 'wstETH', 'WBTC', 'GNO', 'rETH', 'USDT', 'weETH', 'cbBTC', 'sUSDS'];
5
+ exports.sparkAssetsDefaultMarketEth = ['DAI', 'sDAI', 'USDC', 'ETH', 'wstETH', 'WBTC', 'GNO', 'rETH', 'USDT', 'weETH', 'cbBTC', 'sUSDS', 'USDS'];
6
6
  // @dev Keep assets in array, do not assign directly, so we can parse it and edit it programmatically with `scripts/updateMarkets`
7
7
  exports.sparkAssetsDefaultMarket = {
8
8
  [common_1.NetworkNumber.Eth]: exports.sparkAssetsDefaultMarketEth,
@@ -93,7 +93,7 @@ const getMorphoAaveV2MarketsData = (web3, network, mainnetWeb3) => __awaiter(voi
93
93
  });
94
94
  const stEthMarket = assetsData.find(({ symbol }) => symbol === 'stETH');
95
95
  if (stEthMarket) {
96
- stEthMarket.incentiveSupplyApy = yield (0, staking_1.getStETHApy)(mainnetWeb3);
96
+ stEthMarket.incentiveSupplyApy = yield (0, staking_1.getStakingApy)('stETH', mainnetWeb3);
97
97
  stEthMarket.incentiveSupplyToken = 'stETH';
98
98
  }
99
99
  const payload = {};
@@ -23,7 +23,6 @@ const utils_1 = require("../services/utils");
23
23
  const contracts_1 = require("../contracts");
24
24
  const multicall_1 = require("../multicall");
25
25
  const staking_1 = require("../staking");
26
- const dsrService_1 = require("../services/dsrService");
27
26
  const moneymarket_1 = require("../moneymarket");
28
27
  const aaveV3_1 = require("../aaveV3");
29
28
  const aaveHelpers_1 = require("../helpers/aaveHelpers");
@@ -239,7 +238,7 @@ const getMorphoAaveV3MarketsData = (web3, network, selectedMarket, mainnetWeb3)
239
238
  data.incentiveSupplyToken = data.symbol;
240
239
  }
241
240
  if (data.symbol === 'sDAI') {
242
- data.incentiveSupplyApy = yield (0, dsrService_1.getDsrApy)(web3, network);
241
+ data.incentiveSupplyApy = yield (0, staking_1.getStakingApy)('sDAI', mainnetWeb3);
243
242
  data.incentiveSupplyToken = 'sDAI';
244
243
  }
245
244
  return data;
@@ -17,7 +17,6 @@ const decimal_js_1 = __importDefault(require("decimal.js"));
17
17
  const tokens_1 = require("@defisaver/tokens");
18
18
  const utils_1 = require("../services/utils");
19
19
  const staking_1 = require("../staking");
20
- const dsrService_1 = require("../services/dsrService");
21
20
  const contracts_1 = require("../contracts");
22
21
  const multicall_1 = require("../multicall");
23
22
  const sparkHelpers_1 = require("../helpers/sparkHelpers");
@@ -138,7 +137,7 @@ const getSparkMarketsData = (web3, network, selectedMarket, mainnetWeb3) => __aw
138
137
  });
139
138
  }
140
139
  if (market.symbol === 'sDAI') {
141
- market.incentiveSupplyApy = yield (0, dsrService_1.getDsrApy)(web3, network);
140
+ market.incentiveSupplyApy = yield (0, staking_1.getStakingApy)('sDAI', mainnetWeb3);
142
141
  market.incentiveSupplyToken = 'sDAI';
143
142
  }
144
143
  if (market.canBeBorrowed && market.incentiveSupplyApy) {
@@ -1,12 +1,7 @@
1
1
  import Web3 from 'web3';
2
2
  import { MMAssetsData, MMUsedAssets } from '../types/common';
3
- export declare const getStETHApy: (web3: Web3, fromBlock?: number, blockNumber?: 'latest' | number) => Promise<string>;
4
- export declare const getCbETHApy: (web3: Web3, blockNumber?: 'latest' | number) => Promise<string>;
5
- export declare const getREthApy: (web3: Web3, blockNumber?: 'latest' | number) => Promise<string>;
6
- export declare const getDsrApy: (web3: Web3, blockNumber?: 'latest' | number) => Promise<string>;
7
- export declare const getSsrApy: () => Promise<string>;
8
3
  export declare const STAKING_ASSETS: string[];
9
- export declare const getStakingApy: (asset: string, web3: Web3, blockNumber?: 'latest' | number, fromBlock?: number | undefined) => "0" | Promise<any> | undefined;
4
+ export declare const getStakingApy: (asset: string, web3: Web3, blockNumber?: 'latest' | number, fromBlock?: number | undefined) => Promise<string>;
10
5
  export declare const calculateInterestEarned: (principal: string, interest: string, type: string, apy?: boolean) => number;
11
6
  export declare const calculateNetApy: ({ usedAssets, assetsData, isMorpho }: {
12
7
  usedAssets: MMUsedAssets;
@@ -12,7 +12,7 @@ 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
- exports.getStETHByWstETHMultiple = exports.getStETHByWstETH = exports.getWstETHByStETH = exports.calculateNetApy = exports.calculateInterestEarned = exports.getStakingApy = exports.STAKING_ASSETS = exports.getSsrApy = exports.getDsrApy = exports.getREthApy = exports.getCbETHApy = exports.getStETHApy = void 0;
15
+ exports.getStETHByWstETHMultiple = exports.getStETHByWstETH = exports.getWstETHByStETH = exports.calculateNetApy = exports.calculateInterestEarned = exports.getStakingApy = exports.STAKING_ASSETS = void 0;
16
16
  const decimal_js_1 = __importDefault(require("decimal.js"));
17
17
  const contracts_1 = require("../contracts");
18
18
  const common_1 = require("../types/common");
@@ -40,7 +40,6 @@ const getStETHApy = (web3, fromBlock = 17900000, blockNumber = 'latest') => __aw
40
40
  return (0, moneymarket_1.aprToApy)(data.data.smaApr);
41
41
  }
42
42
  });
43
- exports.getStETHApy = getStETHApy;
44
43
  const getCbETHApy = (web3, blockNumber = 'latest') => __awaiter(void 0, void 0, void 0, function* () {
45
44
  let currentBlock = blockNumber;
46
45
  if (blockNumber === 'latest')
@@ -58,7 +57,6 @@ const getCbETHApy = (web3, blockNumber = 'latest') => __awaiter(void 0, void 0,
58
57
  .toString();
59
58
  return (0, moneymarket_1.aprToApy)(apr);
60
59
  });
61
- exports.getCbETHApy = getCbETHApy;
62
60
  const getREthApy = (web3, blockNumber = 'latest') => __awaiter(void 0, void 0, void 0, function* () {
63
61
  let currentBlock = blockNumber;
64
62
  if (blockNumber === 'latest')
@@ -76,7 +74,6 @@ const getREthApy = (web3, blockNumber = 'latest') => __awaiter(void 0, void 0, v
76
74
  .toString();
77
75
  return (0, moneymarket_1.aprToApy)(apr);
78
76
  });
79
- exports.getREthApy = getREthApy;
80
77
  const getDsrApy = (web3, blockNumber = 'latest') => __awaiter(void 0, void 0, void 0, function* () {
81
78
  const potContract = (0, contracts_1.PotContract)(web3, common_1.NetworkNumber.Eth);
82
79
  return new decimal_js_1.default(yield potContract.methods.dsr().call())
@@ -86,13 +83,11 @@ const getDsrApy = (web3, blockNumber = 'latest') => __awaiter(void 0, void 0, vo
86
83
  .mul(100)
87
84
  .toString();
88
85
  });
89
- exports.getDsrApy = getDsrApy;
90
86
  const getSsrApy = () => __awaiter(void 0, void 0, void 0, function* () {
91
87
  const res = yield fetch('https://fe.defisaver.com/api/sky/data');
92
88
  const data = yield res.json();
93
89
  return new decimal_js_1.default(data.data.skyData[0].sky_savings_rate_apy).mul(100).toString();
94
90
  });
95
- exports.getSsrApy = getSsrApy;
96
91
  const getSuperOETHApy = () => __awaiter(void 0, void 0, void 0, function* () {
97
92
  const res = yield fetch('https://origin.squids.live/origin-squid/graphql', {
98
93
  method: 'POST',
@@ -112,48 +107,50 @@ const getSuperOETHApy = () => __awaiter(void 0, void 0, void 0, function* () {
112
107
  });
113
108
  const getApyFromDfsApi = (asset) => __awaiter(void 0, void 0, void 0, function* () {
114
109
  const res = yield fetch(`https://fe.defisaver.com/api/staking/apy?asset=${asset}`);
110
+ if (!res.ok)
111
+ throw new Error(`Failed to fetch APY for ${asset}`);
115
112
  const data = yield res.json();
116
113
  // if our server returns apr, transform it into apy
117
114
  if (['weETH'].includes(asset)) {
118
115
  return (0, moneymarket_1.aprToApy)(data.apy);
119
116
  }
120
- return data.apy;
117
+ return String(data.apy);
121
118
  });
122
119
  exports.STAKING_ASSETS = ['cbETH', 'wstETH', 'cbETH', 'rETH', 'sDAI', 'weETH', 'sUSDe', 'osETH', 'ezETH', 'ETHx', 'rsETH', 'pufETH', 'wrsETH', 'wsuperOETHb', 'sUSDS'];
123
- const getStakingApy = (asset, web3, blockNumber = 'latest', fromBlock = undefined) => {
120
+ const getStakingApy = (asset, web3, blockNumber = 'latest', fromBlock = undefined) => __awaiter(void 0, void 0, void 0, function* () {
124
121
  try {
125
122
  if (asset === 'stETH' || asset === 'wstETH')
126
- return (0, exports.getStETHApy)(web3, fromBlock, blockNumber);
123
+ return yield getStETHApy(web3, fromBlock, blockNumber);
127
124
  if (asset === 'cbETH')
128
- return (0, exports.getCbETHApy)(web3, blockNumber);
125
+ return yield getCbETHApy(web3, blockNumber);
129
126
  if (asset === 'rETH')
130
- return (0, exports.getREthApy)(web3, blockNumber);
127
+ return yield getREthApy(web3, blockNumber);
131
128
  if (asset === 'sDAI')
132
- return (0, exports.getDsrApy)(web3);
129
+ return yield getDsrApy(web3);
133
130
  if (asset === 'sUSDe')
134
- return getApyFromDfsApi('sUSDe');
131
+ return yield getApyFromDfsApi('sUSDe');
135
132
  if (asset === 'weETH')
136
- return getApyFromDfsApi('weETH');
133
+ return yield getApyFromDfsApi('weETH');
137
134
  if (asset === 'ezETH')
138
- return getApyFromDfsApi('ezETH');
135
+ return yield getApyFromDfsApi('ezETH');
139
136
  if (asset === 'osETH')
140
- return getApyFromDfsApi('osETH');
137
+ return yield getApyFromDfsApi('osETH');
141
138
  if (asset === 'ETHx')
142
- return getApyFromDfsApi('ETHx');
139
+ return yield getApyFromDfsApi('ETHx');
143
140
  if (asset === 'rsETH' || asset === 'wrsETH')
144
- return getApyFromDfsApi('rsETH');
141
+ return yield getApyFromDfsApi('rsETH');
145
142
  if (asset === 'pufETH')
146
- return getApyFromDfsApi('pufETH');
143
+ return yield getApyFromDfsApi('pufETH');
147
144
  if (asset === 'wsuperOETHb')
148
- return getSuperOETHApy();
145
+ return yield getSuperOETHApy();
149
146
  if (asset === 'sUSDS')
150
- return (0, exports.getSsrApy)();
147
+ return yield getSsrApy();
151
148
  }
152
149
  catch (e) {
153
150
  console.error(`Failed to fetch APY for ${asset}`);
154
- return '0';
155
151
  }
156
- };
152
+ return '0';
153
+ });
157
154
  exports.getStakingApy = getStakingApy;
158
155
  const calculateInterestEarned = (principal, interest, type, apy = false) => {
159
156
  let interval = 1;