@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.
- package/cjs/helpers/morphoBlueHelpers/index.d.ts +3 -3
- package/cjs/helpers/morphoBlueHelpers/index.js +6 -1
- package/cjs/markets/morphoBlue/index.js +2 -2
- package/cjs/morphoBlue/index.js +8 -4
- package/cjs/types/morphoBlue.d.ts +6 -0
- package/esm/helpers/morphoBlueHelpers/index.d.ts +3 -3
- package/esm/helpers/morphoBlueHelpers/index.js +6 -1
- package/esm/markets/morphoBlue/index.js +2 -2
- package/esm/morphoBlue/index.js +9 -5
- package/esm/types/morphoBlue.d.ts +6 -0
- package/package.json +1 -1
- package/src/helpers/morphoBlueHelpers/index.ts +11 -2
- package/src/markets/morphoBlue/index.ts +2 -2
- package/src/morphoBlue/index.ts +9 -5
- package/src/types/morphoBlue.ts +6 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { MMUsedAssets } from '../../types/common';
|
|
2
|
-
import { MorphoBlueAggregatedPositionData, MorphoBlueAssetsData } from '../../types';
|
|
3
|
-
export declare const getMorphoBlueAggregatedPositionData: ({ usedAssets, assetsData,
|
|
2
|
+
import { MorphoBlueAggregatedPositionData, MorphoBlueAssetsData, MorphoBlueMarketInfo } from '../../types';
|
|
3
|
+
export declare const getMorphoBlueAggregatedPositionData: ({ usedAssets, assetsData, marketInfo }: {
|
|
4
4
|
usedAssets: MMUsedAssets;
|
|
5
5
|
assetsData: MorphoBlueAssetsData;
|
|
6
|
-
|
|
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,
|
|
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: '
|
|
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: '
|
|
26
|
+
url: 'wstETH/USDC',
|
|
27
27
|
loanToken: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48',
|
|
28
28
|
collateralToken: '0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0',
|
|
29
29
|
oracle: '0x48F7E36EB6B826B2dF4B2E630B62Cd25e89E40e2',
|
package/cjs/morphoBlue/index.js
CHANGED
|
@@ -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 =
|
|
130
|
-
const loanTokenBorrowed =
|
|
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 =
|
|
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,
|
|
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,
|
|
2
|
+
import { MorphoBlueAggregatedPositionData, MorphoBlueAssetsData, MorphoBlueMarketInfo } from '../../types';
|
|
3
|
+
export declare const getMorphoBlueAggregatedPositionData: ({ usedAssets, assetsData, marketInfo }: {
|
|
4
4
|
usedAssets: MMUsedAssets;
|
|
5
5
|
assetsData: MorphoBlueAssetsData;
|
|
6
|
-
|
|
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,
|
|
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: '
|
|
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: '
|
|
22
|
+
url: 'wstETH/USDC',
|
|
23
23
|
loanToken: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48',
|
|
24
24
|
collateralToken: '0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0',
|
|
25
25
|
oracle: '0x48F7E36EB6B826B2dF4B2E630B62Cd25e89E40e2',
|
package/esm/morphoBlue/index.js
CHANGED
|
@@ -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 =
|
|
123
|
-
const loanTokenBorrowed =
|
|
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 =
|
|
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,
|
|
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
|
@@ -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,
|
|
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: '
|
|
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: '
|
|
24
|
+
url: 'wstETH/USDC',
|
|
25
25
|
loanToken: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48',
|
|
26
26
|
collateralToken: '0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0',
|
|
27
27
|
oracle: '0x48F7E36EB6B826B2dF4B2E630B62Cd25e89E40e2',
|
package/src/morphoBlue/index.ts
CHANGED
|
@@ -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 =
|
|
142
|
-
const loanTokenBorrowed =
|
|
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 =
|
|
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,
|
|
173
|
+
...getMorphoBlueAggregatedPositionData({ usedAssets, assetsData: marketInfo.assetsData, marketInfo }),
|
|
170
174
|
};
|
|
171
175
|
}
|
package/src/types/morphoBlue.ts
CHANGED
|
@@ -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,
|