@defisaver/positions-sdk 0.0.83 → 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 (39) 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/cjs/aaveV2/index.js +4 -4
  5. package/cjs/aaveV3/index.js +2 -2
  6. package/cjs/markets/morphoBlue/index.d.ts +2 -0
  7. package/cjs/markets/morphoBlue/index.js +18 -1
  8. package/cjs/moneymarket/moneymarketCommonService.d.ts +1 -1
  9. package/cjs/moneymarket/moneymarketCommonService.js +1 -1
  10. package/cjs/morphoAaveV2/index.js +6 -6
  11. package/cjs/morphoAaveV3/index.js +2 -2
  12. package/cjs/spark/index.js +4 -4
  13. package/cjs/staking/staking.d.ts +0 -1
  14. package/cjs/staking/staking.js +9 -19
  15. package/cjs/types/morphoBlue.d.ts +1 -0
  16. package/cjs/types/morphoBlue.js +1 -0
  17. package/esm/aaveV2/index.js +5 -5
  18. package/esm/aaveV3/index.js +3 -3
  19. package/esm/markets/morphoBlue/index.d.ts +2 -0
  20. package/esm/markets/morphoBlue/index.js +16 -0
  21. package/esm/moneymarket/moneymarketCommonService.d.ts +1 -1
  22. package/esm/moneymarket/moneymarketCommonService.js +1 -1
  23. package/esm/morphoAaveV2/index.js +7 -7
  24. package/esm/morphoAaveV3/index.js +3 -3
  25. package/esm/spark/index.js +5 -5
  26. package/esm/staking/staking.d.ts +0 -1
  27. package/esm/staking/staking.js +8 -17
  28. package/esm/types/morphoBlue.d.ts +1 -0
  29. package/esm/types/morphoBlue.js +1 -0
  30. package/package.json +1 -2
  31. package/src/aaveV2/index.ts +5 -5
  32. package/src/aaveV3/index.ts +7 -8
  33. package/src/markets/morphoBlue/index.ts +16 -0
  34. package/src/moneymarket/moneymarketCommonService.ts +1 -1
  35. package/src/morphoAaveV2/index.ts +7 -7
  36. package/src/morphoAaveV3/index.ts +4 -4
  37. package/src/spark/index.ts +6 -6
  38. package/src/staking/staking.ts +8 -20
  39. package/src/types/morphoBlue.ts +1 -0
package/.yarnrc.yml ADDED
@@ -0,0 +1 @@
1
+ yarnPath: .yarn/releases/yarn-1.22.1.cjs
@@ -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];
@@ -15,6 +15,7 @@ export declare const MORPHO_BLUE_USDE_USDT: (networkId?: NetworkNumber) => Morph
15
15
  export declare const MORPHO_BLUE_SUSDE_USDT: (networkId?: NetworkNumber) => MorphoBlueMarketData;
16
16
  export declare const MORPHO_BLUE_SDAI_ETH: (networkId?: NetworkNumber) => MorphoBlueMarketData;
17
17
  export declare const MORPHO_BLUE_EZETH_ETH: (networkId?: NetworkNumber) => MorphoBlueMarketData;
18
+ export declare const MORPHO_BLUE_MKR_USDC: (networkId?: NetworkNumber) => MorphoBlueMarketData;
18
19
  export declare const MORPHO_BLUE_WSTETH_ETH_945: (networkId?: NetworkNumber) => MorphoBlueMarketData;
19
20
  export declare const MORPHO_BLUE_WSTETH_ETH_945_EXCHANGE_RATE: (networkId?: NetworkNumber) => MorphoBlueMarketData;
20
21
  export declare const MORPHO_BLUE_WSTETH_ETH_965_EXCHANGE_RATE: (networkId?: NetworkNumber) => MorphoBlueMarketData;
@@ -43,6 +44,7 @@ export declare const MorphoBlueMarkets: (networkId: NetworkNumber) => {
43
44
  readonly morphobluesusdeusdt: MorphoBlueMarketData;
44
45
  readonly morphobluesdaieth: MorphoBlueMarketData;
45
46
  readonly morphoblueezetheth: MorphoBlueMarketData;
47
+ readonly morphobluemkrusdc: MorphoBlueMarketData;
46
48
  readonly morphobluewstetheth_945: MorphoBlueMarketData;
47
49
  readonly morphobluewstetheth_945_exchange_rate: MorphoBlueMarketData;
48
50
  readonly morphobluewstetheth_965_exchange_rate: MorphoBlueMarketData;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.findMorphoBlueMarket = exports.MorphoBlueMarkets = exports.MORPHO_BLUE_CBETH_USDC_860_BASE = exports.MORPHO_BLUE_USDE_DAI_945 = exports.MORPHO_BLUE_USDE_DAI_915 = exports.MORPHO_BLUE_USDE_DAI_860 = exports.MORPHO_BLUE_USDE_DAI_770 = exports.MORPHO_BLUE_SUSDE_DAI_945 = exports.MORPHO_BLUE_SUSDE_DAI_915 = exports.MORPHO_BLUE_SUSDE_DAI_860 = exports.MORPHO_BLUE_SUSDE_DAI_770 = exports.MORPHO_BLUE_WSTETH_ETH_965_EXCHANGE_RATE = exports.MORPHO_BLUE_WSTETH_ETH_945_EXCHANGE_RATE = exports.MORPHO_BLUE_WSTETH_ETH_945 = exports.MORPHO_BLUE_EZETH_ETH = exports.MORPHO_BLUE_SDAI_ETH = exports.MORPHO_BLUE_SUSDE_USDT = exports.MORPHO_BLUE_USDE_USDT = exports.MORPHO_BLUE_WEETH_ETH = exports.MORPHO_BLUE_WSTETH_PYUSD = exports.MORPHO_BLUE_WSTETH_USDA_EXCHANGE_RATE = exports.MORPHO_BLUE_WSTETH_USDT = exports.MORPHO_BLUE_WBTC_ETH = exports.MORPHO_BLUE_WBTC_PYUSD = exports.MORPHO_BLUE_WBTC_USDT = exports.MORPHO_BLUE_ETH_USDC = exports.MORPHO_BLUE_WBTC_USDC = exports.MORPHO_BLUE_SDAI_USDC = exports.MORPHO_BLUE_WSTETH_USDC = void 0;
3
+ exports.findMorphoBlueMarket = exports.MorphoBlueMarkets = exports.MORPHO_BLUE_CBETH_USDC_860_BASE = exports.MORPHO_BLUE_USDE_DAI_945 = exports.MORPHO_BLUE_USDE_DAI_915 = exports.MORPHO_BLUE_USDE_DAI_860 = exports.MORPHO_BLUE_USDE_DAI_770 = exports.MORPHO_BLUE_SUSDE_DAI_945 = exports.MORPHO_BLUE_SUSDE_DAI_915 = exports.MORPHO_BLUE_SUSDE_DAI_860 = exports.MORPHO_BLUE_SUSDE_DAI_770 = exports.MORPHO_BLUE_WSTETH_ETH_965_EXCHANGE_RATE = exports.MORPHO_BLUE_WSTETH_ETH_945_EXCHANGE_RATE = exports.MORPHO_BLUE_WSTETH_ETH_945 = exports.MORPHO_BLUE_MKR_USDC = exports.MORPHO_BLUE_EZETH_ETH = exports.MORPHO_BLUE_SDAI_ETH = exports.MORPHO_BLUE_SUSDE_USDT = exports.MORPHO_BLUE_USDE_USDT = exports.MORPHO_BLUE_WEETH_ETH = exports.MORPHO_BLUE_WSTETH_PYUSD = exports.MORPHO_BLUE_WSTETH_USDA_EXCHANGE_RATE = exports.MORPHO_BLUE_WSTETH_USDT = exports.MORPHO_BLUE_WBTC_ETH = exports.MORPHO_BLUE_WBTC_PYUSD = exports.MORPHO_BLUE_WBTC_USDT = exports.MORPHO_BLUE_ETH_USDC = exports.MORPHO_BLUE_WBTC_USDC = exports.MORPHO_BLUE_SDAI_USDC = exports.MORPHO_BLUE_WSTETH_USDC = void 0;
4
4
  const utils_1 = require("../../services/utils");
5
5
  const types_1 = require("../../types");
6
6
  const common_1 = require("../../types/common");
@@ -244,6 +244,22 @@ const MORPHO_BLUE_EZETH_ETH = (networkId = common_1.NetworkNumber.Eth) => ({
244
244
  protocolName: 'morpho-blue',
245
245
  });
246
246
  exports.MORPHO_BLUE_EZETH_ETH = MORPHO_BLUE_EZETH_ETH;
247
+ const MORPHO_BLUE_MKR_USDC = (networkId = common_1.NetworkNumber.Eth) => ({
248
+ chainIds: [1],
249
+ label: 'Morpho Blue',
250
+ shortLabel: 'MKR/USDC',
251
+ value: types_1.MorphoBlueVersions.MorphoBlueMKRUSDC,
252
+ url: 'mkrusdc',
253
+ loanToken: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48',
254
+ collateralToken: '0x9f8F72aA9304c8B593d555F12eF6589cC3A579A2',
255
+ oracle: '0x6686788B4315A4F93d822c1Bf73910556FCe2d5a',
256
+ oracleType: types_1.MorphoBlueOracleType.MARKET_RATE,
257
+ irm: '0x870aC11D48B15DB9a138Cf899d20F13F79Ba00BC',
258
+ lltv: 0.77,
259
+ marketId: '0x97bb820669a19ba5fa6de964a466292edd67957849f9631eb8b830c382f58b7f',
260
+ protocolName: 'morpho-blue',
261
+ });
262
+ exports.MORPHO_BLUE_MKR_USDC = MORPHO_BLUE_MKR_USDC;
247
263
  // wstETH/WETH
248
264
  const MORPHO_BLUE_WSTETH_ETH_945 = (networkId = common_1.NetworkNumber.Eth) => ({
249
265
  chainIds: [1],
@@ -456,6 +472,7 @@ const MorphoBlueMarkets = (networkId) => ({
456
472
  [types_1.MorphoBlueVersions.MorphoBlueSUSDeUSDT]: (0, exports.MORPHO_BLUE_SUSDE_USDT)(networkId),
457
473
  [types_1.MorphoBlueVersions.MorphoBlueSDAIEth]: (0, exports.MORPHO_BLUE_SDAI_ETH)(networkId),
458
474
  [types_1.MorphoBlueVersions.MorphoBlueEzEthEth]: (0, exports.MORPHO_BLUE_EZETH_ETH)(networkId),
475
+ [types_1.MorphoBlueVersions.MorphoBlueMKRUSDC]: (0, exports.MORPHO_BLUE_MKR_USDC)(networkId),
459
476
  // wstETH/WETH
460
477
  [types_1.MorphoBlueVersions.MorphoBlueWstEthEth_945]: (0, exports.MORPHO_BLUE_WSTETH_ETH_945)(networkId),
461
478
  [types_1.MorphoBlueVersions.MorphoBlueWstEthEth_945_Exchange_Rate]: (0, exports.MORPHO_BLUE_WSTETH_ETH_945_EXCHANGE_RATE)(networkId),
@@ -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}`);
@@ -15,6 +15,7 @@ export declare enum MorphoBlueVersions {
15
15
  MorphoBlueSUSDeUSDT = "morphobluesusdeusdt",
16
16
  MorphoBlueSDAIEth = "morphobluesdaieth",
17
17
  MorphoBlueEzEthEth = "morphoblueezetheth",
18
+ MorphoBlueMKRUSDC = "morphobluemkrusdc",
18
19
  MorphoBlueWstEthEth_945 = "morphobluewstetheth_945",
19
20
  MorphoBlueWstEthEth_945_Exchange_Rate = "morphobluewstetheth_945_exchange_rate",
20
21
  MorphoBlueWstEthEth_965_Exchange_Rate = "morphobluewstetheth_965_exchange_rate",
@@ -19,6 +19,7 @@ var MorphoBlueVersions;
19
19
  MorphoBlueVersions["MorphoBlueSUSDeUSDT"] = "morphobluesusdeusdt";
20
20
  MorphoBlueVersions["MorphoBlueSDAIEth"] = "morphobluesdaieth";
21
21
  MorphoBlueVersions["MorphoBlueEzEthEth"] = "morphoblueezetheth";
22
+ MorphoBlueVersions["MorphoBlueMKRUSDC"] = "morphobluemkrusdc";
22
23
  // wstETH/WETH
23
24
  MorphoBlueVersions["MorphoBlueWstEthEth_945"] = "morphobluewstetheth_945";
24
25
  MorphoBlueVersions["MorphoBlueWstEthEth_945_Exchange_Rate"] = "morphobluewstetheth_945_exchange_rate";
@@ -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];
@@ -15,6 +15,7 @@ export declare const MORPHO_BLUE_USDE_USDT: (networkId?: NetworkNumber) => Morph
15
15
  export declare const MORPHO_BLUE_SUSDE_USDT: (networkId?: NetworkNumber) => MorphoBlueMarketData;
16
16
  export declare const MORPHO_BLUE_SDAI_ETH: (networkId?: NetworkNumber) => MorphoBlueMarketData;
17
17
  export declare const MORPHO_BLUE_EZETH_ETH: (networkId?: NetworkNumber) => MorphoBlueMarketData;
18
+ export declare const MORPHO_BLUE_MKR_USDC: (networkId?: NetworkNumber) => MorphoBlueMarketData;
18
19
  export declare const MORPHO_BLUE_WSTETH_ETH_945: (networkId?: NetworkNumber) => MorphoBlueMarketData;
19
20
  export declare const MORPHO_BLUE_WSTETH_ETH_945_EXCHANGE_RATE: (networkId?: NetworkNumber) => MorphoBlueMarketData;
20
21
  export declare const MORPHO_BLUE_WSTETH_ETH_965_EXCHANGE_RATE: (networkId?: NetworkNumber) => MorphoBlueMarketData;
@@ -43,6 +44,7 @@ export declare const MorphoBlueMarkets: (networkId: NetworkNumber) => {
43
44
  readonly morphobluesusdeusdt: MorphoBlueMarketData;
44
45
  readonly morphobluesdaieth: MorphoBlueMarketData;
45
46
  readonly morphoblueezetheth: MorphoBlueMarketData;
47
+ readonly morphobluemkrusdc: MorphoBlueMarketData;
46
48
  readonly morphobluewstetheth_945: MorphoBlueMarketData;
47
49
  readonly morphobluewstetheth_945_exchange_rate: MorphoBlueMarketData;
48
50
  readonly morphobluewstetheth_965_exchange_rate: MorphoBlueMarketData;
@@ -226,6 +226,21 @@ export const MORPHO_BLUE_EZETH_ETH = (networkId = NetworkNumber.Eth) => ({
226
226
  marketId: '0x49bb2d114be9041a787432952927f6f144f05ad3e83196a7d062f374ee11d0ee',
227
227
  protocolName: 'morpho-blue',
228
228
  });
229
+ export const MORPHO_BLUE_MKR_USDC = (networkId = NetworkNumber.Eth) => ({
230
+ chainIds: [1],
231
+ label: 'Morpho Blue',
232
+ shortLabel: 'MKR/USDC',
233
+ value: MorphoBlueVersions.MorphoBlueMKRUSDC,
234
+ url: 'mkrusdc',
235
+ loanToken: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48',
236
+ collateralToken: '0x9f8F72aA9304c8B593d555F12eF6589cC3A579A2',
237
+ oracle: '0x6686788B4315A4F93d822c1Bf73910556FCe2d5a',
238
+ oracleType: MorphoBlueOracleType.MARKET_RATE,
239
+ irm: '0x870aC11D48B15DB9a138Cf899d20F13F79Ba00BC',
240
+ lltv: 0.77,
241
+ marketId: '0x97bb820669a19ba5fa6de964a466292edd67957849f9631eb8b830c382f58b7f',
242
+ protocolName: 'morpho-blue',
243
+ });
229
244
  // wstETH/WETH
230
245
  export const MORPHO_BLUE_WSTETH_ETH_945 = (networkId = NetworkNumber.Eth) => ({
231
246
  chainIds: [1],
@@ -426,6 +441,7 @@ export const MorphoBlueMarkets = (networkId) => ({
426
441
  [MorphoBlueVersions.MorphoBlueSUSDeUSDT]: MORPHO_BLUE_SUSDE_USDT(networkId),
427
442
  [MorphoBlueVersions.MorphoBlueSDAIEth]: MORPHO_BLUE_SDAI_ETH(networkId),
428
443
  [MorphoBlueVersions.MorphoBlueEzEthEth]: MORPHO_BLUE_EZETH_ETH(networkId),
444
+ [MorphoBlueVersions.MorphoBlueMKRUSDC]: MORPHO_BLUE_MKR_USDC(networkId),
429
445
  // wstETH/WETH
430
446
  [MorphoBlueVersions.MorphoBlueWstEthEth_945]: MORPHO_BLUE_WSTETH_ETH_945(networkId),
431
447
  [MorphoBlueVersions.MorphoBlueWstEthEth_945_Exchange_Rate]: MORPHO_BLUE_WSTETH_ETH_945_EXCHANGE_RATE(networkId),
@@ -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}`);
@@ -15,6 +15,7 @@ export declare enum MorphoBlueVersions {
15
15
  MorphoBlueSUSDeUSDT = "morphobluesusdeusdt",
16
16
  MorphoBlueSDAIEth = "morphobluesdaieth",
17
17
  MorphoBlueEzEthEth = "morphoblueezetheth",
18
+ MorphoBlueMKRUSDC = "morphobluemkrusdc",
18
19
  MorphoBlueWstEthEth_945 = "morphobluewstetheth_945",
19
20
  MorphoBlueWstEthEth_945_Exchange_Rate = "morphobluewstetheth_945_exchange_rate",
20
21
  MorphoBlueWstEthEth_965_Exchange_Rate = "morphobluewstetheth_965_exchange_rate",
@@ -16,6 +16,7 @@ export var MorphoBlueVersions;
16
16
  MorphoBlueVersions["MorphoBlueSUSDeUSDT"] = "morphobluesusdeusdt";
17
17
  MorphoBlueVersions["MorphoBlueSDAIEth"] = "morphobluesdaieth";
18
18
  MorphoBlueVersions["MorphoBlueEzEthEth"] = "morphoblueezetheth";
19
+ MorphoBlueVersions["MorphoBlueMKRUSDC"] = "morphobluemkrusdc";
19
20
  // wstETH/WETH
20
21
  MorphoBlueVersions["MorphoBlueWstEthEth_945"] = "morphobluewstetheth_945";
21
22
  MorphoBlueVersions["MorphoBlueWstEthEth_945_Exchange_Rate"] = "morphobluewstetheth_945_exchange_rate";