@defisaver/positions-sdk 0.0.34 → 0.0.36

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.
@@ -17,13 +17,12 @@ const decimal_js_1 = __importDefault(require("decimal.js"));
17
17
  const tokens_1 = require("@defisaver/tokens");
18
18
  const contracts_1 = require("../contracts");
19
19
  const multicall_1 = require("../multicall");
20
- const compound_1 = require("../types/compound");
21
20
  const staking_1 = require("../staking");
22
21
  const utils_1 = require("../services/utils");
23
22
  const constants_1 = require("../constants");
24
23
  const moneymarket_1 = require("../moneymarket");
25
24
  const compoundHelpers_1 = require("../helpers/compoundHelpers");
26
- const compound_2 = require("../markets/compound");
25
+ const compound_1 = require("../markets/compound");
27
26
  const priceService_1 = require("../services/priceService");
28
27
  const getCompoundV3MarketsData = (web3, network, selectedMarket, defaultWeb3) => __awaiter(void 0, void 0, void 0, function* () {
29
28
  const baseAssetPrice = selectedMarket.baseAsset === 'ETH' ? yield (0, priceService_1.getEthPrice)(defaultWeb3) : yield (0, priceService_1.getUSDCPrice)(defaultWeb3);
@@ -44,35 +43,33 @@ const getCompoundV3MarketsData = (web3, network, selectedMarket, defaultWeb3) =>
44
43
  ];
45
44
  const data = yield (0, multicall_1.multicall)(calls, web3, network);
46
45
  const colls = data[1].colls.map((coll) => (0, compoundHelpers_1.formatMarketData)(coll, network, baseAssetPrice));
47
- if (selectedMarket.value === compound_1.CompoundVersions.CompoundV3ETH) {
48
- for (const coll of colls) {
49
- if (coll.symbol === 'wstETH') {
50
- // eslint-disable-next-line no-await-in-loop
51
- const [[totalSupplyAlternative, supplyCapAlternative], priceAlternative] = yield Promise.all([
52
- (0, staking_1.getStETHByWstETHMultiple)([
53
- (0, tokens_1.assetAmountInWei)(coll.totalSupply, 'wstETH'),
54
- (0, tokens_1.assetAmountInWei)(coll.supplyCap, 'wstETH'),
55
- ], defaultWeb3),
56
- (0, staking_1.getWstETHByStETH)((0, tokens_1.assetAmountInWei)(1, 'stETH'), defaultWeb3),
57
- ]);
58
- coll.totalSupplyAlternative = (0, tokens_1.assetAmountInEth)(totalSupplyAlternative, 'stETH');
59
- coll.supplyCapAlternative = (0, tokens_1.assetAmountInEth)(supplyCapAlternative, 'stETH');
60
- coll.priceAlternative = (0, tokens_1.assetAmountInEth)(priceAlternative, 'wstETH');
61
- // const stEthMarket = markets.find(({ symbol }) => symbol === 'stETH');
62
- // eslint-disable-next-line no-await-in-loop
63
- coll.incentiveSupplyApy = yield (0, staking_1.getStETHApr)(defaultWeb3);
64
- coll.incentiveSupplyToken = 'wstETH';
65
- }
66
- if (coll.symbol === 'cbETH') {
67
- // eslint-disable-next-line no-await-in-loop
68
- coll.incentiveSupplyApy = yield (0, staking_1.getCbETHApr)(defaultWeb3);
69
- coll.incentiveSupplyToken = 'cbETH';
70
- }
71
- if (coll.symbol === 'rETH') {
72
- // eslint-disable-next-line no-await-in-loop
73
- coll.incentiveSupplyApy = yield (0, staking_1.getREthApr)(defaultWeb3);
74
- coll.incentiveSupplyToken = 'rETH';
75
- }
46
+ for (const coll of colls) {
47
+ if (coll.symbol === 'wstETH') {
48
+ // eslint-disable-next-line no-await-in-loop
49
+ const [[totalSupplyAlternative, supplyCapAlternative], priceAlternative] = yield Promise.all([
50
+ (0, staking_1.getStETHByWstETHMultiple)([
51
+ (0, tokens_1.assetAmountInWei)(coll.totalSupply, 'wstETH'),
52
+ (0, tokens_1.assetAmountInWei)(coll.supplyCap, 'wstETH'),
53
+ ], defaultWeb3),
54
+ (0, staking_1.getWstETHByStETH)((0, tokens_1.assetAmountInWei)(1, 'stETH'), defaultWeb3),
55
+ ]);
56
+ coll.totalSupplyAlternative = (0, tokens_1.assetAmountInEth)(totalSupplyAlternative, 'stETH');
57
+ coll.supplyCapAlternative = (0, tokens_1.assetAmountInEth)(supplyCapAlternative, 'stETH');
58
+ coll.priceAlternative = (0, tokens_1.assetAmountInEth)(priceAlternative, 'wstETH');
59
+ // const stEthMarket = markets.find(({ symbol }) => symbol === 'stETH');
60
+ // eslint-disable-next-line no-await-in-loop
61
+ coll.incentiveSupplyApy = yield (0, staking_1.getStETHApr)(defaultWeb3);
62
+ coll.incentiveSupplyToken = 'wstETH';
63
+ }
64
+ if (coll.symbol === 'cbETH') {
65
+ // eslint-disable-next-line no-await-in-loop
66
+ coll.incentiveSupplyApy = yield (0, staking_1.getCbETHApr)(defaultWeb3);
67
+ coll.incentiveSupplyToken = 'cbETH';
68
+ }
69
+ if (coll.symbol === 'rETH') {
70
+ // eslint-disable-next-line no-await-in-loop
71
+ coll.incentiveSupplyApy = yield (0, staking_1.getREthApr)(defaultWeb3);
72
+ coll.incentiveSupplyToken = 'rETH';
76
73
  }
77
74
  }
78
75
  const base = (0, compoundHelpers_1.formatBaseData)(data[0].baseToken, network, baseAssetPrice);
@@ -127,9 +124,9 @@ const getCompoundV3AccountBalances = (web3, network, block, addressMapping, addr
127
124
  return balances;
128
125
  }
129
126
  const market = ({
130
- [(0, compound_2.COMPOUND_V3_ETH)(network).baseMarketAddress.toLowerCase()]: (0, compound_2.COMPOUND_V3_ETH)(network),
131
- [(0, compound_2.COMPOUND_V3_USDC)(network).baseMarketAddress.toLowerCase()]: (0, compound_2.COMPOUND_V3_USDC)(network),
132
- [(0, compound_2.COMPOUND_V3_USDBC)(network).baseMarketAddress.toLowerCase()]: (0, compound_2.COMPOUND_V3_USDBC)(network),
127
+ [(0, compound_1.COMPOUND_V3_ETH)(network).baseMarketAddress.toLowerCase()]: (0, compound_1.COMPOUND_V3_ETH)(network),
128
+ [(0, compound_1.COMPOUND_V3_USDC)(network).baseMarketAddress.toLowerCase()]: (0, compound_1.COMPOUND_V3_USDC)(network),
129
+ [(0, compound_1.COMPOUND_V3_USDBC)(network).baseMarketAddress.toLowerCase()]: (0, compound_1.COMPOUND_V3_USDBC)(network),
133
130
  })[marketAddress.toLowerCase()];
134
131
  const loanInfoContract = (0, contracts_1.CompV3ViewContract)(web3, network, block);
135
132
  const loanInfo = yield loanInfoContract.methods.getLoanData(market.baseMarketAddress, address).call({}, block);
@@ -182,7 +179,7 @@ const getCompoundV3AccountData = (web3, network, address, proxyAddress, extracte
182
179
  if (loanData.borrowAmount.toString() !== '0') {
183
180
  usedAssets[baseAssetSymbol].isBorrowed = true;
184
181
  usedAssets[baseAssetSymbol].borrowed = (0, tokens_1.assetAmountInEth)(loanData.borrowAmount, baseAssetInfo.symbol);
185
- if (selectedMarket.value === (0, compound_2.COMPOUND_V3_ETH)(network).value) {
182
+ if (selectedMarket.value === (0, compound_1.COMPOUND_V3_ETH)(network).value) {
186
183
  usedAssets[baseAssetSymbol].borrowedUsd = new decimal_js_1.default((0, tokens_1.assetAmountInEth)(loanData.borrowValue, baseAssetInfo.symbol))
187
184
  .mul(assetsData[baseAssetSymbol].price)
188
185
  .toString();
@@ -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 !== '') {
@@ -5,9 +5,9 @@ const contracts_1 = require("../../contracts");
5
5
  const types_1 = require("../../types");
6
6
  const CRVUSD_WSTETH_MARKET = (networkId) => ({
7
7
  chainIds: [1],
8
- label: 'wstETH',
8
+ label: 'CurveUSD - wstETH',
9
9
  shortLabel: 'wstETH',
10
- value: types_1.CrvUSDVersions.wstETH,
10
+ value: types_1.CrvUSDVersions.crvUSDwstETH,
11
11
  collAsset: 'wstETH',
12
12
  baseAsset: 'crvUSD',
13
13
  controllerAddress: (0, contracts_1.getConfigContractAddress)('crvUSDwstETHController', networkId),
@@ -17,9 +17,9 @@ const CRVUSD_WSTETH_MARKET = (networkId) => ({
17
17
  exports.CRVUSD_WSTETH_MARKET = CRVUSD_WSTETH_MARKET;
18
18
  const CRVUSD_ETH_MARKET = (networkId) => ({
19
19
  chainIds: [1],
20
- label: 'ETH',
20
+ label: 'CurveUSD - ETH',
21
21
  shortLabel: 'ETH',
22
- value: types_1.CrvUSDVersions.ETH,
22
+ value: types_1.CrvUSDVersions.crvUSDETH,
23
23
  collAsset: 'ETH',
24
24
  baseAsset: 'crvUSD',
25
25
  controllerAddress: (0, contracts_1.getConfigContractAddress)('crvUSDETHController', networkId),
@@ -29,9 +29,9 @@ const CRVUSD_ETH_MARKET = (networkId) => ({
29
29
  exports.CRVUSD_ETH_MARKET = CRVUSD_ETH_MARKET;
30
30
  const CRVUSD_WBTC_MARKET = (networkId) => ({
31
31
  chainIds: [1],
32
- label: 'WBTC',
32
+ label: 'CurveUSD - WBTC',
33
33
  shortLabel: 'WBTC',
34
- value: types_1.CrvUSDVersions.WBTC,
34
+ value: types_1.CrvUSDVersions.crvUSDWBTC,
35
35
  collAsset: 'WBTC',
36
36
  baseAsset: 'crvUSD',
37
37
  controllerAddress: (0, contracts_1.getConfigContractAddress)('crvUSDWBTCController', networkId),
@@ -41,9 +41,9 @@ const CRVUSD_WBTC_MARKET = (networkId) => ({
41
41
  exports.CRVUSD_WBTC_MARKET = CRVUSD_WBTC_MARKET;
42
42
  const CRVUSD_TBTC_MARKET = (networkId) => ({
43
43
  chainIds: [1],
44
- label: 'tBTC',
44
+ label: 'CurveUSD - tBTC',
45
45
  shortLabel: 'tBTC',
46
- value: types_1.CrvUSDVersions.tBTC,
46
+ value: types_1.CrvUSDVersions.crvUSDtBTC,
47
47
  collAsset: 'tBTC',
48
48
  baseAsset: 'crvUSD',
49
49
  controllerAddress: (0, contracts_1.getConfigContractAddress)('crvUSDtBTCController', networkId),
@@ -53,9 +53,9 @@ const CRVUSD_TBTC_MARKET = (networkId) => ({
53
53
  exports.CRVUSD_TBTC_MARKET = CRVUSD_TBTC_MARKET;
54
54
  const CRVUSD_SFRXETH_MARKET = (networkId) => ({
55
55
  chainIds: [1],
56
- label: 'sfrxETH',
56
+ label: 'CurveUSD - sfrxETH',
57
57
  shortLabel: 'sfrxETH',
58
- value: types_1.CrvUSDVersions.sfrxETH,
58
+ value: types_1.CrvUSDVersions.crvUSDsfrxETH,
59
59
  collAsset: 'sfrxETH',
60
60
  baseAsset: 'crvUSD',
61
61
  controllerAddress: (0, contracts_1.getConfigContractAddress)('crvUSDsfrxETHController', networkId),
@@ -64,10 +64,10 @@ const CRVUSD_SFRXETH_MARKET = (networkId) => ({
64
64
  });
65
65
  exports.CRVUSD_SFRXETH_MARKET = CRVUSD_SFRXETH_MARKET;
66
66
  const CrvUsdMarkets = (networkId) => ({
67
- [types_1.CrvUSDVersions.wstETH]: (0, exports.CRVUSD_WSTETH_MARKET)(networkId),
68
- [types_1.CrvUSDVersions.ETH]: (0, exports.CRVUSD_ETH_MARKET)(networkId),
69
- [types_1.CrvUSDVersions.WBTC]: (0, exports.CRVUSD_WBTC_MARKET)(networkId),
70
- [types_1.CrvUSDVersions.tBTC]: (0, exports.CRVUSD_TBTC_MARKET)(networkId),
71
- [types_1.CrvUSDVersions.sfrxETH]: (0, exports.CRVUSD_SFRXETH_MARKET)(networkId),
67
+ [types_1.CrvUSDVersions.crvUSDwstETH]: (0, exports.CRVUSD_WSTETH_MARKET)(networkId),
68
+ [types_1.CrvUSDVersions.crvUSDETH]: (0, exports.CRVUSD_ETH_MARKET)(networkId),
69
+ [types_1.CrvUSDVersions.crvUSDWBTC]: (0, exports.CRVUSD_WBTC_MARKET)(networkId),
70
+ [types_1.CrvUSDVersions.crvUSDtBTC]: (0, exports.CRVUSD_TBTC_MARKET)(networkId),
71
+ [types_1.CrvUSDVersions.crvUSDsfrxETH]: (0, exports.CRVUSD_SFRXETH_MARKET)(networkId),
72
72
  });
73
73
  exports.CrvUsdMarkets = CrvUsdMarkets;
@@ -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',
@@ -126,8 +126,8 @@ function getMorphoBlueAccountData(web3, network, account, selectedMarket, market
126
126
  const loanInfo = yield viewContract.methods.getUserInfo(marketObject, account).call();
127
127
  const usedAssets = {};
128
128
  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();
129
+ const loanTokenSupplied = (0, tokens_1.assetAmountInEth)(loanInfo.suppliedInAssets, marketInfo.loanToken);
130
+ const loanTokenBorrowed = (0, tokens_1.assetAmountInEth)(loanInfo.borrowedInAssets, marketInfo.loanToken);
131
131
  usedAssets[marketInfo.loanToken] = {
132
132
  symbol: loanTokenInfo.symbol,
133
133
  supplied: loanTokenSupplied,
@@ -139,7 +139,7 @@ function getMorphoBlueAccountData(web3, network, account, selectedMarket, market
139
139
  borrowedUsd: new decimal_js_1.default(loanTokenBorrowed).mul(loanTokenInfo.price).toString(),
140
140
  };
141
141
  const collateralTokenInfo = marketInfo.assetsData[marketInfo.collateralToken];
142
- const collateralTokenSupplied = new decimal_js_1.default(loanInfo.collateral).div(constants_1.WAD).toString();
142
+ const collateralTokenSupplied = (0, tokens_1.assetAmountInEth)(loanInfo.collateral, marketInfo.collateralToken);
143
143
  usedAssets[marketInfo.collateralToken] = {
144
144
  symbol: collateralTokenInfo.symbol,
145
145
  supplied: collateralTokenSupplied,
@@ -150,7 +150,7 @@ function getMorphoBlueAccountData(web3, network, account, selectedMarket, market
150
150
  suppliedUsd: new decimal_js_1.default(collateralTokenSupplied).mul(collateralTokenInfo.price).toString(),
151
151
  borrowedUsd: '0',
152
152
  };
153
- return Object.assign({ usedAssets }, (0, morphoBlueHelpers_1.getMorphoBlueAggregatedPositionData)({ usedAssets, assetsData: marketInfo.assetsData, lltv: marketInfo.lltv }));
153
+ return Object.assign({ usedAssets }, (0, morphoBlueHelpers_1.getMorphoBlueAggregatedPositionData)({ usedAssets, assetsData: marketInfo.assetsData, marketInfo }));
154
154
  });
155
155
  }
156
156
  exports.getMorphoBlueAccountData = getMorphoBlueAccountData;
@@ -1,10 +1,10 @@
1
1
  import { NetworkNumber } from './common';
2
2
  export declare enum CrvUSDVersions {
3
- 'wstETH' = "wstETH",
4
- 'WBTC' = "WBTC",
5
- 'ETH' = "ETH",
6
- 'tBTC' = "tBTC",
7
- 'sfrxETH' = "sfrxETH"
3
+ 'crvUSDwstETH' = "wstETH",
4
+ 'crvUSDWBTC' = "WBTC",
5
+ 'crvUSDETH' = "ETH",
6
+ 'crvUSDtBTC' = "tBTC",
7
+ 'crvUSDsfrxETH' = "sfrxETH"
8
8
  }
9
9
  export declare enum CrvUSDStatus {
10
10
  Nonexistant = "Nonexistant",
@@ -3,11 +3,11 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.CrvUSDStatus = exports.CrvUSDVersions = void 0;
4
4
  var CrvUSDVersions;
5
5
  (function (CrvUSDVersions) {
6
- CrvUSDVersions["wstETH"] = "wstETH";
7
- CrvUSDVersions["WBTC"] = "WBTC";
8
- CrvUSDVersions["ETH"] = "ETH";
9
- CrvUSDVersions["tBTC"] = "tBTC";
10
- CrvUSDVersions["sfrxETH"] = "sfrxETH";
6
+ CrvUSDVersions["crvUSDwstETH"] = "wstETH";
7
+ CrvUSDVersions["crvUSDWBTC"] = "WBTC";
8
+ CrvUSDVersions["crvUSDETH"] = "ETH";
9
+ CrvUSDVersions["crvUSDtBTC"] = "tBTC";
10
+ CrvUSDVersions["crvUSDsfrxETH"] = "sfrxETH";
11
11
  })(CrvUSDVersions || (exports.CrvUSDVersions = CrvUSDVersions = {}));
12
12
  var CrvUSDStatus;
13
13
  (function (CrvUSDStatus) {
@@ -47,10 +47,12 @@ export interface MorphoBlueAggregatedPositionData {
47
47
  borrowLimitUsd: string;
48
48
  liquidationLimitUsd: string;
49
49
  leftToBorrowUsd: string;
50
+ leftToBorrow: string;
50
51
  netApy: string;
51
52
  incentiveUsd: string;
52
53
  totalInterestUsd: string;
53
54
  ltv: string;
55
+ ratio: string;
54
56
  leveragedType: string;
55
57
  leveragedAsset?: string;
56
58
  leveragedLsdAssetRatio?: string;
@@ -64,10 +66,12 @@ export interface MorphoBluePositionData {
64
66
  borrowLimitUsd: string;
65
67
  liquidationLimitUsd: string;
66
68
  leftToBorrowUsd: string;
69
+ leftToBorrow: string;
67
70
  netApy: string;
68
71
  incentiveUsd: string;
69
72
  totalInterestUsd: string;
70
73
  ltv: string;
74
+ ratio: string;
71
75
  leveragedType: string;
72
76
  leveragedAsset?: string;
73
77
  leveragedLsdAssetRatio?: string;
@@ -11,7 +11,6 @@ import Dec from 'decimal.js';
11
11
  import { assetAmountInEth, assetAmountInWei, getAssetInfo, getAssetInfoByAddress, } from '@defisaver/tokens';
12
12
  import { CompV3ViewContract } from '../contracts';
13
13
  import { multicall } from '../multicall';
14
- import { CompoundVersions, } from '../types/compound';
15
14
  import { getCbETHApr, getREthApr, getStETHApr, getStETHByWstETHMultiple, getWstETHByStETH, } from '../staking';
16
15
  import { wethToEth } from '../services/utils';
17
16
  import { ZERO_ADDRESS } from '../constants';
@@ -38,35 +37,33 @@ export const getCompoundV3MarketsData = (web3, network, selectedMarket, defaultW
38
37
  ];
39
38
  const data = yield multicall(calls, web3, network);
40
39
  const colls = data[1].colls.map((coll) => formatMarketData(coll, network, baseAssetPrice));
41
- if (selectedMarket.value === CompoundVersions.CompoundV3ETH) {
42
- for (const coll of colls) {
43
- if (coll.symbol === 'wstETH') {
44
- // eslint-disable-next-line no-await-in-loop
45
- const [[totalSupplyAlternative, supplyCapAlternative], priceAlternative] = yield Promise.all([
46
- getStETHByWstETHMultiple([
47
- assetAmountInWei(coll.totalSupply, 'wstETH'),
48
- assetAmountInWei(coll.supplyCap, 'wstETH'),
49
- ], defaultWeb3),
50
- getWstETHByStETH(assetAmountInWei(1, 'stETH'), defaultWeb3),
51
- ]);
52
- coll.totalSupplyAlternative = assetAmountInEth(totalSupplyAlternative, 'stETH');
53
- coll.supplyCapAlternative = assetAmountInEth(supplyCapAlternative, 'stETH');
54
- coll.priceAlternative = assetAmountInEth(priceAlternative, 'wstETH');
55
- // const stEthMarket = markets.find(({ symbol }) => symbol === 'stETH');
56
- // eslint-disable-next-line no-await-in-loop
57
- coll.incentiveSupplyApy = yield getStETHApr(defaultWeb3);
58
- coll.incentiveSupplyToken = 'wstETH';
59
- }
60
- if (coll.symbol === 'cbETH') {
61
- // eslint-disable-next-line no-await-in-loop
62
- coll.incentiveSupplyApy = yield getCbETHApr(defaultWeb3);
63
- coll.incentiveSupplyToken = 'cbETH';
64
- }
65
- if (coll.symbol === 'rETH') {
66
- // eslint-disable-next-line no-await-in-loop
67
- coll.incentiveSupplyApy = yield getREthApr(defaultWeb3);
68
- coll.incentiveSupplyToken = 'rETH';
69
- }
40
+ for (const coll of colls) {
41
+ if (coll.symbol === 'wstETH') {
42
+ // eslint-disable-next-line no-await-in-loop
43
+ const [[totalSupplyAlternative, supplyCapAlternative], priceAlternative] = yield Promise.all([
44
+ getStETHByWstETHMultiple([
45
+ assetAmountInWei(coll.totalSupply, 'wstETH'),
46
+ assetAmountInWei(coll.supplyCap, 'wstETH'),
47
+ ], defaultWeb3),
48
+ getWstETHByStETH(assetAmountInWei(1, 'stETH'), defaultWeb3),
49
+ ]);
50
+ coll.totalSupplyAlternative = assetAmountInEth(totalSupplyAlternative, 'stETH');
51
+ coll.supplyCapAlternative = assetAmountInEth(supplyCapAlternative, 'stETH');
52
+ coll.priceAlternative = assetAmountInEth(priceAlternative, 'wstETH');
53
+ // const stEthMarket = markets.find(({ symbol }) => symbol === 'stETH');
54
+ // eslint-disable-next-line no-await-in-loop
55
+ coll.incentiveSupplyApy = yield getStETHApr(defaultWeb3);
56
+ coll.incentiveSupplyToken = 'wstETH';
57
+ }
58
+ if (coll.symbol === 'cbETH') {
59
+ // eslint-disable-next-line no-await-in-loop
60
+ coll.incentiveSupplyApy = yield getCbETHApr(defaultWeb3);
61
+ coll.incentiveSupplyToken = 'cbETH';
62
+ }
63
+ if (coll.symbol === 'rETH') {
64
+ // eslint-disable-next-line no-await-in-loop
65
+ coll.incentiveSupplyApy = yield getREthApr(defaultWeb3);
66
+ coll.incentiveSupplyToken = 'rETH';
70
67
  }
71
68
  }
72
69
  const base = formatBaseData(data[0].baseToken, network, baseAssetPrice);
@@ -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 !== '') {
@@ -2,9 +2,9 @@ import { getConfigContractAddress } from '../../contracts';
2
2
  import { CrvUSDVersions } from '../../types';
3
3
  export const CRVUSD_WSTETH_MARKET = (networkId) => ({
4
4
  chainIds: [1],
5
- label: 'wstETH',
5
+ label: 'CurveUSD - wstETH',
6
6
  shortLabel: 'wstETH',
7
- value: CrvUSDVersions.wstETH,
7
+ value: CrvUSDVersions.crvUSDwstETH,
8
8
  collAsset: 'wstETH',
9
9
  baseAsset: 'crvUSD',
10
10
  controllerAddress: getConfigContractAddress('crvUSDwstETHController', networkId),
@@ -13,9 +13,9 @@ export const CRVUSD_WSTETH_MARKET = (networkId) => ({
13
13
  });
14
14
  export const CRVUSD_ETH_MARKET = (networkId) => ({
15
15
  chainIds: [1],
16
- label: 'ETH',
16
+ label: 'CurveUSD - ETH',
17
17
  shortLabel: 'ETH',
18
- value: CrvUSDVersions.ETH,
18
+ value: CrvUSDVersions.crvUSDETH,
19
19
  collAsset: 'ETH',
20
20
  baseAsset: 'crvUSD',
21
21
  controllerAddress: getConfigContractAddress('crvUSDETHController', networkId),
@@ -24,9 +24,9 @@ export const CRVUSD_ETH_MARKET = (networkId) => ({
24
24
  });
25
25
  export const CRVUSD_WBTC_MARKET = (networkId) => ({
26
26
  chainIds: [1],
27
- label: 'WBTC',
27
+ label: 'CurveUSD - WBTC',
28
28
  shortLabel: 'WBTC',
29
- value: CrvUSDVersions.WBTC,
29
+ value: CrvUSDVersions.crvUSDWBTC,
30
30
  collAsset: 'WBTC',
31
31
  baseAsset: 'crvUSD',
32
32
  controllerAddress: getConfigContractAddress('crvUSDWBTCController', networkId),
@@ -35,9 +35,9 @@ export const CRVUSD_WBTC_MARKET = (networkId) => ({
35
35
  });
36
36
  export const CRVUSD_TBTC_MARKET = (networkId) => ({
37
37
  chainIds: [1],
38
- label: 'tBTC',
38
+ label: 'CurveUSD - tBTC',
39
39
  shortLabel: 'tBTC',
40
- value: CrvUSDVersions.tBTC,
40
+ value: CrvUSDVersions.crvUSDtBTC,
41
41
  collAsset: 'tBTC',
42
42
  baseAsset: 'crvUSD',
43
43
  controllerAddress: getConfigContractAddress('crvUSDtBTCController', networkId),
@@ -46,9 +46,9 @@ export const CRVUSD_TBTC_MARKET = (networkId) => ({
46
46
  });
47
47
  export const CRVUSD_SFRXETH_MARKET = (networkId) => ({
48
48
  chainIds: [1],
49
- label: 'sfrxETH',
49
+ label: 'CurveUSD - sfrxETH',
50
50
  shortLabel: 'sfrxETH',
51
- value: CrvUSDVersions.sfrxETH,
51
+ value: CrvUSDVersions.crvUSDsfrxETH,
52
52
  collAsset: 'sfrxETH',
53
53
  baseAsset: 'crvUSD',
54
54
  controllerAddress: getConfigContractAddress('crvUSDsfrxETHController', networkId),
@@ -56,9 +56,9 @@ export const CRVUSD_SFRXETH_MARKET = (networkId) => ({
56
56
  createCollAssets: ['sfrxETH'],
57
57
  });
58
58
  export const CrvUsdMarkets = (networkId) => ({
59
- [CrvUSDVersions.wstETH]: CRVUSD_WSTETH_MARKET(networkId),
60
- [CrvUSDVersions.ETH]: CRVUSD_ETH_MARKET(networkId),
61
- [CrvUSDVersions.WBTC]: CRVUSD_WBTC_MARKET(networkId),
62
- [CrvUSDVersions.tBTC]: CRVUSD_TBTC_MARKET(networkId),
63
- [CrvUSDVersions.sfrxETH]: CRVUSD_SFRXETH_MARKET(networkId),
59
+ [CrvUSDVersions.crvUSDwstETH]: CRVUSD_WSTETH_MARKET(networkId),
60
+ [CrvUSDVersions.crvUSDETH]: CRVUSD_ETH_MARKET(networkId),
61
+ [CrvUSDVersions.crvUSDWBTC]: CRVUSD_WBTC_MARKET(networkId),
62
+ [CrvUSDVersions.crvUSDtBTC]: CRVUSD_TBTC_MARKET(networkId),
63
+ [CrvUSDVersions.crvUSDsfrxETH]: CRVUSD_SFRXETH_MARKET(networkId),
64
64
  });
@@ -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';
@@ -119,8 +119,8 @@ export function getMorphoBlueAccountData(web3, network, account, selectedMarket,
119
119
  const loanInfo = yield viewContract.methods.getUserInfo(marketObject, account).call();
120
120
  const usedAssets = {};
121
121
  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();
122
+ const loanTokenSupplied = assetAmountInEth(loanInfo.suppliedInAssets, marketInfo.loanToken);
123
+ const loanTokenBorrowed = assetAmountInEth(loanInfo.borrowedInAssets, marketInfo.loanToken);
124
124
  usedAssets[marketInfo.loanToken] = {
125
125
  symbol: loanTokenInfo.symbol,
126
126
  supplied: loanTokenSupplied,
@@ -132,7 +132,7 @@ export function getMorphoBlueAccountData(web3, network, account, selectedMarket,
132
132
  borrowedUsd: new Dec(loanTokenBorrowed).mul(loanTokenInfo.price).toString(),
133
133
  };
134
134
  const collateralTokenInfo = marketInfo.assetsData[marketInfo.collateralToken];
135
- const collateralTokenSupplied = new Dec(loanInfo.collateral).div(WAD).toString();
135
+ const collateralTokenSupplied = assetAmountInEth(loanInfo.collateral, marketInfo.collateralToken);
136
136
  usedAssets[marketInfo.collateralToken] = {
137
137
  symbol: collateralTokenInfo.symbol,
138
138
  supplied: collateralTokenSupplied,
@@ -143,6 +143,6 @@ export function getMorphoBlueAccountData(web3, network, account, selectedMarket,
143
143
  suppliedUsd: new Dec(collateralTokenSupplied).mul(collateralTokenInfo.price).toString(),
144
144
  borrowedUsd: '0',
145
145
  };
146
- return Object.assign({ usedAssets }, getMorphoBlueAggregatedPositionData({ usedAssets, assetsData: marketInfo.assetsData, lltv: marketInfo.lltv }));
146
+ return Object.assign({ usedAssets }, getMorphoBlueAggregatedPositionData({ usedAssets, assetsData: marketInfo.assetsData, marketInfo }));
147
147
  });
148
148
  }
@@ -1,10 +1,10 @@
1
1
  import { NetworkNumber } from './common';
2
2
  export declare enum CrvUSDVersions {
3
- 'wstETH' = "wstETH",
4
- 'WBTC' = "WBTC",
5
- 'ETH' = "ETH",
6
- 'tBTC' = "tBTC",
7
- 'sfrxETH' = "sfrxETH"
3
+ 'crvUSDwstETH' = "wstETH",
4
+ 'crvUSDWBTC' = "WBTC",
5
+ 'crvUSDETH' = "ETH",
6
+ 'crvUSDtBTC' = "tBTC",
7
+ 'crvUSDsfrxETH' = "sfrxETH"
8
8
  }
9
9
  export declare enum CrvUSDStatus {
10
10
  Nonexistant = "Nonexistant",
@@ -1,10 +1,10 @@
1
1
  export var CrvUSDVersions;
2
2
  (function (CrvUSDVersions) {
3
- CrvUSDVersions["wstETH"] = "wstETH";
4
- CrvUSDVersions["WBTC"] = "WBTC";
5
- CrvUSDVersions["ETH"] = "ETH";
6
- CrvUSDVersions["tBTC"] = "tBTC";
7
- CrvUSDVersions["sfrxETH"] = "sfrxETH";
3
+ CrvUSDVersions["crvUSDwstETH"] = "wstETH";
4
+ CrvUSDVersions["crvUSDWBTC"] = "WBTC";
5
+ CrvUSDVersions["crvUSDETH"] = "ETH";
6
+ CrvUSDVersions["crvUSDtBTC"] = "tBTC";
7
+ CrvUSDVersions["crvUSDsfrxETH"] = "sfrxETH";
8
8
  })(CrvUSDVersions || (CrvUSDVersions = {}));
9
9
  export var CrvUSDStatus;
10
10
  (function (CrvUSDStatus) {
@@ -47,10 +47,12 @@ export interface MorphoBlueAggregatedPositionData {
47
47
  borrowLimitUsd: string;
48
48
  liquidationLimitUsd: string;
49
49
  leftToBorrowUsd: string;
50
+ leftToBorrow: string;
50
51
  netApy: string;
51
52
  incentiveUsd: string;
52
53
  totalInterestUsd: string;
53
54
  ltv: string;
55
+ ratio: string;
54
56
  leveragedType: string;
55
57
  leveragedAsset?: string;
56
58
  leveragedLsdAssetRatio?: string;
@@ -64,10 +66,12 @@ export interface MorphoBluePositionData {
64
66
  borrowLimitUsd: string;
65
67
  liquidationLimitUsd: string;
66
68
  leftToBorrowUsd: string;
69
+ leftToBorrow: string;
67
70
  netApy: string;
68
71
  incentiveUsd: string;
69
72
  totalInterestUsd: string;
70
73
  ltv: string;
74
+ ratio: string;
71
75
  leveragedType: string;
72
76
  leveragedAsset?: string;
73
77
  leveragedLsdAssetRatio?: string;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@defisaver/positions-sdk",
3
- "version": "0.0.34",
3
+ "version": "0.0.36",
4
4
  "description": "",
5
5
  "main": "./cjs/index.js",
6
6
  "module": "./esm/index.js",
@@ -42,35 +42,33 @@ export const getCompoundV3MarketsData = async (web3: Web3, network: NetworkNumbe
42
42
  ];
43
43
  const data = await multicall(calls, web3, network);
44
44
  const colls = data[1].colls.map((coll: any) => formatMarketData(coll, network, baseAssetPrice)) as CompoundV3AssetData[];
45
- if (selectedMarket.value === CompoundVersions.CompoundV3ETH) {
46
- for (const coll of colls) {
47
- if (coll.symbol === 'wstETH') {
48
- // eslint-disable-next-line no-await-in-loop
49
- const [[totalSupplyAlternative, supplyCapAlternative], priceAlternative] = await Promise.all([
50
- getStETHByWstETHMultiple([
51
- assetAmountInWei(coll.totalSupply, 'wstETH'),
52
- assetAmountInWei(coll.supplyCap, 'wstETH'),
53
- ], defaultWeb3),
54
- getWstETHByStETH(assetAmountInWei(1, 'stETH'), defaultWeb3),
55
- ]);
56
- coll.totalSupplyAlternative = assetAmountInEth(totalSupplyAlternative, 'stETH');
57
- coll.supplyCapAlternative = assetAmountInEth(supplyCapAlternative, 'stETH');
58
- coll.priceAlternative = assetAmountInEth(priceAlternative, 'wstETH');
59
- // const stEthMarket = markets.find(({ symbol }) => symbol === 'stETH');
60
- // eslint-disable-next-line no-await-in-loop
61
- coll.incentiveSupplyApy = await getStETHApr(defaultWeb3);
62
- coll.incentiveSupplyToken = 'wstETH';
63
- }
64
- if (coll.symbol === 'cbETH') {
65
- // eslint-disable-next-line no-await-in-loop
66
- coll.incentiveSupplyApy = await getCbETHApr(defaultWeb3);
67
- coll.incentiveSupplyToken = 'cbETH';
68
- }
69
- if (coll.symbol === 'rETH') {
70
- // eslint-disable-next-line no-await-in-loop
71
- coll.incentiveSupplyApy = await getREthApr(defaultWeb3);
72
- coll.incentiveSupplyToken = 'rETH';
73
- }
45
+ for (const coll of colls) {
46
+ if (coll.symbol === 'wstETH') {
47
+ // eslint-disable-next-line no-await-in-loop
48
+ const [[totalSupplyAlternative, supplyCapAlternative], priceAlternative] = await Promise.all([
49
+ getStETHByWstETHMultiple([
50
+ assetAmountInWei(coll.totalSupply, 'wstETH'),
51
+ assetAmountInWei(coll.supplyCap, 'wstETH'),
52
+ ], defaultWeb3),
53
+ getWstETHByStETH(assetAmountInWei(1, 'stETH'), defaultWeb3),
54
+ ]);
55
+ coll.totalSupplyAlternative = assetAmountInEth(totalSupplyAlternative, 'stETH');
56
+ coll.supplyCapAlternative = assetAmountInEth(supplyCapAlternative, 'stETH');
57
+ coll.priceAlternative = assetAmountInEth(priceAlternative, 'wstETH');
58
+ // const stEthMarket = markets.find(({ symbol }) => symbol === 'stETH');
59
+ // eslint-disable-next-line no-await-in-loop
60
+ coll.incentiveSupplyApy = await getStETHApr(defaultWeb3);
61
+ coll.incentiveSupplyToken = 'wstETH';
62
+ }
63
+ if (coll.symbol === 'cbETH') {
64
+ // eslint-disable-next-line no-await-in-loop
65
+ coll.incentiveSupplyApy = await getCbETHApr(defaultWeb3);
66
+ coll.incentiveSupplyToken = 'cbETH';
67
+ }
68
+ if (coll.symbol === 'rETH') {
69
+ // eslint-disable-next-line no-await-in-loop
70
+ coll.incentiveSupplyApy = await getREthApr(defaultWeb3);
71
+ coll.incentiveSupplyToken = 'rETH';
74
72
  }
75
73
  }
76
74
  const base = formatBaseData(data[0].baseToken, network, baseAssetPrice);
@@ -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;
@@ -4,9 +4,9 @@ import { NetworkNumber } from '../../types/common';
4
4
 
5
5
  export const CRVUSD_WSTETH_MARKET = (networkId: NetworkNumber): CrvUSDMarketData => ({
6
6
  chainIds: [1],
7
- label: 'wstETH',
7
+ label: 'CurveUSD - wstETH',
8
8
  shortLabel: 'wstETH',
9
- value: CrvUSDVersions.wstETH,
9
+ value: CrvUSDVersions.crvUSDwstETH,
10
10
  collAsset: 'wstETH',
11
11
  baseAsset: 'crvUSD',
12
12
  controllerAddress: getConfigContractAddress('crvUSDwstETHController', networkId),
@@ -15,9 +15,9 @@ export const CRVUSD_WSTETH_MARKET = (networkId: NetworkNumber): CrvUSDMarketData
15
15
  });
16
16
  export const CRVUSD_ETH_MARKET = (networkId: NetworkNumber): CrvUSDMarketData => ({
17
17
  chainIds: [1],
18
- label: 'ETH',
18
+ label: 'CurveUSD - ETH',
19
19
  shortLabel: 'ETH',
20
- value: CrvUSDVersions.ETH,
20
+ value: CrvUSDVersions.crvUSDETH,
21
21
  collAsset: 'ETH',
22
22
  baseAsset: 'crvUSD',
23
23
  controllerAddress: getConfigContractAddress('crvUSDETHController', networkId),
@@ -26,9 +26,9 @@ export const CRVUSD_ETH_MARKET = (networkId: NetworkNumber): CrvUSDMarketData =>
26
26
  });
27
27
  export const CRVUSD_WBTC_MARKET = (networkId: NetworkNumber): CrvUSDMarketData => ({
28
28
  chainIds: [1],
29
- label: 'WBTC',
29
+ label: 'CurveUSD - WBTC',
30
30
  shortLabel: 'WBTC',
31
- value: CrvUSDVersions.WBTC,
31
+ value: CrvUSDVersions.crvUSDWBTC,
32
32
  collAsset: 'WBTC',
33
33
  baseAsset: 'crvUSD',
34
34
  controllerAddress: getConfigContractAddress('crvUSDWBTCController', networkId),
@@ -38,9 +38,9 @@ export const CRVUSD_WBTC_MARKET = (networkId: NetworkNumber): CrvUSDMarketData =
38
38
 
39
39
  export const CRVUSD_TBTC_MARKET = (networkId: NetworkNumber): CrvUSDMarketData => ({
40
40
  chainIds: [1],
41
- label: 'tBTC',
41
+ label: 'CurveUSD - tBTC',
42
42
  shortLabel: 'tBTC',
43
- value: CrvUSDVersions.tBTC,
43
+ value: CrvUSDVersions.crvUSDtBTC,
44
44
  collAsset: 'tBTC',
45
45
  baseAsset: 'crvUSD',
46
46
  controllerAddress: getConfigContractAddress('crvUSDtBTCController', networkId),
@@ -50,9 +50,9 @@ export const CRVUSD_TBTC_MARKET = (networkId: NetworkNumber): CrvUSDMarketData =
50
50
 
51
51
  export const CRVUSD_SFRXETH_MARKET = (networkId: NetworkNumber): CrvUSDMarketData => ({
52
52
  chainIds: [1],
53
- label: 'sfrxETH',
53
+ label: 'CurveUSD - sfrxETH',
54
54
  shortLabel: 'sfrxETH',
55
- value: CrvUSDVersions.sfrxETH,
55
+ value: CrvUSDVersions.crvUSDsfrxETH,
56
56
  collAsset: 'sfrxETH',
57
57
  baseAsset: 'crvUSD',
58
58
  controllerAddress: getConfigContractAddress('crvUSDsfrxETHController', networkId),
@@ -62,9 +62,9 @@ export const CRVUSD_SFRXETH_MARKET = (networkId: NetworkNumber): CrvUSDMarketDat
62
62
 
63
63
 
64
64
  export const CrvUsdMarkets = (networkId: NetworkNumber) => ({
65
- [CrvUSDVersions.wstETH]: CRVUSD_WSTETH_MARKET(networkId),
66
- [CrvUSDVersions.ETH]: CRVUSD_ETH_MARKET(networkId),
67
- [CrvUSDVersions.WBTC]: CRVUSD_WBTC_MARKET(networkId),
68
- [CrvUSDVersions.tBTC]: CRVUSD_TBTC_MARKET(networkId),
69
- [CrvUSDVersions.sfrxETH]: CRVUSD_SFRXETH_MARKET(networkId),
65
+ [CrvUSDVersions.crvUSDwstETH]: CRVUSD_WSTETH_MARKET(networkId),
66
+ [CrvUSDVersions.crvUSDETH]: CRVUSD_ETH_MARKET(networkId),
67
+ [CrvUSDVersions.crvUSDWBTC]: CRVUSD_WBTC_MARKET(networkId),
68
+ [CrvUSDVersions.crvUSDtBTC]: CRVUSD_TBTC_MARKET(networkId),
69
+ [CrvUSDVersions.crvUSDsfrxETH]: CRVUSD_SFRXETH_MARKET(networkId),
70
70
  }) as const;
@@ -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,
@@ -138,8 +138,8 @@ export async function getMorphoBlueAccountData(web3: Web3, network: NetworkNumbe
138
138
  const usedAssets: MMUsedAssets = {};
139
139
 
140
140
  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();
141
+ const loanTokenSupplied = assetAmountInEth(loanInfo.suppliedInAssets, marketInfo.loanToken);
142
+ const loanTokenBorrowed = assetAmountInEth(loanInfo.borrowedInAssets, marketInfo.loanToken);
143
143
  usedAssets[marketInfo.loanToken] = {
144
144
  symbol: loanTokenInfo.symbol,
145
145
  supplied: loanTokenSupplied,
@@ -152,7 +152,7 @@ export async function getMorphoBlueAccountData(web3: Web3, network: NetworkNumbe
152
152
  };
153
153
 
154
154
  const collateralTokenInfo = marketInfo.assetsData[marketInfo.collateralToken];
155
- const collateralTokenSupplied = new Dec(loanInfo.collateral).div(WAD).toString();
155
+ const collateralTokenSupplied = assetAmountInEth(loanInfo.collateral, marketInfo.collateralToken);
156
156
  usedAssets[marketInfo.collateralToken] = {
157
157
  symbol: collateralTokenInfo.symbol,
158
158
  supplied: collateralTokenSupplied,
@@ -166,6 +166,6 @@ export async function getMorphoBlueAccountData(web3: Web3, network: NetworkNumbe
166
166
 
167
167
  return {
168
168
  usedAssets,
169
- ...getMorphoBlueAggregatedPositionData({ usedAssets, assetsData: marketInfo.assetsData, lltv: marketInfo.lltv }),
169
+ ...getMorphoBlueAggregatedPositionData({ usedAssets, assetsData: marketInfo.assetsData, marketInfo }),
170
170
  };
171
171
  }
@@ -1,11 +1,11 @@
1
1
  import { NetworkNumber } from './common';
2
2
 
3
3
  export enum CrvUSDVersions {
4
- 'wstETH' = 'wstETH',
5
- 'WBTC' = 'WBTC',
6
- 'ETH' = 'ETH',
7
- 'tBTC' = 'tBTC',
8
- 'sfrxETH' = 'sfrxETH',
4
+ 'crvUSDwstETH' = 'wstETH',
5
+ 'crvUSDWBTC' = 'WBTC',
6
+ 'crvUSDETH' = 'ETH',
7
+ 'crvUSDtBTC' = 'tBTC',
8
+ 'crvUSDsfrxETH' = 'sfrxETH',
9
9
  }
10
10
 
11
11
  export enum CrvUSDStatus {
@@ -52,10 +52,12 @@ export interface MorphoBlueAggregatedPositionData {
52
52
  borrowLimitUsd: string,
53
53
  liquidationLimitUsd: string,
54
54
  leftToBorrowUsd: string,
55
+ leftToBorrow: string,
55
56
  netApy: string,
56
57
  incentiveUsd: string,
57
58
  totalInterestUsd: string,
58
59
  ltv: string,
60
+ ratio: string,
59
61
  leveragedType: string,
60
62
  leveragedAsset?: string,
61
63
  leveragedLsdAssetRatio?: string,
@@ -70,10 +72,12 @@ export interface MorphoBluePositionData {
70
72
  borrowLimitUsd: string,
71
73
  liquidationLimitUsd: string,
72
74
  leftToBorrowUsd: string,
75
+ leftToBorrow: string,
73
76
  netApy: string,
74
77
  incentiveUsd: string,
75
78
  totalInterestUsd: string,
76
79
  ltv: string,
80
+ ratio: string,
77
81
  leveragedType: string,
78
82
  leveragedAsset?: string,
79
83
  leveragedLsdAssetRatio?: string,