@defisaver/positions-sdk 2.1.126 → 2.1.127
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.js +1 -0
- package/cjs/morphoBlue/index.d.ts +8 -6
- package/cjs/morphoBlue/index.js +69 -40
- package/cjs/portfolio/index.js +1 -1
- package/cjs/types/morphoBlue.d.ts +9 -0
- package/esm/helpers/morphoBlueHelpers/index.js +1 -0
- package/esm/morphoBlue/index.d.ts +8 -6
- package/esm/morphoBlue/index.js +62 -39
- package/esm/portfolio/index.js +2 -2
- package/esm/types/morphoBlue.d.ts +9 -0
- package/package.json +1 -1
- package/src/helpers/morphoBlueHelpers/index.ts +1 -0
- package/src/morphoBlue/index.ts +101 -44
- package/src/portfolio/index.ts +2 -2
- package/src/types/morphoBlue.ts +11 -0
|
@@ -361,6 +361,7 @@ const getRewardsForMarket = (marketId_1, ...args_1) => __awaiter(void 0, [market
|
|
|
361
361
|
query: REWARDS_QUERY,
|
|
362
362
|
variables: { marketId, chainId: network },
|
|
363
363
|
}),
|
|
364
|
+
signal: AbortSignal.timeout(utils_1.LONGER_TIMEOUT),
|
|
364
365
|
});
|
|
365
366
|
const data = yield response.json();
|
|
366
367
|
const marketData = (_a = data === null || data === void 0 ? void 0 : data.data) === null || _a === void 0 ? void 0 : _a.marketById;
|
|
@@ -1,14 +1,16 @@
|
|
|
1
1
|
import { Client } from 'viem';
|
|
2
2
|
import { Blockish, EthAddress, EthereumProvider, NetworkNumber, PositionBalances } from '../types/common';
|
|
3
|
-
import { MorphoBlueMarketData, MorphoBlueMarketInfo, MorphoBluePositionData } from '../types';
|
|
3
|
+
import { MorphoBlueEarnData, MorphoBlueMarketData, MorphoBlueMarketInfo, MorphoBlueMarketRewards, MorphoBluePositionData } from '../types';
|
|
4
|
+
export declare const addMorphoBlueRewardsToMarketInfo: (marketInfo: MorphoBlueMarketInfo, rewards: MorphoBlueMarketRewards) => MorphoBlueMarketInfo;
|
|
4
5
|
export declare function _getMorphoBlueMarketData(provider: Client, network: NetworkNumber, selectedMarket: MorphoBlueMarketData): Promise<MorphoBlueMarketInfo>;
|
|
6
|
+
export declare function _getMorphoBluePortfolioMarketData(provider: Client, network: NetworkNumber, selectedMarket: MorphoBlueMarketData): Promise<MorphoBlueMarketInfo>;
|
|
5
7
|
export declare function getMorphoBlueMarketData(provider: EthereumProvider, network: NetworkNumber, selectedMarket: MorphoBlueMarketData): Promise<MorphoBlueMarketInfo>;
|
|
8
|
+
export declare function getMorphoBluePortfolioMarketData(provider: EthereumProvider, network: NetworkNumber, selectedMarket: MorphoBlueMarketData): Promise<MorphoBlueMarketInfo>;
|
|
9
|
+
export declare const getMorphoBluePositionDataWithMarketInfo: (data: MorphoBluePositionData, marketInfo: MorphoBlueMarketInfo) => MorphoBluePositionData;
|
|
10
|
+
export declare const getMorphoEarnDataWithMarketInfo: (data: MorphoBlueEarnData, marketInfo: MorphoBlueMarketInfo) => MorphoBlueEarnData;
|
|
11
|
+
export declare function getMorphoBlueMarketRewards(network: NetworkNumber, selectedMarket: MorphoBlueMarketData): Promise<MorphoBlueMarketRewards>;
|
|
6
12
|
export declare const _getMorphoBlueAccountBalances: (provider: Client, network: NetworkNumber, block: Blockish, addressMapping: boolean, address: EthAddress, selectedMarket: MorphoBlueMarketData) => Promise<PositionBalances>;
|
|
7
13
|
export declare const getMorphoBlueAccountBalances: (provider: EthereumProvider, network: NetworkNumber, block: Blockish, addressMapping: boolean, address: EthAddress, selectedMarket: MorphoBlueMarketData) => Promise<PositionBalances>;
|
|
8
14
|
export declare function _getMorphoBlueAccountData(provider: Client, network: NetworkNumber, account: EthAddress, selectedMarket: MorphoBlueMarketData, marketInfo: MorphoBlueMarketInfo): Promise<MorphoBluePositionData>;
|
|
9
15
|
export declare function getMorphoBlueAccountData(provider: EthereumProvider, network: NetworkNumber, account: EthAddress, selectedMarket: MorphoBlueMarketData, marketInfo: MorphoBlueMarketInfo): Promise<MorphoBluePositionData>;
|
|
10
|
-
export declare function getMorphoEarn(provider: Client, network: NetworkNumber, account: EthAddress, selectedMarket: MorphoBlueMarketData, marketInfo: MorphoBlueMarketInfo): Promise<
|
|
11
|
-
apy: string;
|
|
12
|
-
amount: string;
|
|
13
|
-
amountUsd: string;
|
|
14
|
-
}>;
|
|
16
|
+
export declare function getMorphoEarn(provider: Client, network: NetworkNumber, account: EthAddress, selectedMarket: MorphoBlueMarketData, marketInfo: MorphoBlueMarketInfo): Promise<MorphoBlueEarnData>;
|
package/cjs/morphoBlue/index.js
CHANGED
|
@@ -12,9 +12,12 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
12
12
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
13
|
};
|
|
14
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
-
exports.getMorphoBlueAccountBalances = exports._getMorphoBlueAccountBalances = void 0;
|
|
15
|
+
exports.getMorphoBlueAccountBalances = exports._getMorphoBlueAccountBalances = exports.getMorphoEarnDataWithMarketInfo = exports.getMorphoBluePositionDataWithMarketInfo = exports.addMorphoBlueRewardsToMarketInfo = void 0;
|
|
16
16
|
exports._getMorphoBlueMarketData = _getMorphoBlueMarketData;
|
|
17
|
+
exports._getMorphoBluePortfolioMarketData = _getMorphoBluePortfolioMarketData;
|
|
17
18
|
exports.getMorphoBlueMarketData = getMorphoBlueMarketData;
|
|
19
|
+
exports.getMorphoBluePortfolioMarketData = getMorphoBluePortfolioMarketData;
|
|
20
|
+
exports.getMorphoBlueMarketRewards = getMorphoBlueMarketRewards;
|
|
18
21
|
exports._getMorphoBlueAccountData = _getMorphoBlueAccountData;
|
|
19
22
|
exports.getMorphoBlueAccountData = getMorphoBlueAccountData;
|
|
20
23
|
exports.getMorphoEarn = getMorphoEarn;
|
|
@@ -29,7 +32,21 @@ const morphoBlueHelpers_1 = require("../helpers/morphoBlueHelpers");
|
|
|
29
32
|
const priceService_1 = require("../services/priceService");
|
|
30
33
|
const viem_1 = require("../services/viem");
|
|
31
34
|
const HARDCODED_USD_STABLE_PRICE = '100000000'; // $1 with 8 decimals
|
|
32
|
-
|
|
35
|
+
const getMorphoRewardIncentives = (apy) => [{
|
|
36
|
+
token: 'MORPHO',
|
|
37
|
+
apy,
|
|
38
|
+
incentiveKind: common_1.IncentiveKind.Reward,
|
|
39
|
+
description: 'Eligible for protocol-level MORPHO incentives.',
|
|
40
|
+
}];
|
|
41
|
+
const addMorphoBlueRewardsToMarketInfo = (marketInfo, rewards) => (Object.assign(Object.assign({}, marketInfo), { assetsData: Object.assign(Object.assign({}, marketInfo.assetsData), { [marketInfo.loanToken]: Object.assign(Object.assign({}, marketInfo.assetsData[marketInfo.loanToken]), { supplyIncentives: [
|
|
42
|
+
...marketInfo.assetsData[marketInfo.loanToken].supplyIncentives.filter(({ token }) => token !== 'MORPHO'),
|
|
43
|
+
...getMorphoRewardIncentives(rewards.supplyApy),
|
|
44
|
+
], borrowIncentives: [
|
|
45
|
+
...marketInfo.assetsData[marketInfo.loanToken].borrowIncentives.filter(({ token }) => token !== 'MORPHO'),
|
|
46
|
+
...getMorphoRewardIncentives(rewards.borrowApy),
|
|
47
|
+
] }) }) }));
|
|
48
|
+
exports.addMorphoBlueRewardsToMarketInfo = addMorphoBlueRewardsToMarketInfo;
|
|
49
|
+
function getMorphoBlueMarketDataInternal(provider, network, selectedMarket) {
|
|
33
50
|
return __awaiter(this, void 0, void 0, function* () {
|
|
34
51
|
const { loanToken, collateralToken, oracle, irm, lltv, oracleType, } = selectedMarket;
|
|
35
52
|
const lltvInWei = new decimal_js_1.default(lltv).mul(constants_1.WAD).toString();
|
|
@@ -61,16 +78,6 @@ function _getMorphoBlueMarketData(provider, network, selectedMarket) {
|
|
|
61
78
|
marketInfo = _marketInfo;
|
|
62
79
|
loanTokenPrice = loanTokenPriceRound[1].toString();
|
|
63
80
|
}
|
|
64
|
-
let morphoSupplyApy = '0';
|
|
65
|
-
let morphoBorrowApy = '0';
|
|
66
|
-
try {
|
|
67
|
-
const { supplyApy: _morphoSupplyApy, borrowApy: _morphoBorrowApy } = yield (0, morphoBlueHelpers_1.getRewardsForMarket)(selectedMarket.marketId, network);
|
|
68
|
-
morphoSupplyApy = _morphoSupplyApy;
|
|
69
|
-
morphoBorrowApy = _morphoBorrowApy;
|
|
70
|
-
}
|
|
71
|
-
catch (e) {
|
|
72
|
-
console.error(e);
|
|
73
|
-
}
|
|
74
81
|
const supplyRate = (0, morphoBlueHelpers_1.getSupplyRate)(marketInfo.totalSupplyAssets.toString(), marketInfo.totalBorrowAssets.toString(), marketInfo.borrowRate.toString(), marketInfo.fee.toString());
|
|
75
82
|
const compoundedBorrowRate = (0, morphoBlueHelpers_1.getBorrowRate)(marketInfo.borrowRate.toString(), marketInfo.totalBorrowShares.toString());
|
|
76
83
|
const utillization = new decimal_js_1.default(marketInfo.totalBorrowAssets.toString()).div(marketInfo.totalSupplyAssets.toString()).mul(100).toString();
|
|
@@ -89,18 +96,8 @@ function _getMorphoBlueMarketData(provider, network, selectedMarket) {
|
|
|
89
96
|
totalBorrow: new decimal_js_1.default(marketInfo.totalBorrowAssets.toString()).div(scale).toString(),
|
|
90
97
|
canBeSupplied: true,
|
|
91
98
|
canBeBorrowed: true,
|
|
92
|
-
supplyIncentives: [
|
|
93
|
-
|
|
94
|
-
apy: morphoSupplyApy,
|
|
95
|
-
incentiveKind: common_1.IncentiveKind.Reward,
|
|
96
|
-
description: 'Eligible for protocol-level MORPHO incentives.',
|
|
97
|
-
}],
|
|
98
|
-
borrowIncentives: [{
|
|
99
|
-
token: 'MORPHO',
|
|
100
|
-
apy: morphoBorrowApy,
|
|
101
|
-
incentiveKind: common_1.IncentiveKind.Reward,
|
|
102
|
-
description: 'Eligible for protocol-level MORPHO incentives.',
|
|
103
|
-
}],
|
|
99
|
+
supplyIncentives: [],
|
|
100
|
+
borrowIncentives: [],
|
|
104
101
|
};
|
|
105
102
|
assetsData[(0, utils_1.wethToEth)(collateralTokenInfo.symbol)] = {
|
|
106
103
|
symbol: (0, utils_1.wethToEth)(collateralTokenInfo.symbol),
|
|
@@ -135,11 +132,56 @@ function _getMorphoBlueMarketData(provider, network, selectedMarket) {
|
|
|
135
132
|
};
|
|
136
133
|
});
|
|
137
134
|
}
|
|
135
|
+
function _getMorphoBlueMarketData(provider, network, selectedMarket) {
|
|
136
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
137
|
+
const marketInfo = yield getMorphoBlueMarketDataInternal(provider, network, selectedMarket);
|
|
138
|
+
try {
|
|
139
|
+
const rewards = yield (0, morphoBlueHelpers_1.getRewardsForMarket)(selectedMarket.marketId, network);
|
|
140
|
+
return (0, exports.addMorphoBlueRewardsToMarketInfo)(marketInfo, rewards);
|
|
141
|
+
}
|
|
142
|
+
catch (error) {
|
|
143
|
+
console.error(error);
|
|
144
|
+
return (0, exports.addMorphoBlueRewardsToMarketInfo)(marketInfo, { supplyApy: '0', borrowApy: '0' });
|
|
145
|
+
}
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
function _getMorphoBluePortfolioMarketData(provider, network, selectedMarket) {
|
|
149
|
+
return getMorphoBlueMarketDataInternal(provider, network, selectedMarket);
|
|
150
|
+
}
|
|
138
151
|
function getMorphoBlueMarketData(provider, network, selectedMarket) {
|
|
139
152
|
return __awaiter(this, void 0, void 0, function* () {
|
|
140
153
|
return _getMorphoBlueMarketData((0, viem_1.getViemProvider)(provider, network), network, selectedMarket);
|
|
141
154
|
});
|
|
142
155
|
}
|
|
156
|
+
function getMorphoBluePortfolioMarketData(provider, network, selectedMarket) {
|
|
157
|
+
return _getMorphoBluePortfolioMarketData((0, viem_1.getViemProvider)(provider, network), network, selectedMarket);
|
|
158
|
+
}
|
|
159
|
+
const getMorphoBluePositionDataWithMarketInfo = (data, marketInfo) => (Object.assign(Object.assign({}, data), (0, morphoBlueHelpers_1.getMorphoBlueAggregatedPositionData)({
|
|
160
|
+
usedAssets: data.usedAssets,
|
|
161
|
+
assetsData: marketInfo.assetsData,
|
|
162
|
+
marketInfo,
|
|
163
|
+
})));
|
|
164
|
+
exports.getMorphoBluePositionDataWithMarketInfo = getMorphoBluePositionDataWithMarketInfo;
|
|
165
|
+
const getMorphoEarnDataWithMarketInfo = (data, marketInfo) => {
|
|
166
|
+
const loanTokenInfo = marketInfo.assetsData[marketInfo.loanToken];
|
|
167
|
+
const usedAssets = {
|
|
168
|
+
[marketInfo.loanToken]: {
|
|
169
|
+
symbol: loanTokenInfo.symbol,
|
|
170
|
+
supplied: data.amount,
|
|
171
|
+
borrowed: '0',
|
|
172
|
+
isSupplied: new decimal_js_1.default(data.amount).gt(0),
|
|
173
|
+
isBorrowed: false,
|
|
174
|
+
collateral: false,
|
|
175
|
+
suppliedUsd: data.amountUsd,
|
|
176
|
+
borrowedUsd: '0',
|
|
177
|
+
},
|
|
178
|
+
};
|
|
179
|
+
return Object.assign(Object.assign({}, data), { apy: (0, staking_1.calculateNetApy)({ usedAssets, assetsData: marketInfo.assetsData }).netApy });
|
|
180
|
+
};
|
|
181
|
+
exports.getMorphoEarnDataWithMarketInfo = getMorphoEarnDataWithMarketInfo;
|
|
182
|
+
function getMorphoBlueMarketRewards(network, selectedMarket) {
|
|
183
|
+
return (0, morphoBlueHelpers_1.getRewardsForMarket)(selectedMarket.marketId, network);
|
|
184
|
+
}
|
|
143
185
|
const _getMorphoBlueAccountBalances = (provider, network, block, addressMapping, address, selectedMarket) => __awaiter(void 0, void 0, void 0, function* () {
|
|
144
186
|
let balances = {
|
|
145
187
|
collateral: {},
|
|
@@ -229,23 +271,10 @@ function getMorphoEarn(provider, network, account, selectedMarket, marketInfo) {
|
|
|
229
271
|
const loanTokenInfo = marketInfo.assetsData[marketInfo.loanToken];
|
|
230
272
|
const loanTokenSupplied = (0, tokens_1.assetAmountInEth)(loanInfo.suppliedInAssets.toString(), marketInfo.loanToken);
|
|
231
273
|
const loanTokenSuppliedUsd = new decimal_js_1.default(loanTokenSupplied).mul(loanTokenInfo.price).toString();
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
symbol: loanTokenInfo.symbol,
|
|
235
|
-
supplied: loanTokenSupplied,
|
|
236
|
-
borrowed: '0',
|
|
237
|
-
isSupplied: new decimal_js_1.default(loanInfo.suppliedInAssets.toString()).gt(0),
|
|
238
|
-
isBorrowed: false,
|
|
239
|
-
collateral: false,
|
|
240
|
-
suppliedUsd: loanTokenSuppliedUsd,
|
|
241
|
-
borrowedUsd: '0',
|
|
242
|
-
},
|
|
243
|
-
};
|
|
244
|
-
const { netApy } = (0, staking_1.calculateNetApy)({ usedAssets, assetsData: marketInfo.assetsData });
|
|
245
|
-
return {
|
|
246
|
-
apy: netApy,
|
|
274
|
+
return (0, exports.getMorphoEarnDataWithMarketInfo)({
|
|
275
|
+
apy: '0',
|
|
247
276
|
amount: loanTokenSupplied,
|
|
248
277
|
amountUsd: loanTokenSuppliedUsd,
|
|
249
|
-
};
|
|
278
|
+
}, marketInfo);
|
|
250
279
|
});
|
|
251
280
|
}
|
package/cjs/portfolio/index.js
CHANGED
|
@@ -151,7 +151,7 @@ function getPortfolioData(provider_1, network_1, defaultProvider_1, addresses_1)
|
|
|
151
151
|
yield Promise.allSettled([
|
|
152
152
|
// === MARKET DATA (needs to be fetched first) ===
|
|
153
153
|
...morphoMarkets.map((market) => __awaiter(this, void 0, void 0, function* () {
|
|
154
|
-
const marketData = yield (0, morphoBlue_1.
|
|
154
|
+
const marketData = yield (0, morphoBlue_1._getMorphoBluePortfolioMarketData)(client, network, market);
|
|
155
155
|
morphoMarketsData[market.value] = marketData;
|
|
156
156
|
})),
|
|
157
157
|
...compoundV3Markets.map((market) => __awaiter(this, void 0, void 0, function* () {
|
|
@@ -212,6 +212,15 @@ export interface MorphoBluePositionData {
|
|
|
212
212
|
borrowShares: string;
|
|
213
213
|
exposure: string;
|
|
214
214
|
}
|
|
215
|
+
export interface MorphoBlueEarnData {
|
|
216
|
+
apy: string;
|
|
217
|
+
amount: string;
|
|
218
|
+
amountUsd: string;
|
|
219
|
+
}
|
|
220
|
+
export interface MorphoBlueMarketRewards {
|
|
221
|
+
supplyApy: string;
|
|
222
|
+
borrowApy: string;
|
|
223
|
+
}
|
|
215
224
|
export interface MorphoBlueVault {
|
|
216
225
|
address: string;
|
|
217
226
|
}
|
|
@@ -348,6 +348,7 @@ export const getRewardsForMarket = (marketId_1, ...args_1) => __awaiter(void 0,
|
|
|
348
348
|
query: REWARDS_QUERY,
|
|
349
349
|
variables: { marketId, chainId: network },
|
|
350
350
|
}),
|
|
351
|
+
signal: AbortSignal.timeout(LONGER_TIMEOUT),
|
|
351
352
|
});
|
|
352
353
|
const data = yield response.json();
|
|
353
354
|
const marketData = (_a = data === null || data === void 0 ? void 0 : data.data) === null || _a === void 0 ? void 0 : _a.marketById;
|
|
@@ -1,14 +1,16 @@
|
|
|
1
1
|
import { Client } from 'viem';
|
|
2
2
|
import { Blockish, EthAddress, EthereumProvider, NetworkNumber, PositionBalances } from '../types/common';
|
|
3
|
-
import { MorphoBlueMarketData, MorphoBlueMarketInfo, MorphoBluePositionData } from '../types';
|
|
3
|
+
import { MorphoBlueEarnData, MorphoBlueMarketData, MorphoBlueMarketInfo, MorphoBlueMarketRewards, MorphoBluePositionData } from '../types';
|
|
4
|
+
export declare const addMorphoBlueRewardsToMarketInfo: (marketInfo: MorphoBlueMarketInfo, rewards: MorphoBlueMarketRewards) => MorphoBlueMarketInfo;
|
|
4
5
|
export declare function _getMorphoBlueMarketData(provider: Client, network: NetworkNumber, selectedMarket: MorphoBlueMarketData): Promise<MorphoBlueMarketInfo>;
|
|
6
|
+
export declare function _getMorphoBluePortfolioMarketData(provider: Client, network: NetworkNumber, selectedMarket: MorphoBlueMarketData): Promise<MorphoBlueMarketInfo>;
|
|
5
7
|
export declare function getMorphoBlueMarketData(provider: EthereumProvider, network: NetworkNumber, selectedMarket: MorphoBlueMarketData): Promise<MorphoBlueMarketInfo>;
|
|
8
|
+
export declare function getMorphoBluePortfolioMarketData(provider: EthereumProvider, network: NetworkNumber, selectedMarket: MorphoBlueMarketData): Promise<MorphoBlueMarketInfo>;
|
|
9
|
+
export declare const getMorphoBluePositionDataWithMarketInfo: (data: MorphoBluePositionData, marketInfo: MorphoBlueMarketInfo) => MorphoBluePositionData;
|
|
10
|
+
export declare const getMorphoEarnDataWithMarketInfo: (data: MorphoBlueEarnData, marketInfo: MorphoBlueMarketInfo) => MorphoBlueEarnData;
|
|
11
|
+
export declare function getMorphoBlueMarketRewards(network: NetworkNumber, selectedMarket: MorphoBlueMarketData): Promise<MorphoBlueMarketRewards>;
|
|
6
12
|
export declare const _getMorphoBlueAccountBalances: (provider: Client, network: NetworkNumber, block: Blockish, addressMapping: boolean, address: EthAddress, selectedMarket: MorphoBlueMarketData) => Promise<PositionBalances>;
|
|
7
13
|
export declare const getMorphoBlueAccountBalances: (provider: EthereumProvider, network: NetworkNumber, block: Blockish, addressMapping: boolean, address: EthAddress, selectedMarket: MorphoBlueMarketData) => Promise<PositionBalances>;
|
|
8
14
|
export declare function _getMorphoBlueAccountData(provider: Client, network: NetworkNumber, account: EthAddress, selectedMarket: MorphoBlueMarketData, marketInfo: MorphoBlueMarketInfo): Promise<MorphoBluePositionData>;
|
|
9
15
|
export declare function getMorphoBlueAccountData(provider: EthereumProvider, network: NetworkNumber, account: EthAddress, selectedMarket: MorphoBlueMarketData, marketInfo: MorphoBlueMarketInfo): Promise<MorphoBluePositionData>;
|
|
10
|
-
export declare function getMorphoEarn(provider: Client, network: NetworkNumber, account: EthAddress, selectedMarket: MorphoBlueMarketData, marketInfo: MorphoBlueMarketInfo): Promise<
|
|
11
|
-
apy: string;
|
|
12
|
-
amount: string;
|
|
13
|
-
amountUsd: string;
|
|
14
|
-
}>;
|
|
16
|
+
export declare function getMorphoEarn(provider: Client, network: NetworkNumber, account: EthAddress, selectedMarket: MorphoBlueMarketData, marketInfo: MorphoBlueMarketInfo): Promise<MorphoBlueEarnData>;
|
package/esm/morphoBlue/index.js
CHANGED
|
@@ -18,7 +18,20 @@ import { getBorrowRate, getMorphoBlueAggregatedPositionData, getRewardsForMarket
|
|
|
18
18
|
import { getChainlinkAssetAddress } from '../services/priceService';
|
|
19
19
|
import { getViemProvider, setViemBlockNumber } from '../services/viem';
|
|
20
20
|
const HARDCODED_USD_STABLE_PRICE = '100000000'; // $1 with 8 decimals
|
|
21
|
-
|
|
21
|
+
const getMorphoRewardIncentives = (apy) => [{
|
|
22
|
+
token: 'MORPHO',
|
|
23
|
+
apy,
|
|
24
|
+
incentiveKind: IncentiveKind.Reward,
|
|
25
|
+
description: 'Eligible for protocol-level MORPHO incentives.',
|
|
26
|
+
}];
|
|
27
|
+
export const addMorphoBlueRewardsToMarketInfo = (marketInfo, rewards) => (Object.assign(Object.assign({}, marketInfo), { assetsData: Object.assign(Object.assign({}, marketInfo.assetsData), { [marketInfo.loanToken]: Object.assign(Object.assign({}, marketInfo.assetsData[marketInfo.loanToken]), { supplyIncentives: [
|
|
28
|
+
...marketInfo.assetsData[marketInfo.loanToken].supplyIncentives.filter(({ token }) => token !== 'MORPHO'),
|
|
29
|
+
...getMorphoRewardIncentives(rewards.supplyApy),
|
|
30
|
+
], borrowIncentives: [
|
|
31
|
+
...marketInfo.assetsData[marketInfo.loanToken].borrowIncentives.filter(({ token }) => token !== 'MORPHO'),
|
|
32
|
+
...getMorphoRewardIncentives(rewards.borrowApy),
|
|
33
|
+
] }) }) }));
|
|
34
|
+
function getMorphoBlueMarketDataInternal(provider, network, selectedMarket) {
|
|
22
35
|
return __awaiter(this, void 0, void 0, function* () {
|
|
23
36
|
const { loanToken, collateralToken, oracle, irm, lltv, oracleType, } = selectedMarket;
|
|
24
37
|
const lltvInWei = new Dec(lltv).mul(WAD).toString();
|
|
@@ -50,16 +63,6 @@ export function _getMorphoBlueMarketData(provider, network, selectedMarket) {
|
|
|
50
63
|
marketInfo = _marketInfo;
|
|
51
64
|
loanTokenPrice = loanTokenPriceRound[1].toString();
|
|
52
65
|
}
|
|
53
|
-
let morphoSupplyApy = '0';
|
|
54
|
-
let morphoBorrowApy = '0';
|
|
55
|
-
try {
|
|
56
|
-
const { supplyApy: _morphoSupplyApy, borrowApy: _morphoBorrowApy } = yield getRewardsForMarket(selectedMarket.marketId, network);
|
|
57
|
-
morphoSupplyApy = _morphoSupplyApy;
|
|
58
|
-
morphoBorrowApy = _morphoBorrowApy;
|
|
59
|
-
}
|
|
60
|
-
catch (e) {
|
|
61
|
-
console.error(e);
|
|
62
|
-
}
|
|
63
66
|
const supplyRate = getSupplyRate(marketInfo.totalSupplyAssets.toString(), marketInfo.totalBorrowAssets.toString(), marketInfo.borrowRate.toString(), marketInfo.fee.toString());
|
|
64
67
|
const compoundedBorrowRate = getBorrowRate(marketInfo.borrowRate.toString(), marketInfo.totalBorrowShares.toString());
|
|
65
68
|
const utillization = new Dec(marketInfo.totalBorrowAssets.toString()).div(marketInfo.totalSupplyAssets.toString()).mul(100).toString();
|
|
@@ -78,18 +81,8 @@ export function _getMorphoBlueMarketData(provider, network, selectedMarket) {
|
|
|
78
81
|
totalBorrow: new Dec(marketInfo.totalBorrowAssets.toString()).div(scale).toString(),
|
|
79
82
|
canBeSupplied: true,
|
|
80
83
|
canBeBorrowed: true,
|
|
81
|
-
supplyIncentives: [
|
|
82
|
-
|
|
83
|
-
apy: morphoSupplyApy,
|
|
84
|
-
incentiveKind: IncentiveKind.Reward,
|
|
85
|
-
description: 'Eligible for protocol-level MORPHO incentives.',
|
|
86
|
-
}],
|
|
87
|
-
borrowIncentives: [{
|
|
88
|
-
token: 'MORPHO',
|
|
89
|
-
apy: morphoBorrowApy,
|
|
90
|
-
incentiveKind: IncentiveKind.Reward,
|
|
91
|
-
description: 'Eligible for protocol-level MORPHO incentives.',
|
|
92
|
-
}],
|
|
84
|
+
supplyIncentives: [],
|
|
85
|
+
borrowIncentives: [],
|
|
93
86
|
};
|
|
94
87
|
assetsData[wethToEth(collateralTokenInfo.symbol)] = {
|
|
95
88
|
symbol: wethToEth(collateralTokenInfo.symbol),
|
|
@@ -124,11 +117,54 @@ export function _getMorphoBlueMarketData(provider, network, selectedMarket) {
|
|
|
124
117
|
};
|
|
125
118
|
});
|
|
126
119
|
}
|
|
120
|
+
export function _getMorphoBlueMarketData(provider, network, selectedMarket) {
|
|
121
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
122
|
+
const marketInfo = yield getMorphoBlueMarketDataInternal(provider, network, selectedMarket);
|
|
123
|
+
try {
|
|
124
|
+
const rewards = yield getRewardsForMarket(selectedMarket.marketId, network);
|
|
125
|
+
return addMorphoBlueRewardsToMarketInfo(marketInfo, rewards);
|
|
126
|
+
}
|
|
127
|
+
catch (error) {
|
|
128
|
+
console.error(error);
|
|
129
|
+
return addMorphoBlueRewardsToMarketInfo(marketInfo, { supplyApy: '0', borrowApy: '0' });
|
|
130
|
+
}
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
export function _getMorphoBluePortfolioMarketData(provider, network, selectedMarket) {
|
|
134
|
+
return getMorphoBlueMarketDataInternal(provider, network, selectedMarket);
|
|
135
|
+
}
|
|
127
136
|
export function getMorphoBlueMarketData(provider, network, selectedMarket) {
|
|
128
137
|
return __awaiter(this, void 0, void 0, function* () {
|
|
129
138
|
return _getMorphoBlueMarketData(getViemProvider(provider, network), network, selectedMarket);
|
|
130
139
|
});
|
|
131
140
|
}
|
|
141
|
+
export function getMorphoBluePortfolioMarketData(provider, network, selectedMarket) {
|
|
142
|
+
return _getMorphoBluePortfolioMarketData(getViemProvider(provider, network), network, selectedMarket);
|
|
143
|
+
}
|
|
144
|
+
export const getMorphoBluePositionDataWithMarketInfo = (data, marketInfo) => (Object.assign(Object.assign({}, data), getMorphoBlueAggregatedPositionData({
|
|
145
|
+
usedAssets: data.usedAssets,
|
|
146
|
+
assetsData: marketInfo.assetsData,
|
|
147
|
+
marketInfo,
|
|
148
|
+
})));
|
|
149
|
+
export const getMorphoEarnDataWithMarketInfo = (data, marketInfo) => {
|
|
150
|
+
const loanTokenInfo = marketInfo.assetsData[marketInfo.loanToken];
|
|
151
|
+
const usedAssets = {
|
|
152
|
+
[marketInfo.loanToken]: {
|
|
153
|
+
symbol: loanTokenInfo.symbol,
|
|
154
|
+
supplied: data.amount,
|
|
155
|
+
borrowed: '0',
|
|
156
|
+
isSupplied: new Dec(data.amount).gt(0),
|
|
157
|
+
isBorrowed: false,
|
|
158
|
+
collateral: false,
|
|
159
|
+
suppliedUsd: data.amountUsd,
|
|
160
|
+
borrowedUsd: '0',
|
|
161
|
+
},
|
|
162
|
+
};
|
|
163
|
+
return Object.assign(Object.assign({}, data), { apy: calculateNetApy({ usedAssets, assetsData: marketInfo.assetsData }).netApy });
|
|
164
|
+
};
|
|
165
|
+
export function getMorphoBlueMarketRewards(network, selectedMarket) {
|
|
166
|
+
return getRewardsForMarket(selectedMarket.marketId, network);
|
|
167
|
+
}
|
|
132
168
|
export const _getMorphoBlueAccountBalances = (provider, network, block, addressMapping, address, selectedMarket) => __awaiter(void 0, void 0, void 0, function* () {
|
|
133
169
|
let balances = {
|
|
134
170
|
collateral: {},
|
|
@@ -216,23 +252,10 @@ export function getMorphoEarn(provider, network, account, selectedMarket, market
|
|
|
216
252
|
const loanTokenInfo = marketInfo.assetsData[marketInfo.loanToken];
|
|
217
253
|
const loanTokenSupplied = assetAmountInEth(loanInfo.suppliedInAssets.toString(), marketInfo.loanToken);
|
|
218
254
|
const loanTokenSuppliedUsd = new Dec(loanTokenSupplied).mul(loanTokenInfo.price).toString();
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
symbol: loanTokenInfo.symbol,
|
|
222
|
-
supplied: loanTokenSupplied,
|
|
223
|
-
borrowed: '0',
|
|
224
|
-
isSupplied: new Dec(loanInfo.suppliedInAssets.toString()).gt(0),
|
|
225
|
-
isBorrowed: false,
|
|
226
|
-
collateral: false,
|
|
227
|
-
suppliedUsd: loanTokenSuppliedUsd,
|
|
228
|
-
borrowedUsd: '0',
|
|
229
|
-
},
|
|
230
|
-
};
|
|
231
|
-
const { netApy } = calculateNetApy({ usedAssets, assetsData: marketInfo.assetsData });
|
|
232
|
-
return {
|
|
233
|
-
apy: netApy,
|
|
255
|
+
return getMorphoEarnDataWithMarketInfo({
|
|
256
|
+
apy: '0',
|
|
234
257
|
amount: loanTokenSupplied,
|
|
235
258
|
amountUsd: loanTokenSuppliedUsd,
|
|
236
|
-
};
|
|
259
|
+
}, marketInfo);
|
|
237
260
|
});
|
|
238
261
|
}
|
package/esm/portfolio/index.js
CHANGED
|
@@ -10,7 +10,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
10
10
|
import Dec from 'decimal.js';
|
|
11
11
|
import { NetworkNumber } from '../types/common';
|
|
12
12
|
import { AaveMarkets, AaveV4Spokes, CompoundMarkets, CrvUsdMarkets, EulerV2Markets, LiquityV2Markets, LlamaLendMarkets, MorphoBlueMarkets, SparkMarkets, } from '../markets';
|
|
13
|
-
import { _getMorphoBlueAccountData,
|
|
13
|
+
import { _getMorphoBlueAccountData, _getMorphoBluePortfolioMarketData, getMorphoEarn } from '../morphoBlue';
|
|
14
14
|
import { AaveVersions, CompoundVersions, } from '../types';
|
|
15
15
|
import { _getCompoundV3AccountData, _getCompoundV3MarketsData } from '../compoundV3';
|
|
16
16
|
import { _getSparkAccountData, _getSparkMarketsData } from '../spark';
|
|
@@ -131,7 +131,7 @@ export function getPortfolioData(provider_1, network_1, defaultProvider_1, addre
|
|
|
131
131
|
yield Promise.allSettled([
|
|
132
132
|
// === MARKET DATA (needs to be fetched first) ===
|
|
133
133
|
...morphoMarkets.map((market) => __awaiter(this, void 0, void 0, function* () {
|
|
134
|
-
const marketData = yield
|
|
134
|
+
const marketData = yield _getMorphoBluePortfolioMarketData(client, network, market);
|
|
135
135
|
morphoMarketsData[market.value] = marketData;
|
|
136
136
|
})),
|
|
137
137
|
...compoundV3Markets.map((market) => __awaiter(this, void 0, void 0, function* () {
|
|
@@ -212,6 +212,15 @@ export interface MorphoBluePositionData {
|
|
|
212
212
|
borrowShares: string;
|
|
213
213
|
exposure: string;
|
|
214
214
|
}
|
|
215
|
+
export interface MorphoBlueEarnData {
|
|
216
|
+
apy: string;
|
|
217
|
+
amount: string;
|
|
218
|
+
amountUsd: string;
|
|
219
|
+
}
|
|
220
|
+
export interface MorphoBlueMarketRewards {
|
|
221
|
+
supplyApy: string;
|
|
222
|
+
borrowApy: string;
|
|
223
|
+
}
|
|
215
224
|
export interface MorphoBlueVault {
|
|
216
225
|
address: string;
|
|
217
226
|
}
|
package/package.json
CHANGED
|
@@ -389,6 +389,7 @@ export const getRewardsForMarket = async (marketId: string, network: NetworkNumb
|
|
|
389
389
|
query: REWARDS_QUERY,
|
|
390
390
|
variables: { marketId, chainId: network },
|
|
391
391
|
}),
|
|
392
|
+
signal: AbortSignal.timeout(LONGER_TIMEOUT),
|
|
392
393
|
});
|
|
393
394
|
|
|
394
395
|
const data = await response.json();
|
package/src/morphoBlue/index.ts
CHANGED
|
@@ -8,7 +8,7 @@ import {
|
|
|
8
8
|
DFSFeedRegistryContractViem, FeedRegistryContractViem, MorphoBlueViewContractViem,
|
|
9
9
|
} from '../contracts';
|
|
10
10
|
import {
|
|
11
|
-
MorphoBlueAssetsData, MorphoBlueMarketData, MorphoBlueMarketInfo, MorphoBluePositionData,
|
|
11
|
+
MorphoBlueAssetsData, MorphoBlueEarnData, MorphoBlueMarketData, MorphoBlueMarketInfo, MorphoBlueMarketRewards, MorphoBluePositionData,
|
|
12
12
|
} from '../types';
|
|
13
13
|
import { USD_QUOTE, WAD } from '../constants';
|
|
14
14
|
import { calculateNetApy, getStakingApy, STAKING_ASSETS } from '../staking';
|
|
@@ -21,7 +21,39 @@ import { getViemProvider, setViemBlockNumber } from '../services/viem';
|
|
|
21
21
|
|
|
22
22
|
const HARDCODED_USD_STABLE_PRICE = '100000000'; // $1 with 8 decimals
|
|
23
23
|
|
|
24
|
-
|
|
24
|
+
const getMorphoRewardIncentives = (apy: string) => [{
|
|
25
|
+
token: 'MORPHO',
|
|
26
|
+
apy,
|
|
27
|
+
incentiveKind: IncentiveKind.Reward,
|
|
28
|
+
description: 'Eligible for protocol-level MORPHO incentives.',
|
|
29
|
+
}];
|
|
30
|
+
|
|
31
|
+
export const addMorphoBlueRewardsToMarketInfo = (
|
|
32
|
+
marketInfo: MorphoBlueMarketInfo,
|
|
33
|
+
rewards: MorphoBlueMarketRewards,
|
|
34
|
+
): MorphoBlueMarketInfo => ({
|
|
35
|
+
...marketInfo,
|
|
36
|
+
assetsData: {
|
|
37
|
+
...marketInfo.assetsData,
|
|
38
|
+
[marketInfo.loanToken]: {
|
|
39
|
+
...marketInfo.assetsData[marketInfo.loanToken],
|
|
40
|
+
supplyIncentives: [
|
|
41
|
+
...marketInfo.assetsData[marketInfo.loanToken].supplyIncentives.filter(({ token }) => token !== 'MORPHO'),
|
|
42
|
+
...getMorphoRewardIncentives(rewards.supplyApy),
|
|
43
|
+
],
|
|
44
|
+
borrowIncentives: [
|
|
45
|
+
...marketInfo.assetsData[marketInfo.loanToken].borrowIncentives.filter(({ token }) => token !== 'MORPHO'),
|
|
46
|
+
...getMorphoRewardIncentives(rewards.borrowApy),
|
|
47
|
+
],
|
|
48
|
+
},
|
|
49
|
+
},
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
async function getMorphoBlueMarketDataInternal(
|
|
53
|
+
provider: Client,
|
|
54
|
+
network: NetworkNumber,
|
|
55
|
+
selectedMarket: MorphoBlueMarketData,
|
|
56
|
+
): Promise<MorphoBlueMarketInfo> {
|
|
25
57
|
const {
|
|
26
58
|
loanToken, collateralToken, oracle, irm, lltv, oracleType,
|
|
27
59
|
} = selectedMarket;
|
|
@@ -59,16 +91,6 @@ export async function _getMorphoBlueMarketData(provider: Client, network: Networ
|
|
|
59
91
|
loanTokenPrice = loanTokenPriceRound[1].toString();
|
|
60
92
|
}
|
|
61
93
|
|
|
62
|
-
let morphoSupplyApy = '0';
|
|
63
|
-
let morphoBorrowApy = '0';
|
|
64
|
-
try {
|
|
65
|
-
const { supplyApy: _morphoSupplyApy, borrowApy: _morphoBorrowApy } = await getRewardsForMarket(selectedMarket.marketId, network);
|
|
66
|
-
morphoSupplyApy = _morphoSupplyApy;
|
|
67
|
-
morphoBorrowApy = _morphoBorrowApy;
|
|
68
|
-
} catch (e) {
|
|
69
|
-
console.error(e);
|
|
70
|
-
}
|
|
71
|
-
|
|
72
94
|
const supplyRate = getSupplyRate(marketInfo.totalSupplyAssets.toString(), marketInfo.totalBorrowAssets.toString(), marketInfo.borrowRate.toString(), marketInfo.fee.toString());
|
|
73
95
|
const compoundedBorrowRate = getBorrowRate(marketInfo.borrowRate.toString(), marketInfo.totalBorrowShares.toString());
|
|
74
96
|
const utillization = new Dec(marketInfo.totalBorrowAssets.toString()).div(marketInfo.totalSupplyAssets.toString()).mul(100).toString();
|
|
@@ -90,18 +112,8 @@ export async function _getMorphoBlueMarketData(provider: Client, network: Networ
|
|
|
90
112
|
totalBorrow: new Dec(marketInfo.totalBorrowAssets.toString()).div(scale).toString(),
|
|
91
113
|
canBeSupplied: true,
|
|
92
114
|
canBeBorrowed: true,
|
|
93
|
-
supplyIncentives: [
|
|
94
|
-
|
|
95
|
-
apy: morphoSupplyApy,
|
|
96
|
-
incentiveKind: IncentiveKind.Reward,
|
|
97
|
-
description: 'Eligible for protocol-level MORPHO incentives.',
|
|
98
|
-
}],
|
|
99
|
-
borrowIncentives: [{
|
|
100
|
-
token: 'MORPHO',
|
|
101
|
-
apy: morphoBorrowApy,
|
|
102
|
-
incentiveKind: IncentiveKind.Reward,
|
|
103
|
-
description: 'Eligible for protocol-level MORPHO incentives.',
|
|
104
|
-
}],
|
|
115
|
+
supplyIncentives: [],
|
|
116
|
+
borrowIncentives: [],
|
|
105
117
|
};
|
|
106
118
|
|
|
107
119
|
assetsData[wethToEth(collateralTokenInfo.symbol)] = {
|
|
@@ -138,10 +150,70 @@ export async function _getMorphoBlueMarketData(provider: Client, network: Networ
|
|
|
138
150
|
};
|
|
139
151
|
}
|
|
140
152
|
|
|
153
|
+
export async function _getMorphoBlueMarketData(provider: Client, network: NetworkNumber, selectedMarket: MorphoBlueMarketData): Promise<MorphoBlueMarketInfo> {
|
|
154
|
+
const marketInfo = await getMorphoBlueMarketDataInternal(provider, network, selectedMarket);
|
|
155
|
+
|
|
156
|
+
try {
|
|
157
|
+
const rewards = await getRewardsForMarket(selectedMarket.marketId, network);
|
|
158
|
+
return addMorphoBlueRewardsToMarketInfo(marketInfo, rewards);
|
|
159
|
+
} catch (error) {
|
|
160
|
+
console.error(error);
|
|
161
|
+
return addMorphoBlueRewardsToMarketInfo(marketInfo, { supplyApy: '0', borrowApy: '0' });
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
export function _getMorphoBluePortfolioMarketData(provider: Client, network: NetworkNumber, selectedMarket: MorphoBlueMarketData): Promise<MorphoBlueMarketInfo> {
|
|
166
|
+
return getMorphoBlueMarketDataInternal(provider, network, selectedMarket);
|
|
167
|
+
}
|
|
168
|
+
|
|
141
169
|
export async function getMorphoBlueMarketData(provider: EthereumProvider, network: NetworkNumber, selectedMarket: MorphoBlueMarketData): Promise<MorphoBlueMarketInfo> {
|
|
142
170
|
return _getMorphoBlueMarketData(getViemProvider(provider, network), network, selectedMarket);
|
|
143
171
|
}
|
|
144
172
|
|
|
173
|
+
export function getMorphoBluePortfolioMarketData(provider: EthereumProvider, network: NetworkNumber, selectedMarket: MorphoBlueMarketData): Promise<MorphoBlueMarketInfo> {
|
|
174
|
+
return _getMorphoBluePortfolioMarketData(getViemProvider(provider, network), network, selectedMarket);
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
export const getMorphoBluePositionDataWithMarketInfo = (
|
|
178
|
+
data: MorphoBluePositionData,
|
|
179
|
+
marketInfo: MorphoBlueMarketInfo,
|
|
180
|
+
): MorphoBluePositionData => ({
|
|
181
|
+
...data,
|
|
182
|
+
...getMorphoBlueAggregatedPositionData({
|
|
183
|
+
usedAssets: data.usedAssets,
|
|
184
|
+
assetsData: marketInfo.assetsData,
|
|
185
|
+
marketInfo,
|
|
186
|
+
}),
|
|
187
|
+
});
|
|
188
|
+
|
|
189
|
+
export const getMorphoEarnDataWithMarketInfo = (data: MorphoBlueEarnData, marketInfo: MorphoBlueMarketInfo): MorphoBlueEarnData => {
|
|
190
|
+
const loanTokenInfo = marketInfo.assetsData[marketInfo.loanToken];
|
|
191
|
+
const usedAssets: MMUsedAssets = {
|
|
192
|
+
[marketInfo.loanToken]: {
|
|
193
|
+
symbol: loanTokenInfo.symbol,
|
|
194
|
+
supplied: data.amount,
|
|
195
|
+
borrowed: '0',
|
|
196
|
+
isSupplied: new Dec(data.amount).gt(0),
|
|
197
|
+
isBorrowed: false,
|
|
198
|
+
collateral: false,
|
|
199
|
+
suppliedUsd: data.amountUsd,
|
|
200
|
+
borrowedUsd: '0',
|
|
201
|
+
},
|
|
202
|
+
};
|
|
203
|
+
|
|
204
|
+
return {
|
|
205
|
+
...data,
|
|
206
|
+
apy: calculateNetApy({ usedAssets, assetsData: marketInfo.assetsData as unknown as MMAssetsData }).netApy,
|
|
207
|
+
};
|
|
208
|
+
};
|
|
209
|
+
|
|
210
|
+
export function getMorphoBlueMarketRewards(
|
|
211
|
+
network: NetworkNumber,
|
|
212
|
+
selectedMarket: MorphoBlueMarketData,
|
|
213
|
+
): Promise<MorphoBlueMarketRewards> {
|
|
214
|
+
return getRewardsForMarket(selectedMarket.marketId, network);
|
|
215
|
+
}
|
|
216
|
+
|
|
145
217
|
export const _getMorphoBlueAccountBalances = async (provider: Client, network: NetworkNumber, block: Blockish, addressMapping: boolean, address: EthAddress, selectedMarket: MorphoBlueMarketData): Promise<PositionBalances> => {
|
|
146
218
|
let balances: PositionBalances = {
|
|
147
219
|
collateral: {},
|
|
@@ -238,7 +310,7 @@ export async function getMorphoBlueAccountData(provider: EthereumProvider, netwo
|
|
|
238
310
|
return _getMorphoBlueAccountData(getViemProvider(provider, network), network, account, selectedMarket, marketInfo);
|
|
239
311
|
}
|
|
240
312
|
|
|
241
|
-
export async function getMorphoEarn(provider: Client, network: NetworkNumber, account: EthAddress, selectedMarket: MorphoBlueMarketData, marketInfo: MorphoBlueMarketInfo): Promise<
|
|
313
|
+
export async function getMorphoEarn(provider: Client, network: NetworkNumber, account: EthAddress, selectedMarket: MorphoBlueMarketData, marketInfo: MorphoBlueMarketInfo): Promise<MorphoBlueEarnData> {
|
|
242
314
|
const {
|
|
243
315
|
loanToken, collateralToken, oracle, irm, lltv,
|
|
244
316
|
} = selectedMarket;
|
|
@@ -254,24 +326,9 @@ export async function getMorphoEarn(provider: Client, network: NetworkNumber, ac
|
|
|
254
326
|
const loanTokenInfo = marketInfo.assetsData[marketInfo.loanToken];
|
|
255
327
|
const loanTokenSupplied = assetAmountInEth(loanInfo.suppliedInAssets.toString(), marketInfo.loanToken);
|
|
256
328
|
const loanTokenSuppliedUsd = new Dec(loanTokenSupplied).mul(loanTokenInfo.price).toString();
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
symbol: loanTokenInfo.symbol,
|
|
260
|
-
supplied: loanTokenSupplied,
|
|
261
|
-
borrowed: '0',
|
|
262
|
-
isSupplied: new Dec(loanInfo.suppliedInAssets.toString()).gt(0),
|
|
263
|
-
isBorrowed: false,
|
|
264
|
-
collateral: false,
|
|
265
|
-
suppliedUsd: loanTokenSuppliedUsd,
|
|
266
|
-
borrowedUsd: '0',
|
|
267
|
-
},
|
|
268
|
-
};
|
|
269
|
-
|
|
270
|
-
const { netApy } = calculateNetApy({ usedAssets, assetsData: marketInfo.assetsData as unknown as MMAssetsData });
|
|
271
|
-
|
|
272
|
-
return {
|
|
273
|
-
apy: netApy,
|
|
329
|
+
return getMorphoEarnDataWithMarketInfo({
|
|
330
|
+
apy: '0',
|
|
274
331
|
amount: loanTokenSupplied,
|
|
275
332
|
amountUsd: loanTokenSuppliedUsd,
|
|
276
|
-
};
|
|
277
|
-
}
|
|
333
|
+
}, marketInfo);
|
|
334
|
+
}
|
package/src/portfolio/index.ts
CHANGED
|
@@ -11,7 +11,7 @@ import {
|
|
|
11
11
|
MorphoBlueMarkets,
|
|
12
12
|
SparkMarkets,
|
|
13
13
|
} from '../markets';
|
|
14
|
-
import { _getMorphoBlueAccountData,
|
|
14
|
+
import { _getMorphoBlueAccountData, _getMorphoBluePortfolioMarketData, getMorphoEarn } from '../morphoBlue';
|
|
15
15
|
import {
|
|
16
16
|
AaveV2MarketData,
|
|
17
17
|
AaveV3MarketData,
|
|
@@ -162,7 +162,7 @@ export async function getPortfolioData(provider: EthereumProvider, network: Netw
|
|
|
162
162
|
await Promise.allSettled([
|
|
163
163
|
// === MARKET DATA (needs to be fetched first) ===
|
|
164
164
|
...morphoMarkets.map(async (market) => {
|
|
165
|
-
const marketData = await
|
|
165
|
+
const marketData = await _getMorphoBluePortfolioMarketData(client, network, market);
|
|
166
166
|
morphoMarketsData[market.value] = marketData;
|
|
167
167
|
}),
|
|
168
168
|
...compoundV3Markets.map(async (market) => {
|
package/src/types/morphoBlue.ts
CHANGED
|
@@ -235,6 +235,17 @@ export interface MorphoBluePositionData {
|
|
|
235
235
|
exposure: string,
|
|
236
236
|
}
|
|
237
237
|
|
|
238
|
+
export interface MorphoBlueEarnData {
|
|
239
|
+
apy: string,
|
|
240
|
+
amount: string,
|
|
241
|
+
amountUsd: string,
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
export interface MorphoBlueMarketRewards {
|
|
245
|
+
supplyApy: string,
|
|
246
|
+
borrowApy: string,
|
|
247
|
+
}
|
|
248
|
+
|
|
238
249
|
export interface MorphoBlueVault {
|
|
239
250
|
address: string,
|
|
240
251
|
}
|