@defisaver/positions-sdk 0.0.35 → 0.0.37

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.
@@ -1,7 +1,7 @@
1
1
  import { MMUsedAssets } from '../../types/common';
2
- import { MorphoBlueAggregatedPositionData, MorphoBlueAssetsData } from '../../types';
3
- export declare const getMorphoBlueAggregatedPositionData: ({ usedAssets, assetsData, lltv }: {
2
+ import { MorphoBlueAggregatedPositionData, MorphoBlueAssetsData, MorphoBlueMarketInfo } from '../../types';
3
+ export declare const getMorphoBlueAggregatedPositionData: ({ usedAssets, assetsData, marketInfo }: {
4
4
  usedAssets: MMUsedAssets;
5
5
  assetsData: MorphoBlueAssetsData;
6
- lltv: string;
6
+ marketInfo: MorphoBlueMarketInfo;
7
7
  }) => MorphoBlueAggregatedPositionData;
@@ -7,11 +7,12 @@ exports.getMorphoBlueAggregatedPositionData = void 0;
7
7
  const decimal_js_1 = __importDefault(require("decimal.js"));
8
8
  const moneymarket_1 = require("../../moneymarket");
9
9
  const staking_1 = require("../../staking");
10
- const getMorphoBlueAggregatedPositionData = ({ usedAssets, assetsData, lltv }) => {
10
+ const getMorphoBlueAggregatedPositionData = ({ usedAssets, assetsData, marketInfo }) => {
11
11
  const payload = {};
12
12
  payload.suppliedUsd = (0, moneymarket_1.getAssetsTotal)(usedAssets, ({ isSupplied }) => isSupplied, ({ suppliedUsd }) => suppliedUsd);
13
13
  payload.suppliedCollateralUsd = (0, moneymarket_1.getAssetsTotal)(usedAssets, ({ isSupplied, collateral }) => isSupplied && collateral, ({ suppliedUsd }) => suppliedUsd);
14
14
  payload.borrowedUsd = (0, moneymarket_1.getAssetsTotal)(usedAssets, ({ isBorrowed }) => isBorrowed, ({ borrowedUsd }) => borrowedUsd);
15
+ const { lltv, oracle, collateralToken, loanToken, } = marketInfo;
15
16
  payload.borrowLimitUsd = (0, moneymarket_1.getAssetsTotal)(usedAssets, ({ isSupplied, collateral }) => isSupplied && collateral, ({ symbol, suppliedUsd }) => {
16
17
  const suppliedUsdAmount = suppliedUsd;
17
18
  return new decimal_js_1.default(suppliedUsdAmount).mul(lltv);
@@ -19,11 +20,15 @@ const getMorphoBlueAggregatedPositionData = ({ usedAssets, assetsData, lltv }) =
19
20
  payload.liquidationLimitUsd = payload.borrowLimitUsd;
20
21
  const leftToBorrowUsd = new decimal_js_1.default(payload.borrowLimitUsd).sub(payload.borrowedUsd);
21
22
  payload.leftToBorrowUsd = leftToBorrowUsd.lte('0') ? '0' : leftToBorrowUsd.toString();
23
+ payload.leftToBorrow = new decimal_js_1.default(usedAssets[collateralToken].supplied).mul(oracle).mul(lltv).sub(usedAssets[loanToken].borrowed)
24
+ .toString();
22
25
  const { netApy, incentiveUsd, totalInterestUsd } = (0, staking_1.calculateNetApy)(usedAssets, assetsData);
23
26
  payload.netApy = netApy;
24
27
  payload.incentiveUsd = incentiveUsd;
25
28
  payload.totalInterestUsd = totalInterestUsd;
26
29
  payload.ltv = new decimal_js_1.default(payload.borrowedUsd).div(payload.suppliedCollateralUsd).toString();
30
+ payload.ltv = new decimal_js_1.default(usedAssets[loanToken].borrowed).div(oracle).div(usedAssets[collateralToken].supplied).toString();
31
+ payload.ratio = new decimal_js_1.default(usedAssets[collateralToken].supplied).mul(oracle).div(usedAssets[loanToken].borrowed).toString();
27
32
  const { leveragedType, leveragedAsset } = (0, moneymarket_1.isLeveragedPos)(usedAssets);
28
33
  payload.leveragedType = leveragedType;
29
34
  if (leveragedType !== '') {
@@ -8,7 +8,7 @@ const MORPHO_BLUE_WSTETH_ETH = (networkId = common_1.NetworkNumber.Eth) => ({
8
8
  label: 'Morpho Blue',
9
9
  shortLabel: 'wstETH/ETH',
10
10
  value: types_1.MorphoBlueVersions.MorphoBlueWstEthEth,
11
- url: 'default',
11
+ url: 'wstETH/ETH',
12
12
  loanToken: '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2',
13
13
  collateralToken: '0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0',
14
14
  oracle: '0x2a01eb9496094da03c4e364def50f5ad1280ad72',
@@ -23,7 +23,7 @@ const MORPHO_BLUE_WSTETH_USDC = (networkId = common_1.NetworkNumber.Eth) => ({
23
23
  label: 'Morpho Blue',
24
24
  shortLabel: 'wstETH/USDC',
25
25
  value: types_1.MorphoBlueVersions.MorphoBlueWstEthUSDC,
26
- url: 'default',
26
+ url: 'wstETH/USDC',
27
27
  loanToken: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48',
28
28
  collateralToken: '0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0',
29
29
  oracle: '0x48F7E36EB6B826B2dF4B2E630B62Cd25e89E40e2',
@@ -90,6 +90,8 @@ function getMorphoBlueMarketData(web3, network, selectedMarket, mainnetWeb3) {
90
90
  borrowRate: new decimal_js_1.default(compoundedBorrowRate).div(constants_1.WAD).mul(100).toString(),
91
91
  totalSupply: new decimal_js_1.default(marketInfo.totalSupplyAssets).div(scale).toString(),
92
92
  totalBorrow: new decimal_js_1.default(marketInfo.totalBorrowAssets).div(scale).toString(),
93
+ canBeSupplied: true,
94
+ canBeBorrowed: true,
93
95
  };
94
96
  assetsData[(0, utils_1.wethToEth)(collateralTokenInfo.symbol)] = {
95
97
  symbol: (0, utils_1.wethToEth)(collateralTokenInfo.symbol),
@@ -97,6 +99,8 @@ function getMorphoBlueMarketData(web3, network, selectedMarket, mainnetWeb3) {
97
99
  price: new decimal_js_1.default(loanTokenPrice).div(1e8).mul(oracleRate).toString(),
98
100
  supplyRate: '0',
99
101
  borrowRate: '0',
102
+ canBeSupplied: true,
103
+ canBeBorrowed: false,
100
104
  };
101
105
  if (['wstETH', 'cbETH', 'rETH'].includes(collateralTokenInfo.symbol)) {
102
106
  assetsData[collateralTokenInfo.symbol].incentiveSupplyApy = yield (0, staking_1.getStakingApy)(collateralTokenInfo.symbol, mainnetWeb3);
@@ -126,8 +130,8 @@ function getMorphoBlueAccountData(web3, network, account, selectedMarket, market
126
130
  const loanInfo = yield viewContract.methods.getUserInfo(marketObject, account).call();
127
131
  const usedAssets = {};
128
132
  const loanTokenInfo = marketInfo.assetsData[marketInfo.loanToken];
129
- const loanTokenSupplied = new decimal_js_1.default(loanInfo.suppliedInAssets).div(constants_1.WAD).toString();
130
- const loanTokenBorrowed = new decimal_js_1.default(loanInfo.borrowedInAssets).div(constants_1.WAD).toString();
133
+ const loanTokenSupplied = (0, tokens_1.assetAmountInEth)(loanInfo.suppliedInAssets, marketInfo.loanToken);
134
+ const loanTokenBorrowed = (0, tokens_1.assetAmountInEth)(loanInfo.borrowedInAssets, marketInfo.loanToken);
131
135
  usedAssets[marketInfo.loanToken] = {
132
136
  symbol: loanTokenInfo.symbol,
133
137
  supplied: loanTokenSupplied,
@@ -139,7 +143,7 @@ function getMorphoBlueAccountData(web3, network, account, selectedMarket, market
139
143
  borrowedUsd: new decimal_js_1.default(loanTokenBorrowed).mul(loanTokenInfo.price).toString(),
140
144
  };
141
145
  const collateralTokenInfo = marketInfo.assetsData[marketInfo.collateralToken];
142
- const collateralTokenSupplied = new decimal_js_1.default(loanInfo.collateral).div(constants_1.WAD).toString();
146
+ const collateralTokenSupplied = (0, tokens_1.assetAmountInEth)(loanInfo.collateral, marketInfo.collateralToken);
143
147
  usedAssets[marketInfo.collateralToken] = {
144
148
  symbol: collateralTokenInfo.symbol,
145
149
  supplied: collateralTokenSupplied,
@@ -150,7 +154,7 @@ function getMorphoBlueAccountData(web3, network, account, selectedMarket, market
150
154
  suppliedUsd: new decimal_js_1.default(collateralTokenSupplied).mul(collateralTokenInfo.price).toString(),
151
155
  borrowedUsd: '0',
152
156
  };
153
- return Object.assign({ usedAssets }, (0, morphoBlueHelpers_1.getMorphoBlueAggregatedPositionData)({ usedAssets, assetsData: marketInfo.assetsData, lltv: marketInfo.lltv }));
157
+ return Object.assign({ usedAssets }, (0, morphoBlueHelpers_1.getMorphoBlueAggregatedPositionData)({ usedAssets, assetsData: marketInfo.assetsData, marketInfo }));
154
158
  });
155
159
  }
156
160
  exports.getMorphoBlueAccountData = getMorphoBlueAccountData;
@@ -26,6 +26,8 @@ export interface MorphoBlueAssetData {
26
26
  incentiveSupplyToken?: string;
27
27
  totalSupply?: string;
28
28
  totalBorrow?: string;
29
+ canBeSupplied?: boolean;
30
+ canBeBorrowed?: boolean;
29
31
  }
30
32
  export type MorphoBlueAssetsData = {
31
33
  [key: string]: MorphoBlueAssetData;
@@ -47,10 +49,12 @@ export interface MorphoBlueAggregatedPositionData {
47
49
  borrowLimitUsd: string;
48
50
  liquidationLimitUsd: string;
49
51
  leftToBorrowUsd: string;
52
+ leftToBorrow: string;
50
53
  netApy: string;
51
54
  incentiveUsd: string;
52
55
  totalInterestUsd: string;
53
56
  ltv: string;
57
+ ratio: string;
54
58
  leveragedType: string;
55
59
  leveragedAsset?: string;
56
60
  leveragedLsdAssetRatio?: string;
@@ -64,10 +68,12 @@ export interface MorphoBluePositionData {
64
68
  borrowLimitUsd: string;
65
69
  liquidationLimitUsd: string;
66
70
  leftToBorrowUsd: string;
71
+ leftToBorrow: string;
67
72
  netApy: string;
68
73
  incentiveUsd: string;
69
74
  totalInterestUsd: string;
70
75
  ltv: string;
76
+ ratio: string;
71
77
  leveragedType: string;
72
78
  leveragedAsset?: string;
73
79
  leveragedLsdAssetRatio?: string;
@@ -1,7 +1,7 @@
1
1
  import { MMUsedAssets } from '../../types/common';
2
- import { MorphoBlueAggregatedPositionData, MorphoBlueAssetsData } from '../../types';
3
- export declare const getMorphoBlueAggregatedPositionData: ({ usedAssets, assetsData, lltv }: {
2
+ import { MorphoBlueAggregatedPositionData, MorphoBlueAssetsData, MorphoBlueMarketInfo } from '../../types';
3
+ export declare const getMorphoBlueAggregatedPositionData: ({ usedAssets, assetsData, marketInfo }: {
4
4
  usedAssets: MMUsedAssets;
5
5
  assetsData: MorphoBlueAssetsData;
6
- lltv: string;
6
+ marketInfo: MorphoBlueMarketInfo;
7
7
  }) => MorphoBlueAggregatedPositionData;
@@ -1,11 +1,12 @@
1
1
  import Dec from 'decimal.js';
2
2
  import { calcLeverageLiqPrice, getAssetsTotal, isLeveragedPos } from '../../moneymarket';
3
3
  import { calculateNetApy } from '../../staking';
4
- export const getMorphoBlueAggregatedPositionData = ({ usedAssets, assetsData, lltv }) => {
4
+ export const getMorphoBlueAggregatedPositionData = ({ usedAssets, assetsData, marketInfo }) => {
5
5
  const payload = {};
6
6
  payload.suppliedUsd = getAssetsTotal(usedAssets, ({ isSupplied }) => isSupplied, ({ suppliedUsd }) => suppliedUsd);
7
7
  payload.suppliedCollateralUsd = getAssetsTotal(usedAssets, ({ isSupplied, collateral }) => isSupplied && collateral, ({ suppliedUsd }) => suppliedUsd);
8
8
  payload.borrowedUsd = getAssetsTotal(usedAssets, ({ isBorrowed }) => isBorrowed, ({ borrowedUsd }) => borrowedUsd);
9
+ const { lltv, oracle, collateralToken, loanToken, } = marketInfo;
9
10
  payload.borrowLimitUsd = getAssetsTotal(usedAssets, ({ isSupplied, collateral }) => isSupplied && collateral, ({ symbol, suppliedUsd }) => {
10
11
  const suppliedUsdAmount = suppliedUsd;
11
12
  return new Dec(suppliedUsdAmount).mul(lltv);
@@ -13,11 +14,15 @@ export const getMorphoBlueAggregatedPositionData = ({ usedAssets, assetsData, ll
13
14
  payload.liquidationLimitUsd = payload.borrowLimitUsd;
14
15
  const leftToBorrowUsd = new Dec(payload.borrowLimitUsd).sub(payload.borrowedUsd);
15
16
  payload.leftToBorrowUsd = leftToBorrowUsd.lte('0') ? '0' : leftToBorrowUsd.toString();
17
+ payload.leftToBorrow = new Dec(usedAssets[collateralToken].supplied).mul(oracle).mul(lltv).sub(usedAssets[loanToken].borrowed)
18
+ .toString();
16
19
  const { netApy, incentiveUsd, totalInterestUsd } = calculateNetApy(usedAssets, assetsData);
17
20
  payload.netApy = netApy;
18
21
  payload.incentiveUsd = incentiveUsd;
19
22
  payload.totalInterestUsd = totalInterestUsd;
20
23
  payload.ltv = new Dec(payload.borrowedUsd).div(payload.suppliedCollateralUsd).toString();
24
+ payload.ltv = new Dec(usedAssets[loanToken].borrowed).div(oracle).div(usedAssets[collateralToken].supplied).toString();
25
+ payload.ratio = new Dec(usedAssets[collateralToken].supplied).mul(oracle).div(usedAssets[loanToken].borrowed).toString();
21
26
  const { leveragedType, leveragedAsset } = isLeveragedPos(usedAssets);
22
27
  payload.leveragedType = leveragedType;
23
28
  if (leveragedType !== '') {
@@ -5,7 +5,7 @@ export const MORPHO_BLUE_WSTETH_ETH = (networkId = NetworkNumber.Eth) => ({
5
5
  label: 'Morpho Blue',
6
6
  shortLabel: 'wstETH/ETH',
7
7
  value: MorphoBlueVersions.MorphoBlueWstEthEth,
8
- url: 'default',
8
+ url: 'wstETH/ETH',
9
9
  loanToken: '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2',
10
10
  collateralToken: '0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0',
11
11
  oracle: '0x2a01eb9496094da03c4e364def50f5ad1280ad72',
@@ -19,7 +19,7 @@ export const MORPHO_BLUE_WSTETH_USDC = (networkId = NetworkNumber.Eth) => ({
19
19
  label: 'Morpho Blue',
20
20
  shortLabel: 'wstETH/USDC',
21
21
  value: MorphoBlueVersions.MorphoBlueWstEthUSDC,
22
- url: 'default',
22
+ url: 'wstETH/USDC',
23
23
  loanToken: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48',
24
24
  collateralToken: '0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0',
25
25
  oracle: '0x48F7E36EB6B826B2dF4B2E630B62Cd25e89E40e2',
@@ -8,7 +8,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
8
8
  });
9
9
  };
10
10
  import Dec from 'decimal.js';
11
- import { getAssetInfo, getAssetInfoByAddress } from '@defisaver/tokens';
11
+ import { assetAmountInEth, getAssetInfo, getAssetInfoByAddress } from '@defisaver/tokens';
12
12
  import { MorphoBlueViewContract, getConfigContractAbi, getConfigContractAddress, } from '../contracts';
13
13
  import { WAD, SECONDS_PER_YEAR, USD_QUOTE } from '../constants';
14
14
  import { getStakingApy } from '../staking';
@@ -84,6 +84,8 @@ export function getMorphoBlueMarketData(web3, network, selectedMarket, mainnetWe
84
84
  borrowRate: new Dec(compoundedBorrowRate).div(WAD).mul(100).toString(),
85
85
  totalSupply: new Dec(marketInfo.totalSupplyAssets).div(scale).toString(),
86
86
  totalBorrow: new Dec(marketInfo.totalBorrowAssets).div(scale).toString(),
87
+ canBeSupplied: true,
88
+ canBeBorrowed: true,
87
89
  };
88
90
  assetsData[wethToEth(collateralTokenInfo.symbol)] = {
89
91
  symbol: wethToEth(collateralTokenInfo.symbol),
@@ -91,6 +93,8 @@ export function getMorphoBlueMarketData(web3, network, selectedMarket, mainnetWe
91
93
  price: new Dec(loanTokenPrice).div(1e8).mul(oracleRate).toString(),
92
94
  supplyRate: '0',
93
95
  borrowRate: '0',
96
+ canBeSupplied: true,
97
+ canBeBorrowed: false,
94
98
  };
95
99
  if (['wstETH', 'cbETH', 'rETH'].includes(collateralTokenInfo.symbol)) {
96
100
  assetsData[collateralTokenInfo.symbol].incentiveSupplyApy = yield getStakingApy(collateralTokenInfo.symbol, mainnetWeb3);
@@ -119,8 +123,8 @@ export function getMorphoBlueAccountData(web3, network, account, selectedMarket,
119
123
  const loanInfo = yield viewContract.methods.getUserInfo(marketObject, account).call();
120
124
  const usedAssets = {};
121
125
  const loanTokenInfo = marketInfo.assetsData[marketInfo.loanToken];
122
- const loanTokenSupplied = new Dec(loanInfo.suppliedInAssets).div(WAD).toString();
123
- const loanTokenBorrowed = new Dec(loanInfo.borrowedInAssets).div(WAD).toString();
126
+ const loanTokenSupplied = assetAmountInEth(loanInfo.suppliedInAssets, marketInfo.loanToken);
127
+ const loanTokenBorrowed = assetAmountInEth(loanInfo.borrowedInAssets, marketInfo.loanToken);
124
128
  usedAssets[marketInfo.loanToken] = {
125
129
  symbol: loanTokenInfo.symbol,
126
130
  supplied: loanTokenSupplied,
@@ -132,7 +136,7 @@ export function getMorphoBlueAccountData(web3, network, account, selectedMarket,
132
136
  borrowedUsd: new Dec(loanTokenBorrowed).mul(loanTokenInfo.price).toString(),
133
137
  };
134
138
  const collateralTokenInfo = marketInfo.assetsData[marketInfo.collateralToken];
135
- const collateralTokenSupplied = new Dec(loanInfo.collateral).div(WAD).toString();
139
+ const collateralTokenSupplied = assetAmountInEth(loanInfo.collateral, marketInfo.collateralToken);
136
140
  usedAssets[marketInfo.collateralToken] = {
137
141
  symbol: collateralTokenInfo.symbol,
138
142
  supplied: collateralTokenSupplied,
@@ -143,6 +147,6 @@ export function getMorphoBlueAccountData(web3, network, account, selectedMarket,
143
147
  suppliedUsd: new Dec(collateralTokenSupplied).mul(collateralTokenInfo.price).toString(),
144
148
  borrowedUsd: '0',
145
149
  };
146
- return Object.assign({ usedAssets }, getMorphoBlueAggregatedPositionData({ usedAssets, assetsData: marketInfo.assetsData, lltv: marketInfo.lltv }));
150
+ return Object.assign({ usedAssets }, getMorphoBlueAggregatedPositionData({ usedAssets, assetsData: marketInfo.assetsData, marketInfo }));
147
151
  });
148
152
  }
@@ -26,6 +26,8 @@ export interface MorphoBlueAssetData {
26
26
  incentiveSupplyToken?: string;
27
27
  totalSupply?: string;
28
28
  totalBorrow?: string;
29
+ canBeSupplied?: boolean;
30
+ canBeBorrowed?: boolean;
29
31
  }
30
32
  export type MorphoBlueAssetsData = {
31
33
  [key: string]: MorphoBlueAssetData;
@@ -47,10 +49,12 @@ export interface MorphoBlueAggregatedPositionData {
47
49
  borrowLimitUsd: string;
48
50
  liquidationLimitUsd: string;
49
51
  leftToBorrowUsd: string;
52
+ leftToBorrow: string;
50
53
  netApy: string;
51
54
  incentiveUsd: string;
52
55
  totalInterestUsd: string;
53
56
  ltv: string;
57
+ ratio: string;
54
58
  leveragedType: string;
55
59
  leveragedAsset?: string;
56
60
  leveragedLsdAssetRatio?: string;
@@ -64,10 +68,12 @@ export interface MorphoBluePositionData {
64
68
  borrowLimitUsd: string;
65
69
  liquidationLimitUsd: string;
66
70
  leftToBorrowUsd: string;
71
+ leftToBorrow: string;
67
72
  netApy: string;
68
73
  incentiveUsd: string;
69
74
  totalInterestUsd: string;
70
75
  ltv: string;
76
+ ratio: string;
71
77
  leveragedType: string;
72
78
  leveragedAsset?: string;
73
79
  leveragedLsdAssetRatio?: string;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@defisaver/positions-sdk",
3
- "version": "0.0.35",
3
+ "version": "0.0.37",
4
4
  "description": "",
5
5
  "main": "./cjs/index.js",
6
6
  "module": "./esm/index.js",
@@ -2,14 +2,18 @@ import Dec from 'decimal.js';
2
2
  import { calcLeverageLiqPrice, getAssetsTotal, isLeveragedPos } from '../../moneymarket';
3
3
  import { calculateNetApy } from '../../staking';
4
4
  import { MMUsedAssets } from '../../types/common';
5
- import { MorphoBlueAggregatedPositionData, MorphoBlueAssetsData } from '../../types';
5
+ import { MorphoBlueAggregatedPositionData, MorphoBlueAssetsData, MorphoBlueMarketInfo } from '../../types';
6
6
 
7
- export const getMorphoBlueAggregatedPositionData = ({ usedAssets, assetsData, lltv }: { usedAssets: MMUsedAssets, assetsData: MorphoBlueAssetsData, lltv: string }): MorphoBlueAggregatedPositionData => {
7
+ export const getMorphoBlueAggregatedPositionData = ({ usedAssets, assetsData, marketInfo }: { usedAssets: MMUsedAssets, assetsData: MorphoBlueAssetsData, marketInfo: MorphoBlueMarketInfo }): MorphoBlueAggregatedPositionData => {
8
8
  const payload = {} as MorphoBlueAggregatedPositionData;
9
9
  payload.suppliedUsd = getAssetsTotal(usedAssets, ({ isSupplied }: { isSupplied: boolean }) => isSupplied, ({ suppliedUsd }: { suppliedUsd: string }) => suppliedUsd);
10
10
  payload.suppliedCollateralUsd = getAssetsTotal(usedAssets, ({ isSupplied, collateral }: { isSupplied: boolean, collateral: string }) => isSupplied && collateral, ({ suppliedUsd }: { suppliedUsd: string }) => suppliedUsd);
11
11
  payload.borrowedUsd = getAssetsTotal(usedAssets, ({ isBorrowed }: { isBorrowed: boolean }) => isBorrowed, ({ borrowedUsd }: { borrowedUsd: string }) => borrowedUsd);
12
12
 
13
+ const {
14
+ lltv, oracle, collateralToken, loanToken,
15
+ } = marketInfo;
16
+
13
17
  payload.borrowLimitUsd = getAssetsTotal(
14
18
  usedAssets,
15
19
  ({ isSupplied, collateral }: { isSupplied: boolean, collateral: string }) => isSupplied && collateral,
@@ -23,12 +27,17 @@ export const getMorphoBlueAggregatedPositionData = ({ usedAssets, assetsData, ll
23
27
  const leftToBorrowUsd = new Dec(payload.borrowLimitUsd).sub(payload.borrowedUsd);
24
28
  payload.leftToBorrowUsd = leftToBorrowUsd.lte('0') ? '0' : leftToBorrowUsd.toString();
25
29
 
30
+ payload.leftToBorrow = new Dec(usedAssets[collateralToken].supplied).mul(oracle).mul(lltv).sub(usedAssets[loanToken].borrowed)
31
+ .toString();
32
+
26
33
  const { netApy, incentiveUsd, totalInterestUsd } = calculateNetApy(usedAssets, assetsData as any);
27
34
  payload.netApy = netApy;
28
35
  payload.incentiveUsd = incentiveUsd;
29
36
  payload.totalInterestUsd = totalInterestUsd;
30
37
 
31
38
  payload.ltv = new Dec(payload.borrowedUsd).div(payload.suppliedCollateralUsd).toString();
39
+ payload.ltv = new Dec(usedAssets[loanToken].borrowed).div(oracle).div(usedAssets[collateralToken].supplied).toString();
40
+ payload.ratio = new Dec(usedAssets[collateralToken].supplied).mul(oracle).div(usedAssets[loanToken].borrowed).toString();
32
41
 
33
42
  const { leveragedType, leveragedAsset } = isLeveragedPos(usedAssets);
34
43
  payload.leveragedType = leveragedType;
@@ -6,7 +6,7 @@ export const MORPHO_BLUE_WSTETH_ETH = (networkId: NetworkNumber = NetworkNumber.
6
6
  label: 'Morpho Blue',
7
7
  shortLabel: 'wstETH/ETH',
8
8
  value: MorphoBlueVersions.MorphoBlueWstEthEth,
9
- url: 'default',
9
+ url: 'wstETH/ETH',
10
10
  loanToken: '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2',
11
11
  collateralToken: '0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0',
12
12
  oracle: '0x2a01eb9496094da03c4e364def50f5ad1280ad72',
@@ -21,7 +21,7 @@ export const MORPHO_BLUE_WSTETH_USDC = (networkId: NetworkNumber = NetworkNumber
21
21
  label: 'Morpho Blue',
22
22
  shortLabel: 'wstETH/USDC',
23
23
  value: MorphoBlueVersions.MorphoBlueWstEthUSDC,
24
- url: 'default',
24
+ url: 'wstETH/USDC',
25
25
  loanToken: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48',
26
26
  collateralToken: '0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0',
27
27
  oracle: '0x48F7E36EB6B826B2dF4B2E630B62Cd25e89E40e2',
@@ -1,6 +1,6 @@
1
1
  import Web3 from 'web3';
2
2
  import Dec from 'decimal.js';
3
- import { getAssetInfo, getAssetInfoByAddress } from '@defisaver/tokens';
3
+ import { assetAmountInEth, getAssetInfo, getAssetInfoByAddress } from '@defisaver/tokens';
4
4
  import { MMUsedAssets, NetworkNumber } from '../types/common';
5
5
  import {
6
6
  MorphoBlueViewContract,
@@ -98,6 +98,8 @@ export async function getMorphoBlueMarketData(web3: Web3, network: NetworkNumber
98
98
  borrowRate: new Dec(compoundedBorrowRate).div(WAD).mul(100).toString(),
99
99
  totalSupply: new Dec(marketInfo.totalSupplyAssets).div(scale).toString(),
100
100
  totalBorrow: new Dec(marketInfo.totalBorrowAssets).div(scale).toString(),
101
+ canBeSupplied: true,
102
+ canBeBorrowed: true,
101
103
  };
102
104
 
103
105
  assetsData[wethToEth(collateralTokenInfo.symbol)] = {
@@ -106,6 +108,8 @@ export async function getMorphoBlueMarketData(web3: Web3, network: NetworkNumber
106
108
  price: new Dec(loanTokenPrice).div(1e8).mul(oracleRate).toString(),
107
109
  supplyRate: '0',
108
110
  borrowRate: '0',
111
+ canBeSupplied: true,
112
+ canBeBorrowed: false,
109
113
  };
110
114
 
111
115
  if (['wstETH', 'cbETH', 'rETH'].includes(collateralTokenInfo.symbol)) {
@@ -138,8 +142,8 @@ export async function getMorphoBlueAccountData(web3: Web3, network: NetworkNumbe
138
142
  const usedAssets: MMUsedAssets = {};
139
143
 
140
144
  const loanTokenInfo = marketInfo.assetsData[marketInfo.loanToken];
141
- const loanTokenSupplied = new Dec(loanInfo.suppliedInAssets).div(WAD).toString();
142
- const loanTokenBorrowed = new Dec(loanInfo.borrowedInAssets).div(WAD).toString();
145
+ const loanTokenSupplied = assetAmountInEth(loanInfo.suppliedInAssets, marketInfo.loanToken);
146
+ const loanTokenBorrowed = assetAmountInEth(loanInfo.borrowedInAssets, marketInfo.loanToken);
143
147
  usedAssets[marketInfo.loanToken] = {
144
148
  symbol: loanTokenInfo.symbol,
145
149
  supplied: loanTokenSupplied,
@@ -152,7 +156,7 @@ export async function getMorphoBlueAccountData(web3: Web3, network: NetworkNumbe
152
156
  };
153
157
 
154
158
  const collateralTokenInfo = marketInfo.assetsData[marketInfo.collateralToken];
155
- const collateralTokenSupplied = new Dec(loanInfo.collateral).div(WAD).toString();
159
+ const collateralTokenSupplied = assetAmountInEth(loanInfo.collateral, marketInfo.collateralToken);
156
160
  usedAssets[marketInfo.collateralToken] = {
157
161
  symbol: collateralTokenInfo.symbol,
158
162
  supplied: collateralTokenSupplied,
@@ -166,6 +170,6 @@ export async function getMorphoBlueAccountData(web3: Web3, network: NetworkNumbe
166
170
 
167
171
  return {
168
172
  usedAssets,
169
- ...getMorphoBlueAggregatedPositionData({ usedAssets, assetsData: marketInfo.assetsData, lltv: marketInfo.lltv }),
173
+ ...getMorphoBlueAggregatedPositionData({ usedAssets, assetsData: marketInfo.assetsData, marketInfo }),
170
174
  };
171
175
  }
@@ -30,6 +30,8 @@ export interface MorphoBlueAssetData {
30
30
  incentiveSupplyToken?: string,
31
31
  totalSupply?: string,
32
32
  totalBorrow?: string,
33
+ canBeSupplied?: boolean,
34
+ canBeBorrowed?: boolean,
33
35
  }
34
36
 
35
37
  export type MorphoBlueAssetsData = { [key: string]: MorphoBlueAssetData };
@@ -52,10 +54,12 @@ export interface MorphoBlueAggregatedPositionData {
52
54
  borrowLimitUsd: string,
53
55
  liquidationLimitUsd: string,
54
56
  leftToBorrowUsd: string,
57
+ leftToBorrow: string,
55
58
  netApy: string,
56
59
  incentiveUsd: string,
57
60
  totalInterestUsd: string,
58
61
  ltv: string,
62
+ ratio: string,
59
63
  leveragedType: string,
60
64
  leveragedAsset?: string,
61
65
  leveragedLsdAssetRatio?: string,
@@ -70,10 +74,12 @@ export interface MorphoBluePositionData {
70
74
  borrowLimitUsd: string,
71
75
  liquidationLimitUsd: string,
72
76
  leftToBorrowUsd: string,
77
+ leftToBorrow: string,
73
78
  netApy: string,
74
79
  incentiveUsd: string,
75
80
  totalInterestUsd: string,
76
81
  ltv: string,
82
+ ratio: string,
77
83
  leveragedType: string,
78
84
  leveragedAsset?: string,
79
85
  leveragedLsdAssetRatio?: string,