@defisaver/positions-sdk 0.0.74 → 0.0.76
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/config/contracts.d.ts +3 -0
- package/cjs/config/contracts.js +3 -0
- package/cjs/markets/morphoBlue/index.d.ts +2 -0
- package/cjs/markets/morphoBlue/index.js +21 -2
- package/cjs/morphoBlue/index.js +11 -24
- package/cjs/types/morphoBlue.d.ts +2 -1
- package/cjs/types/morphoBlue.js +3 -0
- package/esm/config/contracts.d.ts +3 -0
- package/esm/config/contracts.js +3 -0
- package/esm/markets/morphoBlue/index.d.ts +2 -0
- package/esm/markets/morphoBlue/index.js +19 -1
- package/esm/morphoBlue/index.js +13 -26
- package/esm/types/morphoBlue.d.ts +2 -1
- package/esm/types/morphoBlue.js +3 -0
- package/package.json +1 -1
- package/src/config/contracts.js +3 -0
- package/src/markets/morphoBlue/index.ts +22 -1
- package/src/morphoBlue/index.ts +13 -29
- package/src/types/morphoBlue.ts +4 -0
package/cjs/config/contracts.js
CHANGED
|
@@ -26,6 +26,7 @@ export declare const MORPHO_BLUE_USDE_DAI_770: (networkId?: NetworkNumber) => Mo
|
|
|
26
26
|
export declare const MORPHO_BLUE_USDE_DAI_860: (networkId?: NetworkNumber) => MorphoBlueMarketData;
|
|
27
27
|
export declare const MORPHO_BLUE_USDE_DAI_915: (networkId?: NetworkNumber) => MorphoBlueMarketData;
|
|
28
28
|
export declare const MORPHO_BLUE_USDE_DAI_945: (networkId?: NetworkNumber) => MorphoBlueMarketData;
|
|
29
|
+
export declare const MORPHO_BLUE_CBETH_USDC_860: (networkId?: NetworkNumber) => MorphoBlueMarketData;
|
|
29
30
|
export declare const MorphoBlueMarkets: (networkId: NetworkNumber) => {
|
|
30
31
|
readonly morphobluewstethusdc: MorphoBlueMarketData;
|
|
31
32
|
readonly morphobluesdaiusdc: MorphoBlueMarketData;
|
|
@@ -53,5 +54,6 @@ export declare const MorphoBlueMarkets: (networkId: NetworkNumber) => {
|
|
|
53
54
|
readonly morphoblueusdedai_860: MorphoBlueMarketData;
|
|
54
55
|
readonly morphoblueusdedai_915: MorphoBlueMarketData;
|
|
55
56
|
readonly morphoblueusdedai_945: MorphoBlueMarketData;
|
|
57
|
+
readonly morphobluecbethusdc_860: MorphoBlueMarketData;
|
|
56
58
|
};
|
|
57
59
|
export declare const findMorphoBlueMarket: (collateralToken: string, loanToken: string, lltv: number, oracle: string, irm: string, network?: NetworkNumber) => MorphoBlueMarketData | null;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.findMorphoBlueMarket = exports.MorphoBlueMarkets = exports.MORPHO_BLUE_USDE_DAI_945 = exports.MORPHO_BLUE_USDE_DAI_915 = exports.MORPHO_BLUE_USDE_DAI_860 = exports.MORPHO_BLUE_USDE_DAI_770 = exports.MORPHO_BLUE_SUSDE_DAI_945 = exports.MORPHO_BLUE_SUSDE_DAI_915 = exports.MORPHO_BLUE_SUSDE_DAI_860 = exports.MORPHO_BLUE_SUSDE_DAI_770 = exports.MORPHO_BLUE_WSTETH_ETH_965_EXCHANGE_RATE = exports.MORPHO_BLUE_WSTETH_ETH_945_EXCHANGE_RATE = exports.MORPHO_BLUE_WSTETH_ETH_945 = exports.MORPHO_BLUE_EZETH_ETH = exports.MORPHO_BLUE_SDAI_ETH = exports.MORPHO_BLUE_SUSDE_USDT = exports.MORPHO_BLUE_USDE_USDT = exports.MORPHO_BLUE_WEETH_ETH = exports.MORPHO_BLUE_WSTETH_PYUSD = exports.MORPHO_BLUE_WSTETH_USDA_EXCHANGE_RATE = exports.MORPHO_BLUE_WSTETH_USDT = exports.MORPHO_BLUE_WBTC_ETH = exports.MORPHO_BLUE_WBTC_PYUSD = exports.MORPHO_BLUE_WBTC_USDT = exports.MORPHO_BLUE_ETH_USDC = exports.MORPHO_BLUE_WBTC_USDC = exports.MORPHO_BLUE_SDAI_USDC = exports.MORPHO_BLUE_WSTETH_USDC = void 0;
|
|
3
|
+
exports.findMorphoBlueMarket = exports.MorphoBlueMarkets = exports.MORPHO_BLUE_CBETH_USDC_860 = exports.MORPHO_BLUE_USDE_DAI_945 = exports.MORPHO_BLUE_USDE_DAI_915 = exports.MORPHO_BLUE_USDE_DAI_860 = exports.MORPHO_BLUE_USDE_DAI_770 = exports.MORPHO_BLUE_SUSDE_DAI_945 = exports.MORPHO_BLUE_SUSDE_DAI_915 = exports.MORPHO_BLUE_SUSDE_DAI_860 = exports.MORPHO_BLUE_SUSDE_DAI_770 = exports.MORPHO_BLUE_WSTETH_ETH_965_EXCHANGE_RATE = exports.MORPHO_BLUE_WSTETH_ETH_945_EXCHANGE_RATE = exports.MORPHO_BLUE_WSTETH_ETH_945 = exports.MORPHO_BLUE_EZETH_ETH = exports.MORPHO_BLUE_SDAI_ETH = exports.MORPHO_BLUE_SUSDE_USDT = exports.MORPHO_BLUE_USDE_USDT = exports.MORPHO_BLUE_WEETH_ETH = exports.MORPHO_BLUE_WSTETH_PYUSD = exports.MORPHO_BLUE_WSTETH_USDA_EXCHANGE_RATE = exports.MORPHO_BLUE_WSTETH_USDT = exports.MORPHO_BLUE_WBTC_ETH = exports.MORPHO_BLUE_WBTC_PYUSD = exports.MORPHO_BLUE_WBTC_USDT = exports.MORPHO_BLUE_ETH_USDC = exports.MORPHO_BLUE_WBTC_USDC = exports.MORPHO_BLUE_SDAI_USDC = exports.MORPHO_BLUE_WSTETH_USDC = void 0;
|
|
4
|
+
const utils_1 = require("../../services/utils");
|
|
4
5
|
const types_1 = require("../../types");
|
|
5
6
|
const common_1 = require("../../types/common");
|
|
6
7
|
const MORPHO_BLUE_WSTETH_USDC = (networkId = common_1.NetworkNumber.Eth) => ({
|
|
@@ -422,6 +423,23 @@ const MORPHO_BLUE_USDE_DAI_945 = (networkId = common_1.NetworkNumber.Eth) => ({
|
|
|
422
423
|
protocolName: 'morpho-blue',
|
|
423
424
|
});
|
|
424
425
|
exports.MORPHO_BLUE_USDE_DAI_945 = MORPHO_BLUE_USDE_DAI_945;
|
|
426
|
+
// BASE
|
|
427
|
+
const MORPHO_BLUE_CBETH_USDC_860 = (networkId = common_1.NetworkNumber.Eth) => ({
|
|
428
|
+
chainIds: [common_1.NetworkNumber.Base],
|
|
429
|
+
label: 'Morpho Blue',
|
|
430
|
+
shortLabel: 'cbETH/ETH',
|
|
431
|
+
value: types_1.MorphoBlueVersions.MorphoBlueCbEthUSDC_860,
|
|
432
|
+
url: 'usdedai-dba352d9',
|
|
433
|
+
loanToken: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913',
|
|
434
|
+
collateralToken: '0x2Ae3F1Ec7F1F5012CFEab0185bfc7aa3cf0DEc22',
|
|
435
|
+
oracle: '0x4756c26E01E61c7c2F86b10f4316e179db8F9425',
|
|
436
|
+
oracleType: types_1.MorphoBlueOracleType.MARKET_RATE,
|
|
437
|
+
irm: '0x46415998764C29aB2a25CbeA6254146D50D22687',
|
|
438
|
+
lltv: 0.86,
|
|
439
|
+
marketId: '0xdba352d93a64b17c71104cbddc6aef85cd432322a1446b5b65163cbbc615cd0c',
|
|
440
|
+
protocolName: 'morpho-blue',
|
|
441
|
+
});
|
|
442
|
+
exports.MORPHO_BLUE_CBETH_USDC_860 = MORPHO_BLUE_CBETH_USDC_860;
|
|
425
443
|
const MorphoBlueMarkets = (networkId) => ({
|
|
426
444
|
[types_1.MorphoBlueVersions.MorphoBlueWstEthUSDC]: (0, exports.MORPHO_BLUE_WSTETH_USDC)(networkId),
|
|
427
445
|
[types_1.MorphoBlueVersions.MorphoBlueSDAIUSDC]: (0, exports.MORPHO_BLUE_SDAI_USDC)(networkId),
|
|
@@ -452,12 +470,13 @@ const MorphoBlueMarkets = (networkId) => ({
|
|
|
452
470
|
[types_1.MorphoBlueVersions.MorphoBlueUSDeDAI_860]: (0, exports.MORPHO_BLUE_USDE_DAI_860)(networkId),
|
|
453
471
|
[types_1.MorphoBlueVersions.MorphoBlueUSDeDAI_915]: (0, exports.MORPHO_BLUE_USDE_DAI_915)(networkId),
|
|
454
472
|
[types_1.MorphoBlueVersions.MorphoBlueUSDeDAI_945]: (0, exports.MORPHO_BLUE_USDE_DAI_945)(networkId),
|
|
473
|
+
[types_1.MorphoBlueVersions.MorphoBlueCbEthUSDC_860]: (0, exports.MORPHO_BLUE_CBETH_USDC_860)(networkId),
|
|
455
474
|
});
|
|
456
475
|
exports.MorphoBlueMarkets = MorphoBlueMarkets;
|
|
457
476
|
const findMorphoBlueMarket = (collateralToken, loanToken, lltv, oracle, irm, network = common_1.NetworkNumber.Eth) => {
|
|
458
477
|
const markets = (0, exports.MorphoBlueMarkets)(network);
|
|
459
478
|
for (const market of Object.values(markets)) {
|
|
460
|
-
if (market.collateralToken
|
|
479
|
+
if ((0, utils_1.compareAddresses)(market.collateralToken, collateralToken) && (0, utils_1.compareAddresses)(market.loanToken, loanToken) && market.lltv === lltv && (0, utils_1.compareAddresses)(market.oracle, oracle) && (0, utils_1.compareAddresses)(market.irm, irm)) {
|
|
461
480
|
return market;
|
|
462
481
|
}
|
|
463
482
|
}
|
package/cjs/morphoBlue/index.js
CHANGED
|
@@ -15,11 +15,11 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
15
15
|
exports.getMorphoBlueAccountData = exports.getMorphoBlueMarketData = void 0;
|
|
16
16
|
const decimal_js_1 = __importDefault(require("decimal.js"));
|
|
17
17
|
const tokens_1 = require("@defisaver/tokens");
|
|
18
|
+
const common_1 = require("../types/common");
|
|
18
19
|
const contracts_1 = require("../contracts");
|
|
19
20
|
const constants_1 = require("../constants");
|
|
20
21
|
const staking_1 = require("../staking");
|
|
21
22
|
const utils_1 = require("../services/utils");
|
|
22
|
-
const multicall_1 = require("../multicall");
|
|
23
23
|
const morphoBlueHelpers_1 = require("../helpers/morphoBlueHelpers");
|
|
24
24
|
const compound = (ratePerSeconds) => {
|
|
25
25
|
const compounding = new decimal_js_1.default(ratePerSeconds).mul(constants_1.SECONDS_PER_YEAR).toString();
|
|
@@ -48,32 +48,19 @@ function getMorphoBlueMarketData(web3, network, selectedMarket, mainnetWeb3) {
|
|
|
48
48
|
return __awaiter(this, void 0, void 0, function* () {
|
|
49
49
|
const { loanToken, collateralToken, oracle, irm, lltv, oracleType, } = selectedMarket;
|
|
50
50
|
const lltvInWei = new decimal_js_1.default(lltv).mul(constants_1.WAD).toString();
|
|
51
|
-
const loanTokenInfo = (0, tokens_1.getAssetInfoByAddress)(loanToken);
|
|
52
|
-
const collateralTokenInfo = (0, tokens_1.getAssetInfoByAddress)(collateralToken);
|
|
53
|
-
let loanTokenFeedAddress =
|
|
51
|
+
const loanTokenInfo = (0, tokens_1.getAssetInfoByAddress)(loanToken, network);
|
|
52
|
+
const collateralTokenInfo = (0, tokens_1.getAssetInfoByAddress)(collateralToken, network);
|
|
53
|
+
let loanTokenFeedAddress = loanTokenInfo.addresses[common_1.NetworkNumber.Eth];
|
|
54
54
|
if (loanTokenInfo.symbol === 'WETH') {
|
|
55
55
|
const ethAddress = (0, tokens_1.getAssetInfo)('ETH').address;
|
|
56
56
|
loanTokenFeedAddress = ethAddress;
|
|
57
57
|
}
|
|
58
|
-
const
|
|
59
|
-
const
|
|
60
|
-
const
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
target: FeedRegistryAddress,
|
|
65
|
-
abiItem: (0, utils_1.getAbiItem)(FeedRegistryAbi, 'latestAnswer'),
|
|
66
|
-
params: [loanTokenFeedAddress, constants_1.USD_QUOTE],
|
|
67
|
-
},
|
|
68
|
-
{
|
|
69
|
-
target: viewContractAddress,
|
|
70
|
-
abiItem: (0, utils_1.getAbiItem)(viewContractAbi, 'getMarketInfoNotTuple'),
|
|
71
|
-
params: [loanToken, collateralToken, oracle, irm, lltvInWei],
|
|
72
|
-
},
|
|
73
|
-
];
|
|
74
|
-
const multicallData = yield (0, multicall_1.multicall)(multicallCallsObject, web3, network);
|
|
75
|
-
const loanTokenPrice = multicallData[0][0];
|
|
76
|
-
const marketInfo = multicallData[1][0];
|
|
58
|
+
const feedRegistryContract = (0, contracts_1.FeedRegistryContract)(mainnetWeb3, common_1.NetworkNumber.Eth);
|
|
59
|
+
const morphoBlueViewContract = (0, contracts_1.MorphoBlueViewContract)(web3, network);
|
|
60
|
+
const [loanTokenPrice, marketInfo] = yield Promise.all([
|
|
61
|
+
loanTokenInfo.symbol === 'USDA' ? '100000000' : feedRegistryContract.methods.latestAnswer(loanTokenFeedAddress, constants_1.USD_QUOTE).call(),
|
|
62
|
+
morphoBlueViewContract.methods.getMarketInfoNotTuple(loanToken, collateralToken, oracle, irm, lltvInWei).call(),
|
|
63
|
+
]);
|
|
77
64
|
const supplyRate = getSupplyRate(marketInfo.totalSupplyAssets, marketInfo.totalBorrowAssets, marketInfo.borrowRate, marketInfo.fee);
|
|
78
65
|
const compoundedBorrowRate = getBorrowRate(marketInfo.borrowRate, marketInfo.totalBorrowShares);
|
|
79
66
|
const utillization = new decimal_js_1.default(marketInfo.totalBorrowAssets).div(marketInfo.totalSupplyAssets).mul(100).toString();
|
|
@@ -85,7 +72,7 @@ function getMorphoBlueMarketData(web3, network, selectedMarket, mainnetWeb3) {
|
|
|
85
72
|
assetsData[(0, utils_1.wethToEth)(loanTokenInfo.symbol)] = {
|
|
86
73
|
symbol: (0, utils_1.wethToEth)(loanTokenInfo.symbol),
|
|
87
74
|
address: loanToken,
|
|
88
|
-
price:
|
|
75
|
+
price: new decimal_js_1.default(loanTokenPrice).div(1e8).toString(),
|
|
89
76
|
supplyRate: new decimal_js_1.default(supplyRate).div(constants_1.WAD).mul(100).toString(),
|
|
90
77
|
borrowRate: new decimal_js_1.default(compoundedBorrowRate).div(constants_1.WAD).mul(100).toString(),
|
|
91
78
|
totalSupply: new decimal_js_1.default(marketInfo.totalSupplyAssets).div(scale).toString(),
|
|
@@ -25,7 +25,8 @@ export declare enum MorphoBlueVersions {
|
|
|
25
25
|
MorphoBlueUSDeDAI_770 = "morphoblueusdedai_770",
|
|
26
26
|
MorphoBlueUSDeDAI_860 = "morphoblueusdedai_860",
|
|
27
27
|
MorphoBlueUSDeDAI_915 = "morphoblueusdedai_915",
|
|
28
|
-
MorphoBlueUSDeDAI_945 = "morphoblueusdedai_945"
|
|
28
|
+
MorphoBlueUSDeDAI_945 = "morphoblueusdedai_945",
|
|
29
|
+
MorphoBlueCbEthUSDC_860 = "morphobluecbethusdc_860"
|
|
29
30
|
}
|
|
30
31
|
export declare enum MorphoBlueOracleType {
|
|
31
32
|
MARKET_RATE = "Market rate",
|
package/cjs/types/morphoBlue.js
CHANGED
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.MorphoBlueOracleType = exports.MorphoBlueVersions = void 0;
|
|
4
4
|
var MorphoBlueVersions;
|
|
5
5
|
(function (MorphoBlueVersions) {
|
|
6
|
+
// MAINNET
|
|
6
7
|
MorphoBlueVersions["MorphoBlueWstEthUSDC"] = "morphobluewstethusdc";
|
|
7
8
|
MorphoBlueVersions["MorphoBlueSDAIUSDC"] = "morphobluesdaiusdc";
|
|
8
9
|
MorphoBlueVersions["MorphoBlueWBTCUSDC"] = "morphobluewbtcusdc";
|
|
@@ -32,6 +33,8 @@ var MorphoBlueVersions;
|
|
|
32
33
|
MorphoBlueVersions["MorphoBlueUSDeDAI_860"] = "morphoblueusdedai_860";
|
|
33
34
|
MorphoBlueVersions["MorphoBlueUSDeDAI_915"] = "morphoblueusdedai_915";
|
|
34
35
|
MorphoBlueVersions["MorphoBlueUSDeDAI_945"] = "morphoblueusdedai_945";
|
|
36
|
+
// BASE
|
|
37
|
+
MorphoBlueVersions["MorphoBlueCbEthUSDC_860"] = "morphobluecbethusdc_860";
|
|
35
38
|
})(MorphoBlueVersions || (exports.MorphoBlueVersions = MorphoBlueVersions = {}));
|
|
36
39
|
var MorphoBlueOracleType;
|
|
37
40
|
(function (MorphoBlueOracleType) {
|
package/esm/config/contracts.js
CHANGED
|
@@ -26,6 +26,7 @@ export declare const MORPHO_BLUE_USDE_DAI_770: (networkId?: NetworkNumber) => Mo
|
|
|
26
26
|
export declare const MORPHO_BLUE_USDE_DAI_860: (networkId?: NetworkNumber) => MorphoBlueMarketData;
|
|
27
27
|
export declare const MORPHO_BLUE_USDE_DAI_915: (networkId?: NetworkNumber) => MorphoBlueMarketData;
|
|
28
28
|
export declare const MORPHO_BLUE_USDE_DAI_945: (networkId?: NetworkNumber) => MorphoBlueMarketData;
|
|
29
|
+
export declare const MORPHO_BLUE_CBETH_USDC_860: (networkId?: NetworkNumber) => MorphoBlueMarketData;
|
|
29
30
|
export declare const MorphoBlueMarkets: (networkId: NetworkNumber) => {
|
|
30
31
|
readonly morphobluewstethusdc: MorphoBlueMarketData;
|
|
31
32
|
readonly morphobluesdaiusdc: MorphoBlueMarketData;
|
|
@@ -53,5 +54,6 @@ export declare const MorphoBlueMarkets: (networkId: NetworkNumber) => {
|
|
|
53
54
|
readonly morphoblueusdedai_860: MorphoBlueMarketData;
|
|
54
55
|
readonly morphoblueusdedai_915: MorphoBlueMarketData;
|
|
55
56
|
readonly morphoblueusdedai_945: MorphoBlueMarketData;
|
|
57
|
+
readonly morphobluecbethusdc_860: MorphoBlueMarketData;
|
|
56
58
|
};
|
|
57
59
|
export declare const findMorphoBlueMarket: (collateralToken: string, loanToken: string, lltv: number, oracle: string, irm: string, network?: NetworkNumber) => MorphoBlueMarketData | null;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { compareAddresses } from '../../services/utils';
|
|
1
2
|
import { MorphoBlueOracleType, MorphoBlueVersions } from '../../types';
|
|
2
3
|
import { NetworkNumber } from '../../types/common';
|
|
3
4
|
export const MORPHO_BLUE_WSTETH_USDC = (networkId = NetworkNumber.Eth) => ({
|
|
@@ -393,6 +394,22 @@ export const MORPHO_BLUE_USDE_DAI_945 = (networkId = NetworkNumber.Eth) => ({
|
|
|
393
394
|
marketId: '0xdb760246f6859780f6c1b272d47a8f64710777121118e56e0cdb4b8b744a3094',
|
|
394
395
|
protocolName: 'morpho-blue',
|
|
395
396
|
});
|
|
397
|
+
// BASE
|
|
398
|
+
export const MORPHO_BLUE_CBETH_USDC_860 = (networkId = NetworkNumber.Eth) => ({
|
|
399
|
+
chainIds: [NetworkNumber.Base],
|
|
400
|
+
label: 'Morpho Blue',
|
|
401
|
+
shortLabel: 'cbETH/ETH',
|
|
402
|
+
value: MorphoBlueVersions.MorphoBlueCbEthUSDC_860,
|
|
403
|
+
url: 'usdedai-dba352d9',
|
|
404
|
+
loanToken: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913',
|
|
405
|
+
collateralToken: '0x2Ae3F1Ec7F1F5012CFEab0185bfc7aa3cf0DEc22',
|
|
406
|
+
oracle: '0x4756c26E01E61c7c2F86b10f4316e179db8F9425',
|
|
407
|
+
oracleType: MorphoBlueOracleType.MARKET_RATE,
|
|
408
|
+
irm: '0x46415998764C29aB2a25CbeA6254146D50D22687',
|
|
409
|
+
lltv: 0.86,
|
|
410
|
+
marketId: '0xdba352d93a64b17c71104cbddc6aef85cd432322a1446b5b65163cbbc615cd0c',
|
|
411
|
+
protocolName: 'morpho-blue',
|
|
412
|
+
});
|
|
396
413
|
export const MorphoBlueMarkets = (networkId) => ({
|
|
397
414
|
[MorphoBlueVersions.MorphoBlueWstEthUSDC]: MORPHO_BLUE_WSTETH_USDC(networkId),
|
|
398
415
|
[MorphoBlueVersions.MorphoBlueSDAIUSDC]: MORPHO_BLUE_SDAI_USDC(networkId),
|
|
@@ -423,11 +440,12 @@ export const MorphoBlueMarkets = (networkId) => ({
|
|
|
423
440
|
[MorphoBlueVersions.MorphoBlueUSDeDAI_860]: MORPHO_BLUE_USDE_DAI_860(networkId),
|
|
424
441
|
[MorphoBlueVersions.MorphoBlueUSDeDAI_915]: MORPHO_BLUE_USDE_DAI_915(networkId),
|
|
425
442
|
[MorphoBlueVersions.MorphoBlueUSDeDAI_945]: MORPHO_BLUE_USDE_DAI_945(networkId),
|
|
443
|
+
[MorphoBlueVersions.MorphoBlueCbEthUSDC_860]: MORPHO_BLUE_CBETH_USDC_860(networkId),
|
|
426
444
|
});
|
|
427
445
|
export const findMorphoBlueMarket = (collateralToken, loanToken, lltv, oracle, irm, network = NetworkNumber.Eth) => {
|
|
428
446
|
const markets = MorphoBlueMarkets(network);
|
|
429
447
|
for (const market of Object.values(markets)) {
|
|
430
|
-
if (market.collateralToken
|
|
448
|
+
if (compareAddresses(market.collateralToken, collateralToken) && compareAddresses(market.loanToken, loanToken) && market.lltv === lltv && compareAddresses(market.oracle, oracle) && compareAddresses(market.irm, irm)) {
|
|
431
449
|
return market;
|
|
432
450
|
}
|
|
433
451
|
}
|
package/esm/morphoBlue/index.js
CHANGED
|
@@ -9,11 +9,11 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
9
9
|
};
|
|
10
10
|
import Dec from 'decimal.js';
|
|
11
11
|
import { assetAmountInEth, getAssetInfo, getAssetInfoByAddress } from '@defisaver/tokens';
|
|
12
|
-
import {
|
|
12
|
+
import { NetworkNumber } from '../types/common';
|
|
13
|
+
import { FeedRegistryContract, MorphoBlueViewContract, } from '../contracts';
|
|
13
14
|
import { WAD, SECONDS_PER_YEAR, USD_QUOTE } from '../constants';
|
|
14
15
|
import { getStakingApy, STAKING_ASSETS } from '../staking';
|
|
15
|
-
import {
|
|
16
|
-
import { multicall } from '../multicall';
|
|
16
|
+
import { wethToEth } from '../services/utils';
|
|
17
17
|
import { getMorphoBlueAggregatedPositionData } from '../helpers/morphoBlueHelpers';
|
|
18
18
|
const compound = (ratePerSeconds) => {
|
|
19
19
|
const compounding = new Dec(ratePerSeconds).mul(SECONDS_PER_YEAR).toString();
|
|
@@ -42,32 +42,19 @@ export function getMorphoBlueMarketData(web3, network, selectedMarket, mainnetWe
|
|
|
42
42
|
return __awaiter(this, void 0, void 0, function* () {
|
|
43
43
|
const { loanToken, collateralToken, oracle, irm, lltv, oracleType, } = selectedMarket;
|
|
44
44
|
const lltvInWei = new Dec(lltv).mul(WAD).toString();
|
|
45
|
-
const loanTokenInfo = getAssetInfoByAddress(loanToken);
|
|
46
|
-
const collateralTokenInfo = getAssetInfoByAddress(collateralToken);
|
|
47
|
-
let loanTokenFeedAddress =
|
|
45
|
+
const loanTokenInfo = getAssetInfoByAddress(loanToken, network);
|
|
46
|
+
const collateralTokenInfo = getAssetInfoByAddress(collateralToken, network);
|
|
47
|
+
let loanTokenFeedAddress = loanTokenInfo.addresses[NetworkNumber.Eth];
|
|
48
48
|
if (loanTokenInfo.symbol === 'WETH') {
|
|
49
49
|
const ethAddress = getAssetInfo('ETH').address;
|
|
50
50
|
loanTokenFeedAddress = ethAddress;
|
|
51
51
|
}
|
|
52
|
-
const
|
|
53
|
-
const
|
|
54
|
-
const
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
target: FeedRegistryAddress,
|
|
59
|
-
abiItem: getAbiItem(FeedRegistryAbi, 'latestAnswer'),
|
|
60
|
-
params: [loanTokenFeedAddress, USD_QUOTE],
|
|
61
|
-
},
|
|
62
|
-
{
|
|
63
|
-
target: viewContractAddress,
|
|
64
|
-
abiItem: getAbiItem(viewContractAbi, 'getMarketInfoNotTuple'),
|
|
65
|
-
params: [loanToken, collateralToken, oracle, irm, lltvInWei],
|
|
66
|
-
},
|
|
67
|
-
];
|
|
68
|
-
const multicallData = yield multicall(multicallCallsObject, web3, network);
|
|
69
|
-
const loanTokenPrice = multicallData[0][0];
|
|
70
|
-
const marketInfo = multicallData[1][0];
|
|
52
|
+
const feedRegistryContract = FeedRegistryContract(mainnetWeb3, NetworkNumber.Eth);
|
|
53
|
+
const morphoBlueViewContract = MorphoBlueViewContract(web3, network);
|
|
54
|
+
const [loanTokenPrice, marketInfo] = yield Promise.all([
|
|
55
|
+
loanTokenInfo.symbol === 'USDA' ? '100000000' : feedRegistryContract.methods.latestAnswer(loanTokenFeedAddress, USD_QUOTE).call(),
|
|
56
|
+
morphoBlueViewContract.methods.getMarketInfoNotTuple(loanToken, collateralToken, oracle, irm, lltvInWei).call(),
|
|
57
|
+
]);
|
|
71
58
|
const supplyRate = getSupplyRate(marketInfo.totalSupplyAssets, marketInfo.totalBorrowAssets, marketInfo.borrowRate, marketInfo.fee);
|
|
72
59
|
const compoundedBorrowRate = getBorrowRate(marketInfo.borrowRate, marketInfo.totalBorrowShares);
|
|
73
60
|
const utillization = new Dec(marketInfo.totalBorrowAssets).div(marketInfo.totalSupplyAssets).mul(100).toString();
|
|
@@ -79,7 +66,7 @@ export function getMorphoBlueMarketData(web3, network, selectedMarket, mainnetWe
|
|
|
79
66
|
assetsData[wethToEth(loanTokenInfo.symbol)] = {
|
|
80
67
|
symbol: wethToEth(loanTokenInfo.symbol),
|
|
81
68
|
address: loanToken,
|
|
82
|
-
price:
|
|
69
|
+
price: new Dec(loanTokenPrice).div(1e8).toString(),
|
|
83
70
|
supplyRate: new Dec(supplyRate).div(WAD).mul(100).toString(),
|
|
84
71
|
borrowRate: new Dec(compoundedBorrowRate).div(WAD).mul(100).toString(),
|
|
85
72
|
totalSupply: new Dec(marketInfo.totalSupplyAssets).div(scale).toString(),
|
|
@@ -25,7 +25,8 @@ export declare enum MorphoBlueVersions {
|
|
|
25
25
|
MorphoBlueUSDeDAI_770 = "morphoblueusdedai_770",
|
|
26
26
|
MorphoBlueUSDeDAI_860 = "morphoblueusdedai_860",
|
|
27
27
|
MorphoBlueUSDeDAI_915 = "morphoblueusdedai_915",
|
|
28
|
-
MorphoBlueUSDeDAI_945 = "morphoblueusdedai_945"
|
|
28
|
+
MorphoBlueUSDeDAI_945 = "morphoblueusdedai_945",
|
|
29
|
+
MorphoBlueCbEthUSDC_860 = "morphobluecbethusdc_860"
|
|
29
30
|
}
|
|
30
31
|
export declare enum MorphoBlueOracleType {
|
|
31
32
|
MARKET_RATE = "Market rate",
|
package/esm/types/morphoBlue.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
export var MorphoBlueVersions;
|
|
2
2
|
(function (MorphoBlueVersions) {
|
|
3
|
+
// MAINNET
|
|
3
4
|
MorphoBlueVersions["MorphoBlueWstEthUSDC"] = "morphobluewstethusdc";
|
|
4
5
|
MorphoBlueVersions["MorphoBlueSDAIUSDC"] = "morphobluesdaiusdc";
|
|
5
6
|
MorphoBlueVersions["MorphoBlueWBTCUSDC"] = "morphobluewbtcusdc";
|
|
@@ -29,6 +30,8 @@ export var MorphoBlueVersions;
|
|
|
29
30
|
MorphoBlueVersions["MorphoBlueUSDeDAI_860"] = "morphoblueusdedai_860";
|
|
30
31
|
MorphoBlueVersions["MorphoBlueUSDeDAI_915"] = "morphoblueusdedai_915";
|
|
31
32
|
MorphoBlueVersions["MorphoBlueUSDeDAI_945"] = "morphoblueusdedai_945";
|
|
33
|
+
// BASE
|
|
34
|
+
MorphoBlueVersions["MorphoBlueCbEthUSDC_860"] = "morphobluecbethusdc_860";
|
|
32
35
|
})(MorphoBlueVersions || (MorphoBlueVersions = {}));
|
|
33
36
|
export var MorphoBlueOracleType;
|
|
34
37
|
(function (MorphoBlueOracleType) {
|
package/package.json
CHANGED
package/src/config/contracts.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { compareAddresses } from '../../services/utils';
|
|
1
2
|
import { MorphoBlueMarketData, MorphoBlueOracleType, MorphoBlueVersions } from '../../types';
|
|
2
3
|
import { NetworkNumber } from '../../types/common';
|
|
3
4
|
|
|
@@ -399,6 +400,24 @@ export const MORPHO_BLUE_USDE_DAI_945 = (networkId: NetworkNumber = NetworkNumbe
|
|
|
399
400
|
protocolName: 'morpho-blue',
|
|
400
401
|
});
|
|
401
402
|
|
|
403
|
+
// BASE
|
|
404
|
+
|
|
405
|
+
export const MORPHO_BLUE_CBETH_USDC_860 = (networkId: NetworkNumber = NetworkNumber.Eth): MorphoBlueMarketData => ({
|
|
406
|
+
chainIds: [NetworkNumber.Base],
|
|
407
|
+
label: 'Morpho Blue',
|
|
408
|
+
shortLabel: 'cbETH/ETH',
|
|
409
|
+
value: MorphoBlueVersions.MorphoBlueCbEthUSDC_860,
|
|
410
|
+
url: 'usdedai-dba352d9',
|
|
411
|
+
loanToken: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913',
|
|
412
|
+
collateralToken: '0x2Ae3F1Ec7F1F5012CFEab0185bfc7aa3cf0DEc22',
|
|
413
|
+
oracle: '0x4756c26E01E61c7c2F86b10f4316e179db8F9425',
|
|
414
|
+
oracleType: MorphoBlueOracleType.MARKET_RATE,
|
|
415
|
+
irm: '0x46415998764C29aB2a25CbeA6254146D50D22687',
|
|
416
|
+
lltv: 0.86,
|
|
417
|
+
marketId: '0xdba352d93a64b17c71104cbddc6aef85cd432322a1446b5b65163cbbc615cd0c',
|
|
418
|
+
protocolName: 'morpho-blue',
|
|
419
|
+
});
|
|
420
|
+
|
|
402
421
|
export const MorphoBlueMarkets = (networkId: NetworkNumber) => ({
|
|
403
422
|
[MorphoBlueVersions.MorphoBlueWstEthUSDC]: MORPHO_BLUE_WSTETH_USDC(networkId),
|
|
404
423
|
[MorphoBlueVersions.MorphoBlueSDAIUSDC]: MORPHO_BLUE_SDAI_USDC(networkId),
|
|
@@ -429,12 +448,14 @@ export const MorphoBlueMarkets = (networkId: NetworkNumber) => ({
|
|
|
429
448
|
[MorphoBlueVersions.MorphoBlueUSDeDAI_860]: MORPHO_BLUE_USDE_DAI_860(networkId),
|
|
430
449
|
[MorphoBlueVersions.MorphoBlueUSDeDAI_915]: MORPHO_BLUE_USDE_DAI_915(networkId),
|
|
431
450
|
[MorphoBlueVersions.MorphoBlueUSDeDAI_945]: MORPHO_BLUE_USDE_DAI_945(networkId),
|
|
451
|
+
|
|
452
|
+
[MorphoBlueVersions.MorphoBlueCbEthUSDC_860]: MORPHO_BLUE_CBETH_USDC_860(networkId),
|
|
432
453
|
}) as const;
|
|
433
454
|
|
|
434
455
|
export const findMorphoBlueMarket = (collateralToken: string, loanToken: string, lltv: number, oracle: string, irm: string, network = NetworkNumber.Eth) => {
|
|
435
456
|
const markets = MorphoBlueMarkets(network);
|
|
436
457
|
for (const market of Object.values(markets)) {
|
|
437
|
-
if (market.collateralToken
|
|
458
|
+
if (compareAddresses(market.collateralToken, collateralToken) && compareAddresses(market.loanToken, loanToken) && market.lltv === lltv && compareAddresses(market.oracle, oracle) && compareAddresses(market.irm, irm)) {
|
|
438
459
|
return market;
|
|
439
460
|
}
|
|
440
461
|
}
|
package/src/morphoBlue/index.ts
CHANGED
|
@@ -3,16 +3,15 @@ import Dec from 'decimal.js';
|
|
|
3
3
|
import { assetAmountInEth, getAssetInfo, getAssetInfoByAddress } from '@defisaver/tokens';
|
|
4
4
|
import { MMUsedAssets, NetworkNumber } from '../types/common';
|
|
5
5
|
import {
|
|
6
|
+
FeedRegistryContract,
|
|
6
7
|
MorphoBlueViewContract,
|
|
7
|
-
getConfigContractAbi, getConfigContractAddress,
|
|
8
8
|
} from '../contracts';
|
|
9
9
|
import {
|
|
10
10
|
MorphoBlueAssetsData, MorphoBlueMarketData, MorphoBlueMarketInfo, MorphoBluePositionData,
|
|
11
11
|
} from '../types';
|
|
12
12
|
import { WAD, SECONDS_PER_YEAR, USD_QUOTE } from '../constants';
|
|
13
13
|
import { getStakingApy, STAKING_ASSETS } from '../staking';
|
|
14
|
-
import {
|
|
15
|
-
import { multicall } from '../multicall';
|
|
14
|
+
import { wethToEth } from '../services/utils';
|
|
16
15
|
import { getMorphoBlueAggregatedPositionData } from '../helpers/morphoBlueHelpers';
|
|
17
16
|
|
|
18
17
|
|
|
@@ -48,36 +47,21 @@ export async function getMorphoBlueMarketData(web3: Web3, network: NetworkNumber
|
|
|
48
47
|
loanToken, collateralToken, oracle, irm, lltv, oracleType,
|
|
49
48
|
} = selectedMarket;
|
|
50
49
|
const lltvInWei = new Dec(lltv).mul(WAD).toString();
|
|
51
|
-
const loanTokenInfo = getAssetInfoByAddress(loanToken);
|
|
52
|
-
const collateralTokenInfo = getAssetInfoByAddress(collateralToken);
|
|
53
|
-
let loanTokenFeedAddress =
|
|
50
|
+
const loanTokenInfo = getAssetInfoByAddress(loanToken, network);
|
|
51
|
+
const collateralTokenInfo = getAssetInfoByAddress(collateralToken, network);
|
|
52
|
+
let loanTokenFeedAddress = loanTokenInfo.addresses[NetworkNumber.Eth];
|
|
54
53
|
if (loanTokenInfo.symbol === 'WETH') {
|
|
55
54
|
const ethAddress = getAssetInfo('ETH').address;
|
|
56
55
|
loanTokenFeedAddress = ethAddress;
|
|
57
56
|
}
|
|
58
57
|
|
|
59
|
-
const
|
|
60
|
-
const
|
|
61
|
-
|
|
62
|
-
const
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
{
|
|
67
|
-
target: FeedRegistryAddress,
|
|
68
|
-
abiItem: getAbiItem(FeedRegistryAbi, 'latestAnswer'),
|
|
69
|
-
params: [loanTokenFeedAddress, USD_QUOTE],
|
|
70
|
-
},
|
|
71
|
-
{
|
|
72
|
-
target: viewContractAddress,
|
|
73
|
-
abiItem: getAbiItem(viewContractAbi, 'getMarketInfoNotTuple'),
|
|
74
|
-
params: [loanToken, collateralToken, oracle, irm, lltvInWei],
|
|
75
|
-
},
|
|
76
|
-
];
|
|
77
|
-
|
|
78
|
-
const multicallData = await multicall(multicallCallsObject, web3, network);
|
|
79
|
-
const loanTokenPrice = multicallData[0][0];
|
|
80
|
-
const marketInfo = multicallData[1][0];
|
|
58
|
+
const feedRegistryContract = FeedRegistryContract(mainnetWeb3, NetworkNumber.Eth);
|
|
59
|
+
const morphoBlueViewContract = MorphoBlueViewContract(web3, network);
|
|
60
|
+
|
|
61
|
+
const [loanTokenPrice, marketInfo] = await Promise.all([
|
|
62
|
+
loanTokenInfo.symbol === 'USDA' ? '100000000' : feedRegistryContract.methods.latestAnswer(loanTokenFeedAddress, USD_QUOTE).call(),
|
|
63
|
+
morphoBlueViewContract.methods.getMarketInfoNotTuple(loanToken, collateralToken, oracle, irm, lltvInWei).call(),
|
|
64
|
+
]);
|
|
81
65
|
|
|
82
66
|
const supplyRate = getSupplyRate(marketInfo.totalSupplyAssets, marketInfo.totalBorrowAssets, marketInfo.borrowRate, marketInfo.fee);
|
|
83
67
|
const compoundedBorrowRate = getBorrowRate(marketInfo.borrowRate, marketInfo.totalBorrowShares);
|
|
@@ -93,7 +77,7 @@ export async function getMorphoBlueMarketData(web3: Web3, network: NetworkNumber
|
|
|
93
77
|
assetsData[wethToEth(loanTokenInfo.symbol)] = {
|
|
94
78
|
symbol: wethToEth(loanTokenInfo.symbol),
|
|
95
79
|
address: loanToken,
|
|
96
|
-
price:
|
|
80
|
+
price: new Dec(loanTokenPrice).div(1e8).toString(),
|
|
97
81
|
supplyRate: new Dec(supplyRate).div(WAD).mul(100).toString(),
|
|
98
82
|
borrowRate: new Dec(compoundedBorrowRate).div(WAD).mul(100).toString(),
|
|
99
83
|
totalSupply: new Dec(marketInfo.totalSupplyAssets).div(scale).toString(),
|
package/src/types/morphoBlue.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { MMUsedAssets, NetworkNumber } from './common';
|
|
2
2
|
|
|
3
3
|
export enum MorphoBlueVersions {
|
|
4
|
+
// MAINNET
|
|
4
5
|
MorphoBlueWstEthUSDC = 'morphobluewstethusdc', // wstETH/USDC
|
|
5
6
|
MorphoBlueSDAIUSDC = 'morphobluesdaiusdc', // sDAI/USDC
|
|
6
7
|
MorphoBlueWBTCUSDC = 'morphobluewbtcusdc', // WBTC/USDC
|
|
@@ -30,6 +31,9 @@ export enum MorphoBlueVersions {
|
|
|
30
31
|
MorphoBlueUSDeDAI_860 = 'morphoblueusdedai_860',
|
|
31
32
|
MorphoBlueUSDeDAI_915 = 'morphoblueusdedai_915',
|
|
32
33
|
MorphoBlueUSDeDAI_945 = 'morphoblueusdedai_945',
|
|
34
|
+
|
|
35
|
+
// BASE
|
|
36
|
+
MorphoBlueCbEthUSDC_860 = 'morphobluecbethusdc_860',
|
|
33
37
|
}
|
|
34
38
|
|
|
35
39
|
export enum MorphoBlueOracleType {
|