@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.
- package/cjs/compoundV3/index.js +32 -35
- package/cjs/helpers/morphoBlueHelpers/index.d.ts +3 -3
- package/cjs/helpers/morphoBlueHelpers/index.js +6 -1
- package/cjs/markets/curveUsd/index.js +15 -15
- package/cjs/markets/morphoBlue/index.js +2 -2
- package/cjs/morphoBlue/index.js +4 -4
- package/cjs/types/curveUsd.d.ts +5 -5
- package/cjs/types/curveUsd.js +5 -5
- package/cjs/types/morphoBlue.d.ts +4 -0
- package/esm/compoundV3/index.js +27 -30
- package/esm/helpers/morphoBlueHelpers/index.d.ts +3 -3
- package/esm/helpers/morphoBlueHelpers/index.js +6 -1
- package/esm/markets/curveUsd/index.js +15 -15
- package/esm/markets/morphoBlue/index.js +2 -2
- package/esm/morphoBlue/index.js +5 -5
- package/esm/types/curveUsd.d.ts +5 -5
- package/esm/types/curveUsd.js +5 -5
- package/esm/types/morphoBlue.d.ts +4 -0
- package/package.json +1 -1
- package/src/compoundV3/index.ts +27 -29
- package/src/helpers/morphoBlueHelpers/index.ts +11 -2
- package/src/markets/curveUsd/index.ts +15 -15
- package/src/markets/morphoBlue/index.ts +2 -2
- package/src/morphoBlue/index.ts +5 -5
- package/src/types/curveUsd.ts +5 -5
- package/src/types/morphoBlue.ts +4 -0
package/cjs/compoundV3/index.js
CHANGED
|
@@ -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
|
|
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
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
(0,
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
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,
|
|
131
|
-
[(0,
|
|
132
|
-
[(0,
|
|
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,
|
|
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,
|
|
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 !== '') {
|
|
@@ -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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
68
|
-
[types_1.CrvUSDVersions.
|
|
69
|
-
[types_1.CrvUSDVersions.
|
|
70
|
-
[types_1.CrvUSDVersions.
|
|
71
|
-
[types_1.CrvUSDVersions.
|
|
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: '
|
|
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
|
@@ -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 =
|
|
130
|
-
const loanTokenBorrowed =
|
|
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 =
|
|
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,
|
|
153
|
+
return Object.assign({ usedAssets }, (0, morphoBlueHelpers_1.getMorphoBlueAggregatedPositionData)({ usedAssets, assetsData: marketInfo.assetsData, marketInfo }));
|
|
154
154
|
});
|
|
155
155
|
}
|
|
156
156
|
exports.getMorphoBlueAccountData = getMorphoBlueAccountData;
|
package/cjs/types/curveUsd.d.ts
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { NetworkNumber } from './common';
|
|
2
2
|
export declare enum CrvUSDVersions {
|
|
3
|
-
'
|
|
4
|
-
'
|
|
5
|
-
'
|
|
6
|
-
'
|
|
7
|
-
'
|
|
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",
|
package/cjs/types/curveUsd.js
CHANGED
|
@@ -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["
|
|
7
|
-
CrvUSDVersions["
|
|
8
|
-
CrvUSDVersions["
|
|
9
|
-
CrvUSDVersions["
|
|
10
|
-
CrvUSDVersions["
|
|
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;
|
package/esm/compoundV3/index.js
CHANGED
|
@@ -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
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
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,
|
|
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 !== '') {
|
|
@@ -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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
60
|
-
[CrvUSDVersions.
|
|
61
|
-
[CrvUSDVersions.
|
|
62
|
-
[CrvUSDVersions.
|
|
63
|
-
[CrvUSDVersions.
|
|
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: '
|
|
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';
|
|
@@ -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 =
|
|
123
|
-
const loanTokenBorrowed =
|
|
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 =
|
|
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,
|
|
146
|
+
return Object.assign({ usedAssets }, getMorphoBlueAggregatedPositionData({ usedAssets, assetsData: marketInfo.assetsData, marketInfo }));
|
|
147
147
|
});
|
|
148
148
|
}
|
package/esm/types/curveUsd.d.ts
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { NetworkNumber } from './common';
|
|
2
2
|
export declare enum CrvUSDVersions {
|
|
3
|
-
'
|
|
4
|
-
'
|
|
5
|
-
'
|
|
6
|
-
'
|
|
7
|
-
'
|
|
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",
|
package/esm/types/curveUsd.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
export var CrvUSDVersions;
|
|
2
2
|
(function (CrvUSDVersions) {
|
|
3
|
-
CrvUSDVersions["
|
|
4
|
-
CrvUSDVersions["
|
|
5
|
-
CrvUSDVersions["
|
|
6
|
-
CrvUSDVersions["
|
|
7
|
-
CrvUSDVersions["
|
|
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
package/src/compoundV3/index.ts
CHANGED
|
@@ -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
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
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,
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
66
|
-
[CrvUSDVersions.
|
|
67
|
-
[CrvUSDVersions.
|
|
68
|
-
[CrvUSDVersions.
|
|
69
|
-
[CrvUSDVersions.
|
|
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: '
|
|
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,
|
|
@@ -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 =
|
|
142
|
-
const loanTokenBorrowed =
|
|
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 =
|
|
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,
|
|
169
|
+
...getMorphoBlueAggregatedPositionData({ usedAssets, assetsData: marketInfo.assetsData, marketInfo }),
|
|
170
170
|
};
|
|
171
171
|
}
|
package/src/types/curveUsd.ts
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { NetworkNumber } from './common';
|
|
2
2
|
|
|
3
3
|
export enum CrvUSDVersions {
|
|
4
|
-
'
|
|
5
|
-
'
|
|
6
|
-
'
|
|
7
|
-
'
|
|
8
|
-
'
|
|
4
|
+
'crvUSDwstETH' = 'wstETH',
|
|
5
|
+
'crvUSDWBTC' = 'WBTC',
|
|
6
|
+
'crvUSDETH' = 'ETH',
|
|
7
|
+
'crvUSDtBTC' = 'tBTC',
|
|
8
|
+
'crvUSDsfrxETH' = 'sfrxETH',
|
|
9
9
|
}
|
|
10
10
|
|
|
11
11
|
export enum CrvUSDStatus {
|
package/src/types/morphoBlue.ts
CHANGED
|
@@ -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,
|