@defisaver/positions-sdk 0.0.84 → 0.0.86

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 (36) hide show
  1. package/cjs/aaveV2/index.js +4 -4
  2. package/cjs/aaveV3/index.js +2 -2
  3. package/cjs/markets/morphoBlue/index.d.ts +10 -0
  4. package/cjs/markets/morphoBlue/index.js +95 -9
  5. package/cjs/moneymarket/moneymarketCommonService.d.ts +1 -1
  6. package/cjs/moneymarket/moneymarketCommonService.js +1 -1
  7. package/cjs/morphoAaveV2/index.js +6 -6
  8. package/cjs/morphoAaveV3/index.js +2 -2
  9. package/cjs/spark/index.js +4 -4
  10. package/cjs/staking/staking.d.ts +0 -1
  11. package/cjs/staking/staking.js +9 -19
  12. package/cjs/types/morphoBlue.d.ts +8 -2
  13. package/cjs/types/morphoBlue.js +6 -0
  14. package/esm/aaveV2/index.js +5 -5
  15. package/esm/aaveV3/index.js +3 -3
  16. package/esm/markets/morphoBlue/index.d.ts +10 -0
  17. package/esm/markets/morphoBlue/index.js +89 -8
  18. package/esm/moneymarket/moneymarketCommonService.d.ts +1 -1
  19. package/esm/moneymarket/moneymarketCommonService.js +1 -1
  20. package/esm/morphoAaveV2/index.js +7 -7
  21. package/esm/morphoAaveV3/index.js +3 -3
  22. package/esm/spark/index.js +5 -5
  23. package/esm/staking/staking.d.ts +0 -1
  24. package/esm/staking/staking.js +8 -17
  25. package/esm/types/morphoBlue.d.ts +8 -2
  26. package/esm/types/morphoBlue.js +6 -0
  27. package/package.json +1 -2
  28. package/src/aaveV2/index.ts +5 -5
  29. package/src/aaveV3/index.ts +7 -8
  30. package/src/markets/morphoBlue/index.ts +89 -8
  31. package/src/moneymarket/moneymarketCommonService.ts +1 -1
  32. package/src/morphoAaveV2/index.ts +7 -7
  33. package/src/morphoAaveV3/index.ts +4 -4
  34. package/src/spark/index.ts +6 -6
  35. package/src/staking/staking.ts +8 -20
  36. package/src/types/morphoBlue.ts +6 -0
@@ -297,7 +297,7 @@ export const MORPHO_BLUE_SUSDE_DAI_770 = (networkId = NetworkNumber.Eth) => ({
297
297
  loanToken: '0x6B175474E89094C44Da98b954EedeAC495271d0F',
298
298
  collateralToken: '0x9D39A5DE30e57443BfF2A8307A4256c8797A3497',
299
299
  oracle: '0x5D916980D5Ae1737a8330Bf24dF812b2911Aae25',
300
- oracleType: MorphoBlueOracleType.MARKET_RATE,
300
+ oracleType: MorphoBlueOracleType.ETHENA_RATE,
301
301
  irm: '0x870aC11D48B15DB9a138Cf899d20F13F79Ba00BC',
302
302
  lltv: 0.77,
303
303
  marketId: '0x42dcfb38bb98767afb6e38ccf90d59d0d3f0aa216beb3a234f12850323d17536',
@@ -312,7 +312,7 @@ export const MORPHO_BLUE_SUSDE_DAI_860 = (networkId = NetworkNumber.Eth) => ({
312
312
  loanToken: '0x6B175474E89094C44Da98b954EedeAC495271d0F',
313
313
  collateralToken: '0x9D39A5DE30e57443BfF2A8307A4256c8797A3497',
314
314
  oracle: '0x5D916980D5Ae1737a8330Bf24dF812b2911Aae25',
315
- oracleType: MorphoBlueOracleType.MARKET_RATE,
315
+ oracleType: MorphoBlueOracleType.ETHENA_RATE,
316
316
  irm: '0x870aC11D48B15DB9a138Cf899d20F13F79Ba00BC',
317
317
  lltv: 0.86,
318
318
  marketId: '0x39d11026eae1c6ec02aa4c0910778664089cdd97c3fd23f68f7cd05e2e95af48',
@@ -327,7 +327,7 @@ export const MORPHO_BLUE_SUSDE_DAI_915 = (networkId = NetworkNumber.Eth) => ({
327
327
  loanToken: '0x6B175474E89094C44Da98b954EedeAC495271d0F',
328
328
  collateralToken: '0x9D39A5DE30e57443BfF2A8307A4256c8797A3497',
329
329
  oracle: '0x5D916980D5Ae1737a8330Bf24dF812b2911Aae25',
330
- oracleType: MorphoBlueOracleType.MARKET_RATE,
330
+ oracleType: MorphoBlueOracleType.ETHENA_RATE,
331
331
  irm: '0x870aC11D48B15DB9a138Cf899d20F13F79Ba00BC',
332
332
  lltv: 0.915,
333
333
  marketId: '0x1247f1c237eceae0602eab1470a5061a6dd8f734ba88c7cdc5d6109fb0026b28',
@@ -342,7 +342,7 @@ export const MORPHO_BLUE_SUSDE_DAI_945 = (networkId = NetworkNumber.Eth) => ({
342
342
  loanToken: '0x6B175474E89094C44Da98b954EedeAC495271d0F',
343
343
  collateralToken: '0x9D39A5DE30e57443BfF2A8307A4256c8797A3497',
344
344
  oracle: '0x5D916980D5Ae1737a8330Bf24dF812b2911Aae25',
345
- oracleType: MorphoBlueOracleType.MARKET_RATE,
345
+ oracleType: MorphoBlueOracleType.ETHENA_RATE,
346
346
  irm: '0x870aC11D48B15DB9a138Cf899d20F13F79Ba00BC',
347
347
  lltv: 0.945,
348
348
  marketId: '0xe475337d11be1db07f7c5a156e511f05d1844308e66e17d2ba5da0839d3b34d9',
@@ -358,7 +358,7 @@ export const MORPHO_BLUE_USDE_DAI_770 = (networkId = NetworkNumber.Eth) => ({
358
358
  loanToken: '0x6B175474E89094C44Da98b954EedeAC495271d0F',
359
359
  collateralToken: '0x4c9EDD5852cd905f086C759E8383e09bff1E68B3',
360
360
  oracle: '0xaE4750d0813B5E37A51f7629beedd72AF1f9cA35',
361
- oracleType: MorphoBlueOracleType.MARKET_RATE,
361
+ oracleType: MorphoBlueOracleType.ETHENA_RATE,
362
362
  irm: '0x870aC11D48B15DB9a138Cf899d20F13F79Ba00BC',
363
363
  lltv: 0.77,
364
364
  marketId: '0xfd8493f09eb6203615221378d89f53fcd92ff4f7d62cca87eece9a2fff59e86f',
@@ -373,7 +373,7 @@ export const MORPHO_BLUE_USDE_DAI_860 = (networkId = NetworkNumber.Eth) => ({
373
373
  loanToken: '0x6B175474E89094C44Da98b954EedeAC495271d0F',
374
374
  collateralToken: '0x4c9EDD5852cd905f086C759E8383e09bff1E68B3',
375
375
  oracle: '0xaE4750d0813B5E37A51f7629beedd72AF1f9cA35',
376
- oracleType: MorphoBlueOracleType.MARKET_RATE,
376
+ oracleType: MorphoBlueOracleType.ETHENA_RATE,
377
377
  irm: '0x870aC11D48B15DB9a138Cf899d20F13F79Ba00BC',
378
378
  lltv: 0.86,
379
379
  marketId: '0xc581c5f70bd1afa283eed57d1418c6432cbff1d862f94eaf58fdd4e46afbb67f',
@@ -388,7 +388,7 @@ export const MORPHO_BLUE_USDE_DAI_915 = (networkId = NetworkNumber.Eth) => ({
388
388
  loanToken: '0x6B175474E89094C44Da98b954EedeAC495271d0F',
389
389
  collateralToken: '0x4c9EDD5852cd905f086C759E8383e09bff1E68B3',
390
390
  oracle: '0xaE4750d0813B5E37A51f7629beedd72AF1f9cA35',
391
- oracleType: MorphoBlueOracleType.MARKET_RATE,
391
+ oracleType: MorphoBlueOracleType.ETHENA_RATE,
392
392
  irm: '0x870aC11D48B15DB9a138Cf899d20F13F79Ba00BC',
393
393
  lltv: 0.915,
394
394
  marketId: '0x8e6aeb10c401de3279ac79b4b2ea15fc94b7d9cfc098d6c2a1ff7b2b26d9d02c',
@@ -403,7 +403,7 @@ export const MORPHO_BLUE_USDE_DAI_945 = (networkId = NetworkNumber.Eth) => ({
403
403
  loanToken: '0x6B175474E89094C44Da98b954EedeAC495271d0F',
404
404
  collateralToken: '0x4c9EDD5852cd905f086C759E8383e09bff1E68B3',
405
405
  oracle: '0xaE4750d0813B5E37A51f7629beedd72AF1f9cA35',
406
- oracleType: MorphoBlueOracleType.MARKET_RATE,
406
+ oracleType: MorphoBlueOracleType.ETHENA_RATE,
407
407
  irm: '0x870aC11D48B15DB9a138Cf899d20F13F79Ba00BC',
408
408
  lltv: 0.945,
409
409
  marketId: '0xdb760246f6859780f6c1b272d47a8f64710777121118e56e0cdb4b8b744a3094',
@@ -425,6 +425,81 @@ export const MORPHO_BLUE_CBETH_USDC_860_BASE = (networkId = NetworkNumber.Eth) =
425
425
  marketId: '0xdba352d93a64b17c71104cbddc6aef85cd432322a1446b5b65163cbbc615cd0c',
426
426
  protocolName: 'morpho-blue',
427
427
  });
428
+ export const MORPHO_BLUE_WSTETH_ETH_945_BASE = (networkId = NetworkNumber.Eth) => ({
429
+ chainIds: [NetworkNumber.Base],
430
+ label: 'Morpho Blue',
431
+ shortLabel: 'wstETH/ETH',
432
+ value: MorphoBlueVersions.MorphoBlueWstEthEth_945_Base,
433
+ url: 'wstetheth-e3c4d4d0',
434
+ loanToken: '0x4200000000000000000000000000000000000006',
435
+ collateralToken: '0xc1CBa3fCea344f92D9239c08C0568f6F2F0ee452',
436
+ oracle: '0xaE10cbdAa587646246c8253E4532A002EE4fa7A4',
437
+ oracleType: MorphoBlueOracleType.MARKET_RATE,
438
+ irm: '0x46415998764C29aB2a25CbeA6254146D50D22687',
439
+ lltv: 0.945,
440
+ marketId: '0xe3c4d4d0e214fdc52635d7f9b2f7b3b0081771ae2efeb3cb5aae26009f34f7a7',
441
+ protocolName: 'morpho-blue',
442
+ });
443
+ export const MORPHO_BLUE_WSTETH_ETH_965_BASE = (networkId = NetworkNumber.Eth) => ({
444
+ chainIds: [NetworkNumber.Base],
445
+ label: 'Morpho Blue',
446
+ shortLabel: 'wstETH/ETH',
447
+ value: MorphoBlueVersions.MorphoBlueWstEthEth_965_Base,
448
+ url: 'wstetheth-6aa81f51',
449
+ loanToken: '0x4200000000000000000000000000000000000006',
450
+ collateralToken: '0xc1CBa3fCea344f92D9239c08C0568f6F2F0ee452',
451
+ oracle: '0xaE10cbdAa587646246c8253E4532A002EE4fa7A4',
452
+ oracleType: MorphoBlueOracleType.MARKET_RATE,
453
+ irm: '0x46415998764C29aB2a25CbeA6254146D50D22687',
454
+ lltv: 0.965,
455
+ marketId: '0x6aa81f51dfc955df598e18006deae56ce907ac02b0b5358705f1a28fcea23cc0',
456
+ protocolName: 'morpho-blue',
457
+ });
458
+ export const MORPHO_BLUE_WSTETH_USDC_860_BASE = (networkId = NetworkNumber.Eth) => ({
459
+ chainIds: [NetworkNumber.Base],
460
+ label: 'Morpho Blue',
461
+ shortLabel: 'wstETH/USDC',
462
+ value: MorphoBlueVersions.MorphoBlueWstEthUSDC_860_Base,
463
+ url: 'wstethusdc-a066f389',
464
+ loanToken: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913',
465
+ collateralToken: '0xc1CBa3fCea344f92D9239c08C0568f6F2F0ee452',
466
+ oracle: '0x957e76d8f2D3ab0B4f342cd5f4b03A6f6eF2ce5F',
467
+ oracleType: MorphoBlueOracleType.MARKET_RATE,
468
+ irm: '0x46415998764C29aB2a25CbeA6254146D50D22687',
469
+ lltv: 0.86,
470
+ marketId: '0xa066f3893b780833699043f824e5bb88b8df039886f524f62b9a1ac83cb7f1f0',
471
+ protocolName: 'morpho-blue',
472
+ });
473
+ export const MORPHO_BLUE_CBETH_ETH_965_BASE = (networkId = NetworkNumber.Eth) => ({
474
+ chainIds: [NetworkNumber.Base],
475
+ label: 'Morpho Blue',
476
+ shortLabel: 'cbETH/ETH',
477
+ value: MorphoBlueVersions.MorphoBlueCbEthEth_965_Base,
478
+ url: 'cbetheth-6600aae6',
479
+ loanToken: '0x4200000000000000000000000000000000000006',
480
+ collateralToken: '0x2Ae3F1Ec7F1F5012CFEab0185bfc7aa3cf0DEc22',
481
+ oracle: '0xB03855Ad5AFD6B8db8091DD5551CAC4ed621d9E6',
482
+ oracleType: MorphoBlueOracleType.MARKET_RATE,
483
+ irm: '0x46415998764C29aB2a25CbeA6254146D50D22687',
484
+ lltv: 0.965,
485
+ marketId: '0x6600aae6c56d242fa6ba68bd527aff1a146e77813074413186828fd3f1cdca91',
486
+ protocolName: 'morpho-blue',
487
+ });
488
+ export const MORPHO_BLUE_ETH_USDC_860_BASE = (networkId = NetworkNumber.Eth) => ({
489
+ chainIds: [NetworkNumber.Base],
490
+ label: 'Morpho Blue',
491
+ shortLabel: 'ETH/USDC',
492
+ value: MorphoBlueVersions.MorphoBlueEthUSDC_860_Base,
493
+ url: 'ethusdc-8793cf30',
494
+ loanToken: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913',
495
+ collateralToken: '0x4200000000000000000000000000000000000006',
496
+ oracle: '0xFEa2D58cEfCb9fcb597723c6bAE66fFE4193aFE4',
497
+ oracleType: MorphoBlueOracleType.MARKET_RATE,
498
+ irm: '0x46415998764C29aB2a25CbeA6254146D50D22687',
499
+ lltv: 0.86,
500
+ marketId: '0x8793cf302b8ffd655ab97bd1c695dbd967807e8367a65cb2f4edaf1380ba1bda',
501
+ protocolName: 'morpho-blue',
502
+ });
428
503
  export const MorphoBlueMarkets = (networkId) => ({
429
504
  [MorphoBlueVersions.MorphoBlueWstEthUSDC]: MORPHO_BLUE_WSTETH_USDC(networkId),
430
505
  [MorphoBlueVersions.MorphoBlueSDAIUSDC]: MORPHO_BLUE_SDAI_USDC(networkId),
@@ -456,7 +531,13 @@ export const MorphoBlueMarkets = (networkId) => ({
456
531
  [MorphoBlueVersions.MorphoBlueUSDeDAI_860]: MORPHO_BLUE_USDE_DAI_860(networkId),
457
532
  [MorphoBlueVersions.MorphoBlueUSDeDAI_915]: MORPHO_BLUE_USDE_DAI_915(networkId),
458
533
  [MorphoBlueVersions.MorphoBlueUSDeDAI_945]: MORPHO_BLUE_USDE_DAI_945(networkId),
534
+ // Base
459
535
  [MorphoBlueVersions.MorphoBlueCbEthUSDC_860_Base]: MORPHO_BLUE_CBETH_USDC_860_BASE(networkId),
536
+ [MorphoBlueVersions.MorphoBlueWstEthEth_945_Base]: MORPHO_BLUE_WSTETH_ETH_945_BASE(networkId),
537
+ [MorphoBlueVersions.MorphoBlueWstEthEth_965_Base]: MORPHO_BLUE_WSTETH_ETH_965_BASE(networkId),
538
+ [MorphoBlueVersions.MorphoBlueWstEthUSDC_860_Base]: MORPHO_BLUE_WSTETH_USDC_860_BASE(networkId),
539
+ [MorphoBlueVersions.MorphoBlueCbEthEth_965_Base]: MORPHO_BLUE_CBETH_ETH_965_BASE(networkId),
540
+ [MorphoBlueVersions.MorphoBlueEthUSDC_860_Base]: MORPHO_BLUE_ETH_USDC_860_BASE(networkId),
460
541
  });
461
542
  export const findMorphoBlueMarket = (collateralToken, loanToken, lltv, oracle, irm, network = NetworkNumber.Eth) => {
462
543
  const markets = MorphoBlueMarkets(network);
@@ -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}`);
@@ -27,11 +27,17 @@ export declare enum MorphoBlueVersions {
27
27
  MorphoBlueUSDeDAI_860 = "morphoblueusdedai_860",
28
28
  MorphoBlueUSDeDAI_915 = "morphoblueusdedai_915",
29
29
  MorphoBlueUSDeDAI_945 = "morphoblueusdedai_945",
30
- MorphoBlueCbEthUSDC_860_Base = "morphobluecbethusdc_860_base"
30
+ MorphoBlueCbEthUSDC_860_Base = "morphobluecbethusdc_860_base",
31
+ MorphoBlueWstEthEth_945_Base = "morphobluewstetheth_945_base",
32
+ MorphoBlueWstEthEth_965_Base = "morphobluewstetheth_965_base",
33
+ MorphoBlueWstEthUSDC_860_Base = "morphobluewstethusdc_860_base",
34
+ MorphoBlueCbEthEth_965_Base = "morphobluecbetheth_965_base",
35
+ MorphoBlueEthUSDC_860_Base = "morphoblueethusdc_860_base"
31
36
  }
32
37
  export declare enum MorphoBlueOracleType {
33
38
  MARKET_RATE = "Market rate",
34
- LIDO_RATE = "Lido rate"
39
+ LIDO_RATE = "Lido rate",
40
+ ETHENA_RATE = "Ethena rate"
35
41
  }
36
42
  export interface MorphoBlueMarketData {
37
43
  chainIds: NetworkNumber[];
@@ -33,9 +33,15 @@ export var MorphoBlueVersions;
33
33
  MorphoBlueVersions["MorphoBlueUSDeDAI_945"] = "morphoblueusdedai_945";
34
34
  // BASE
35
35
  MorphoBlueVersions["MorphoBlueCbEthUSDC_860_Base"] = "morphobluecbethusdc_860_base";
36
+ MorphoBlueVersions["MorphoBlueWstEthEth_945_Base"] = "morphobluewstetheth_945_base";
37
+ MorphoBlueVersions["MorphoBlueWstEthEth_965_Base"] = "morphobluewstetheth_965_base";
38
+ MorphoBlueVersions["MorphoBlueWstEthUSDC_860_Base"] = "morphobluewstethusdc_860_base";
39
+ MorphoBlueVersions["MorphoBlueCbEthEth_965_Base"] = "morphobluecbetheth_965_base";
40
+ MorphoBlueVersions["MorphoBlueEthUSDC_860_Base"] = "morphoblueethusdc_860_base";
36
41
  })(MorphoBlueVersions || (MorphoBlueVersions = {}));
37
42
  export var MorphoBlueOracleType;
38
43
  (function (MorphoBlueOracleType) {
39
44
  MorphoBlueOracleType["MARKET_RATE"] = "Market rate";
40
45
  MorphoBlueOracleType["LIDO_RATE"] = "Lido rate";
46
+ MorphoBlueOracleType["ETHENA_RATE"] = "Ethena rate";
41
47
  })(MorphoBlueOracleType || (MorphoBlueOracleType = {}));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@defisaver/positions-sdk",
3
- "version": "0.0.84",
3
+ "version": "0.0.86",
4
4
  "description": "",
5
5
  "main": "./cjs/index.js",
6
6
  "module": "./esm/index.js",
@@ -22,7 +22,6 @@
22
22
  "@defisaver/tokens": "^1.5.23",
23
23
  "@ethersproject/bignumber": "^5.7.0",
24
24
  "@morpho-org/morpho-aave-v3-sdk": "^1.5.3",
25
- "@stakewise/v3-sdk": "^1.3.0",
26
25
  "decimal.js": "^10.4.3"
27
26
  },
28
27
  "devDependencies": {
@@ -7,7 +7,7 @@ import {
7
7
  import { calculateNetApy, getStETHApr } from '../staking';
8
8
  import { ethToWeth, wethToEth, wethToEthByAddress } from '../services/utils';
9
9
  import { AaveLoanInfoV2Contract, createContractWrapper } from '../contracts';
10
- import { calculateBorrowingAssetLimit } from '../moneymarket';
10
+ import { aprToApy, calculateBorrowingAssetLimit } from '../moneymarket';
11
11
  import {
12
12
  AaveMarketInfo, AaveV2AssetData, AaveV2AssetsData, AaveV2PositionData, AaveV2UsedAsset, AaveV2UsedAssets,
13
13
  } from '../types';
@@ -26,9 +26,9 @@ export const getAaveV2MarketsData = async (web3: Web3, network: NetworkNumber, s
26
26
  .map((market, i) => ({
27
27
  symbol: selectedMarket.assets[i],
28
28
  underlyingTokenAddress: market.underlyingTokenAddress,
29
- supplyRate: new Dec(market.supplyRate.toString()).div(1e25).toString(),
30
- borrowRate: new Dec(market.borrowRateVariable.toString()).div(1e25).toString(),
31
- borrowRateStable: new Dec(market.borrowRateStable.toString()).div(1e25).toString(),
29
+ supplyRate: aprToApy(new Dec(market.supplyRate.toString()).div(1e25).toString()),
30
+ borrowRate: aprToApy(new Dec(market.borrowRateVariable.toString()).div(1e25).toString()),
31
+ borrowRateStable: aprToApy(new Dec(market.borrowRateStable.toString()).div(1e25).toString()),
32
32
  collateralFactor: new Dec(market.collateralFactor.toString()).div(10000).toString(),
33
33
  liquidationRatio: new Dec(market.liquidationRatio.toString()).div(10000).toString(),
34
34
  marketLiquidity: assetAmountInEth(new Dec(market.totalSupply.toString())
@@ -173,7 +173,7 @@ export const getAaveV2AccountData = async (web3: Web3, network: NetworkNumber, a
173
173
  suppliedUsd: new Dec(supplied).mul(assetsData[asset].price).toString(),
174
174
  isSupplied,
175
175
  collateral: enabledAsCollateral,
176
- stableBorrowRate: new Dec(tokenInfo.stableBorrowRate).div(1e25).toString(),
176
+ stableBorrowRate: aprToApy(new Dec(tokenInfo.stableBorrowRate).div(1e25).toString()),
177
177
  borrowedStable,
178
178
  borrowedVariable,
179
179
  borrowedUsdStable: new Dec(borrowedStable).mul(assetsData[asset].price).toString(),
@@ -30,7 +30,7 @@ import { calculateNetApy, getStakingApy, STAKING_ASSETS } from '../staking';
30
30
  import { multicall } from '../multicall';
31
31
  import { IUiIncentiveDataProviderV3 } from '../types/contracts/generated/AaveUiIncentiveDataProviderV3';
32
32
  import { getAssetsBalances } from '../assets';
33
- import { calculateBorrowingAssetLimit } from '../moneymarket';
33
+ import { aprToApy, calculateBorrowingAssetLimit } from '../moneymarket';
34
34
  import {
35
35
  aaveAnyGetAggregatedPositionData,
36
36
  aaveV3IsInIsolationMode,
@@ -206,7 +206,6 @@ export async function getAaveV3MarketData(web3: Web3, network: NetworkNumber, ma
206
206
  if (new Dec(marketLiquidity).lt(0)) {
207
207
  marketLiquidity = '0';
208
208
  }
209
-
210
209
  return ({
211
210
  nativeAsset,
212
211
  ...addToObjectIf(nativeAsset, {
@@ -225,10 +224,10 @@ export async function getAaveV3MarketData(web3: Web3, network: NetworkNumber, ma
225
224
  isolationModeTotalDebt: new Dec(tokenMarket.isolationModeTotalDebt).div(100).toString(),
226
225
  assetId: Number(tokenMarket.assetId),
227
226
  underlyingTokenAddress: tokenMarket.underlyingTokenAddress,
228
- supplyRate: new Dec(tokenMarket.supplyRate.toString()).div(1e25).toString(),
229
- borrowRate: new Dec(tokenMarket.borrowRateVariable.toString()).div(1e25).toString(),
230
- borrowRateDiscounted: nativeAsset ? new Dec(tokenMarket.borrowRateVariable.toString()).div(1e25).mul(1 - parseFloat(discountRateOnBorrow)).toString() : '0',
231
- borrowRateStable: new Dec(tokenMarket.borrowRateStable.toString()).div(1e25).toString(),
227
+ supplyRate: aprToApy(new Dec(tokenMarket.supplyRate.toString()).div(1e25).toString()),
228
+ borrowRate: aprToApy(new Dec(tokenMarket.borrowRateVariable.toString()).div(1e25).toString()),
229
+ borrowRateDiscounted: aprToApy(nativeAsset ? new Dec(tokenMarket.borrowRateVariable.toString()).div(1e25).mul(1 - parseFloat(discountRateOnBorrow)).toString() : '0'),
230
+ borrowRateStable: aprToApy(new Dec(tokenMarket.borrowRateStable.toString()).div(1e25).toString()),
232
231
  collateralFactor: new Dec(tokenMarket.collateralFactor.toString()).div(10000).toString(),
233
232
  liquidationRatio: new Dec(tokenMarket.liquidationRatio.toString()).div(10000).toString(),
234
233
  marketLiquidity,
@@ -500,8 +499,8 @@ export const getAaveV3AccountData = async (web3: Web3, network: NetworkNumber, a
500
499
  suppliedUsd: new Dec(supplied).mul(assetsData[asset].price).toString(),
501
500
  isSupplied,
502
501
  collateral: enabledAsCollateral,
503
- stableBorrowRate: new Dec(tokenInfo.stableBorrowRate).div(1e25).toString(),
504
- discountedBorrowRate: new Dec(assetsData[asset].borrowRate).mul(1 - parseFloat(discountRateOnBorrow)).toString(),
502
+ stableBorrowRate: aprToApy(new Dec(tokenInfo.stableBorrowRate).div(1e25).toString()),
503
+ discountedBorrowRate: aprToApy(new Dec(assetsData[asset].borrowRate).mul(1 - parseFloat(discountRateOnBorrow)).toString()),
505
504
  borrowedStable,
506
505
  borrowedVariable,
507
506
  borrowedUsdStable: new Dec(borrowedStable).mul(assetsData[asset].price).toString(),
@@ -301,7 +301,7 @@ export const MORPHO_BLUE_SUSDE_DAI_770 = (networkId: NetworkNumber = NetworkNumb
301
301
  loanToken: '0x6B175474E89094C44Da98b954EedeAC495271d0F',
302
302
  collateralToken: '0x9D39A5DE30e57443BfF2A8307A4256c8797A3497',
303
303
  oracle: '0x5D916980D5Ae1737a8330Bf24dF812b2911Aae25',
304
- oracleType: MorphoBlueOracleType.MARKET_RATE,
304
+ oracleType: MorphoBlueOracleType.ETHENA_RATE,
305
305
  irm: '0x870aC11D48B15DB9a138Cf899d20F13F79Ba00BC',
306
306
  lltv: 0.77,
307
307
  marketId: '0x42dcfb38bb98767afb6e38ccf90d59d0d3f0aa216beb3a234f12850323d17536',
@@ -316,7 +316,7 @@ export const MORPHO_BLUE_SUSDE_DAI_860 = (networkId: NetworkNumber = NetworkNumb
316
316
  loanToken: '0x6B175474E89094C44Da98b954EedeAC495271d0F',
317
317
  collateralToken: '0x9D39A5DE30e57443BfF2A8307A4256c8797A3497',
318
318
  oracle: '0x5D916980D5Ae1737a8330Bf24dF812b2911Aae25',
319
- oracleType: MorphoBlueOracleType.MARKET_RATE,
319
+ oracleType: MorphoBlueOracleType.ETHENA_RATE,
320
320
  irm: '0x870aC11D48B15DB9a138Cf899d20F13F79Ba00BC',
321
321
  lltv: 0.86,
322
322
  marketId: '0x39d11026eae1c6ec02aa4c0910778664089cdd97c3fd23f68f7cd05e2e95af48',
@@ -331,7 +331,7 @@ export const MORPHO_BLUE_SUSDE_DAI_915 = (networkId: NetworkNumber = NetworkNumb
331
331
  loanToken: '0x6B175474E89094C44Da98b954EedeAC495271d0F',
332
332
  collateralToken: '0x9D39A5DE30e57443BfF2A8307A4256c8797A3497',
333
333
  oracle: '0x5D916980D5Ae1737a8330Bf24dF812b2911Aae25',
334
- oracleType: MorphoBlueOracleType.MARKET_RATE,
334
+ oracleType: MorphoBlueOracleType.ETHENA_RATE,
335
335
  irm: '0x870aC11D48B15DB9a138Cf899d20F13F79Ba00BC',
336
336
  lltv: 0.915,
337
337
  marketId: '0x1247f1c237eceae0602eab1470a5061a6dd8f734ba88c7cdc5d6109fb0026b28',
@@ -346,7 +346,7 @@ export const MORPHO_BLUE_SUSDE_DAI_945 = (networkId: NetworkNumber = NetworkNumb
346
346
  loanToken: '0x6B175474E89094C44Da98b954EedeAC495271d0F',
347
347
  collateralToken: '0x9D39A5DE30e57443BfF2A8307A4256c8797A3497',
348
348
  oracle: '0x5D916980D5Ae1737a8330Bf24dF812b2911Aae25',
349
- oracleType: MorphoBlueOracleType.MARKET_RATE,
349
+ oracleType: MorphoBlueOracleType.ETHENA_RATE,
350
350
  irm: '0x870aC11D48B15DB9a138Cf899d20F13F79Ba00BC',
351
351
  lltv: 0.945,
352
352
  marketId: '0xe475337d11be1db07f7c5a156e511f05d1844308e66e17d2ba5da0839d3b34d9',
@@ -363,7 +363,7 @@ export const MORPHO_BLUE_USDE_DAI_770 = (networkId: NetworkNumber = NetworkNumbe
363
363
  loanToken: '0x6B175474E89094C44Da98b954EedeAC495271d0F',
364
364
  collateralToken: '0x4c9EDD5852cd905f086C759E8383e09bff1E68B3',
365
365
  oracle: '0xaE4750d0813B5E37A51f7629beedd72AF1f9cA35',
366
- oracleType: MorphoBlueOracleType.MARKET_RATE,
366
+ oracleType: MorphoBlueOracleType.ETHENA_RATE,
367
367
  irm: '0x870aC11D48B15DB9a138Cf899d20F13F79Ba00BC',
368
368
  lltv: 0.77,
369
369
  marketId: '0xfd8493f09eb6203615221378d89f53fcd92ff4f7d62cca87eece9a2fff59e86f',
@@ -378,7 +378,7 @@ export const MORPHO_BLUE_USDE_DAI_860 = (networkId: NetworkNumber = NetworkNumbe
378
378
  loanToken: '0x6B175474E89094C44Da98b954EedeAC495271d0F',
379
379
  collateralToken: '0x4c9EDD5852cd905f086C759E8383e09bff1E68B3',
380
380
  oracle: '0xaE4750d0813B5E37A51f7629beedd72AF1f9cA35',
381
- oracleType: MorphoBlueOracleType.MARKET_RATE,
381
+ oracleType: MorphoBlueOracleType.ETHENA_RATE,
382
382
  irm: '0x870aC11D48B15DB9a138Cf899d20F13F79Ba00BC',
383
383
  lltv: 0.86,
384
384
  marketId: '0xc581c5f70bd1afa283eed57d1418c6432cbff1d862f94eaf58fdd4e46afbb67f',
@@ -393,7 +393,7 @@ export const MORPHO_BLUE_USDE_DAI_915 = (networkId: NetworkNumber = NetworkNumbe
393
393
  loanToken: '0x6B175474E89094C44Da98b954EedeAC495271d0F',
394
394
  collateralToken: '0x4c9EDD5852cd905f086C759E8383e09bff1E68B3',
395
395
  oracle: '0xaE4750d0813B5E37A51f7629beedd72AF1f9cA35',
396
- oracleType: MorphoBlueOracleType.MARKET_RATE,
396
+ oracleType: MorphoBlueOracleType.ETHENA_RATE,
397
397
  irm: '0x870aC11D48B15DB9a138Cf899d20F13F79Ba00BC',
398
398
  lltv: 0.915,
399
399
  marketId: '0x8e6aeb10c401de3279ac79b4b2ea15fc94b7d9cfc098d6c2a1ff7b2b26d9d02c',
@@ -408,7 +408,7 @@ export const MORPHO_BLUE_USDE_DAI_945 = (networkId: NetworkNumber = NetworkNumbe
408
408
  loanToken: '0x6B175474E89094C44Da98b954EedeAC495271d0F',
409
409
  collateralToken: '0x4c9EDD5852cd905f086C759E8383e09bff1E68B3',
410
410
  oracle: '0xaE4750d0813B5E37A51f7629beedd72AF1f9cA35',
411
- oracleType: MorphoBlueOracleType.MARKET_RATE,
411
+ oracleType: MorphoBlueOracleType.ETHENA_RATE,
412
412
  irm: '0x870aC11D48B15DB9a138Cf899d20F13F79Ba00BC',
413
413
  lltv: 0.945,
414
414
  marketId: '0xdb760246f6859780f6c1b272d47a8f64710777121118e56e0cdb4b8b744a3094',
@@ -432,6 +432,81 @@ export const MORPHO_BLUE_CBETH_USDC_860_BASE = (networkId: NetworkNumber = Netwo
432
432
  marketId: '0xdba352d93a64b17c71104cbddc6aef85cd432322a1446b5b65163cbbc615cd0c',
433
433
  protocolName: 'morpho-blue',
434
434
  });
435
+ export const MORPHO_BLUE_WSTETH_ETH_945_BASE = (networkId: NetworkNumber = NetworkNumber.Eth): MorphoBlueMarketData => ({
436
+ chainIds: [NetworkNumber.Base],
437
+ label: 'Morpho Blue',
438
+ shortLabel: 'wstETH/ETH',
439
+ value: MorphoBlueVersions.MorphoBlueWstEthEth_945_Base,
440
+ url: 'wstetheth-e3c4d4d0',
441
+ loanToken: '0x4200000000000000000000000000000000000006',
442
+ collateralToken: '0xc1CBa3fCea344f92D9239c08C0568f6F2F0ee452',
443
+ oracle: '0xaE10cbdAa587646246c8253E4532A002EE4fa7A4',
444
+ oracleType: MorphoBlueOracleType.MARKET_RATE,
445
+ irm: '0x46415998764C29aB2a25CbeA6254146D50D22687',
446
+ lltv: 0.945,
447
+ marketId: '0xe3c4d4d0e214fdc52635d7f9b2f7b3b0081771ae2efeb3cb5aae26009f34f7a7',
448
+ protocolName: 'morpho-blue',
449
+ });
450
+ export const MORPHO_BLUE_WSTETH_ETH_965_BASE = (networkId: NetworkNumber = NetworkNumber.Eth): MorphoBlueMarketData => ({
451
+ chainIds: [NetworkNumber.Base],
452
+ label: 'Morpho Blue',
453
+ shortLabel: 'wstETH/ETH',
454
+ value: MorphoBlueVersions.MorphoBlueWstEthEth_965_Base,
455
+ url: 'wstetheth-6aa81f51',
456
+ loanToken: '0x4200000000000000000000000000000000000006',
457
+ collateralToken: '0xc1CBa3fCea344f92D9239c08C0568f6F2F0ee452',
458
+ oracle: '0xaE10cbdAa587646246c8253E4532A002EE4fa7A4',
459
+ oracleType: MorphoBlueOracleType.MARKET_RATE,
460
+ irm: '0x46415998764C29aB2a25CbeA6254146D50D22687',
461
+ lltv: 0.965,
462
+ marketId: '0x6aa81f51dfc955df598e18006deae56ce907ac02b0b5358705f1a28fcea23cc0',
463
+ protocolName: 'morpho-blue',
464
+ });
465
+ export const MORPHO_BLUE_WSTETH_USDC_860_BASE = (networkId: NetworkNumber = NetworkNumber.Eth): MorphoBlueMarketData => ({
466
+ chainIds: [NetworkNumber.Base],
467
+ label: 'Morpho Blue',
468
+ shortLabel: 'wstETH/USDC',
469
+ value: MorphoBlueVersions.MorphoBlueWstEthUSDC_860_Base,
470
+ url: 'wstethusdc-a066f389',
471
+ loanToken: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913',
472
+ collateralToken: '0xc1CBa3fCea344f92D9239c08C0568f6F2F0ee452',
473
+ oracle: '0x957e76d8f2D3ab0B4f342cd5f4b03A6f6eF2ce5F',
474
+ oracleType: MorphoBlueOracleType.MARKET_RATE,
475
+ irm: '0x46415998764C29aB2a25CbeA6254146D50D22687',
476
+ lltv: 0.86,
477
+ marketId: '0xa066f3893b780833699043f824e5bb88b8df039886f524f62b9a1ac83cb7f1f0',
478
+ protocolName: 'morpho-blue',
479
+ });
480
+ export const MORPHO_BLUE_CBETH_ETH_965_BASE = (networkId: NetworkNumber = NetworkNumber.Eth): MorphoBlueMarketData => ({
481
+ chainIds: [NetworkNumber.Base],
482
+ label: 'Morpho Blue',
483
+ shortLabel: 'cbETH/ETH',
484
+ value: MorphoBlueVersions.MorphoBlueCbEthEth_965_Base,
485
+ url: 'cbetheth-6600aae6',
486
+ loanToken: '0x4200000000000000000000000000000000000006',
487
+ collateralToken: '0x2Ae3F1Ec7F1F5012CFEab0185bfc7aa3cf0DEc22',
488
+ oracle: '0xB03855Ad5AFD6B8db8091DD5551CAC4ed621d9E6',
489
+ oracleType: MorphoBlueOracleType.MARKET_RATE,
490
+ irm: '0x46415998764C29aB2a25CbeA6254146D50D22687',
491
+ lltv: 0.965,
492
+ marketId: '0x6600aae6c56d242fa6ba68bd527aff1a146e77813074413186828fd3f1cdca91',
493
+ protocolName: 'morpho-blue',
494
+ });
495
+ export const MORPHO_BLUE_ETH_USDC_860_BASE = (networkId: NetworkNumber = NetworkNumber.Eth): MorphoBlueMarketData => ({
496
+ chainIds: [NetworkNumber.Base],
497
+ label: 'Morpho Blue',
498
+ shortLabel: 'ETH/USDC',
499
+ value: MorphoBlueVersions.MorphoBlueEthUSDC_860_Base,
500
+ url: 'ethusdc-8793cf30',
501
+ loanToken: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913',
502
+ collateralToken: '0x4200000000000000000000000000000000000006',
503
+ oracle: '0xFEa2D58cEfCb9fcb597723c6bAE66fFE4193aFE4',
504
+ oracleType: MorphoBlueOracleType.MARKET_RATE,
505
+ irm: '0x46415998764C29aB2a25CbeA6254146D50D22687',
506
+ lltv: 0.86,
507
+ marketId: '0x8793cf302b8ffd655ab97bd1c695dbd967807e8367a65cb2f4edaf1380ba1bda',
508
+ protocolName: 'morpho-blue',
509
+ });
435
510
 
436
511
  export const MorphoBlueMarkets = (networkId: NetworkNumber) => ({
437
512
  [MorphoBlueVersions.MorphoBlueWstEthUSDC]: MORPHO_BLUE_WSTETH_USDC(networkId),
@@ -465,7 +540,13 @@ export const MorphoBlueMarkets = (networkId: NetworkNumber) => ({
465
540
  [MorphoBlueVersions.MorphoBlueUSDeDAI_915]: MORPHO_BLUE_USDE_DAI_915(networkId),
466
541
  [MorphoBlueVersions.MorphoBlueUSDeDAI_945]: MORPHO_BLUE_USDE_DAI_945(networkId),
467
542
 
543
+ // Base
468
544
  [MorphoBlueVersions.MorphoBlueCbEthUSDC_860_Base]: MORPHO_BLUE_CBETH_USDC_860_BASE(networkId),
545
+ [MorphoBlueVersions.MorphoBlueWstEthEth_945_Base]: MORPHO_BLUE_WSTETH_ETH_945_BASE(networkId),
546
+ [MorphoBlueVersions.MorphoBlueWstEthEth_965_Base]: MORPHO_BLUE_WSTETH_ETH_965_BASE(networkId),
547
+ [MorphoBlueVersions.MorphoBlueWstEthUSDC_860_Base]: MORPHO_BLUE_WSTETH_USDC_860_BASE(networkId),
548
+ [MorphoBlueVersions.MorphoBlueCbEthEth_965_Base]: MORPHO_BLUE_CBETH_ETH_965_BASE(networkId),
549
+ [MorphoBlueVersions.MorphoBlueEthUSDC_860_Base]: MORPHO_BLUE_ETH_USDC_860_BASE(networkId),
469
550
  }) as const;
470
551
 
471
552
  export const findMorphoBlueMarket = (collateralToken: string, loanToken: string, lltv: number, oracle: string, irm: string, network = NetworkNumber.Eth) => {
@@ -73,4 +73,4 @@ export const isLeveragedPos = (usedAssets: MMUsedAssets, dustLimit = 5) => {
73
73
  };
74
74
  };
75
75
 
76
- export const aprToApy = (interest: string | number, frequency = BLOCKS_IN_A_YEAR) => ((1 + (+interest / 100) / frequency) ** frequency - 1) * 100; // eslint-disable-line
76
+ export const aprToApy = (interest:string | number, frequency = BLOCKS_IN_A_YEAR) => new Dec(interest).div(100).div(frequency).plus(1).pow(frequency).minus(1).times(100).toString();