@defisaver/positions-sdk 2.1.127-midnight-dev → 2.1.127-uniswap-dev

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 (88) hide show
  1. package/cjs/claiming/index.d.ts +2 -1
  2. package/cjs/claiming/index.js +3 -1
  3. package/cjs/claiming/uniswap.d.ts +4 -0
  4. package/cjs/claiming/uniswap.js +70 -0
  5. package/cjs/config/contracts.d.ts +22 -249
  6. package/cjs/config/contracts.js +10 -11
  7. package/cjs/contracts.d.ts +35 -1510
  8. package/cjs/contracts.js +3 -3
  9. package/cjs/helpers/index.d.ts +0 -1
  10. package/cjs/helpers/index.js +1 -2
  11. package/cjs/helpers/morphoBlueHelpers/index.js +1 -0
  12. package/cjs/index.d.ts +1 -2
  13. package/cjs/index.js +1 -3
  14. package/cjs/markets/index.d.ts +0 -1
  15. package/cjs/markets/index.js +1 -4
  16. package/cjs/morphoBlue/index.d.ts +8 -6
  17. package/cjs/morphoBlue/index.js +69 -40
  18. package/cjs/portfolio/discovery.js +0 -4
  19. package/cjs/portfolio/index.js +30 -45
  20. package/cjs/services/viem.d.ts +11 -11
  21. package/cjs/types/claiming.d.ts +2 -0
  22. package/cjs/types/claiming.js +2 -0
  23. package/cjs/types/index.d.ts +0 -1
  24. package/cjs/types/index.js +0 -1
  25. package/cjs/types/morphoBlue.d.ts +9 -0
  26. package/cjs/types/portfolio.d.ts +0 -4
  27. package/esm/claiming/index.d.ts +2 -1
  28. package/esm/claiming/index.js +2 -1
  29. package/esm/claiming/uniswap.d.ts +4 -0
  30. package/esm/claiming/uniswap.js +62 -0
  31. package/esm/config/contracts.d.ts +22 -249
  32. package/esm/config/contracts.js +8 -9
  33. package/esm/contracts.d.ts +35 -1510
  34. package/esm/contracts.js +1 -1
  35. package/esm/helpers/index.d.ts +0 -1
  36. package/esm/helpers/index.js +0 -1
  37. package/esm/helpers/morphoBlueHelpers/index.js +1 -0
  38. package/esm/index.d.ts +1 -2
  39. package/esm/index.js +1 -2
  40. package/esm/markets/index.d.ts +0 -1
  41. package/esm/markets/index.js +0 -1
  42. package/esm/morphoBlue/index.d.ts +8 -6
  43. package/esm/morphoBlue/index.js +62 -39
  44. package/esm/portfolio/discovery.js +1 -5
  45. package/esm/portfolio/index.js +32 -47
  46. package/esm/services/viem.d.ts +11 -11
  47. package/esm/types/claiming.d.ts +2 -0
  48. package/esm/types/claiming.js +2 -0
  49. package/esm/types/index.d.ts +0 -1
  50. package/esm/types/index.js +0 -1
  51. package/esm/types/morphoBlue.d.ts +9 -0
  52. package/esm/types/portfolio.d.ts +0 -4
  53. package/package.json +1 -1
  54. package/src/claiming/index.ts +2 -0
  55. package/src/claiming/uniswap.ts +65 -0
  56. package/src/config/contracts.ts +9 -9
  57. package/src/contracts.ts +2 -1
  58. package/src/helpers/index.ts +0 -1
  59. package/src/helpers/morphoBlueHelpers/index.ts +1 -0
  60. package/src/index.ts +0 -2
  61. package/src/markets/index.ts +0 -1
  62. package/src/morphoBlue/index.ts +101 -44
  63. package/src/portfolio/discovery.ts +0 -6
  64. package/src/portfolio/index.ts +30 -46
  65. package/src/types/claiming.ts +2 -0
  66. package/src/types/index.ts +0 -1
  67. package/src/types/morphoBlue.ts +11 -0
  68. package/src/types/portfolio.ts +0 -4
  69. package/cjs/helpers/morphoMidnightHelpers/index.d.ts +0 -16
  70. package/cjs/helpers/morphoMidnightHelpers/index.js +0 -68
  71. package/cjs/markets/morphoMidnight/index.d.ts +0 -16
  72. package/cjs/markets/morphoMidnight/index.js +0 -159
  73. package/cjs/morphoMidnight/index.d.ts +0 -14
  74. package/cjs/morphoMidnight/index.js +0 -220
  75. package/cjs/types/morphoMidnight.d.ts +0 -91
  76. package/cjs/types/morphoMidnight.js +0 -15
  77. package/esm/helpers/morphoMidnightHelpers/index.d.ts +0 -16
  78. package/esm/helpers/morphoMidnightHelpers/index.js +0 -61
  79. package/esm/markets/morphoMidnight/index.d.ts +0 -16
  80. package/esm/markets/morphoMidnight/index.js +0 -148
  81. package/esm/morphoMidnight/index.d.ts +0 -14
  82. package/esm/morphoMidnight/index.js +0 -207
  83. package/esm/types/morphoMidnight.d.ts +0 -91
  84. package/esm/types/morphoMidnight.js +0 -12
  85. package/src/helpers/morphoMidnightHelpers/index.ts +0 -86
  86. package/src/markets/morphoMidnight/index.ts +0 -161
  87. package/src/morphoMidnight/index.ts +0 -234
  88. package/src/types/morphoMidnight.ts +0 -104
@@ -1,16 +0,0 @@
1
- import { MMUsedAssets } from '../../types/common';
2
- import { MorphoMidnightAggregatedPositionData, MorphoMidnightAssetsData, MorphoMidnightMarketInfo } from '../../types';
3
- /**
4
- * Aggregate a Morpho Midnight position. Midnight markets are multi-collateral, so the borrow limit is
5
- * the sum of each collateral's USD value times its own lltv (Aave-v4 style), rather than a single pair.
6
- *
7
- * Note on amounts: `borrowedUsd` is derived from the position's `debt`, which is the face value owed at
8
- * maturity (principal + fixed interest). Health is therefore measured against the full maturity debt,
9
- * matching how MidnightView computes `ratio`. Fixed-rate APY is not derived on-chain in MVP, so
10
- * `netApy` reflects the `'0'` rates in `assetsData` (see the module getter).
11
- */
12
- export declare const getMorphoMidnightAggregatedPositionData: ({ usedAssets, assetsData, marketInfo, }: {
13
- usedAssets: MMUsedAssets;
14
- assetsData: MorphoMidnightAssetsData;
15
- marketInfo: MorphoMidnightMarketInfo;
16
- }) => MorphoMidnightAggregatedPositionData;
@@ -1,61 +0,0 @@
1
- import Dec from 'decimal.js';
2
- import { calcLeverageLiqPrice, getAssetsTotal, getExposure, isLeveragedPos, } from '../../moneymarket';
3
- import { calculateNetApy } from '../../staking';
4
- import { LeverageType, } from '../../types/common';
5
- /**
6
- * Aggregate a Morpho Midnight position. Midnight markets are multi-collateral, so the borrow limit is
7
- * the sum of each collateral's USD value times its own lltv (Aave-v4 style), rather than a single pair.
8
- *
9
- * Note on amounts: `borrowedUsd` is derived from the position's `debt`, which is the face value owed at
10
- * maturity (principal + fixed interest). Health is therefore measured against the full maturity debt,
11
- * matching how MidnightView computes `ratio`. Fixed-rate APY is not derived on-chain in MVP, so
12
- * `netApy` reflects the `'0'` rates in `assetsData` (see the module getter).
13
- */
14
- export const getMorphoMidnightAggregatedPositionData = ({ usedAssets, assetsData, marketInfo, }) => {
15
- var _a;
16
- const payload = {};
17
- payload.suppliedUsd = getAssetsTotal(usedAssets, ({ isSupplied }) => isSupplied, ({ suppliedUsd }) => suppliedUsd);
18
- payload.suppliedCollateralUsd = getAssetsTotal(usedAssets, ({ isSupplied, collateral }) => isSupplied && collateral, ({ suppliedUsd }) => suppliedUsd);
19
- payload.borrowedUsd = getAssetsTotal(usedAssets, ({ isBorrowed }) => isBorrowed, ({ borrowedUsd }) => borrowedUsd);
20
- // borrowLimit = Σ collateralUsd_i * lltv_i (per-collateral lltv carried on assetsData)
21
- payload.borrowLimitUsd = getAssetsTotal(usedAssets, ({ isSupplied, collateral }) => isSupplied && collateral, ({ symbol, suppliedUsd }) => { var _a; return new Dec(suppliedUsd).mul(((_a = assetsData[symbol]) === null || _a === void 0 ? void 0 : _a.lltv) || 0); });
22
- payload.liquidationLimitUsd = payload.borrowLimitUsd;
23
- const leftToBorrowUsd = new Dec(payload.borrowLimitUsd).sub(payload.borrowedUsd);
24
- payload.leftToBorrowUsd = leftToBorrowUsd.lte('0') ? '0' : leftToBorrowUsd.toString();
25
- const loanTokenPrice = ((_a = assetsData[marketInfo.loanToken]) === null || _a === void 0 ? void 0 : _a.price) || '0';
26
- payload.leftToBorrow = new Dec(loanTokenPrice).eq(0) ? '0' : new Dec(payload.leftToBorrowUsd).div(loanTokenPrice).toString();
27
- const { netApy, incentiveUsd, totalInterestUsd } = calculateNetApy({ usedAssets, assetsData: assetsData });
28
- payload.netApy = netApy;
29
- payload.incentiveUsd = incentiveUsd;
30
- payload.totalInterestUsd = totalInterestUsd;
31
- payload.ltv = new Dec(payload.suppliedCollateralUsd).eq(0) ? '0' : new Dec(payload.borrowedUsd).div(payload.suppliedCollateralUsd).toString();
32
- payload.ratio = new Dec(payload.borrowedUsd).eq(0) ? '0' : new Dec(payload.suppliedCollateralUsd).div(payload.borrowedUsd).mul(100).toString();
33
- payload.healthRatio = new Dec(payload.borrowedUsd).eq(0) ? 'Infinity' : new Dec(payload.liquidationLimitUsd).div(payload.borrowedUsd).toDP(4).toString();
34
- const { leveragedType, leveragedAsset } = isLeveragedPos(usedAssets);
35
- payload.leveragedType = leveragedType;
36
- payload.liquidationPrice = '';
37
- if (leveragedType !== '') {
38
- payload.leveragedAsset = leveragedAsset;
39
- let assetPrice = assetsData[leveragedAsset].price;
40
- if (leveragedType === LeverageType.VolatilePair) {
41
- const borrowedAsset = Object.values(usedAssets).find(({ borrowedUsd }) => +borrowedUsd > 0);
42
- const borrowedAssetPrice = assetsData[borrowedAsset.symbol].price;
43
- const leveragedAssetPrice = assetsData[leveragedAsset].price;
44
- const isReverse = new Dec(leveragedAssetPrice).lt(borrowedAssetPrice);
45
- if (isReverse) {
46
- payload.leveragedType = LeverageType.VolatilePairReverse;
47
- payload.currentVolatilePairRatio = new Dec(borrowedAssetPrice).div(leveragedAssetPrice).toDP(18).toString();
48
- assetPrice = new Dec(borrowedAssetPrice).div(assetPrice).toString();
49
- }
50
- else {
51
- assetPrice = new Dec(assetPrice).div(borrowedAssetPrice).toString();
52
- payload.currentVolatilePairRatio = new Dec(leveragedAssetPrice).div(borrowedAssetPrice).toDP(18).toString();
53
- }
54
- }
55
- payload.liquidationPrice = calcLeverageLiqPrice(payload.leveragedType, assetPrice, payload.borrowedUsd, payload.liquidationLimitUsd);
56
- }
57
- payload.minCollRatio = new Dec(payload.borrowLimitUsd).eq(0) ? '0' : new Dec(payload.suppliedCollateralUsd).div(payload.borrowLimitUsd).mul(100).toString();
58
- payload.collLiquidationRatio = new Dec(payload.liquidationLimitUsd).eq(0) ? '0' : new Dec(payload.suppliedCollateralUsd).div(payload.liquidationLimitUsd).mul(100).toString();
59
- payload.exposure = getExposure(payload.borrowedUsd, payload.suppliedUsd);
60
- return payload;
61
- };
@@ -1,16 +0,0 @@
1
- import { MorphoMidnightMarketData, NetworkNumber } from '../../types';
2
- export declare const MORPHO_MIDNIGHT_CBBTC_USDC_860_20260731: (networkId?: NetworkNumber) => MorphoMidnightMarketData;
3
- export declare const MORPHO_MIDNIGHT_CBBTC_USDC_860_20260828: (networkId?: NetworkNumber) => MorphoMidnightMarketData;
4
- export declare const MORPHO_MIDNIGHT_CBBTC_USDC_860_20260925: (networkId?: NetworkNumber) => MorphoMidnightMarketData;
5
- export declare const MORPHO_MIDNIGHT_CBBTC_USDC_860_20261030: (networkId?: NetworkNumber) => MorphoMidnightMarketData;
6
- export declare const MORPHO_MIDNIGHT_CBBTC_USDC_860_20261127: (networkId?: NetworkNumber) => MorphoMidnightMarketData;
7
- export declare const MORPHO_MIDNIGHT_CBBTC_USDC_860_20261225: (networkId?: NetworkNumber) => MorphoMidnightMarketData;
8
- export declare const MorphoMidnightMarkets: (networkId: NetworkNumber) => {
9
- readonly morphomidnightcbbtcusdc_860_20260731_base: MorphoMidnightMarketData;
10
- readonly morphomidnightcbbtcusdc_860_20260828_base: MorphoMidnightMarketData;
11
- readonly morphomidnightcbbtcusdc_860_20260925_base: MorphoMidnightMarketData;
12
- readonly morphomidnightcbbtcusdc_860_20261030_base: MorphoMidnightMarketData;
13
- readonly morphomidnightcbbtcusdc_860_20261127_base: MorphoMidnightMarketData;
14
- readonly morphomidnightcbbtcusdc_860_20261225_base: MorphoMidnightMarketData;
15
- };
16
- export declare const findMorphoMidnightMarket: (marketId: string, network?: NetworkNumber) => MorphoMidnightMarketData | undefined;
@@ -1,148 +0,0 @@
1
- import { MorphoMidnightVersions, NetworkNumber } from '../../types';
2
- // Morpho Midnight core contract on Base (same for every market).
3
- const MIDNIGHT_BASE = '0xAdedD8ab6dE832766Fedf0FaC4992E5C4D3EA18A';
4
- const ZERO_ADDRESS = '0x0000000000000000000000000000000000000000';
5
- // Curated Morpho Midnight markets. Each market is fixed-term: it is uniquely identified on-chain by
6
- // `marketId` (bytes32), derived from the static struct below via MidnightView.toId. Because markets
7
- // churn as maturities roll, this list is hand-maintained for the pairs/maturities the app supports.
8
- // Sourced from the official listing at https://markets.morpho.org/fixed/base (see its sitemap.xml) —
9
- // currently a single USDC/cbBTC pair offered on a monthly maturity ladder; new maturities are added
10
- // there progressively. Every `marketId` here is verified against MidnightView.toId(marketStruct) in
11
- // tests/morphoMidnight.ts.
12
- // BASE — USDC/cbBTC, 86% LLTV, monthly maturity ladder
13
- export const MORPHO_MIDNIGHT_CBBTC_USDC_860_20260731 = (networkId = NetworkNumber.Base) => ({
14
- chainIds: [NetworkNumber.Base],
15
- label: 'Morpho Midnight cbBTC/USDC',
16
- shortLabel: 'cbBTC/USDC',
17
- url: 'cbbtc-usdc-20260731',
18
- value: MorphoMidnightVersions.MorphoMidnightCbBTCUSDC_860_20260731_Base,
19
- midnight: MIDNIGHT_BASE,
20
- loanToken: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913', // USDC
21
- collaterals: [{
22
- token: '0xcbB7C0000aB88B473b1f5aFd9ef808440eed33Bf', // cbBTC
23
- lltv: 0.86,
24
- liquidationCursor: '300000000000000000',
25
- oracle: '0x663BECd10daE6C4A3Dcd89F1d76c1174199639B9',
26
- }],
27
- maturity: 1785510000, // 2026-07-31T15:00:00Z
28
- rcfThreshold: '3000000000',
29
- enterGate: ZERO_ADDRESS,
30
- liquidatorGate: ZERO_ADDRESS,
31
- marketId: '0x168e31250e0008b50d2255a5ab85e0265acd6c12e4f9a1336134b36a65a47937',
32
- protocolName: 'morpho-midnight',
33
- });
34
- export const MORPHO_MIDNIGHT_CBBTC_USDC_860_20260828 = (networkId = NetworkNumber.Base) => ({
35
- chainIds: [NetworkNumber.Base],
36
- label: 'Morpho Midnight cbBTC/USDC',
37
- shortLabel: 'cbBTC/USDC',
38
- url: 'cbbtc-usdc-20260828',
39
- value: MorphoMidnightVersions.MorphoMidnightCbBTCUSDC_860_20260828_Base,
40
- midnight: MIDNIGHT_BASE,
41
- loanToken: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913', // USDC
42
- collaterals: [{
43
- token: '0xcbB7C0000aB88B473b1f5aFd9ef808440eed33Bf', // cbBTC
44
- lltv: 0.86,
45
- liquidationCursor: '300000000000000000',
46
- oracle: '0x663BECd10daE6C4A3Dcd89F1d76c1174199639B9',
47
- }],
48
- maturity: 1787929200, // 2026-08-28T15:00:00Z
49
- rcfThreshold: '3000000000',
50
- enterGate: ZERO_ADDRESS,
51
- liquidatorGate: ZERO_ADDRESS,
52
- marketId: '0x05959752fdeff325962b9d263edb421efc6e2186a49360dba6c32e86ebf6c84c',
53
- protocolName: 'morpho-midnight',
54
- });
55
- export const MORPHO_MIDNIGHT_CBBTC_USDC_860_20260925 = (networkId = NetworkNumber.Base) => ({
56
- chainIds: [NetworkNumber.Base],
57
- label: 'Morpho Midnight cbBTC/USDC',
58
- shortLabel: 'cbBTC/USDC',
59
- url: 'cbbtc-usdc-20260925',
60
- value: MorphoMidnightVersions.MorphoMidnightCbBTCUSDC_860_20260925_Base,
61
- midnight: MIDNIGHT_BASE,
62
- loanToken: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913', // USDC
63
- collaterals: [{
64
- token: '0xcbB7C0000aB88B473b1f5aFd9ef808440eed33Bf', // cbBTC
65
- lltv: 0.86,
66
- liquidationCursor: '300000000000000000',
67
- oracle: '0x663BECd10daE6C4A3Dcd89F1d76c1174199639B9',
68
- }],
69
- maturity: 1790348400, // 2026-09-25T15:00:00Z
70
- rcfThreshold: '3000000000',
71
- enterGate: ZERO_ADDRESS,
72
- liquidatorGate: ZERO_ADDRESS,
73
- marketId: '0x549cd072daf99328554f3a6d2d4d6f4a07f1c59369e891e6391946f9cf75f221',
74
- protocolName: 'morpho-midnight',
75
- });
76
- export const MORPHO_MIDNIGHT_CBBTC_USDC_860_20261030 = (networkId = NetworkNumber.Base) => ({
77
- chainIds: [NetworkNumber.Base],
78
- label: 'Morpho Midnight cbBTC/USDC',
79
- shortLabel: 'cbBTC/USDC',
80
- url: 'cbbtc-usdc-20261030',
81
- value: MorphoMidnightVersions.MorphoMidnightCbBTCUSDC_860_20261030_Base,
82
- midnight: MIDNIGHT_BASE,
83
- loanToken: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913', // USDC
84
- collaterals: [{
85
- token: '0xcbB7C0000aB88B473b1f5aFd9ef808440eed33Bf', // cbBTC
86
- lltv: 0.86,
87
- liquidationCursor: '300000000000000000',
88
- oracle: '0x663BECd10daE6C4A3Dcd89F1d76c1174199639B9',
89
- }],
90
- maturity: 1793372400, // 2026-10-30T15:00:00Z
91
- rcfThreshold: '3000000000',
92
- enterGate: ZERO_ADDRESS,
93
- liquidatorGate: ZERO_ADDRESS,
94
- marketId: '0x43d6120738c57b2bc5835901f8250fdf7fc8054efbb006c6ccba61ec898e5ed9',
95
- protocolName: 'morpho-midnight',
96
- });
97
- export const MORPHO_MIDNIGHT_CBBTC_USDC_860_20261127 = (networkId = NetworkNumber.Base) => ({
98
- chainIds: [NetworkNumber.Base],
99
- label: 'Morpho Midnight cbBTC/USDC',
100
- shortLabel: 'cbBTC/USDC',
101
- url: 'cbbtc-usdc-20261127',
102
- value: MorphoMidnightVersions.MorphoMidnightCbBTCUSDC_860_20261127_Base,
103
- midnight: MIDNIGHT_BASE,
104
- loanToken: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913', // USDC
105
- collaterals: [{
106
- token: '0xcbB7C0000aB88B473b1f5aFd9ef808440eed33Bf', // cbBTC
107
- lltv: 0.86,
108
- liquidationCursor: '300000000000000000',
109
- oracle: '0x663BECd10daE6C4A3Dcd89F1d76c1174199639B9',
110
- }],
111
- maturity: 1795791600, // 2026-11-27T15:00:00Z
112
- rcfThreshold: '3000000000',
113
- enterGate: ZERO_ADDRESS,
114
- liquidatorGate: ZERO_ADDRESS,
115
- marketId: '0xe1878eec035b601f301484e63a49a428f8e008e2bf57a2fd88a3fc3a4c1b1acd',
116
- protocolName: 'morpho-midnight',
117
- });
118
- export const MORPHO_MIDNIGHT_CBBTC_USDC_860_20261225 = (networkId = NetworkNumber.Base) => ({
119
- chainIds: [NetworkNumber.Base],
120
- label: 'Morpho Midnight cbBTC/USDC',
121
- shortLabel: 'cbBTC/USDC',
122
- url: 'cbbtc-usdc-20261225',
123
- value: MorphoMidnightVersions.MorphoMidnightCbBTCUSDC_860_20261225_Base,
124
- midnight: MIDNIGHT_BASE,
125
- loanToken: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913', // USDC
126
- collaterals: [{
127
- token: '0xcbB7C0000aB88B473b1f5aFd9ef808440eed33Bf', // cbBTC
128
- lltv: 0.86,
129
- liquidationCursor: '300000000000000000',
130
- oracle: '0x663BECd10daE6C4A3Dcd89F1d76c1174199639B9',
131
- }],
132
- maturity: 1798210800, // 2026-12-25T15:00:00Z
133
- rcfThreshold: '3000000000',
134
- enterGate: ZERO_ADDRESS,
135
- liquidatorGate: ZERO_ADDRESS,
136
- marketId: '0x9593c3a6dba45b6106af8dc8b45ba8c505d90d3d68a3d33f7c278dd921b637da',
137
- protocolName: 'morpho-midnight',
138
- });
139
- export const MorphoMidnightMarkets = (networkId) => ({
140
- // BASE
141
- [MorphoMidnightVersions.MorphoMidnightCbBTCUSDC_860_20260731_Base]: MORPHO_MIDNIGHT_CBBTC_USDC_860_20260731(networkId),
142
- [MorphoMidnightVersions.MorphoMidnightCbBTCUSDC_860_20260828_Base]: MORPHO_MIDNIGHT_CBBTC_USDC_860_20260828(networkId),
143
- [MorphoMidnightVersions.MorphoMidnightCbBTCUSDC_860_20260925_Base]: MORPHO_MIDNIGHT_CBBTC_USDC_860_20260925(networkId),
144
- [MorphoMidnightVersions.MorphoMidnightCbBTCUSDC_860_20261030_Base]: MORPHO_MIDNIGHT_CBBTC_USDC_860_20261030(networkId),
145
- [MorphoMidnightVersions.MorphoMidnightCbBTCUSDC_860_20261127_Base]: MORPHO_MIDNIGHT_CBBTC_USDC_860_20261127(networkId),
146
- [MorphoMidnightVersions.MorphoMidnightCbBTCUSDC_860_20261225_Base]: MORPHO_MIDNIGHT_CBBTC_USDC_860_20261225(networkId),
147
- });
148
- export const findMorphoMidnightMarket = (marketId, network = NetworkNumber.Base) => Object.values(MorphoMidnightMarkets(network)).find((market) => market.marketId.toLowerCase() === marketId.toLowerCase());
@@ -1,14 +0,0 @@
1
- import { Client } from 'viem';
2
- import { Blockish, EthAddress, EthereumProvider, NetworkNumber, PositionBalances } from '../types/common';
3
- import { MorphoMidnightMarketData, MorphoMidnightMarketInfo, MorphoMidnightPositionData } from '../types';
4
- export declare function _getMorphoMidnightMarketData(provider: Client, network: NetworkNumber, selectedMarket: MorphoMidnightMarketData): Promise<MorphoMidnightMarketInfo>;
5
- export declare function getMorphoMidnightMarketData(provider: EthereumProvider, network: NetworkNumber, selectedMarket: MorphoMidnightMarketData): Promise<MorphoMidnightMarketInfo>;
6
- export declare function _getMorphoMidnightAccountData(provider: Client, network: NetworkNumber, account: EthAddress, selectedMarket: MorphoMidnightMarketData, marketInfo: MorphoMidnightMarketInfo): Promise<MorphoMidnightPositionData>;
7
- export declare function getMorphoMidnightAccountData(provider: EthereumProvider, network: NetworkNumber, account: EthAddress, selectedMarket: MorphoMidnightMarketData, marketInfo: MorphoMidnightMarketInfo): Promise<MorphoMidnightPositionData>;
8
- export declare const _getMorphoMidnightAccountBalances: (provider: Client, network: NetworkNumber, block: Blockish, addressMapping: boolean, address: EthAddress, selectedMarket: MorphoMidnightMarketData) => Promise<PositionBalances>;
9
- export declare const getMorphoMidnightAccountBalances: (provider: EthereumProvider, network: NetworkNumber, block: Blockish, addressMapping: boolean, address: EthAddress, selectedMarket: MorphoMidnightMarketData) => Promise<PositionBalances>;
10
- export declare function getMorphoMidnightEarn(provider: Client, network: NetworkNumber, account: EthAddress, selectedMarket: MorphoMidnightMarketData, marketInfo: MorphoMidnightMarketInfo): Promise<{
11
- apy: string;
12
- amount: string;
13
- amountUsd: string;
14
- }>;
@@ -1,207 +0,0 @@
1
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
- return new (P || (P = Promise))(function (resolve, reject) {
4
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
- step((generator = generator.apply(thisArg, _arguments || [])).next());
8
- });
9
- };
10
- import Dec from 'decimal.js';
11
- import { assetAmountInEth, getAssetInfoByAddress } from '@defisaver/tokens';
12
- import { NetworkNumber, } from '../types/common';
13
- import { DFSFeedRegistryContractViem, FeedRegistryContractViem, MorphoMidnightViewContractViem, } from '../contracts';
14
- import { USD_QUOTE } from '../constants';
15
- import { calculateNetApy } from '../staking';
16
- import { isMainnetNetwork, wethToEth } from '../services/utils';
17
- import { getMorphoMidnightAggregatedPositionData } from '../helpers/morphoMidnightHelpers';
18
- import { getChainlinkAssetAddress } from '../services/priceService';
19
- import { getViemProvider, setViemBlockNumber } from '../services/viem';
20
- const HARDCODED_USD_STABLE_PRICE = '100000000'; // $1 with 8 decimals
21
- const nowInSeconds = () => Math.floor(Date.now() / 1000);
22
- export function _getMorphoMidnightMarketData(provider, network, selectedMarket) {
23
- return __awaiter(this, void 0, void 0, function* () {
24
- const { loanToken, collaterals, marketId } = selectedMarket;
25
- const loanTokenInfo = getAssetInfoByAddress(loanToken, network);
26
- const loanSym = wethToEth(loanTokenInfo.symbol);
27
- const loanTokenFeedAddress = getChainlinkAssetAddress(loanTokenInfo.symbol, network);
28
- const viewContract = MorphoMidnightViewContractViem(provider, network);
29
- const isHardcodedUsdStable = ['USDA', 'RLUSD'].includes(loanTokenInfo.symbol);
30
- let marketInfo;
31
- let loanTokenPrice;
32
- if (isMainnetNetwork(network)) {
33
- const feedRegistryContract = FeedRegistryContractViem(provider, NetworkNumber.Eth);
34
- const [_loanTokenPrice, _marketInfo] = yield Promise.all([
35
- isHardcodedUsdStable ? Promise.resolve(HARDCODED_USD_STABLE_PRICE) : feedRegistryContract.read.latestAnswer([loanTokenFeedAddress, USD_QUOTE]),
36
- viewContract.read.getMarketInfo([marketId]),
37
- ]);
38
- marketInfo = _marketInfo;
39
- loanTokenPrice = _loanTokenPrice;
40
- }
41
- else {
42
- // Currently only Base is supported
43
- const feedRegistryContract = DFSFeedRegistryContractViem(provider, network);
44
- const [loanTokenPriceRound, _marketInfo] = yield Promise.all([
45
- isHardcodedUsdStable ? Promise.resolve([0, HARDCODED_USD_STABLE_PRICE]) : feedRegistryContract.read.latestRoundData([loanTokenFeedAddress, USD_QUOTE]),
46
- viewContract.read.getMarketInfo([marketId]),
47
- ]);
48
- marketInfo = _marketInfo;
49
- loanTokenPrice = loanTokenPriceRound[1].toString();
50
- }
51
- const loanTokenUsd = new Dec(loanTokenPrice).div(1e8).toString();
52
- const totalUnits = marketInfo.totalUnits.toString();
53
- const withdrawable = marketInfo.withdrawable.toString();
54
- const totalDebt = Dec.max(new Dec(totalUnits).sub(withdrawable), 0).toString();
55
- const assetsData = {};
56
- assetsData[loanSym] = {
57
- symbol: loanSym,
58
- address: loanToken,
59
- price: loanTokenUsd,
60
- supplyRate: '0', // fixed rate is orderbook-derived, not exposed on-chain (MVP)
61
- borrowRate: '0',
62
- totalSupply: assetAmountInEth(totalUnits, loanSym),
63
- totalBorrow: assetAmountInEth(totalDebt, loanSym),
64
- canBeSupplied: true,
65
- canBeBorrowed: true,
66
- supplyIncentives: [],
67
- borrowIncentives: [],
68
- };
69
- const collateralSymbols = [];
70
- collaterals.forEach((coll, i) => {
71
- const collInfo = getAssetInfoByAddress(coll.token, network);
72
- const collSym = wethToEth(collInfo.symbol);
73
- collateralSymbols.push(collSym);
74
- // Oracle price is returned in loan-token terms, scaled by 10^(36 + loanDec - collDec)
75
- const scale = new Dec(10).pow(new Dec(36).add(loanTokenInfo.decimals).sub(collInfo.decimals).toString()).toString();
76
- const rawPrice = marketInfo.prices[i] ? marketInfo.prices[i].toString() : '0';
77
- const oracleRate = new Dec(rawPrice).div(scale).toString();
78
- assetsData[collSym] = {
79
- symbol: collSym,
80
- address: coll.token,
81
- price: new Dec(loanTokenUsd).mul(oracleRate).toString(),
82
- supplyRate: '0',
83
- borrowRate: '0',
84
- lltv: new Dec(coll.lltv).toString(),
85
- canBeSupplied: true,
86
- canBeBorrowed: false,
87
- supplyIncentives: [],
88
- borrowIncentives: [],
89
- };
90
- });
91
- const utillization = new Dec(totalUnits).eq(0) ? '0' : new Dec(totalDebt).div(totalUnits).mul(100).toString();
92
- return {
93
- id: marketInfo.id,
94
- loanToken: loanSym,
95
- collaterals: collateralSymbols,
96
- maturity: selectedMarket.maturity,
97
- isMatured: nowInSeconds() >= selectedMarket.maturity,
98
- totalUnits: assetAmountInEth(totalUnits, loanSym),
99
- withdrawable: assetAmountInEth(withdrawable, loanSym),
100
- totalDebt: assetAmountInEth(totalDebt, loanSym),
101
- lossFactor: marketInfo.lossFactor.toString(),
102
- tickSpacing: marketInfo.tickSpacing,
103
- utillization,
104
- assetsData,
105
- };
106
- });
107
- }
108
- export function getMorphoMidnightMarketData(provider, network, selectedMarket) {
109
- return __awaiter(this, void 0, void 0, function* () {
110
- return _getMorphoMidnightMarketData(getViemProvider(provider, network), network, selectedMarket);
111
- });
112
- }
113
- export function _getMorphoMidnightAccountData(provider, network, account, selectedMarket, marketInfo) {
114
- return __awaiter(this, void 0, void 0, function* () {
115
- const { marketId, collaterals } = selectedMarket;
116
- const viewContract = MorphoMidnightViewContractViem(provider, network);
117
- const positionInfo = yield viewContract.read.getPositionInfo([marketId, account]);
118
- const usedAssets = {};
119
- const loanTokenData = marketInfo.assetsData[marketInfo.loanToken];
120
- const credit = assetAmountInEth(positionInfo.credit.toString(), marketInfo.loanToken);
121
- const debt = assetAmountInEth(positionInfo.debt.toString(), marketInfo.loanToken);
122
- // A user holds either credit (lender) or debt (borrower) in a market, never both.
123
- usedAssets[marketInfo.loanToken] = {
124
- symbol: marketInfo.loanToken,
125
- supplied: credit,
126
- borrowed: debt,
127
- isSupplied: new Dec(positionInfo.credit.toString()).gt(0),
128
- isBorrowed: new Dec(positionInfo.debt.toString()).gt(0),
129
- collateral: false,
130
- suppliedUsd: new Dec(credit).mul(loanTokenData.price).toString(),
131
- borrowedUsd: new Dec(debt).mul(loanTokenData.price).toString(),
132
- };
133
- // positionInfo.collateral is index-aligned with the market's collateral set (0 where unused).
134
- collaterals.forEach((coll, i) => {
135
- const collInfo = getAssetInfoByAddress(coll.token, network);
136
- const collSym = wethToEth(collInfo.symbol);
137
- const rawAmount = positionInfo.collateral[i] ? positionInfo.collateral[i].toString() : '0';
138
- const supplied = assetAmountInEth(rawAmount, collSym);
139
- const collData = marketInfo.assetsData[collSym];
140
- usedAssets[collSym] = {
141
- symbol: collSym,
142
- supplied,
143
- borrowed: '0',
144
- isSupplied: new Dec(rawAmount).gt(0),
145
- isBorrowed: false,
146
- collateral: true,
147
- suppliedUsd: new Dec(supplied).mul((collData === null || collData === void 0 ? void 0 : collData.price) || 0).toString(),
148
- borrowedUsd: '0',
149
- };
150
- });
151
- return Object.assign({ usedAssets,
152
- credit,
153
- debt, maturity: marketInfo.maturity, isMatured: marketInfo.isMatured }, getMorphoMidnightAggregatedPositionData({ usedAssets, assetsData: marketInfo.assetsData, marketInfo }));
154
- });
155
- }
156
- export function getMorphoMidnightAccountData(provider, network, account, selectedMarket, marketInfo) {
157
- return __awaiter(this, void 0, void 0, function* () {
158
- return _getMorphoMidnightAccountData(getViemProvider(provider, network), network, account, selectedMarket, marketInfo);
159
- });
160
- }
161
- export const _getMorphoMidnightAccountBalances = (provider, network, block, addressMapping, address, selectedMarket) => __awaiter(void 0, void 0, void 0, function* () {
162
- const balances = { collateral: {}, debt: {} };
163
- if (!address)
164
- return balances;
165
- const { marketId, loanToken, collaterals } = selectedMarket;
166
- const viewContract = MorphoMidnightViewContractViem(provider, network, block);
167
- const positionInfo = yield viewContract.read.getPositionInfo([marketId, address], setViemBlockNumber(block));
168
- const loanTokenInfo = getAssetInfoByAddress(loanToken, network);
169
- balances.debt = {
170
- [addressMapping ? loanTokenInfo.address.toLowerCase() : wethToEth(loanTokenInfo.symbol)]: assetAmountInEth(positionInfo.debt.toString(), wethToEth(loanTokenInfo.symbol)),
171
- };
172
- const collateral = {};
173
- collaterals.forEach((coll, i) => {
174
- const collInfo = getAssetInfoByAddress(coll.token, network);
175
- const rawAmount = positionInfo.collateral[i] ? positionInfo.collateral[i].toString() : '0';
176
- collateral[addressMapping ? collInfo.address.toLowerCase() : wethToEth(collInfo.symbol)] = assetAmountInEth(rawAmount, wethToEth(collInfo.symbol));
177
- });
178
- balances.collateral = collateral;
179
- return balances;
180
- });
181
- export const getMorphoMidnightAccountBalances = (provider, network, block, addressMapping, address, selectedMarket) => __awaiter(void 0, void 0, void 0, function* () { return _getMorphoMidnightAccountBalances(getViemProvider(provider, network), network, block, addressMapping, address, selectedMarket); });
182
- // Lender-side (credit-only) supply position, mirroring getMorphoEarn. `amount` is the credit face value
183
- // redeemable at maturity; `apy` is '0' in MVP because the fixed yield is orderbook-derived, not on-chain.
184
- export function getMorphoMidnightEarn(provider, network, account, selectedMarket, marketInfo) {
185
- return __awaiter(this, void 0, void 0, function* () {
186
- const { marketId } = selectedMarket;
187
- const viewContract = MorphoMidnightViewContractViem(provider, network);
188
- const positionInfo = yield viewContract.read.getPositionInfo([marketId, account]);
189
- const loanTokenData = marketInfo.assetsData[marketInfo.loanToken];
190
- const credit = assetAmountInEth(positionInfo.credit.toString(), marketInfo.loanToken);
191
- const creditUsd = new Dec(credit).mul(loanTokenData.price).toString();
192
- const usedAssets = {
193
- [marketInfo.loanToken]: {
194
- symbol: marketInfo.loanToken,
195
- supplied: credit,
196
- borrowed: '0',
197
- isSupplied: new Dec(positionInfo.credit.toString()).gt(0),
198
- isBorrowed: false,
199
- collateral: false,
200
- suppliedUsd: creditUsd,
201
- borrowedUsd: '0',
202
- },
203
- };
204
- const { netApy } = calculateNetApy({ usedAssets, assetsData: marketInfo.assetsData });
205
- return { apy: netApy, amount: credit, amountUsd: creditUsd };
206
- });
207
- }
@@ -1,91 +0,0 @@
1
- import { EthAddress, IncentiveData, LeverageType, MMUsedAssets, NetworkNumber } from './common';
2
- export declare enum MorphoMidnightVersions {
3
- MorphoMidnightCbBTCUSDC_860_20260731_Base = "morphomidnightcbbtcusdc_860_20260731_base",
4
- MorphoMidnightCbBTCUSDC_860_20260828_Base = "morphomidnightcbbtcusdc_860_20260828_base",
5
- MorphoMidnightCbBTCUSDC_860_20260925_Base = "morphomidnightcbbtcusdc_860_20260925_base",
6
- MorphoMidnightCbBTCUSDC_860_20261030_Base = "morphomidnightcbbtcusdc_860_20261030_base",
7
- MorphoMidnightCbBTCUSDC_860_20261127_Base = "morphomidnightcbbtcusdc_860_20261127_base",
8
- MorphoMidnightCbBTCUSDC_860_20261225_Base = "morphomidnightcbbtcusdc_860_20261225_base"
9
- }
10
- export interface MorphoMidnightCollateralParams {
11
- token: EthAddress;
12
- lltv: number | string;
13
- liquidationCursor: number | string;
14
- oracle: EthAddress;
15
- }
16
- export interface MorphoMidnightMarketData {
17
- chainIds: NetworkNumber[];
18
- label: string;
19
- shortLabel: string;
20
- url: string;
21
- value: MorphoMidnightVersions;
22
- midnight: EthAddress;
23
- loanToken: EthAddress;
24
- collaterals: MorphoMidnightCollateralParams[];
25
- maturity: number;
26
- rcfThreshold: number | string;
27
- enterGate: EthAddress;
28
- liquidatorGate: EthAddress;
29
- marketId: string;
30
- protocolName: string;
31
- }
32
- export interface MorphoMidnightAssetData {
33
- symbol: string;
34
- address: string;
35
- price: string;
36
- supplyRate: string;
37
- borrowRate: string;
38
- supplyIncentives: IncentiveData[];
39
- borrowIncentives: IncentiveData[];
40
- totalSupply?: string;
41
- totalBorrow?: string;
42
- canBeSupplied?: boolean;
43
- canBeBorrowed?: boolean;
44
- lltv?: string;
45
- }
46
- export type MorphoMidnightAssetsData = {
47
- [key: string]: MorphoMidnightAssetData;
48
- };
49
- export interface MorphoMidnightMarketInfo {
50
- id: string;
51
- loanToken: string;
52
- collaterals: string[];
53
- maturity: number;
54
- isMatured: boolean;
55
- totalUnits: string;
56
- withdrawable: string;
57
- totalDebt: string;
58
- lossFactor: string;
59
- tickSpacing: number;
60
- utillization: string;
61
- assetsData: MorphoMidnightAssetsData;
62
- }
63
- export interface MorphoMidnightAggregatedPositionData {
64
- suppliedUsd: string;
65
- suppliedCollateralUsd: string;
66
- borrowedUsd: string;
67
- borrowLimitUsd: string;
68
- liquidationLimitUsd: string;
69
- leftToBorrowUsd: string;
70
- leftToBorrow: string;
71
- netApy: string;
72
- incentiveUsd: string;
73
- totalInterestUsd: string;
74
- ltv: string;
75
- ratio: string;
76
- healthRatio: string;
77
- leveragedType: LeverageType;
78
- leveragedAsset?: string;
79
- currentVolatilePairRatio?: string;
80
- liquidationPrice?: string;
81
- minCollRatio?: string;
82
- collLiquidationRatio?: string;
83
- exposure: string;
84
- }
85
- export interface MorphoMidnightPositionData extends MorphoMidnightAggregatedPositionData {
86
- usedAssets: MMUsedAssets;
87
- credit: string;
88
- debt: string;
89
- maturity: number;
90
- isMatured: boolean;
91
- }
@@ -1,12 +0,0 @@
1
- export var MorphoMidnightVersions;
2
- (function (MorphoMidnightVersions) {
3
- // BASE
4
- // Fixed-term markets are disambiguated by maturity (YYYYMMDD), so the same pair recurs across dates.
5
- // Sourced from the official listing at https://markets.morpho.org/fixed/base (see sitemap.xml).
6
- MorphoMidnightVersions["MorphoMidnightCbBTCUSDC_860_20260731_Base"] = "morphomidnightcbbtcusdc_860_20260731_base";
7
- MorphoMidnightVersions["MorphoMidnightCbBTCUSDC_860_20260828_Base"] = "morphomidnightcbbtcusdc_860_20260828_base";
8
- MorphoMidnightVersions["MorphoMidnightCbBTCUSDC_860_20260925_Base"] = "morphomidnightcbbtcusdc_860_20260925_base";
9
- MorphoMidnightVersions["MorphoMidnightCbBTCUSDC_860_20261030_Base"] = "morphomidnightcbbtcusdc_860_20261030_base";
10
- MorphoMidnightVersions["MorphoMidnightCbBTCUSDC_860_20261127_Base"] = "morphomidnightcbbtcusdc_860_20261127_base";
11
- MorphoMidnightVersions["MorphoMidnightCbBTCUSDC_860_20261225_Base"] = "morphomidnightcbbtcusdc_860_20261225_base";
12
- })(MorphoMidnightVersions || (MorphoMidnightVersions = {}));