@defisaver/positions-sdk 0.0.84 → 0.0.85

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 (80) hide show
  1. package/.yarn/releases/yarn-1.22.1.cjs +147386 -0
  2. package/.yarn/releases/yarn-1.22.1.js +147386 -0
  3. package/.yarnrc.yml +1 -0
  4. package/README.md +63 -63
  5. package/cjs/aaveV2/index.js +4 -4
  6. package/cjs/aaveV3/index.js +2 -2
  7. package/cjs/moneymarket/moneymarketCommonService.d.ts +1 -1
  8. package/cjs/moneymarket/moneymarketCommonService.js +1 -1
  9. package/cjs/morphoAaveV2/index.js +6 -6
  10. package/cjs/morphoAaveV3/index.js +2 -2
  11. package/cjs/spark/index.js +4 -4
  12. package/cjs/staking/staking.d.ts +0 -1
  13. package/cjs/staking/staking.js +9 -19
  14. package/esm/aaveV2/index.js +5 -5
  15. package/esm/aaveV3/index.js +3 -3
  16. package/esm/moneymarket/moneymarketCommonService.d.ts +1 -1
  17. package/esm/moneymarket/moneymarketCommonService.js +1 -1
  18. package/esm/morphoAaveV2/index.js +7 -7
  19. package/esm/morphoAaveV3/index.js +3 -3
  20. package/esm/spark/index.js +5 -5
  21. package/esm/staking/staking.d.ts +0 -1
  22. package/esm/staking/staking.js +8 -17
  23. package/package.json +40 -41
  24. package/src/aaveV2/index.ts +227 -227
  25. package/src/aaveV3/index.ts +558 -559
  26. package/src/assets/index.ts +60 -60
  27. package/src/chickenBonds/index.ts +123 -123
  28. package/src/compoundV2/index.ts +219 -219
  29. package/src/compoundV3/index.ts +273 -273
  30. package/src/config/contracts.js +848 -848
  31. package/src/constants/index.ts +5 -5
  32. package/src/contracts.ts +128 -128
  33. package/src/curveUsd/index.ts +229 -229
  34. package/src/exchange/index.ts +17 -17
  35. package/src/helpers/aaveHelpers/index.ts +134 -134
  36. package/src/helpers/chickenBondsHelpers/index.ts +23 -23
  37. package/src/helpers/compoundHelpers/index.ts +181 -181
  38. package/src/helpers/curveUsdHelpers/index.ts +40 -40
  39. package/src/helpers/index.ts +7 -7
  40. package/src/helpers/llamaLendHelpers/index.ts +45 -45
  41. package/src/helpers/makerHelpers/index.ts +94 -94
  42. package/src/helpers/morphoBlueHelpers/index.ts +56 -56
  43. package/src/helpers/sparkHelpers/index.ts +106 -106
  44. package/src/index.ts +46 -46
  45. package/src/liquity/index.ts +116 -116
  46. package/src/llamaLend/index.ts +268 -268
  47. package/src/maker/index.ts +117 -117
  48. package/src/markets/aave/index.ts +80 -80
  49. package/src/markets/aave/marketAssets.ts +25 -25
  50. package/src/markets/compound/index.ts +142 -142
  51. package/src/markets/compound/marketsAssets.ts +50 -50
  52. package/src/markets/curveUsd/index.ts +69 -69
  53. package/src/markets/index.ts +5 -5
  54. package/src/markets/llamaLend/contractAddresses.ts +95 -95
  55. package/src/markets/llamaLend/index.ts +150 -150
  56. package/src/markets/morphoBlue/index.ts +478 -478
  57. package/src/markets/spark/index.ts +29 -29
  58. package/src/markets/spark/marketAssets.ts +10 -10
  59. package/src/moneymarket/moneymarketCommonService.ts +76 -76
  60. package/src/morphoAaveV2/index.ts +256 -256
  61. package/src/morphoAaveV3/index.ts +620 -620
  62. package/src/morphoBlue/index.ts +162 -162
  63. package/src/multicall/index.ts +22 -22
  64. package/src/services/dsrService.ts +15 -15
  65. package/src/services/priceService.ts +21 -21
  66. package/src/services/utils.ts +51 -51
  67. package/src/setup.ts +8 -8
  68. package/src/spark/index.ts +434 -434
  69. package/src/staking/staking.ts +186 -198
  70. package/src/types/aave.ts +256 -256
  71. package/src/types/chickenBonds.ts +45 -45
  72. package/src/types/common.ts +84 -84
  73. package/src/types/compound.ts +128 -128
  74. package/src/types/curveUsd.ts +118 -118
  75. package/src/types/index.ts +8 -8
  76. package/src/types/liquity.ts +30 -30
  77. package/src/types/llamaLend.ts +143 -143
  78. package/src/types/maker.ts +50 -50
  79. package/src/types/morphoBlue.ts +130 -130
  80. package/src/types/spark.ts +106 -106
package/.yarnrc.yml ADDED
@@ -0,0 +1 @@
1
+ yarnPath: .yarn/releases/yarn-1.22.1.cjs
package/README.md CHANGED
@@ -1,63 +1,63 @@
1
- # DeFi Saver Positions SDK
2
-
3
- Supported protocols:
4
- - [Maker](https://github.com/defisaver/defisaver-positions-sdk/tree/main/src/maker)
5
- - [Spark](https://github.com/defisaver/defisaver-positions-sdk/tree/main/src/spark)
6
- - [CrvUSD](https://github.com/defisaver/defisaver-positions-sdk/tree/main/src/curveUsd)
7
- - [Aave V2](https://github.com/defisaver/defisaver-positions-sdk/tree/main/src/aaveV2)
8
- - [Aave V3](https://github.com/defisaver/defisaver-positions-sdk/tree/main/src/aaveV3)
9
- - [Morpho Aave V2](https://github.com/defisaver/defisaver-positions-sdk/tree/main/src/morphoAaveV2)
10
- - [Morpho Aave V3](https://github.com/defisaver/defisaver-positions-sdk/tree/main/src/morphoAaveV3)
11
- - [Compound V2](https://github.com/defisaver/defisaver-positions-sdk/tree/main/src/compoundV2)
12
- - [Compound V3](https://github.com/defisaver/defisaver-positions-sdk/tree/main/src/compoundV3)
13
- - [Liquity](https://github.com/defisaver/defisaver-positions-sdk/tree/main/src/liquity)
14
- - [Chicken Bonds](https://github.com/defisaver/defisaver-positions-sdk/tree/main/src/chickenBonds)
15
-
16
- ## Setup
17
- Supported Node version is v10.
18
-
19
- - run `npm install` (first time)
20
- - run `npm run build`
21
-
22
- `build` command will generate contracts and build ejs and esm folders
23
-
24
- ## How to use
25
- [All available imports](https://github.com/defisaver/defisaver-positions-sdk/blob/main/src/index.ts)
26
-
27
- This is a Compound V3 example, and every other protocol is similar
28
- ```js
29
- import Web3 from 'web3';
30
- import { compoundV3 } from '@defisaver/positions-sdk';
31
-
32
-
33
- // every protocol has market data and user data getters
34
- const {
35
- getCompoundV3MarketsData,
36
- getCompoundV3AccountData,
37
- } = compoundV3;
38
-
39
- const provider = 'Your RPC provider';
40
- const web3 = new Web3(provider);
41
-
42
- const user = '0x123...';
43
-
44
- const { assetsData } = await getCompoundV3MarketsData(
45
- web3, // rpc for the network you are using (note: can be tenderly or any other testnet rpc)
46
- 1, // network
47
- selectedMarket, // market object like in /src/markets/compound/index.ts
48
- web3, // this must be mainnet rpc - used for getting prices onchain and calculating apys
49
- );
50
-
51
- const userData = await getCompoundV3AccountData(
52
- web3,
53
- 1, // network
54
- userAddress, // EOA or DSProxy
55
- '', // proxy address of the user, or just empty string if checking for EOA
56
- {
57
- selectedMarket, // market object as in /src/markets/compound/index.ts
58
- assetsData,
59
- }
60
- );
61
- ```
62
-
63
- More examples found [here](https://github.com/defisaver/defisaver-positions-sdk/tree/main/tests)
1
+ # DeFi Saver Positions SDK
2
+
3
+ Supported protocols:
4
+ - [Maker](https://github.com/defisaver/defisaver-positions-sdk/tree/main/src/maker)
5
+ - [Spark](https://github.com/defisaver/defisaver-positions-sdk/tree/main/src/spark)
6
+ - [CrvUSD](https://github.com/defisaver/defisaver-positions-sdk/tree/main/src/curveUsd)
7
+ - [Aave V2](https://github.com/defisaver/defisaver-positions-sdk/tree/main/src/aaveV2)
8
+ - [Aave V3](https://github.com/defisaver/defisaver-positions-sdk/tree/main/src/aaveV3)
9
+ - [Morpho Aave V2](https://github.com/defisaver/defisaver-positions-sdk/tree/main/src/morphoAaveV2)
10
+ - [Morpho Aave V3](https://github.com/defisaver/defisaver-positions-sdk/tree/main/src/morphoAaveV3)
11
+ - [Compound V2](https://github.com/defisaver/defisaver-positions-sdk/tree/main/src/compoundV2)
12
+ - [Compound V3](https://github.com/defisaver/defisaver-positions-sdk/tree/main/src/compoundV3)
13
+ - [Liquity](https://github.com/defisaver/defisaver-positions-sdk/tree/main/src/liquity)
14
+ - [Chicken Bonds](https://github.com/defisaver/defisaver-positions-sdk/tree/main/src/chickenBonds)
15
+
16
+ ## Setup
17
+ Supported Node version is v10.
18
+
19
+ - run `npm install` (first time)
20
+ - run `npm run build`
21
+
22
+ `build` command will generate contracts and build ejs and esm folders
23
+
24
+ ## How to use
25
+ [All available imports](https://github.com/defisaver/defisaver-positions-sdk/blob/main/src/index.ts)
26
+
27
+ This is a Compound V3 example, and every other protocol is similar
28
+ ```js
29
+ import Web3 from 'web3';
30
+ import { compoundV3 } from '@defisaver/positions-sdk';
31
+
32
+
33
+ // every protocol has market data and user data getters
34
+ const {
35
+ getCompoundV3MarketsData,
36
+ getCompoundV3AccountData,
37
+ } = compoundV3;
38
+
39
+ const provider = 'Your RPC provider';
40
+ const web3 = new Web3(provider);
41
+
42
+ const user = '0x123...';
43
+
44
+ const { assetsData } = await getCompoundV3MarketsData(
45
+ web3, // rpc for the network you are using (note: can be tenderly or any other testnet rpc)
46
+ 1, // network
47
+ selectedMarket, // market object like in /src/markets/compound/index.ts
48
+ web3, // this must be mainnet rpc - used for getting prices onchain and calculating apys
49
+ );
50
+
51
+ const userData = await getCompoundV3AccountData(
52
+ web3,
53
+ 1, // network
54
+ userAddress, // EOA or DSProxy
55
+ '', // proxy address of the user, or just empty string if checking for EOA
56
+ {
57
+ selectedMarket, // market object as in /src/markets/compound/index.ts
58
+ assetsData,
59
+ }
60
+ );
61
+ ```
62
+
63
+ More examples found [here](https://github.com/defisaver/defisaver-positions-sdk/tree/main/tests)
@@ -33,9 +33,9 @@ const getAaveV2MarketsData = (web3, network, selectedMarket, mainnetWeb3) => __a
33
33
  .map((market, i) => ({
34
34
  symbol: selectedMarket.assets[i],
35
35
  underlyingTokenAddress: market.underlyingTokenAddress,
36
- supplyRate: new decimal_js_1.default(market.supplyRate.toString()).div(1e25).toString(),
37
- borrowRate: new decimal_js_1.default(market.borrowRateVariable.toString()).div(1e25).toString(),
38
- borrowRateStable: new decimal_js_1.default(market.borrowRateStable.toString()).div(1e25).toString(),
36
+ supplyRate: (0, moneymarket_1.aprToApy)(new decimal_js_1.default(market.supplyRate.toString()).div(1e25).toString()),
37
+ borrowRate: (0, moneymarket_1.aprToApy)(new decimal_js_1.default(market.borrowRateVariable.toString()).div(1e25).toString()),
38
+ borrowRateStable: (0, moneymarket_1.aprToApy)(new decimal_js_1.default(market.borrowRateStable.toString()).div(1e25).toString()),
39
39
  collateralFactor: new decimal_js_1.default(market.collateralFactor.toString()).div(10000).toString(),
40
40
  liquidationRatio: new decimal_js_1.default(market.liquidationRatio.toString()).div(10000).toString(),
41
41
  marketLiquidity: (0, tokens_1.assetAmountInEth)(new decimal_js_1.default(market.totalSupply.toString())
@@ -151,7 +151,7 @@ const getAaveV2AccountData = (web3, network, address, assetsData, market) => __a
151
151
  }
152
152
  if (!usedAssets[asset])
153
153
  usedAssets[asset] = {};
154
- usedAssets[asset] = Object.assign(Object.assign({}, usedAssets[asset]), { symbol: asset, supplied, suppliedUsd: new decimal_js_1.default(supplied).mul(assetsData[asset].price).toString(), isSupplied, collateral: enabledAsCollateral, stableBorrowRate: new decimal_js_1.default(tokenInfo.stableBorrowRate).div(1e25).toString(), borrowedStable,
154
+ usedAssets[asset] = Object.assign(Object.assign({}, usedAssets[asset]), { symbol: asset, supplied, suppliedUsd: new decimal_js_1.default(supplied).mul(assetsData[asset].price).toString(), isSupplied, collateral: enabledAsCollateral, stableBorrowRate: (0, moneymarket_1.aprToApy)(new decimal_js_1.default(tokenInfo.stableBorrowRate).div(1e25).toString()), borrowedStable,
155
155
  borrowedVariable, borrowedUsdStable: new decimal_js_1.default(borrowedStable).mul(assetsData[asset].price).toString(), borrowedUsdVariable: new decimal_js_1.default(borrowedVariable).mul(assetsData[asset].price).toString(), borrowed: new decimal_js_1.default(borrowedStable).add(borrowedVariable).toString(), borrowedUsd: new decimal_js_1.default(new decimal_js_1.default(borrowedVariable).add(borrowedStable)).mul(assetsData[asset].price).toString(), isBorrowed,
156
156
  interestMode });
157
157
  });
@@ -161,7 +161,7 @@ function getAaveV3MarketData(web3, network, market, defaultWeb3) {
161
161
  minDiscountTokenBalance,
162
162
  minGhoBalanceForDiscount,
163
163
  },
164
- })), { symbol, isIsolated: new decimal_js_1.default(tokenMarket.debtCeilingForIsolationMode).gt(0), debtCeilingForIsolationMode: new decimal_js_1.default(tokenMarket.debtCeilingForIsolationMode).div(100).toString(), isSiloed: tokenMarket.isSiloedForBorrowing, eModeCategory: +tokenMarket.emodeCategory, isolationModeTotalDebt: new decimal_js_1.default(tokenMarket.isolationModeTotalDebt).div(100).toString(), assetId: Number(tokenMarket.assetId), underlyingTokenAddress: tokenMarket.underlyingTokenAddress, supplyRate: new decimal_js_1.default(tokenMarket.supplyRate.toString()).div(1e25).toString(), borrowRate: new decimal_js_1.default(tokenMarket.borrowRateVariable.toString()).div(1e25).toString(), borrowRateDiscounted: nativeAsset ? new decimal_js_1.default(tokenMarket.borrowRateVariable.toString()).div(1e25).mul(1 - parseFloat(discountRateOnBorrow)).toString() : '0', borrowRateStable: new decimal_js_1.default(tokenMarket.borrowRateStable.toString()).div(1e25).toString(), collateralFactor: new decimal_js_1.default(tokenMarket.collateralFactor.toString()).div(10000).toString(), liquidationRatio: new decimal_js_1.default(tokenMarket.liquidationRatio.toString()).div(10000).toString(), marketLiquidity, utilization: new decimal_js_1.default(tokenMarket.totalBorrow.toString()).times(100).div(new decimal_js_1.default(tokenMarket.totalSupply.toString())).toString(), usageAsCollateralEnabled: tokenMarket.usageAsCollateralEnabled, supplyCap: tokenMarket.supplyCap, borrowCap, totalSupply: (0, tokens_1.assetAmountInEth)(tokenMarket.totalSupply.toString(), symbol), isInactive: !tokenMarket.isActive, isFrozen: tokenMarket.isFrozen, isPaused: tokenMarket.isPaused, canBeBorrowed: tokenMarket.isActive && !tokenMarket.isPaused && !tokenMarket.isFrozen && tokenMarket.borrowingEnabled && isBorrowAllowed, canBeSupplied: !nativeAsset && tokenMarket.isActive && !tokenMarket.isPaused && !tokenMarket.isFrozen, canBeWithdrawn: tokenMarket.isActive && !tokenMarket.isPaused, canBePayBacked: tokenMarket.isActive && !tokenMarket.isPaused, disabledStableBorrowing: !tokenMarket.stableBorrowRateEnabled, totalBorrow: (0, tokens_1.assetAmountInEth)(tokenMarket.totalBorrow.toString(), symbol), totalBorrowVar: (0, tokens_1.assetAmountInEth)(tokenMarket.totalBorrowVar.toString(), symbol), price: new decimal_js_1.default(tokenMarket.price.toString()).div(1e8).toString(), isolationModeBorrowingEnabled: tokenMarket.isolationModeBorrowingEnabled, isFlashLoanEnabled: tokenMarket.isFlashLoanEnabled, eModeCategoryData: {
164
+ })), { symbol, isIsolated: new decimal_js_1.default(tokenMarket.debtCeilingForIsolationMode).gt(0), debtCeilingForIsolationMode: new decimal_js_1.default(tokenMarket.debtCeilingForIsolationMode).div(100).toString(), isSiloed: tokenMarket.isSiloedForBorrowing, eModeCategory: +tokenMarket.emodeCategory, isolationModeTotalDebt: new decimal_js_1.default(tokenMarket.isolationModeTotalDebt).div(100).toString(), assetId: Number(tokenMarket.assetId), underlyingTokenAddress: tokenMarket.underlyingTokenAddress, supplyRate: (0, moneymarket_1.aprToApy)(new decimal_js_1.default(tokenMarket.supplyRate.toString()).div(1e25).toString()), borrowRate: (0, moneymarket_1.aprToApy)(new decimal_js_1.default(tokenMarket.borrowRateVariable.toString()).div(1e25).toString()), borrowRateDiscounted: (0, moneymarket_1.aprToApy)(nativeAsset ? new decimal_js_1.default(tokenMarket.borrowRateVariable.toString()).div(1e25).mul(1 - parseFloat(discountRateOnBorrow)).toString() : '0'), borrowRateStable: (0, moneymarket_1.aprToApy)(new decimal_js_1.default(tokenMarket.borrowRateStable.toString()).div(1e25).toString()), collateralFactor: new decimal_js_1.default(tokenMarket.collateralFactor.toString()).div(10000).toString(), liquidationRatio: new decimal_js_1.default(tokenMarket.liquidationRatio.toString()).div(10000).toString(), marketLiquidity, utilization: new decimal_js_1.default(tokenMarket.totalBorrow.toString()).times(100).div(new decimal_js_1.default(tokenMarket.totalSupply.toString())).toString(), usageAsCollateralEnabled: tokenMarket.usageAsCollateralEnabled, supplyCap: tokenMarket.supplyCap, borrowCap, totalSupply: (0, tokens_1.assetAmountInEth)(tokenMarket.totalSupply.toString(), symbol), isInactive: !tokenMarket.isActive, isFrozen: tokenMarket.isFrozen, isPaused: tokenMarket.isPaused, canBeBorrowed: tokenMarket.isActive && !tokenMarket.isPaused && !tokenMarket.isFrozen && tokenMarket.borrowingEnabled && isBorrowAllowed, canBeSupplied: !nativeAsset && tokenMarket.isActive && !tokenMarket.isPaused && !tokenMarket.isFrozen, canBeWithdrawn: tokenMarket.isActive && !tokenMarket.isPaused, canBePayBacked: tokenMarket.isActive && !tokenMarket.isPaused, disabledStableBorrowing: !tokenMarket.stableBorrowRateEnabled, totalBorrow: (0, tokens_1.assetAmountInEth)(tokenMarket.totalBorrow.toString(), symbol), totalBorrowVar: (0, tokens_1.assetAmountInEth)(tokenMarket.totalBorrowVar.toString(), symbol), price: new decimal_js_1.default(tokenMarket.price.toString()).div(1e8).toString(), isolationModeBorrowingEnabled: tokenMarket.isolationModeBorrowingEnabled, isFlashLoanEnabled: tokenMarket.isFlashLoanEnabled, eModeCategoryData: {
165
165
  label: tokenMarket.label,
166
166
  liquidationBonus: new decimal_js_1.default(tokenMarket.liquidationBonus).div(10000).toString(),
167
167
  liquidationRatio: new decimal_js_1.default(tokenMarket.liquidationThreshold).div(10000).toString(),
@@ -359,7 +359,7 @@ const getAaveV3AccountData = (web3, network, address, extractedState) => __await
359
359
  if (nativeAsset && new decimal_js_1.default(borrowed).gt(0) && new decimal_js_1.default(stkAaveBalance).gt(0)) {
360
360
  discountRateOnBorrow = (0, exports.aaveV3CalculateDiscountRate)((0, tokens_1.assetAmountInWei)(borrowed, 'GHO'), (0, tokens_1.assetAmountInWei)(stkAaveBalance, 'stkAAVE'), assetsData[asset].discountData.discountRate, assetsData[asset].discountData.minDiscountTokenBalance, assetsData[asset].discountData.minGhoBalanceForDiscount, assetsData[asset].discountData.ghoDiscountedPerDiscountToken);
361
361
  }
362
- usedAssets[asset] = Object.assign(Object.assign({}, usedAssets[asset]), { symbol: asset, supplied, suppliedUsd: new decimal_js_1.default(supplied).mul(assetsData[asset].price).toString(), isSupplied, collateral: enabledAsCollateral, stableBorrowRate: new decimal_js_1.default(tokenInfo.stableBorrowRate).div(1e25).toString(), discountedBorrowRate: new decimal_js_1.default(assetsData[asset].borrowRate).mul(1 - parseFloat(discountRateOnBorrow)).toString(), borrowedStable,
362
+ usedAssets[asset] = Object.assign(Object.assign({}, usedAssets[asset]), { symbol: asset, supplied, suppliedUsd: new decimal_js_1.default(supplied).mul(assetsData[asset].price).toString(), isSupplied, collateral: enabledAsCollateral, stableBorrowRate: (0, moneymarket_1.aprToApy)(new decimal_js_1.default(tokenInfo.stableBorrowRate).div(1e25).toString()), discountedBorrowRate: (0, moneymarket_1.aprToApy)(new decimal_js_1.default(assetsData[asset].borrowRate).mul(1 - parseFloat(discountRateOnBorrow)).toString()), borrowedStable,
363
363
  borrowedVariable, borrowedUsdStable: new decimal_js_1.default(borrowedStable).mul(assetsData[asset].price).toString(), borrowedUsdVariable: new decimal_js_1.default(borrowedVariable).mul(assetsData[asset].price).toString(), borrowed, borrowedUsd: new decimal_js_1.default(new decimal_js_1.default(borrowedVariable).add(borrowedStable)).mul(assetsData[asset].price).toString(), isBorrowed, eModeCategory: assetsData[asset].eModeCategory, interestMode });
364
364
  }));
365
365
  payload.eModeCategory = +multicallRes[0][0];
@@ -9,4 +9,4 @@ export declare const isLeveragedPos: (usedAssets: MMUsedAssets, dustLimit?: numb
9
9
  leveragedType: string;
10
10
  leveragedAsset: string;
11
11
  };
12
- export declare const aprToApy: (interest: string | number, frequency?: number) => number;
12
+ export declare const aprToApy: (interest: string | number, frequency?: number) => string;
@@ -79,5 +79,5 @@ const isLeveragedPos = (usedAssets, dustLimit = 5) => {
79
79
  };
80
80
  };
81
81
  exports.isLeveragedPos = isLeveragedPos;
82
- const aprToApy = (interest, frequency = constants_1.BLOCKS_IN_A_YEAR) => (Math.pow((1 + (+interest / 100) / frequency), frequency) - 1) * 100; // eslint-disable-line
82
+ const aprToApy = (interest, frequency = constants_1.BLOCKS_IN_A_YEAR) => new decimal_js_1.default(interest).div(100).div(frequency).plus(1).pow(frequency).minus(1).times(100).toString();
83
83
  exports.aprToApy = aprToApy;
@@ -40,8 +40,8 @@ const getMorphoAaveV2MarketsData = (web3, network, mainnetWeb3) => __awaiter(voi
40
40
  const aaveInfo = aaveTokenInfo[index];
41
41
  const { symbol, address } = (0, tokens_1.getAssetInfoByAddress)((0, utils_1.wethToEthByAddress)(aaveInfo.underlyingTokenAddress));
42
42
  const morphoReward = (_a = morphoRewardsData === null || morphoRewardsData === void 0 ? void 0 : morphoRewardsData.markets) === null || _a === void 0 ? void 0 : _a[aaveInfo.aTokenAddress.toLowerCase()];
43
- const supplyRateP2P = new decimal_js_1.default(market.p2pSupplyRate).div(1e25).toString();
44
- const borrowRateP2P = new decimal_js_1.default(market.p2pBorrowRate).div(1e25).toString();
43
+ const supplyRateP2P = (0, moneymarket_1.aprToApy)(new decimal_js_1.default(market.p2pSupplyRate).div(1e25).toString());
44
+ const borrowRateP2P = (0, moneymarket_1.aprToApy)(new decimal_js_1.default(market.p2pBorrowRate).div(1e25).toString());
45
45
  const hasDelta = new decimal_js_1.default(borrowRateP2P).minus(supplyRateP2P).gte(0.3);
46
46
  return {
47
47
  symbol,
@@ -50,9 +50,9 @@ const getMorphoAaveV2MarketsData = (web3, network, mainnetWeb3) => __awaiter(voi
50
50
  underlyingTokenAddress: address,
51
51
  priceInEth: new decimal_js_1.default(aaveInfo.price).div(1e18).toString(),
52
52
  price: new decimal_js_1.default(aaveInfo.price).div(1e18).times(ethPrice).toString(),
53
- supplyRate: new decimal_js_1.default(market.poolSupplyRate).div(1e25).toString(),
53
+ supplyRate: (0, moneymarket_1.aprToApy)(new decimal_js_1.default(market.poolSupplyRate).div(1e25).toString()),
54
54
  supplyRateP2P,
55
- borrowRate: new decimal_js_1.default(market.poolBorrowRate).div(1e25).toString(),
55
+ borrowRate: (0, moneymarket_1.aprToApy)(new decimal_js_1.default(market.poolBorrowRate).div(1e25).toString()),
56
56
  borrowRateP2P,
57
57
  totalSupply: (0, tokens_1.assetAmountInEth)(aaveInfo.totalSupply, symbol),
58
58
  totalBorrow: (0, tokens_1.assetAmountInEth)(aaveInfo.totalBorrow, symbol),
@@ -178,8 +178,8 @@ const getMorphoAaveV2AccountData = (web3, network, address, assetsData) => __awa
178
178
  borrowedUsdVariable: borrowedUsd,
179
179
  isSupplied: new decimal_js_1.default(supplied).gt(0),
180
180
  isBorrowed: new decimal_js_1.default(borrowed).gt(0),
181
- supplyRate: new decimal_js_1.default(market.userSupplyRate).div(1e25).toString(),
182
- borrowRate: new decimal_js_1.default(market.userBorrowRate).div(1e25).toString(),
181
+ supplyRate: (0, moneymarket_1.aprToApy)(new decimal_js_1.default(market.userSupplyRate).div(1e25).toString()),
182
+ borrowRate: (0, moneymarket_1.aprToApy)(new decimal_js_1.default(market.userBorrowRate).div(1e25).toString()),
183
183
  limit: '0',
184
184
  collateral: true,
185
185
  eModeCategory: 0,
@@ -147,9 +147,9 @@ const getMorphoAaveV3MarketsData = (web3, network, selectedMarket, mainnetWeb3)
147
147
  aTokenAddress: marketData.aTokenAddress,
148
148
  underlyingTokenAddress: address,
149
149
  price: new decimal_js_1.default(marketData.price.toString()).div(1e8).toString(),
150
- supplyRate: new decimal_js_1.default(marketData.supplyRate.toString()).div(1e25).toString(),
150
+ supplyRate: (0, moneymarket_1.aprToApy)(new decimal_js_1.default(marketData.supplyRate.toString()).div(1e25).toString()),
151
151
  supplyRateP2P: marketData.p2pSupplyAPY,
152
- borrowRate: new decimal_js_1.default(marketData.borrowRateVariable.toString()).div(1e25).toString(),
152
+ borrowRate: (0, moneymarket_1.aprToApy)(new decimal_js_1.default(marketData.borrowRateVariable.toString()).div(1e25).toString()),
153
153
  borrowRateP2P: marketData.p2pBorrowAPY,
154
154
  totalSupply: (0, tokens_1.assetAmountInEth)(marketData.totalSupply.toString(), symbol),
155
155
  totalBorrow: (0, tokens_1.assetAmountInEth)(marketData.totalBorrow.toString(), symbol),
@@ -89,9 +89,9 @@ const getSparkMarketsData = (web3, network, selectedMarket, mainnetWeb3) => __aw
89
89
  isolationModeTotalDebt: new decimal_js_1.default(market.isolationModeTotalDebt).div(100).toString(),
90
90
  assetId: Number(market.assetId),
91
91
  underlyingTokenAddress: market.underlyingTokenAddress,
92
- supplyRate: new decimal_js_1.default(market.supplyRate.toString()).div(1e25).toString(),
93
- borrowRate: new decimal_js_1.default(market.borrowRateVariable.toString()).div(1e25).toString(),
94
- borrowRateStable: new decimal_js_1.default(market.borrowRateStable.toString()).div(1e25).toString(),
92
+ supplyRate: (0, moneymarket_1.aprToApy)(new decimal_js_1.default(market.supplyRate.toString()).div(1e25).toString()),
93
+ borrowRate: (0, moneymarket_1.aprToApy)(new decimal_js_1.default(market.borrowRateVariable.toString()).div(1e25).toString()),
94
+ borrowRateStable: (0, moneymarket_1.aprToApy)(new decimal_js_1.default(market.borrowRateStable.toString()).div(1e25).toString()),
95
95
  collateralFactor: new decimal_js_1.default(market.collateralFactor.toString()).div(10000).toString(),
96
96
  liquidationRatio: new decimal_js_1.default(market.liquidationRatio.toString()).div(10000).toString(),
97
97
  marketLiquidity,
@@ -311,7 +311,7 @@ const getSparkAccountData = (web3, network, address, extractedState) => __awaite
311
311
  }
312
312
  if (!usedAssets[asset])
313
313
  usedAssets[asset] = {};
314
- usedAssets[asset] = Object.assign(Object.assign({}, usedAssets[asset]), { symbol: asset, supplied, suppliedUsd: new decimal_js_1.default(supplied).mul(assetsData[asset].price).toString(), isSupplied, collateral: enabledAsCollateral, stableBorrowRate: new decimal_js_1.default(tokenInfo.stableBorrowRate).div(1e25).toString(), borrowedStable,
314
+ usedAssets[asset] = Object.assign(Object.assign({}, usedAssets[asset]), { symbol: asset, supplied, suppliedUsd: new decimal_js_1.default(supplied).mul(assetsData[asset].price).toString(), isSupplied, collateral: enabledAsCollateral, stableBorrowRate: (0, moneymarket_1.aprToApy)(new decimal_js_1.default(tokenInfo.stableBorrowRate).div(1e25).toString()), borrowedStable,
315
315
  borrowedVariable, borrowedUsdStable: new decimal_js_1.default(borrowedStable).mul(assetsData[asset].price).toString(), borrowedUsdVariable: new decimal_js_1.default(borrowedVariable).mul(assetsData[asset].price).toString(), borrowed: new decimal_js_1.default(borrowedStable).add(borrowedVariable).toString(), borrowedUsd: new decimal_js_1.default(new decimal_js_1.default(borrowedVariable).add(borrowedStable)).mul(assetsData[asset].price).toString(), isBorrowed, eModeCategory: assetsData[asset].eModeCategory, interestMode });
316
316
  });
317
317
  payload.eModeCategory = +multicallRes[0][0];
@@ -4,7 +4,6 @@ export declare const getStETHApr: (web3: Web3, fromBlock?: number, blockNumber?:
4
4
  export declare const getCbETHApr: (web3: Web3, blockNumber?: 'latest' | number) => Promise<string>;
5
5
  export declare const getREthApr: (web3: Web3, blockNumber?: 'latest' | number) => Promise<string>;
6
6
  export declare const getDsrApy: (web3: Web3, blockNumber?: 'latest' | number) => Promise<string>;
7
- export declare const getSUSDeApy: () => Promise<any>;
8
7
  export declare const STAKING_ASSETS: string[];
9
8
  export declare const getStakingApy: (asset: string, web3: Web3, blockNumber?: 'latest' | number, fromBlock?: number | undefined) => Promise<any> | "0" | undefined;
10
9
  export declare const calculateInterestEarned: (principal: string, interest: string, type: string, apy?: boolean) => number;
@@ -12,9 +12,8 @@ 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.getSUSDeApy = exports.getDsrApy = exports.getREthApr = exports.getCbETHApr = exports.getStETHApr = void 0;
15
+ exports.getStETHByWstETHMultiple = exports.getStETHByWstETH = exports.getWstETHByStETH = exports.calculateNetApy = exports.calculateInterestEarned = exports.getStakingApy = exports.STAKING_ASSETS = exports.getDsrApy = exports.getREthApr = exports.getCbETHApr = exports.getStETHApr = void 0;
16
16
  const decimal_js_1 = __importDefault(require("decimal.js"));
17
- const v3_sdk_1 = require("@stakewise/v3-sdk");
18
17
  const contracts_1 = require("../contracts");
19
18
  const common_1 = require("../types/common");
20
19
  const constants_1 = require("../constants");
@@ -87,23 +86,12 @@ const getDsrApy = (web3, blockNumber = 'latest') => __awaiter(void 0, void 0, vo
87
86
  .toString();
88
87
  });
89
88
  exports.getDsrApy = getDsrApy;
90
- const getSUSDeApy = () => __awaiter(void 0, void 0, void 0, function* () {
91
- const res = yield fetch('https://app.defisaver.com/api/staking/apy?asset=sUSDe');
89
+ const getApyFromDfsApi = (asset) => __awaiter(void 0, void 0, void 0, function* () {
90
+ const res = yield fetch(`https://app.defisaver.com/api/staking/apy?asset=${asset}`);
92
91
  const data = yield res.json();
93
92
  return data.apy;
94
93
  });
95
- exports.getSUSDeApy = getSUSDeApy;
96
- const getWeEthApr = () => __awaiter(void 0, void 0, void 0, function* () {
97
- const res = yield fetch('https://app.defisaver.com/api/staking/apy?asset=weETH');
98
- const data = yield res.json();
99
- return data.apy;
100
- });
101
- const getOsETHApy = () => __awaiter(void 0, void 0, void 0, function* () {
102
- const sdk = new v3_sdk_1.StakeWiseSDK({ network: v3_sdk_1.Network.Mainnet });
103
- const apy = yield sdk.osToken.getAPY();
104
- return apy;
105
- });
106
- exports.STAKING_ASSETS = ['cbETH', 'wstETH', 'cbETH', 'rETH', 'sDAI', 'weETH', 'sUSDe', 'osETH'];
94
+ exports.STAKING_ASSETS = ['cbETH', 'wstETH', 'cbETH', 'rETH', 'sDAI', 'weETH', 'sUSDe', 'osETH', 'ezETH'];
107
95
  const getStakingApy = (asset, web3, blockNumber = 'latest', fromBlock = undefined) => {
108
96
  try {
109
97
  if (asset === 'stETH' || asset === 'wstETH')
@@ -115,11 +103,13 @@ const getStakingApy = (asset, web3, blockNumber = 'latest', fromBlock = undefine
115
103
  if (asset === 'sDAI')
116
104
  return (0, exports.getDsrApy)(web3);
117
105
  if (asset === 'sUSDe')
118
- return (0, exports.getSUSDeApy)();
106
+ return getApyFromDfsApi('sUSDe');
119
107
  if (asset === 'weETH')
120
- return getWeEthApr();
108
+ return getApyFromDfsApi('weETH');
109
+ if (asset === 'ezETH')
110
+ return getApyFromDfsApi('ezETH');
121
111
  if (asset === 'osETH')
122
- return getOsETHApy();
112
+ return getApyFromDfsApi('osETH');
123
113
  }
124
114
  catch (e) {
125
115
  console.error(`Failed to fetch APY for ${asset}`);
@@ -12,7 +12,7 @@ import { assetAmountInEth, getAssetInfo } from '@defisaver/tokens';
12
12
  import { calculateNetApy, getStETHApr } from '../staking';
13
13
  import { ethToWeth, wethToEth, wethToEthByAddress } from '../services/utils';
14
14
  import { AaveLoanInfoV2Contract, createContractWrapper } from '../contracts';
15
- import { calculateBorrowingAssetLimit } from '../moneymarket';
15
+ import { aprToApy, calculateBorrowingAssetLimit } from '../moneymarket';
16
16
  import { EMPTY_AAVE_DATA } from '../aaveV3';
17
17
  import { AAVE_V2 } from '../markets/aave';
18
18
  import { aaveAnyGetAggregatedPositionData } from '../helpers/aaveHelpers';
@@ -27,9 +27,9 @@ export const getAaveV2MarketsData = (web3, network, selectedMarket, mainnetWeb3)
27
27
  .map((market, i) => ({
28
28
  symbol: selectedMarket.assets[i],
29
29
  underlyingTokenAddress: market.underlyingTokenAddress,
30
- supplyRate: new Dec(market.supplyRate.toString()).div(1e25).toString(),
31
- borrowRate: new Dec(market.borrowRateVariable.toString()).div(1e25).toString(),
32
- borrowRateStable: new Dec(market.borrowRateStable.toString()).div(1e25).toString(),
30
+ supplyRate: aprToApy(new Dec(market.supplyRate.toString()).div(1e25).toString()),
31
+ borrowRate: aprToApy(new Dec(market.borrowRateVariable.toString()).div(1e25).toString()),
32
+ borrowRateStable: aprToApy(new Dec(market.borrowRateStable.toString()).div(1e25).toString()),
33
33
  collateralFactor: new Dec(market.collateralFactor.toString()).div(10000).toString(),
34
34
  liquidationRatio: new Dec(market.liquidationRatio.toString()).div(10000).toString(),
35
35
  marketLiquidity: assetAmountInEth(new Dec(market.totalSupply.toString())
@@ -143,7 +143,7 @@ export const getAaveV2AccountData = (web3, network, address, assetsData, market)
143
143
  }
144
144
  if (!usedAssets[asset])
145
145
  usedAssets[asset] = {};
146
- usedAssets[asset] = Object.assign(Object.assign({}, usedAssets[asset]), { symbol: asset, supplied, suppliedUsd: new Dec(supplied).mul(assetsData[asset].price).toString(), isSupplied, collateral: enabledAsCollateral, stableBorrowRate: new Dec(tokenInfo.stableBorrowRate).div(1e25).toString(), borrowedStable,
146
+ usedAssets[asset] = Object.assign(Object.assign({}, usedAssets[asset]), { symbol: asset, supplied, suppliedUsd: new Dec(supplied).mul(assetsData[asset].price).toString(), isSupplied, collateral: enabledAsCollateral, stableBorrowRate: aprToApy(new Dec(tokenInfo.stableBorrowRate).div(1e25).toString()), borrowedStable,
147
147
  borrowedVariable, borrowedUsdStable: new Dec(borrowedStable).mul(assetsData[asset].price).toString(), borrowedUsdVariable: new Dec(borrowedVariable).mul(assetsData[asset].price).toString(), borrowed: new Dec(borrowedStable).add(borrowedVariable).toString(), borrowedUsd: new Dec(new Dec(borrowedVariable).add(borrowedStable)).mul(assetsData[asset].price).toString(), isBorrowed,
148
148
  interestMode });
149
149
  });
@@ -15,7 +15,7 @@ import { NetworkNumber, } from '../types/common';
15
15
  import { getStakingApy, STAKING_ASSETS } from '../staking';
16
16
  import { multicall } from '../multicall';
17
17
  import { getAssetsBalances } from '../assets';
18
- import { calculateBorrowingAssetLimit } from '../moneymarket';
18
+ import { aprToApy, calculateBorrowingAssetLimit } from '../moneymarket';
19
19
  import { aaveAnyGetAggregatedPositionData, aaveV3IsInIsolationMode, aaveV3IsInSiloedMode, } from '../helpers/aaveHelpers';
20
20
  import { AAVE_V3 } from '../markets/aave';
21
21
  export const test = (web3, network) => {
@@ -152,7 +152,7 @@ export function getAaveV3MarketData(web3, network, market, defaultWeb3) {
152
152
  minDiscountTokenBalance,
153
153
  minGhoBalanceForDiscount,
154
154
  },
155
- })), { symbol, isIsolated: new Dec(tokenMarket.debtCeilingForIsolationMode).gt(0), debtCeilingForIsolationMode: new Dec(tokenMarket.debtCeilingForIsolationMode).div(100).toString(), isSiloed: tokenMarket.isSiloedForBorrowing, eModeCategory: +tokenMarket.emodeCategory, isolationModeTotalDebt: new Dec(tokenMarket.isolationModeTotalDebt).div(100).toString(), assetId: Number(tokenMarket.assetId), underlyingTokenAddress: tokenMarket.underlyingTokenAddress, supplyRate: new Dec(tokenMarket.supplyRate.toString()).div(1e25).toString(), borrowRate: new Dec(tokenMarket.borrowRateVariable.toString()).div(1e25).toString(), borrowRateDiscounted: nativeAsset ? new Dec(tokenMarket.borrowRateVariable.toString()).div(1e25).mul(1 - parseFloat(discountRateOnBorrow)).toString() : '0', borrowRateStable: new Dec(tokenMarket.borrowRateStable.toString()).div(1e25).toString(), collateralFactor: new Dec(tokenMarket.collateralFactor.toString()).div(10000).toString(), liquidationRatio: new Dec(tokenMarket.liquidationRatio.toString()).div(10000).toString(), marketLiquidity, utilization: new Dec(tokenMarket.totalBorrow.toString()).times(100).div(new Dec(tokenMarket.totalSupply.toString())).toString(), usageAsCollateralEnabled: tokenMarket.usageAsCollateralEnabled, supplyCap: tokenMarket.supplyCap, borrowCap, totalSupply: assetAmountInEth(tokenMarket.totalSupply.toString(), symbol), isInactive: !tokenMarket.isActive, isFrozen: tokenMarket.isFrozen, isPaused: tokenMarket.isPaused, canBeBorrowed: tokenMarket.isActive && !tokenMarket.isPaused && !tokenMarket.isFrozen && tokenMarket.borrowingEnabled && isBorrowAllowed, canBeSupplied: !nativeAsset && tokenMarket.isActive && !tokenMarket.isPaused && !tokenMarket.isFrozen, canBeWithdrawn: tokenMarket.isActive && !tokenMarket.isPaused, canBePayBacked: tokenMarket.isActive && !tokenMarket.isPaused, disabledStableBorrowing: !tokenMarket.stableBorrowRateEnabled, totalBorrow: assetAmountInEth(tokenMarket.totalBorrow.toString(), symbol), totalBorrowVar: assetAmountInEth(tokenMarket.totalBorrowVar.toString(), symbol), price: new Dec(tokenMarket.price.toString()).div(1e8).toString(), isolationModeBorrowingEnabled: tokenMarket.isolationModeBorrowingEnabled, isFlashLoanEnabled: tokenMarket.isFlashLoanEnabled, eModeCategoryData: {
155
+ })), { symbol, isIsolated: new Dec(tokenMarket.debtCeilingForIsolationMode).gt(0), debtCeilingForIsolationMode: new Dec(tokenMarket.debtCeilingForIsolationMode).div(100).toString(), isSiloed: tokenMarket.isSiloedForBorrowing, eModeCategory: +tokenMarket.emodeCategory, isolationModeTotalDebt: new Dec(tokenMarket.isolationModeTotalDebt).div(100).toString(), assetId: Number(tokenMarket.assetId), underlyingTokenAddress: tokenMarket.underlyingTokenAddress, supplyRate: aprToApy(new Dec(tokenMarket.supplyRate.toString()).div(1e25).toString()), borrowRate: aprToApy(new Dec(tokenMarket.borrowRateVariable.toString()).div(1e25).toString()), borrowRateDiscounted: aprToApy(nativeAsset ? new Dec(tokenMarket.borrowRateVariable.toString()).div(1e25).mul(1 - parseFloat(discountRateOnBorrow)).toString() : '0'), borrowRateStable: aprToApy(new Dec(tokenMarket.borrowRateStable.toString()).div(1e25).toString()), collateralFactor: new Dec(tokenMarket.collateralFactor.toString()).div(10000).toString(), liquidationRatio: new Dec(tokenMarket.liquidationRatio.toString()).div(10000).toString(), marketLiquidity, utilization: new Dec(tokenMarket.totalBorrow.toString()).times(100).div(new Dec(tokenMarket.totalSupply.toString())).toString(), usageAsCollateralEnabled: tokenMarket.usageAsCollateralEnabled, supplyCap: tokenMarket.supplyCap, borrowCap, totalSupply: assetAmountInEth(tokenMarket.totalSupply.toString(), symbol), isInactive: !tokenMarket.isActive, isFrozen: tokenMarket.isFrozen, isPaused: tokenMarket.isPaused, canBeBorrowed: tokenMarket.isActive && !tokenMarket.isPaused && !tokenMarket.isFrozen && tokenMarket.borrowingEnabled && isBorrowAllowed, canBeSupplied: !nativeAsset && tokenMarket.isActive && !tokenMarket.isPaused && !tokenMarket.isFrozen, canBeWithdrawn: tokenMarket.isActive && !tokenMarket.isPaused, canBePayBacked: tokenMarket.isActive && !tokenMarket.isPaused, disabledStableBorrowing: !tokenMarket.stableBorrowRateEnabled, totalBorrow: assetAmountInEth(tokenMarket.totalBorrow.toString(), symbol), totalBorrowVar: assetAmountInEth(tokenMarket.totalBorrowVar.toString(), symbol), price: new Dec(tokenMarket.price.toString()).div(1e8).toString(), isolationModeBorrowingEnabled: tokenMarket.isolationModeBorrowingEnabled, isFlashLoanEnabled: tokenMarket.isFlashLoanEnabled, eModeCategoryData: {
156
156
  label: tokenMarket.label,
157
157
  liquidationBonus: new Dec(tokenMarket.liquidationBonus).div(10000).toString(),
158
158
  liquidationRatio: new Dec(tokenMarket.liquidationThreshold).div(10000).toString(),
@@ -348,7 +348,7 @@ export const getAaveV3AccountData = (web3, network, address, extractedState) =>
348
348
  if (nativeAsset && new Dec(borrowed).gt(0) && new Dec(stkAaveBalance).gt(0)) {
349
349
  discountRateOnBorrow = aaveV3CalculateDiscountRate(assetAmountInWei(borrowed, 'GHO'), assetAmountInWei(stkAaveBalance, 'stkAAVE'), assetsData[asset].discountData.discountRate, assetsData[asset].discountData.minDiscountTokenBalance, assetsData[asset].discountData.minGhoBalanceForDiscount, assetsData[asset].discountData.ghoDiscountedPerDiscountToken);
350
350
  }
351
- usedAssets[asset] = Object.assign(Object.assign({}, usedAssets[asset]), { symbol: asset, supplied, suppliedUsd: new Dec(supplied).mul(assetsData[asset].price).toString(), isSupplied, collateral: enabledAsCollateral, stableBorrowRate: new Dec(tokenInfo.stableBorrowRate).div(1e25).toString(), discountedBorrowRate: new Dec(assetsData[asset].borrowRate).mul(1 - parseFloat(discountRateOnBorrow)).toString(), borrowedStable,
351
+ usedAssets[asset] = Object.assign(Object.assign({}, usedAssets[asset]), { symbol: asset, supplied, suppliedUsd: new Dec(supplied).mul(assetsData[asset].price).toString(), isSupplied, collateral: enabledAsCollateral, stableBorrowRate: aprToApy(new Dec(tokenInfo.stableBorrowRate).div(1e25).toString()), discountedBorrowRate: aprToApy(new Dec(assetsData[asset].borrowRate).mul(1 - parseFloat(discountRateOnBorrow)).toString()), borrowedStable,
352
352
  borrowedVariable, borrowedUsdStable: new Dec(borrowedStable).mul(assetsData[asset].price).toString(), borrowedUsdVariable: new Dec(borrowedVariable).mul(assetsData[asset].price).toString(), borrowed, borrowedUsd: new Dec(new Dec(borrowedVariable).add(borrowedStable)).mul(assetsData[asset].price).toString(), isBorrowed, eModeCategory: assetsData[asset].eModeCategory, interestMode });
353
353
  }));
354
354
  payload.eModeCategory = +multicallRes[0][0];
@@ -9,4 +9,4 @@ export declare const isLeveragedPos: (usedAssets: MMUsedAssets, dustLimit?: numb
9
9
  leveragedType: string;
10
10
  leveragedAsset: string;
11
11
  };
12
- export declare const aprToApy: (interest: string | number, frequency?: number) => number;
12
+ export declare const aprToApy: (interest: string | number, frequency?: number) => string;
@@ -67,4 +67,4 @@ export const isLeveragedPos = (usedAssets, dustLimit = 5) => {
67
67
  leveragedAsset: '',
68
68
  };
69
69
  };
70
- export const aprToApy = (interest, frequency = BLOCKS_IN_A_YEAR) => (Math.pow((1 + (+interest / 100) / frequency), frequency) - 1) * 100; // eslint-disable-line
70
+ export const aprToApy = (interest, frequency = BLOCKS_IN_A_YEAR) => new Dec(interest).div(100).div(frequency).plus(1).pow(frequency).minus(1).times(100).toString();
@@ -13,7 +13,7 @@ import { wethToEthByAddress } from '../services/utils';
13
13
  import { getStETHApr } from '../staking';
14
14
  import { MorphoAaveV2ViewContract } from '../contracts';
15
15
  import { AaveVersions, } from '../types';
16
- import { calculateBorrowingAssetLimit } from '../moneymarket';
16
+ import { aprToApy, calculateBorrowingAssetLimit } from '../moneymarket';
17
17
  import { EMPTY_AAVE_DATA } from '../aaveV3';
18
18
  import { aaveAnyGetAggregatedPositionData } from '../helpers/aaveHelpers';
19
19
  import { getEthPrice } from '../services/priceService';
@@ -34,8 +34,8 @@ export const getMorphoAaveV2MarketsData = (web3, network, mainnetWeb3) => __awai
34
34
  const aaveInfo = aaveTokenInfo[index];
35
35
  const { symbol, address } = getAssetInfoByAddress(wethToEthByAddress(aaveInfo.underlyingTokenAddress));
36
36
  const morphoReward = (_a = morphoRewardsData === null || morphoRewardsData === void 0 ? void 0 : morphoRewardsData.markets) === null || _a === void 0 ? void 0 : _a[aaveInfo.aTokenAddress.toLowerCase()];
37
- const supplyRateP2P = new Dec(market.p2pSupplyRate).div(1e25).toString();
38
- const borrowRateP2P = new Dec(market.p2pBorrowRate).div(1e25).toString();
37
+ const supplyRateP2P = aprToApy(new Dec(market.p2pSupplyRate).div(1e25).toString());
38
+ const borrowRateP2P = aprToApy(new Dec(market.p2pBorrowRate).div(1e25).toString());
39
39
  const hasDelta = new Dec(borrowRateP2P).minus(supplyRateP2P).gte(0.3);
40
40
  return {
41
41
  symbol,
@@ -44,9 +44,9 @@ export const getMorphoAaveV2MarketsData = (web3, network, mainnetWeb3) => __awai
44
44
  underlyingTokenAddress: address,
45
45
  priceInEth: new Dec(aaveInfo.price).div(1e18).toString(),
46
46
  price: new Dec(aaveInfo.price).div(1e18).times(ethPrice).toString(),
47
- supplyRate: new Dec(market.poolSupplyRate).div(1e25).toString(),
47
+ supplyRate: aprToApy(new Dec(market.poolSupplyRate).div(1e25).toString()),
48
48
  supplyRateP2P,
49
- borrowRate: new Dec(market.poolBorrowRate).div(1e25).toString(),
49
+ borrowRate: aprToApy(new Dec(market.poolBorrowRate).div(1e25).toString()),
50
50
  borrowRateP2P,
51
51
  totalSupply: assetAmountInEth(aaveInfo.totalSupply, symbol),
52
52
  totalBorrow: assetAmountInEth(aaveInfo.totalBorrow, symbol),
@@ -170,8 +170,8 @@ export const getMorphoAaveV2AccountData = (web3, network, address, assetsData) =
170
170
  borrowedUsdVariable: borrowedUsd,
171
171
  isSupplied: new Dec(supplied).gt(0),
172
172
  isBorrowed: new Dec(borrowed).gt(0),
173
- supplyRate: new Dec(market.userSupplyRate).div(1e25).toString(),
174
- borrowRate: new Dec(market.userBorrowRate).div(1e25).toString(),
173
+ supplyRate: aprToApy(new Dec(market.userSupplyRate).div(1e25).toString()),
174
+ borrowRate: aprToApy(new Dec(market.userBorrowRate).div(1e25).toString()),
175
175
  limit: '0',
176
176
  collateral: true,
177
177
  eModeCategory: 0,
@@ -18,7 +18,7 @@ import { createContractWrapper, getConfigContractAbi, getConfigContractAddress,
18
18
  import { multicall } from '../multicall';
19
19
  import { getCbETHApr, getREthApr, getStETHApr } from '../staking';
20
20
  import { getDsrApy } from '../services/dsrService';
21
- import { calculateBorrowingAssetLimit } from '../moneymarket';
21
+ import { aprToApy, calculateBorrowingAssetLimit } from '../moneymarket';
22
22
  import { EMPTY_AAVE_DATA } from '../aaveV3';
23
23
  import { aaveAnyGetAggregatedPositionData } from '../helpers/aaveHelpers';
24
24
  import { MORPHO_AAVE_V3_ETH } from '../markets/aave';
@@ -141,9 +141,9 @@ export const getMorphoAaveV3MarketsData = (web3, network, selectedMarket, mainne
141
141
  aTokenAddress: marketData.aTokenAddress,
142
142
  underlyingTokenAddress: address,
143
143
  price: new Dec(marketData.price.toString()).div(1e8).toString(),
144
- supplyRate: new Dec(marketData.supplyRate.toString()).div(1e25).toString(),
144
+ supplyRate: aprToApy(new Dec(marketData.supplyRate.toString()).div(1e25).toString()),
145
145
  supplyRateP2P: marketData.p2pSupplyAPY,
146
- borrowRate: new Dec(marketData.borrowRateVariable.toString()).div(1e25).toString(),
146
+ borrowRate: aprToApy(new Dec(marketData.borrowRateVariable.toString()).div(1e25).toString()),
147
147
  borrowRateP2P: marketData.p2pBorrowAPY,
148
148
  totalSupply: assetAmountInEth(marketData.totalSupply.toString(), symbol),
149
149
  totalBorrow: assetAmountInEth(marketData.totalBorrow.toString(), symbol),
@@ -15,7 +15,7 @@ import { getDsrApy } from '../services/dsrService';
15
15
  import { SparkIncentiveDataProviderContract, SparkViewContract, getConfigContractAbi, createContractWrapper, } from '../contracts';
16
16
  import { multicall } from '../multicall';
17
17
  import { sparkGetAggregatedPositionData, sparkIsInIsolationMode } from '../helpers/sparkHelpers';
18
- import { calculateBorrowingAssetLimit } from '../moneymarket';
18
+ import { aprToApy, calculateBorrowingAssetLimit } from '../moneymarket';
19
19
  import { SPARK_V1 } from '../markets/spark';
20
20
  export const sparkEmodeCategoriesMapping = (extractedState, usedAssets) => {
21
21
  const { assetsData } = extractedState;
@@ -82,9 +82,9 @@ export const getSparkMarketsData = (web3, network, selectedMarket, mainnetWeb3)
82
82
  isolationModeTotalDebt: new Dec(market.isolationModeTotalDebt).div(100).toString(),
83
83
  assetId: Number(market.assetId),
84
84
  underlyingTokenAddress: market.underlyingTokenAddress,
85
- supplyRate: new Dec(market.supplyRate.toString()).div(1e25).toString(),
86
- borrowRate: new Dec(market.borrowRateVariable.toString()).div(1e25).toString(),
87
- borrowRateStable: new Dec(market.borrowRateStable.toString()).div(1e25).toString(),
85
+ supplyRate: aprToApy(new Dec(market.supplyRate.toString()).div(1e25).toString()),
86
+ borrowRate: aprToApy(new Dec(market.borrowRateVariable.toString()).div(1e25).toString()),
87
+ borrowRateStable: aprToApy(new Dec(market.borrowRateStable.toString()).div(1e25).toString()),
88
88
  collateralFactor: new Dec(market.collateralFactor.toString()).div(10000).toString(),
89
89
  liquidationRatio: new Dec(market.liquidationRatio.toString()).div(10000).toString(),
90
90
  marketLiquidity,
@@ -302,7 +302,7 @@ export const getSparkAccountData = (web3, network, address, extractedState) => _
302
302
  }
303
303
  if (!usedAssets[asset])
304
304
  usedAssets[asset] = {};
305
- usedAssets[asset] = Object.assign(Object.assign({}, usedAssets[asset]), { symbol: asset, supplied, suppliedUsd: new Dec(supplied).mul(assetsData[asset].price).toString(), isSupplied, collateral: enabledAsCollateral, stableBorrowRate: new Dec(tokenInfo.stableBorrowRate).div(1e25).toString(), borrowedStable,
305
+ usedAssets[asset] = Object.assign(Object.assign({}, usedAssets[asset]), { symbol: asset, supplied, suppliedUsd: new Dec(supplied).mul(assetsData[asset].price).toString(), isSupplied, collateral: enabledAsCollateral, stableBorrowRate: aprToApy(new Dec(tokenInfo.stableBorrowRate).div(1e25).toString()), borrowedStable,
306
306
  borrowedVariable, borrowedUsdStable: new Dec(borrowedStable).mul(assetsData[asset].price).toString(), borrowedUsdVariable: new Dec(borrowedVariable).mul(assetsData[asset].price).toString(), borrowed: new Dec(borrowedStable).add(borrowedVariable).toString(), borrowedUsd: new Dec(new Dec(borrowedVariable).add(borrowedStable)).mul(assetsData[asset].price).toString(), isBorrowed, eModeCategory: assetsData[asset].eModeCategory, interestMode });
307
307
  });
308
308
  payload.eModeCategory = +multicallRes[0][0];
@@ -4,7 +4,6 @@ export declare const getStETHApr: (web3: Web3, fromBlock?: number, blockNumber?:
4
4
  export declare const getCbETHApr: (web3: Web3, blockNumber?: 'latest' | number) => Promise<string>;
5
5
  export declare const getREthApr: (web3: Web3, blockNumber?: 'latest' | number) => Promise<string>;
6
6
  export declare const getDsrApy: (web3: Web3, blockNumber?: 'latest' | number) => Promise<string>;
7
- export declare const getSUSDeApy: () => Promise<any>;
8
7
  export declare const STAKING_ASSETS: string[];
9
8
  export declare const getStakingApy: (asset: string, web3: Web3, blockNumber?: 'latest' | number, fromBlock?: number | undefined) => Promise<any> | "0" | undefined;
10
9
  export declare const calculateInterestEarned: (principal: string, interest: string, type: string, apy?: boolean) => number;
@@ -8,7 +8,6 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
8
8
  });
9
9
  };
10
10
  import Dec from 'decimal.js';
11
- import { StakeWiseSDK, Network } from '@stakewise/v3-sdk';
12
11
  import { CbEthContract, LidoContract, PotContract, REthContract, wstETHContract, } from '../contracts';
13
12
  import { NetworkNumber } from '../types/common';
14
13
  import { BLOCKS_IN_A_YEAR, SECONDS_PER_YEAR, AVG_BLOCK_TIME } from '../constants';
@@ -77,22 +76,12 @@ export const getDsrApy = (web3, blockNumber = 'latest') => __awaiter(void 0, voi
77
76
  .mul(100)
78
77
  .toString();
79
78
  });
80
- export const getSUSDeApy = () => __awaiter(void 0, void 0, void 0, function* () {
81
- const res = yield fetch('https://app.defisaver.com/api/staking/apy?asset=sUSDe');
79
+ const getApyFromDfsApi = (asset) => __awaiter(void 0, void 0, void 0, function* () {
80
+ const res = yield fetch(`https://app.defisaver.com/api/staking/apy?asset=${asset}`);
82
81
  const data = yield res.json();
83
82
  return data.apy;
84
83
  });
85
- const getWeEthApr = () => __awaiter(void 0, void 0, void 0, function* () {
86
- const res = yield fetch('https://app.defisaver.com/api/staking/apy?asset=weETH');
87
- const data = yield res.json();
88
- return data.apy;
89
- });
90
- const getOsETHApy = () => __awaiter(void 0, void 0, void 0, function* () {
91
- const sdk = new StakeWiseSDK({ network: Network.Mainnet });
92
- const apy = yield sdk.osToken.getAPY();
93
- return apy;
94
- });
95
- export const STAKING_ASSETS = ['cbETH', 'wstETH', 'cbETH', 'rETH', 'sDAI', 'weETH', 'sUSDe', 'osETH'];
84
+ export const STAKING_ASSETS = ['cbETH', 'wstETH', 'cbETH', 'rETH', 'sDAI', 'weETH', 'sUSDe', 'osETH', 'ezETH'];
96
85
  export const getStakingApy = (asset, web3, blockNumber = 'latest', fromBlock = undefined) => {
97
86
  try {
98
87
  if (asset === 'stETH' || asset === 'wstETH')
@@ -104,11 +93,13 @@ export const getStakingApy = (asset, web3, blockNumber = 'latest', fromBlock = u
104
93
  if (asset === 'sDAI')
105
94
  return getDsrApy(web3);
106
95
  if (asset === 'sUSDe')
107
- return getSUSDeApy();
96
+ return getApyFromDfsApi('sUSDe');
108
97
  if (asset === 'weETH')
109
- return getWeEthApr();
98
+ return getApyFromDfsApi('weETH');
99
+ if (asset === 'ezETH')
100
+ return getApyFromDfsApi('ezETH');
110
101
  if (asset === 'osETH')
111
- return getOsETHApy();
102
+ return getApyFromDfsApi('osETH');
112
103
  }
113
104
  catch (e) {
114
105
  console.error(`Failed to fetch APY for ${asset}`);