@defisaver/positions-sdk 2.1.126 → 2.1.127-midnight-dev
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 +249 -0
- package/cjs/config/contracts.js +11 -1
- package/cjs/contracts.d.ts +1510 -0
- package/cjs/contracts.js +3 -2
- package/cjs/helpers/index.d.ts +1 -0
- package/cjs/helpers/index.js +2 -1
- package/cjs/helpers/morphoMidnightHelpers/index.d.ts +16 -0
- package/cjs/helpers/morphoMidnightHelpers/index.js +68 -0
- package/cjs/index.d.ts +2 -1
- package/cjs/index.js +3 -1
- package/cjs/markets/index.d.ts +1 -0
- package/cjs/markets/index.js +4 -1
- package/cjs/markets/morphoMidnight/index.d.ts +16 -0
- package/cjs/markets/morphoMidnight/index.js +159 -0
- package/cjs/morphoMidnight/index.d.ts +14 -0
- package/cjs/morphoMidnight/index.js +220 -0
- package/cjs/portfolio/discovery.js +4 -0
- package/cjs/portfolio/index.js +44 -0
- package/cjs/services/viem.d.ts +11 -11
- package/cjs/types/index.d.ts +1 -0
- package/cjs/types/index.js +1 -0
- package/cjs/types/morphoMidnight.d.ts +91 -0
- package/cjs/types/morphoMidnight.js +15 -0
- package/cjs/types/portfolio.d.ts +4 -0
- package/esm/config/contracts.d.ts +249 -0
- package/esm/config/contracts.js +9 -0
- package/esm/contracts.d.ts +1510 -0
- package/esm/contracts.js +1 -0
- package/esm/helpers/index.d.ts +1 -0
- package/esm/helpers/index.js +1 -0
- package/esm/helpers/morphoMidnightHelpers/index.d.ts +16 -0
- package/esm/helpers/morphoMidnightHelpers/index.js +61 -0
- package/esm/index.d.ts +2 -1
- package/esm/index.js +2 -1
- package/esm/markets/index.d.ts +1 -0
- package/esm/markets/index.js +1 -0
- package/esm/markets/morphoMidnight/index.d.ts +16 -0
- package/esm/markets/morphoMidnight/index.js +148 -0
- package/esm/morphoMidnight/index.d.ts +14 -0
- package/esm/morphoMidnight/index.js +207 -0
- package/esm/portfolio/discovery.js +5 -1
- package/esm/portfolio/index.js +45 -1
- package/esm/services/viem.d.ts +11 -11
- package/esm/types/index.d.ts +1 -0
- package/esm/types/index.js +1 -0
- package/esm/types/morphoMidnight.d.ts +91 -0
- package/esm/types/morphoMidnight.js +12 -0
- package/esm/types/portfolio.d.ts +4 -0
- package/package.json +1 -1
- package/src/config/contracts.ts +9 -0
- package/src/contracts.ts +1 -0
- package/src/helpers/index.ts +1 -0
- package/src/helpers/morphoMidnightHelpers/index.ts +86 -0
- package/src/index.ts +2 -0
- package/src/markets/index.ts +1 -0
- package/src/markets/morphoMidnight/index.ts +161 -0
- package/src/morphoMidnight/index.ts +234 -0
- package/src/portfolio/discovery.ts +6 -0
- package/src/portfolio/index.ts +44 -0
- package/src/types/index.ts +1 -0
- package/src/types/morphoMidnight.ts +104 -0
- package/src/types/portfolio.ts +4 -0
package/esm/portfolio/index.js
CHANGED
|
@@ -9,8 +9,9 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
9
9
|
};
|
|
10
10
|
import Dec from 'decimal.js';
|
|
11
11
|
import { NetworkNumber } from '../types/common';
|
|
12
|
-
import { AaveMarkets, AaveV4Spokes, CompoundMarkets, CrvUsdMarkets, EulerV2Markets, LiquityV2Markets, LlamaLendMarkets, MorphoBlueMarkets, SparkMarkets, } from '../markets';
|
|
12
|
+
import { AaveMarkets, AaveV4Spokes, CompoundMarkets, CrvUsdMarkets, EulerV2Markets, LiquityV2Markets, LlamaLendMarkets, MorphoBlueMarkets, MorphoMidnightMarkets, SparkMarkets, } from '../markets';
|
|
13
13
|
import { _getMorphoBlueAccountData, _getMorphoBlueMarketData, getMorphoEarn } from '../morphoBlue';
|
|
14
|
+
import { _getMorphoMidnightAccountData, _getMorphoMidnightMarketData, getMorphoMidnightEarn } from '../morphoMidnight';
|
|
14
15
|
import { AaveVersions, CompoundVersions, } from '../types';
|
|
15
16
|
import { _getCompoundV3AccountData, _getCompoundV3MarketsData } from '../compoundV3';
|
|
16
17
|
import { _getSparkAccountData, _getSparkMarketsData } from '../spark';
|
|
@@ -39,6 +40,7 @@ export function getPortfolioData(provider_1, network_1, defaultProvider_1, addre
|
|
|
39
40
|
const isMainnet = network === NetworkNumber.Eth;
|
|
40
41
|
const isFluidSupported = [NetworkNumber.Eth, NetworkNumber.Arb, NetworkNumber.Base, NetworkNumber.Plasma].includes(network);
|
|
41
42
|
const morphoMarkets = Object.values(MorphoBlueMarkets(network)).filter((market) => market.chainIds.includes(network));
|
|
43
|
+
const morphoMidnightMarkets = Object.values(MorphoMidnightMarkets(network)).filter((market) => market.chainIds.includes(network));
|
|
42
44
|
const compoundV3Markets = Object.values(CompoundMarkets(network)).filter((market) => market.chainIds.includes(network) && market.value !== CompoundVersions.CompoundV2);
|
|
43
45
|
const sparkMarkets = Object.values(SparkMarkets(network)).filter((market) => market.chainIds.includes(network));
|
|
44
46
|
const eulerV2Markets = Object.values(EulerV2Markets(network)).filter((market) => market.chainIds.includes(network));
|
|
@@ -54,6 +56,7 @@ export function getPortfolioData(provider_1, network_1, defaultProvider_1, addre
|
|
|
54
56
|
const client = getViemProvider(provider, ...args);
|
|
55
57
|
const defaultClient = getViemProvider(defaultProvider, ...args);
|
|
56
58
|
const morphoMarketsData = {};
|
|
59
|
+
const morphoMidnightMarketsData = {};
|
|
57
60
|
const compoundV3MarketsData = {};
|
|
58
61
|
const sparkMarketsData = {};
|
|
59
62
|
const eulerV2MarketsData = {};
|
|
@@ -67,6 +70,7 @@ export function getPortfolioData(provider_1, network_1, defaultProvider_1, addre
|
|
|
67
70
|
const aaveV4SpokesData = {};
|
|
68
71
|
const markets = {
|
|
69
72
|
morphoMarketsData,
|
|
73
|
+
morphoMidnightMarketsData,
|
|
70
74
|
compoundV3MarketsData,
|
|
71
75
|
sparkMarketsData,
|
|
72
76
|
eulerV2MarketsData,
|
|
@@ -87,6 +91,7 @@ export function getPortfolioData(provider_1, network_1, defaultProvider_1, addre
|
|
|
87
91
|
aaveV3: {},
|
|
88
92
|
aaveV4: {},
|
|
89
93
|
morphoBlue: {},
|
|
94
|
+
morphoMidnight: {},
|
|
90
95
|
compoundV3: {},
|
|
91
96
|
spark: {},
|
|
92
97
|
eulerV2: {},
|
|
@@ -107,6 +112,7 @@ export function getPortfolioData(provider_1, network_1, defaultProvider_1, addre
|
|
|
107
112
|
stakingPositions[address.toLowerCase()] = {
|
|
108
113
|
aaveV3: {},
|
|
109
114
|
morphoBlue: {},
|
|
115
|
+
morphoMidnight: {},
|
|
110
116
|
compoundV3: {},
|
|
111
117
|
spark: {},
|
|
112
118
|
aaveV2: {},
|
|
@@ -134,6 +140,10 @@ export function getPortfolioData(provider_1, network_1, defaultProvider_1, addre
|
|
|
134
140
|
const marketData = yield _getMorphoBlueMarketData(client, network, market);
|
|
135
141
|
morphoMarketsData[market.value] = marketData;
|
|
136
142
|
})),
|
|
143
|
+
...morphoMidnightMarkets.map((market) => __awaiter(this, void 0, void 0, function* () {
|
|
144
|
+
const marketData = yield _getMorphoMidnightMarketData(client, network, market);
|
|
145
|
+
morphoMidnightMarketsData[market.value] = marketData;
|
|
146
|
+
})),
|
|
137
147
|
...compoundV3Markets.map((market) => __awaiter(this, void 0, void 0, function* () {
|
|
138
148
|
const marketData = yield _getCompoundV3MarketsData(client, network, market, defaultClient);
|
|
139
149
|
compoundV3MarketsData[market.value] = marketData;
|
|
@@ -444,6 +454,40 @@ export function getPortfolioData(provider_1, network_1, defaultProvider_1, addre
|
|
|
444
454
|
positions[address.toLowerCase()].morphoBlue[market.value] = { error: `Error fetching MorphoBlue account data for address ${address} on market ${market.value}`, data: null };
|
|
445
455
|
}
|
|
446
456
|
}))).flat(),
|
|
457
|
+
...morphoMidnightMarkets.map((market) => addresses.map((address) => __awaiter(this, void 0, void 0, function* () {
|
|
458
|
+
try {
|
|
459
|
+
const [accDataPromise, earnDataPromise] = yield Promise.allSettled([
|
|
460
|
+
_getMorphoMidnightAccountData(client, network, address, market, morphoMidnightMarketsData[market.value]),
|
|
461
|
+
getMorphoMidnightEarn(client, network, address, market, morphoMidnightMarketsData[market.value]),
|
|
462
|
+
]);
|
|
463
|
+
if (accDataPromise.status === 'rejected') {
|
|
464
|
+
console.error(`Error fetching MorphoMidnight account data for address ${address} on market ${market.value}:`, accDataPromise.reason);
|
|
465
|
+
positions[address.toLowerCase()].morphoMidnight[market.value] = { error: `Error fetching MorphoMidnight account data for address ${address} on market ${market.value}`, data: null };
|
|
466
|
+
}
|
|
467
|
+
if (earnDataPromise.status === 'rejected') {
|
|
468
|
+
console.error(`Error fetching MorphoMidnight account data for address ${address} on market ${market.value}:`, earnDataPromise.reason);
|
|
469
|
+
positions[address.toLowerCase()].morphoMidnight[market.value] = { error: `Error fetching MorphoMidnight account data for address ${address} on market ${market.value}`, data: null };
|
|
470
|
+
}
|
|
471
|
+
if (accDataPromise.status !== 'rejected') {
|
|
472
|
+
const accData = accDataPromise.value;
|
|
473
|
+
if (new Dec(accData.suppliedUsd).gt(0))
|
|
474
|
+
positions[address.toLowerCase()].morphoMidnight[market.value] = { error: '', data: accData };
|
|
475
|
+
}
|
|
476
|
+
if (earnDataPromise.status !== 'rejected') {
|
|
477
|
+
const earnData = earnDataPromise.value;
|
|
478
|
+
if (earnData && new Dec(earnData.amount).gt(0)) {
|
|
479
|
+
stakingPositions[address.toLowerCase()].morphoMidnight[market.value] = {
|
|
480
|
+
error: '',
|
|
481
|
+
data: earnData,
|
|
482
|
+
};
|
|
483
|
+
}
|
|
484
|
+
}
|
|
485
|
+
}
|
|
486
|
+
catch (error) {
|
|
487
|
+
console.error(`Error fetching MorphoMidnight account data for address ${address} on market ${market.value}:`, error);
|
|
488
|
+
positions[address.toLowerCase()].morphoMidnight[market.value] = { error: `Error fetching MorphoMidnight account data for address ${address} on market ${market.value}`, data: null };
|
|
489
|
+
}
|
|
490
|
+
}))).flat(),
|
|
447
491
|
...compoundV3Markets.map((market) => addresses.map((address) => __awaiter(this, void 0, void 0, function* () {
|
|
448
492
|
try {
|
|
449
493
|
const accData = yield _getCompoundV3AccountData(client, network, address, ZERO_ADDRESS, { selectedMarket: market, assetsData: compoundV3MarketsData[market.value].assetsData });
|
package/esm/services/viem.d.ts
CHANGED
|
@@ -833,6 +833,7 @@ export declare const getViemProvider: (provider: EthereumProvider, network: Netw
|
|
|
833
833
|
s: import("viem").Hex;
|
|
834
834
|
value: bigint;
|
|
835
835
|
v: bigint;
|
|
836
|
+
chainId?: number | undefined;
|
|
836
837
|
type: "legacy";
|
|
837
838
|
gas: bigint;
|
|
838
839
|
nonce: number;
|
|
@@ -847,7 +848,6 @@ export declare const getViemProvider: (provider: EthereumProvider, network: Netw
|
|
|
847
848
|
yParity?: undefined | undefined;
|
|
848
849
|
input: import("viem").Hex;
|
|
849
850
|
typeHex: import("viem").Hex | null;
|
|
850
|
-
chainId?: number | undefined;
|
|
851
851
|
blockNumber: (blockTag extends "pending" ? true : false) extends infer T ? T extends (blockTag extends "pending" ? true : false) ? T extends true ? null : bigint : never : never;
|
|
852
852
|
blockHash: (blockTag extends "pending" ? true : false) extends infer T_1 ? T_1 extends (blockTag extends "pending" ? true : false) ? T_1 extends true ? null : `0x${string}` : never : never;
|
|
853
853
|
transactionIndex: (blockTag extends "pending" ? true : false) extends infer T_2 ? T_2 extends (blockTag extends "pending" ? true : false) ? T_2 extends true ? null : number : never : never;
|
|
@@ -858,6 +858,7 @@ export declare const getViemProvider: (provider: EthereumProvider, network: Netw
|
|
|
858
858
|
s: import("viem").Hex;
|
|
859
859
|
value: bigint;
|
|
860
860
|
v: bigint;
|
|
861
|
+
chainId: number;
|
|
861
862
|
type: "eip2930";
|
|
862
863
|
gas: bigint;
|
|
863
864
|
nonce: number;
|
|
@@ -872,7 +873,6 @@ export declare const getViemProvider: (provider: EthereumProvider, network: Netw
|
|
|
872
873
|
yParity: number;
|
|
873
874
|
input: import("viem").Hex;
|
|
874
875
|
typeHex: import("viem").Hex | null;
|
|
875
|
-
chainId: number;
|
|
876
876
|
blockNumber: (blockTag extends "pending" ? true : false) extends infer T_3 ? T_3 extends (blockTag extends "pending" ? true : false) ? T_3 extends true ? null : bigint : never : never;
|
|
877
877
|
blockHash: (blockTag extends "pending" ? true : false) extends infer T_4 ? T_4 extends (blockTag extends "pending" ? true : false) ? T_4 extends true ? null : `0x${string}` : never : never;
|
|
878
878
|
transactionIndex: (blockTag extends "pending" ? true : false) extends infer T_5 ? T_5 extends (blockTag extends "pending" ? true : false) ? T_5 extends true ? null : number : never : never;
|
|
@@ -883,6 +883,7 @@ export declare const getViemProvider: (provider: EthereumProvider, network: Netw
|
|
|
883
883
|
s: import("viem").Hex;
|
|
884
884
|
value: bigint;
|
|
885
885
|
v: bigint;
|
|
886
|
+
chainId: number;
|
|
886
887
|
type: "eip1559";
|
|
887
888
|
gas: bigint;
|
|
888
889
|
nonce: number;
|
|
@@ -897,7 +898,6 @@ export declare const getViemProvider: (provider: EthereumProvider, network: Netw
|
|
|
897
898
|
yParity: number;
|
|
898
899
|
input: import("viem").Hex;
|
|
899
900
|
typeHex: import("viem").Hex | null;
|
|
900
|
-
chainId: number;
|
|
901
901
|
blockNumber: (blockTag extends "pending" ? true : false) extends infer T_6 ? T_6 extends (blockTag extends "pending" ? true : false) ? T_6 extends true ? null : bigint : never : never;
|
|
902
902
|
blockHash: (blockTag extends "pending" ? true : false) extends infer T_7 ? T_7 extends (blockTag extends "pending" ? true : false) ? T_7 extends true ? null : `0x${string}` : never : never;
|
|
903
903
|
transactionIndex: (blockTag extends "pending" ? true : false) extends infer T_8 ? T_8 extends (blockTag extends "pending" ? true : false) ? T_8 extends true ? null : number : never : never;
|
|
@@ -908,6 +908,7 @@ export declare const getViemProvider: (provider: EthereumProvider, network: Netw
|
|
|
908
908
|
s: import("viem").Hex;
|
|
909
909
|
value: bigint;
|
|
910
910
|
v: bigint;
|
|
911
|
+
chainId: number;
|
|
911
912
|
type: "eip4844";
|
|
912
913
|
gas: bigint;
|
|
913
914
|
nonce: number;
|
|
@@ -922,7 +923,6 @@ export declare const getViemProvider: (provider: EthereumProvider, network: Netw
|
|
|
922
923
|
yParity: number;
|
|
923
924
|
input: import("viem").Hex;
|
|
924
925
|
typeHex: import("viem").Hex | null;
|
|
925
|
-
chainId: number;
|
|
926
926
|
blockNumber: (blockTag extends "pending" ? true : false) extends infer T_9 ? T_9 extends (blockTag extends "pending" ? true : false) ? T_9 extends true ? null : bigint : never : never;
|
|
927
927
|
blockHash: (blockTag extends "pending" ? true : false) extends infer T_10 ? T_10 extends (blockTag extends "pending" ? true : false) ? T_10 extends true ? null : `0x${string}` : never : never;
|
|
928
928
|
transactionIndex: (blockTag extends "pending" ? true : false) extends infer T_11 ? T_11 extends (blockTag extends "pending" ? true : false) ? T_11 extends true ? null : number : never : never;
|
|
@@ -933,6 +933,7 @@ export declare const getViemProvider: (provider: EthereumProvider, network: Netw
|
|
|
933
933
|
s: import("viem").Hex;
|
|
934
934
|
value: bigint;
|
|
935
935
|
v: bigint;
|
|
936
|
+
chainId: number;
|
|
936
937
|
type: "eip7702";
|
|
937
938
|
gas: bigint;
|
|
938
939
|
nonce: number;
|
|
@@ -947,7 +948,6 @@ export declare const getViemProvider: (provider: EthereumProvider, network: Netw
|
|
|
947
948
|
yParity: number;
|
|
948
949
|
input: import("viem").Hex;
|
|
949
950
|
typeHex: import("viem").Hex | null;
|
|
950
|
-
chainId: number;
|
|
951
951
|
blockNumber: (blockTag extends "pending" ? true : false) extends infer T_12 ? T_12 extends (blockTag extends "pending" ? true : false) ? T_12 extends true ? null : bigint : never : never;
|
|
952
952
|
blockHash: (blockTag extends "pending" ? true : false) extends infer T_13 ? T_13 extends (blockTag extends "pending" ? true : false) ? T_13 extends true ? null : `0x${string}` : never : never;
|
|
953
953
|
transactionIndex: (blockTag extends "pending" ? true : false) extends infer T_14 ? T_14 extends (blockTag extends "pending" ? true : false) ? T_14 extends true ? null : number : never : never;
|
|
@@ -983,6 +983,7 @@ export declare const getViemProvider: (provider: EthereumProvider, network: Netw
|
|
|
983
983
|
s: import("viem").Hex;
|
|
984
984
|
value: bigint;
|
|
985
985
|
v: bigint;
|
|
986
|
+
chainId?: number | undefined;
|
|
986
987
|
type: "legacy";
|
|
987
988
|
gas: bigint;
|
|
988
989
|
nonce: number;
|
|
@@ -997,7 +998,6 @@ export declare const getViemProvider: (provider: EthereumProvider, network: Netw
|
|
|
997
998
|
yParity?: undefined | undefined;
|
|
998
999
|
input: import("viem").Hex;
|
|
999
1000
|
typeHex: import("viem").Hex | null;
|
|
1000
|
-
chainId?: number | undefined;
|
|
1001
1001
|
blockNumber: (blockTag extends "pending" ? true : false) extends infer T ? T extends (blockTag extends "pending" ? true : false) ? T extends true ? null : bigint : never : never;
|
|
1002
1002
|
blockHash: (blockTag extends "pending" ? true : false) extends infer T_1 ? T_1 extends (blockTag extends "pending" ? true : false) ? T_1 extends true ? null : `0x${string}` : never : never;
|
|
1003
1003
|
transactionIndex: (blockTag extends "pending" ? true : false) extends infer T_2 ? T_2 extends (blockTag extends "pending" ? true : false) ? T_2 extends true ? null : number : never : never;
|
|
@@ -1008,6 +1008,7 @@ export declare const getViemProvider: (provider: EthereumProvider, network: Netw
|
|
|
1008
1008
|
s: import("viem").Hex;
|
|
1009
1009
|
value: bigint;
|
|
1010
1010
|
v: bigint;
|
|
1011
|
+
chainId: number;
|
|
1011
1012
|
type: "eip2930";
|
|
1012
1013
|
gas: bigint;
|
|
1013
1014
|
nonce: number;
|
|
@@ -1022,7 +1023,6 @@ export declare const getViemProvider: (provider: EthereumProvider, network: Netw
|
|
|
1022
1023
|
yParity: number;
|
|
1023
1024
|
input: import("viem").Hex;
|
|
1024
1025
|
typeHex: import("viem").Hex | null;
|
|
1025
|
-
chainId: number;
|
|
1026
1026
|
blockNumber: (blockTag extends "pending" ? true : false) extends infer T_3 ? T_3 extends (blockTag extends "pending" ? true : false) ? T_3 extends true ? null : bigint : never : never;
|
|
1027
1027
|
blockHash: (blockTag extends "pending" ? true : false) extends infer T_4 ? T_4 extends (blockTag extends "pending" ? true : false) ? T_4 extends true ? null : `0x${string}` : never : never;
|
|
1028
1028
|
transactionIndex: (blockTag extends "pending" ? true : false) extends infer T_5 ? T_5 extends (blockTag extends "pending" ? true : false) ? T_5 extends true ? null : number : never : never;
|
|
@@ -1033,6 +1033,7 @@ export declare const getViemProvider: (provider: EthereumProvider, network: Netw
|
|
|
1033
1033
|
s: import("viem").Hex;
|
|
1034
1034
|
value: bigint;
|
|
1035
1035
|
v: bigint;
|
|
1036
|
+
chainId: number;
|
|
1036
1037
|
type: "eip1559";
|
|
1037
1038
|
gas: bigint;
|
|
1038
1039
|
nonce: number;
|
|
@@ -1047,7 +1048,6 @@ export declare const getViemProvider: (provider: EthereumProvider, network: Netw
|
|
|
1047
1048
|
yParity: number;
|
|
1048
1049
|
input: import("viem").Hex;
|
|
1049
1050
|
typeHex: import("viem").Hex | null;
|
|
1050
|
-
chainId: number;
|
|
1051
1051
|
blockNumber: (blockTag extends "pending" ? true : false) extends infer T_6 ? T_6 extends (blockTag extends "pending" ? true : false) ? T_6 extends true ? null : bigint : never : never;
|
|
1052
1052
|
blockHash: (blockTag extends "pending" ? true : false) extends infer T_7 ? T_7 extends (blockTag extends "pending" ? true : false) ? T_7 extends true ? null : `0x${string}` : never : never;
|
|
1053
1053
|
transactionIndex: (blockTag extends "pending" ? true : false) extends infer T_8 ? T_8 extends (blockTag extends "pending" ? true : false) ? T_8 extends true ? null : number : never : never;
|
|
@@ -1058,6 +1058,7 @@ export declare const getViemProvider: (provider: EthereumProvider, network: Netw
|
|
|
1058
1058
|
s: import("viem").Hex;
|
|
1059
1059
|
value: bigint;
|
|
1060
1060
|
v: bigint;
|
|
1061
|
+
chainId: number;
|
|
1061
1062
|
type: "eip4844";
|
|
1062
1063
|
gas: bigint;
|
|
1063
1064
|
nonce: number;
|
|
@@ -1072,7 +1073,6 @@ export declare const getViemProvider: (provider: EthereumProvider, network: Netw
|
|
|
1072
1073
|
yParity: number;
|
|
1073
1074
|
input: import("viem").Hex;
|
|
1074
1075
|
typeHex: import("viem").Hex | null;
|
|
1075
|
-
chainId: number;
|
|
1076
1076
|
blockNumber: (blockTag extends "pending" ? true : false) extends infer T_9 ? T_9 extends (blockTag extends "pending" ? true : false) ? T_9 extends true ? null : bigint : never : never;
|
|
1077
1077
|
blockHash: (blockTag extends "pending" ? true : false) extends infer T_10 ? T_10 extends (blockTag extends "pending" ? true : false) ? T_10 extends true ? null : `0x${string}` : never : never;
|
|
1078
1078
|
transactionIndex: (blockTag extends "pending" ? true : false) extends infer T_11 ? T_11 extends (blockTag extends "pending" ? true : false) ? T_11 extends true ? null : number : never : never;
|
|
@@ -1083,6 +1083,7 @@ export declare const getViemProvider: (provider: EthereumProvider, network: Netw
|
|
|
1083
1083
|
s: import("viem").Hex;
|
|
1084
1084
|
value: bigint;
|
|
1085
1085
|
v: bigint;
|
|
1086
|
+
chainId: number;
|
|
1086
1087
|
type: "eip7702";
|
|
1087
1088
|
gas: bigint;
|
|
1088
1089
|
nonce: number;
|
|
@@ -1097,7 +1098,6 @@ export declare const getViemProvider: (provider: EthereumProvider, network: Netw
|
|
|
1097
1098
|
yParity: number;
|
|
1098
1099
|
input: import("viem").Hex;
|
|
1099
1100
|
typeHex: import("viem").Hex | null;
|
|
1100
|
-
chainId: number;
|
|
1101
1101
|
blockNumber: (blockTag extends "pending" ? true : false) extends infer T_12 ? T_12 extends (blockTag extends "pending" ? true : false) ? T_12 extends true ? null : bigint : never : never;
|
|
1102
1102
|
blockHash: (blockTag extends "pending" ? true : false) extends infer T_13 ? T_13 extends (blockTag extends "pending" ? true : false) ? T_13 extends true ? null : `0x${string}` : never : never;
|
|
1103
1103
|
transactionIndex: (blockTag extends "pending" ? true : false) extends infer T_14 ? T_14 extends (blockTag extends "pending" ? true : false) ? T_14 extends true ? null : number : never : never;
|
|
@@ -4358,7 +4358,7 @@ export declare const getViemProvider: (provider: EthereumProvider, network: Netw
|
|
|
4358
4358
|
authorizationList: import("viem").TransactionSerializableEIP7702["authorizationList"];
|
|
4359
4359
|
} ? "eip7702" : never) | (request["type"] extends string | undefined ? Extract<request["type"], string> : never)>) ? T_12 extends "eip7702" ? import("viem").TransactionRequestEIP7702 : never : never : never)>> & {
|
|
4360
4360
|
chainId?: number | undefined;
|
|
4361
|
-
}, (request["parameters"] extends readonly import("viem").PrepareTransactionRequestParameterType[] ? request["parameters"][number] : "type" | "gas" | "nonce" | "blobVersionedHashes" | "fees"
|
|
4361
|
+
}, (request["parameters"] extends readonly import("viem").PrepareTransactionRequestParameterType[] ? request["parameters"][number] : "chainId" | "type" | "gas" | "nonce" | "blobVersionedHashes" | "fees") extends infer T_13 ? T_13 extends (request["parameters"] extends readonly import("viem").PrepareTransactionRequestParameterType[] ? request["parameters"][number] : "chainId" | "type" | "gas" | "nonce" | "blobVersionedHashes" | "fees") ? T_13 extends "fees" ? "gasPrice" | "maxFeePerGas" | "maxPriorityFeePerGas" : T_13 : never : never> & (unknown extends request["kzg"] ? {} : Pick<request, "kzg">) extends infer T ? { [K in keyof T]: T[K]; } : never>;
|
|
4362
4362
|
readContract: <const abi extends Abi | readonly unknown[], functionName extends import("viem").ContractFunctionName<abi, "pure" | "view">, const args extends import("viem").ContractFunctionArgs<abi, "pure" | "view", functionName>>(args: import("viem").ReadContractParameters<abi, functionName, args>) => Promise<import("viem").ReadContractReturnType<abi, functionName, args>>;
|
|
4363
4363
|
sendRawTransaction: (args: import("viem").SendRawTransactionParameters) => Promise<import("viem").SendRawTransactionReturnType>;
|
|
4364
4364
|
simulate: <const calls extends readonly unknown[]>(args: import("viem").SimulateBlocksParameters<calls>) => Promise<import("viem").SimulateBlocksReturnType<calls>>;
|
package/esm/types/index.d.ts
CHANGED
package/esm/types/index.js
CHANGED
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { EthAddress, IncentiveData, LeverageType, MMUsedAssets, NetworkNumber } from './common';
|
|
2
|
+
export declare enum MorphoMidnightVersions {
|
|
3
|
+
MorphoMidnightCbBTCUSDC_860_20260731_Base = "morphomidnightcbbtcusdc_860_20260731_base",
|
|
4
|
+
MorphoMidnightCbBTCUSDC_860_20260828_Base = "morphomidnightcbbtcusdc_860_20260828_base",
|
|
5
|
+
MorphoMidnightCbBTCUSDC_860_20260925_Base = "morphomidnightcbbtcusdc_860_20260925_base",
|
|
6
|
+
MorphoMidnightCbBTCUSDC_860_20261030_Base = "morphomidnightcbbtcusdc_860_20261030_base",
|
|
7
|
+
MorphoMidnightCbBTCUSDC_860_20261127_Base = "morphomidnightcbbtcusdc_860_20261127_base",
|
|
8
|
+
MorphoMidnightCbBTCUSDC_860_20261225_Base = "morphomidnightcbbtcusdc_860_20261225_base"
|
|
9
|
+
}
|
|
10
|
+
export interface MorphoMidnightCollateralParams {
|
|
11
|
+
token: EthAddress;
|
|
12
|
+
lltv: number | string;
|
|
13
|
+
liquidationCursor: number | string;
|
|
14
|
+
oracle: EthAddress;
|
|
15
|
+
}
|
|
16
|
+
export interface MorphoMidnightMarketData {
|
|
17
|
+
chainIds: NetworkNumber[];
|
|
18
|
+
label: string;
|
|
19
|
+
shortLabel: string;
|
|
20
|
+
url: string;
|
|
21
|
+
value: MorphoMidnightVersions;
|
|
22
|
+
midnight: EthAddress;
|
|
23
|
+
loanToken: EthAddress;
|
|
24
|
+
collaterals: MorphoMidnightCollateralParams[];
|
|
25
|
+
maturity: number;
|
|
26
|
+
rcfThreshold: number | string;
|
|
27
|
+
enterGate: EthAddress;
|
|
28
|
+
liquidatorGate: EthAddress;
|
|
29
|
+
marketId: string;
|
|
30
|
+
protocolName: string;
|
|
31
|
+
}
|
|
32
|
+
export interface MorphoMidnightAssetData {
|
|
33
|
+
symbol: string;
|
|
34
|
+
address: string;
|
|
35
|
+
price: string;
|
|
36
|
+
supplyRate: string;
|
|
37
|
+
borrowRate: string;
|
|
38
|
+
supplyIncentives: IncentiveData[];
|
|
39
|
+
borrowIncentives: IncentiveData[];
|
|
40
|
+
totalSupply?: string;
|
|
41
|
+
totalBorrow?: string;
|
|
42
|
+
canBeSupplied?: boolean;
|
|
43
|
+
canBeBorrowed?: boolean;
|
|
44
|
+
lltv?: string;
|
|
45
|
+
}
|
|
46
|
+
export type MorphoMidnightAssetsData = {
|
|
47
|
+
[key: string]: MorphoMidnightAssetData;
|
|
48
|
+
};
|
|
49
|
+
export interface MorphoMidnightMarketInfo {
|
|
50
|
+
id: string;
|
|
51
|
+
loanToken: string;
|
|
52
|
+
collaterals: string[];
|
|
53
|
+
maturity: number;
|
|
54
|
+
isMatured: boolean;
|
|
55
|
+
totalUnits: string;
|
|
56
|
+
withdrawable: string;
|
|
57
|
+
totalDebt: string;
|
|
58
|
+
lossFactor: string;
|
|
59
|
+
tickSpacing: number;
|
|
60
|
+
utillization: string;
|
|
61
|
+
assetsData: MorphoMidnightAssetsData;
|
|
62
|
+
}
|
|
63
|
+
export interface MorphoMidnightAggregatedPositionData {
|
|
64
|
+
suppliedUsd: string;
|
|
65
|
+
suppliedCollateralUsd: string;
|
|
66
|
+
borrowedUsd: string;
|
|
67
|
+
borrowLimitUsd: string;
|
|
68
|
+
liquidationLimitUsd: string;
|
|
69
|
+
leftToBorrowUsd: string;
|
|
70
|
+
leftToBorrow: string;
|
|
71
|
+
netApy: string;
|
|
72
|
+
incentiveUsd: string;
|
|
73
|
+
totalInterestUsd: string;
|
|
74
|
+
ltv: string;
|
|
75
|
+
ratio: string;
|
|
76
|
+
healthRatio: string;
|
|
77
|
+
leveragedType: LeverageType;
|
|
78
|
+
leveragedAsset?: string;
|
|
79
|
+
currentVolatilePairRatio?: string;
|
|
80
|
+
liquidationPrice?: string;
|
|
81
|
+
minCollRatio?: string;
|
|
82
|
+
collLiquidationRatio?: string;
|
|
83
|
+
exposure: string;
|
|
84
|
+
}
|
|
85
|
+
export interface MorphoMidnightPositionData extends MorphoMidnightAggregatedPositionData {
|
|
86
|
+
usedAssets: MMUsedAssets;
|
|
87
|
+
credit: string;
|
|
88
|
+
debt: string;
|
|
89
|
+
maturity: number;
|
|
90
|
+
isMatured: boolean;
|
|
91
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export var MorphoMidnightVersions;
|
|
2
|
+
(function (MorphoMidnightVersions) {
|
|
3
|
+
// BASE
|
|
4
|
+
// Fixed-term markets are disambiguated by maturity (YYYYMMDD), so the same pair recurs across dates.
|
|
5
|
+
// Sourced from the official listing at https://markets.morpho.org/fixed/base (see sitemap.xml).
|
|
6
|
+
MorphoMidnightVersions["MorphoMidnightCbBTCUSDC_860_20260731_Base"] = "morphomidnightcbbtcusdc_860_20260731_base";
|
|
7
|
+
MorphoMidnightVersions["MorphoMidnightCbBTCUSDC_860_20260828_Base"] = "morphomidnightcbbtcusdc_860_20260828_base";
|
|
8
|
+
MorphoMidnightVersions["MorphoMidnightCbBTCUSDC_860_20260925_Base"] = "morphomidnightcbbtcusdc_860_20260925_base";
|
|
9
|
+
MorphoMidnightVersions["MorphoMidnightCbBTCUSDC_860_20261030_Base"] = "morphomidnightcbbtcusdc_860_20261030_base";
|
|
10
|
+
MorphoMidnightVersions["MorphoMidnightCbBTCUSDC_860_20261127_Base"] = "morphomidnightcbbtcusdc_860_20261127_base";
|
|
11
|
+
MorphoMidnightVersions["MorphoMidnightCbBTCUSDC_860_20261225_Base"] = "morphomidnightcbbtcusdc_860_20261225_base";
|
|
12
|
+
})(MorphoMidnightVersions || (MorphoMidnightVersions = {}));
|
package/esm/types/portfolio.d.ts
CHANGED
|
@@ -9,6 +9,7 @@ import { LiquityTroveInfo } from './liquity';
|
|
|
9
9
|
import { LlamaLendUserData, LlamaLendVersionsType } from './llamaLend';
|
|
10
10
|
import { CdpData } from './maker';
|
|
11
11
|
import { MorphoBluePositionData, MorphoBlueVersions } from './morphoBlue';
|
|
12
|
+
import { MorphoMidnightPositionData, MorphoMidnightVersions } from './morphoMidnight';
|
|
12
13
|
import { SparkPositionData, SparkVersions } from './spark';
|
|
13
14
|
export interface PortfolioProtocolData<T> {
|
|
14
15
|
error: string;
|
|
@@ -21,6 +22,9 @@ export interface PortfolioPositionsDataForAddress {
|
|
|
21
22
|
morphoBlue: {
|
|
22
23
|
[key in MorphoBlueVersions]?: PortfolioProtocolData<MorphoBluePositionData>;
|
|
23
24
|
};
|
|
25
|
+
morphoMidnight: {
|
|
26
|
+
[key in MorphoMidnightVersions]?: PortfolioProtocolData<MorphoMidnightPositionData>;
|
|
27
|
+
};
|
|
24
28
|
compoundV3: {
|
|
25
29
|
[key in CompoundVersions]?: PortfolioProtocolData<CompoundV3PositionData>;
|
|
26
30
|
};
|
package/package.json
CHANGED
package/src/config/contracts.ts
CHANGED
|
@@ -1113,6 +1113,15 @@ export const MorphoBlueView = {
|
|
|
1113
1113
|
}
|
|
1114
1114
|
},
|
|
1115
1115
|
} as const;
|
|
1116
|
+
export const MidnightView = {
|
|
1117
|
+
"abi": [{"inputs":[{"internalType":"bytes32","name":"_id","type":"bytes32"}],"name":"getMarketInfo","outputs":[{"components":[{"internalType":"bytes32","name":"id","type":"bytes32"},{"internalType":"uint128","name":"totalUnits","type":"uint128"},{"internalType":"uint128","name":"lossFactor","type":"uint128"},{"internalType":"uint128","name":"withdrawable","type":"uint128"},{"internalType":"uint128","name":"continuousFeeCredit","type":"uint128"},{"internalType":"uint16[7]","name":"settlementFees","type":"uint16[7]"},{"internalType":"uint32","name":"continuousFee","type":"uint32"},{"internalType":"uint8","name":"tickSpacing","type":"uint8"},{"internalType":"uint256[]","name":"prices","type":"uint256[]"}],"internalType":"struct MidnightView.MarketInfo","name":"info","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_id","type":"bytes32"},{"internalType":"address","name":"_user","type":"address"}],"name":"getPositionInfo","outputs":[{"components":[{"internalType":"uint128","name":"credit","type":"uint128"},{"internalType":"uint128","name":"pendingFee","type":"uint128"},{"internalType":"uint128","name":"debt","type":"uint128"},{"internalType":"uint128","name":"collateralBitmap","type":"uint128"},{"internalType":"uint128[]","name":"collateral","type":"uint128[]"},{"internalType":"uint256","name":"ratio","type":"uint256"}],"internalType":"struct MidnightView.PositionInfo","name":"pos","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_id","type":"bytes32"},{"internalType":"address","name":"_user","type":"address"}],"name":"getRatio","outputs":[{"internalType":"uint256","name":"ratio","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"uint256","name":"chainId","type":"uint256"},{"internalType":"address","name":"midnight","type":"address"},{"internalType":"address","name":"loanToken","type":"address"},{"components":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"lltv","type":"uint256"},{"internalType":"uint256","name":"liquidationCursor","type":"uint256"},{"internalType":"address","name":"oracle","type":"address"}],"internalType":"struct CollateralParams[]","name":"collateralParams","type":"tuple[]"},{"internalType":"uint256","name":"maturity","type":"uint256"},{"internalType":"uint256","name":"rcfThreshold","type":"uint256"},{"internalType":"address","name":"enterGate","type":"address"},{"internalType":"address","name":"liquidatorGate","type":"address"}],"internalType":"struct Market","name":"_market","type":"tuple"}],"name":"toId","outputs":[{"internalType":"bytes32","name":"id","type":"bytes32"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_id","type":"bytes32"}],"name":"toMarket","outputs":[{"components":[{"internalType":"uint256","name":"chainId","type":"uint256"},{"internalType":"address","name":"midnight","type":"address"},{"internalType":"address","name":"loanToken","type":"address"},{"components":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"lltv","type":"uint256"},{"internalType":"uint256","name":"liquidationCursor","type":"uint256"},{"internalType":"address","name":"oracle","type":"address"}],"internalType":"struct CollateralParams[]","name":"collateralParams","type":"tuple[]"},{"internalType":"uint256","name":"maturity","type":"uint256"},{"internalType":"uint256","name":"rcfThreshold","type":"uint256"},{"internalType":"address","name":"enterGate","type":"address"},{"internalType":"address","name":"liquidatorGate","type":"address"}],"internalType":"struct Market","name":"market","type":"tuple"}],"stateMutability":"view","type":"function"}],
|
|
1118
|
+
"networks": {
|
|
1119
|
+
"8453": {
|
|
1120
|
+
"address": "0x3aa272f329E8B562A3bA56Bb6979a44D23A28839",
|
|
1121
|
+
"createdBlock": 48932293,
|
|
1122
|
+
}
|
|
1123
|
+
},
|
|
1124
|
+
} as const;
|
|
1116
1125
|
export const FeedRegistry = {
|
|
1117
1126
|
"abi": [{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"}],"name":"OwnershipTransferRequested","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"base","type":"address"},{"internalType":"address","name":"quote","type":"address"},{"internalType":"address","name":"aggregator","type":"address"}],"name":"confirmFeed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"base","type":"address"},{"internalType":"address","name":"quote","type":"address"}],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"base","type":"address"},{"internalType":"address","name":"quote","type":"address"}],"name":"description","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAccessController","outputs":[{"internalType":"contract AccessControllerInterface","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"base","type":"address"},{"internalType":"address","name":"quote","type":"address"},{"internalType":"uint256","name":"roundId","type":"uint256"}],"name":"getAnswer","outputs":[{"internalType":"int256","name":"answer","type":"int256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"base","type":"address"},{"internalType":"address","name":"quote","type":"address"}],"name":"getCurrentPhaseId","outputs":[{"internalType":"uint16","name":"currentPhaseId","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"base","type":"address"},{"internalType":"address","name":"quote","type":"address"}],"name":"getFeed","outputs":[{"internalType":"contract AggregatorV2V3Interface","name":"aggregator","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"base","type":"address"},{"internalType":"address","name":"quote","type":"address"},{"internalType":"uint80","name":"roundId","type":"uint80"}],"name":"getNextRoundId","outputs":[{"internalType":"uint80","name":"nextRoundId","type":"uint80"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"base","type":"address"},{"internalType":"address","name":"quote","type":"address"},{"internalType":"uint16","name":"phaseId","type":"uint16"}],"name":"getPhase","outputs":[{"components":[{"internalType":"uint16","name":"phaseId","type":"uint16"},{"internalType":"uint80","name":"startingAggregatorRoundId","type":"uint80"},{"internalType":"uint80","name":"endingAggregatorRoundId","type":"uint80"}],"internalType":"struct FeedRegistryInterface.Phase","name":"phase","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"base","type":"address"},{"internalType":"address","name":"quote","type":"address"},{"internalType":"uint16","name":"phaseId","type":"uint16"}],"name":"getPhaseFeed","outputs":[{"internalType":"contract AggregatorV2V3Interface","name":"aggregator","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"base","type":"address"},{"internalType":"address","name":"quote","type":"address"},{"internalType":"uint16","name":"phaseId","type":"uint16"}],"name":"getPhaseRange","outputs":[{"internalType":"uint80","name":"startingRoundId","type":"uint80"},{"internalType":"uint80","name":"endingRoundId","type":"uint80"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"base","type":"address"},{"internalType":"address","name":"quote","type":"address"},{"internalType":"uint80","name":"roundId","type":"uint80"}],"name":"getPreviousRoundId","outputs":[{"internalType":"uint80","name":"previousRoundId","type":"uint80"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"base","type":"address"},{"internalType":"address","name":"quote","type":"address"}],"name":"getProposedFeed","outputs":[{"internalType":"contract AggregatorV2V3Interface","name":"proposedAggregator","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"base","type":"address"},{"internalType":"address","name":"quote","type":"address"},{"internalType":"uint80","name":"_roundId","type":"uint80"}],"name":"getRoundData","outputs":[{"internalType":"uint80","name":"roundId","type":"uint80"},{"internalType":"int256","name":"answer","type":"int256"},{"internalType":"uint256","name":"startedAt","type":"uint256"},{"internalType":"uint256","name":"updatedAt","type":"uint256"},{"internalType":"uint80","name":"answeredInRound","type":"uint80"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"base","type":"address"},{"internalType":"address","name":"quote","type":"address"},{"internalType":"uint80","name":"roundId","type":"uint80"}],"name":"getRoundFeed","outputs":[{"internalType":"contract AggregatorV2V3Interface","name":"aggregator","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"base","type":"address"},{"internalType":"address","name":"quote","type":"address"},{"internalType":"uint256","name":"roundId","type":"uint256"}],"name":"getTimestamp","outputs":[{"internalType":"uint256","name":"timestamp","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"aggregator","type":"address"}],"name":"isFeedEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"base","type":"address"},{"internalType":"address","name":"quote","type":"address"}],"name":"latestAnswer","outputs":[{"internalType":"int256","name":"answer","type":"int256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"base","type":"address"},{"internalType":"address","name":"quote","type":"address"}],"name":"latestRound","outputs":[{"internalType":"uint256","name":"roundId","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"base","type":"address"},{"internalType":"address","name":"quote","type":"address"}],"name":"latestRoundData","outputs":[{"internalType":"uint80","name":"roundId","type":"uint80"},{"internalType":"int256","name":"answer","type":"int256"},{"internalType":"uint256","name":"startedAt","type":"uint256"},{"internalType":"uint256","name":"updatedAt","type":"uint256"},{"internalType":"uint80","name":"answeredInRound","type":"uint80"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"base","type":"address"},{"internalType":"address","name":"quote","type":"address"}],"name":"latestTimestamp","outputs":[{"internalType":"uint256","name":"timestamp","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"base","type":"address"},{"internalType":"address","name":"quote","type":"address"},{"internalType":"address","name":"aggregator","type":"address"}],"name":"proposeFeed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"base","type":"address"},{"internalType":"address","name":"quote","type":"address"},{"internalType":"uint80","name":"roundId","type":"uint80"}],"name":"proposedGetRoundData","outputs":[{"internalType":"uint80","name":"id","type":"uint80"},{"internalType":"int256","name":"answer","type":"int256"},{"internalType":"uint256","name":"startedAt","type":"uint256"},{"internalType":"uint256","name":"updatedAt","type":"uint256"},{"internalType":"uint80","name":"answeredInRound","type":"uint80"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"base","type":"address"},{"internalType":"address","name":"quote","type":"address"}],"name":"proposedLatestRoundData","outputs":[{"internalType":"uint80","name":"id","type":"uint80"},{"internalType":"int256","name":"answer","type":"int256"},{"internalType":"uint256","name":"startedAt","type":"uint256"},{"internalType":"uint256","name":"updatedAt","type":"uint256"},{"internalType":"uint80","name":"answeredInRound","type":"uint80"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract AccessControllerInterface","name":"_accessController","type":"address"}],"name":"setAccessController","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"typeAndVersion","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"base","type":"address"},{"internalType":"address","name":"quote","type":"address"}],"name":"version","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}],
|
|
1118
1127
|
"networks": {
|
package/src/contracts.ts
CHANGED
|
@@ -122,6 +122,7 @@ export const getYearnV3VaultContractViem = (client: Client, address: HexString)
|
|
|
122
122
|
};
|
|
123
123
|
|
|
124
124
|
export const MorphoBlueViewContractViem = createViemContractFromConfigFunc('MorphoBlueView');
|
|
125
|
+
export const MorphoMidnightViewContractViem = createViemContractFromConfigFunc('MidnightView');
|
|
125
126
|
export const AaveLoanInfoV2ContractViem = createViemContractFromConfigFunc('AaveLoanInfoV2');
|
|
126
127
|
export const AaveV3ViewContractViem = createViemContractFromConfigFunc('AaveV3View');
|
|
127
128
|
export const AaveIncentiveDataProviderV3ContractViem = createViemContractFromConfigFunc('AaveUiIncentiveDataProviderV3');
|
package/src/helpers/index.ts
CHANGED
|
@@ -4,6 +4,7 @@ export * as sparkHelpers from './sparkHelpers';
|
|
|
4
4
|
export * as curveUsdHelpers from './curveUsdHelpers';
|
|
5
5
|
export * as makerHelpers from './makerHelpers';
|
|
6
6
|
export * as morphoBlueHelpers from './morphoBlueHelpers';
|
|
7
|
+
export * as morphoMidnightHelpers from './morphoMidnightHelpers';
|
|
7
8
|
export * as llamaLendHelpers from './llamaLendHelpers';
|
|
8
9
|
export * as liquityV2Helpers from './liquityV2Helpers';
|
|
9
10
|
export * as eulerV2Helpers from './eulerHelpers';
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import Dec from 'decimal.js';
|
|
2
|
+
import {
|
|
3
|
+
calcLeverageLiqPrice, getAssetsTotal, getExposure, isLeveragedPos,
|
|
4
|
+
} from '../../moneymarket';
|
|
5
|
+
import { calculateNetApy } from '../../staking';
|
|
6
|
+
import {
|
|
7
|
+
LeverageType, MMAssetsData, MMUsedAsset, MMUsedAssets,
|
|
8
|
+
} from '../../types/common';
|
|
9
|
+
import { MorphoMidnightAggregatedPositionData, MorphoMidnightAssetsData, MorphoMidnightMarketInfo } from '../../types';
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Aggregate a Morpho Midnight position. Midnight markets are multi-collateral, so the borrow limit is
|
|
13
|
+
* the sum of each collateral's USD value times its own lltv (Aave-v4 style), rather than a single pair.
|
|
14
|
+
*
|
|
15
|
+
* Note on amounts: `borrowedUsd` is derived from the position's `debt`, which is the face value owed at
|
|
16
|
+
* maturity (principal + fixed interest). Health is therefore measured against the full maturity debt,
|
|
17
|
+
* matching how MidnightView computes `ratio`. Fixed-rate APY is not derived on-chain in MVP, so
|
|
18
|
+
* `netApy` reflects the `'0'` rates in `assetsData` (see the module getter).
|
|
19
|
+
*/
|
|
20
|
+
export const getMorphoMidnightAggregatedPositionData = ({
|
|
21
|
+
usedAssets,
|
|
22
|
+
assetsData,
|
|
23
|
+
marketInfo,
|
|
24
|
+
}: {
|
|
25
|
+
usedAssets: MMUsedAssets,
|
|
26
|
+
assetsData: MorphoMidnightAssetsData,
|
|
27
|
+
marketInfo: MorphoMidnightMarketInfo,
|
|
28
|
+
}): MorphoMidnightAggregatedPositionData => {
|
|
29
|
+
const payload = {} as MorphoMidnightAggregatedPositionData;
|
|
30
|
+
|
|
31
|
+
payload.suppliedUsd = getAssetsTotal(usedAssets, ({ isSupplied }: { isSupplied: boolean }) => isSupplied, ({ suppliedUsd }: { suppliedUsd: string }) => suppliedUsd);
|
|
32
|
+
payload.suppliedCollateralUsd = getAssetsTotal(usedAssets, ({ isSupplied, collateral }: { isSupplied: boolean, collateral: boolean }) => isSupplied && collateral, ({ suppliedUsd }: { suppliedUsd: string }) => suppliedUsd);
|
|
33
|
+
payload.borrowedUsd = getAssetsTotal(usedAssets, ({ isBorrowed }: { isBorrowed: boolean }) => isBorrowed, ({ borrowedUsd }: { borrowedUsd: string }) => borrowedUsd);
|
|
34
|
+
|
|
35
|
+
// borrowLimit = Σ collateralUsd_i * lltv_i (per-collateral lltv carried on assetsData)
|
|
36
|
+
payload.borrowLimitUsd = getAssetsTotal(
|
|
37
|
+
usedAssets,
|
|
38
|
+
({ isSupplied, collateral }: { isSupplied: boolean, collateral: boolean }) => isSupplied && collateral,
|
|
39
|
+
({ symbol, suppliedUsd }: { symbol: string, suppliedUsd: string }) => new Dec(suppliedUsd).mul(assetsData[symbol]?.lltv || 0),
|
|
40
|
+
);
|
|
41
|
+
payload.liquidationLimitUsd = payload.borrowLimitUsd;
|
|
42
|
+
|
|
43
|
+
const leftToBorrowUsd = new Dec(payload.borrowLimitUsd).sub(payload.borrowedUsd);
|
|
44
|
+
payload.leftToBorrowUsd = leftToBorrowUsd.lte('0') ? '0' : leftToBorrowUsd.toString();
|
|
45
|
+
|
|
46
|
+
const loanTokenPrice = assetsData[marketInfo.loanToken]?.price || '0';
|
|
47
|
+
payload.leftToBorrow = new Dec(loanTokenPrice).eq(0) ? '0' : new Dec(payload.leftToBorrowUsd).div(loanTokenPrice).toString();
|
|
48
|
+
|
|
49
|
+
const { netApy, incentiveUsd, totalInterestUsd } = calculateNetApy({ usedAssets, assetsData: assetsData as unknown as MMAssetsData });
|
|
50
|
+
payload.netApy = netApy;
|
|
51
|
+
payload.incentiveUsd = incentiveUsd;
|
|
52
|
+
payload.totalInterestUsd = totalInterestUsd;
|
|
53
|
+
|
|
54
|
+
payload.ltv = new Dec(payload.suppliedCollateralUsd).eq(0) ? '0' : new Dec(payload.borrowedUsd).div(payload.suppliedCollateralUsd).toString();
|
|
55
|
+
payload.ratio = new Dec(payload.borrowedUsd).eq(0) ? '0' : new Dec(payload.suppliedCollateralUsd).div(payload.borrowedUsd).mul(100).toString();
|
|
56
|
+
payload.healthRatio = new Dec(payload.borrowedUsd).eq(0) ? 'Infinity' : new Dec(payload.liquidationLimitUsd).div(payload.borrowedUsd).toDP(4).toString();
|
|
57
|
+
|
|
58
|
+
const { leveragedType, leveragedAsset } = isLeveragedPos(usedAssets);
|
|
59
|
+
payload.leveragedType = leveragedType;
|
|
60
|
+
payload.liquidationPrice = '';
|
|
61
|
+
if (leveragedType !== '') {
|
|
62
|
+
payload.leveragedAsset = leveragedAsset;
|
|
63
|
+
let assetPrice = assetsData[leveragedAsset].price;
|
|
64
|
+
if (leveragedType === LeverageType.VolatilePair) {
|
|
65
|
+
const borrowedAsset = (Object.values(usedAssets) as MMUsedAsset[]).find(({ borrowedUsd }: { borrowedUsd: string }) => +borrowedUsd > 0);
|
|
66
|
+
const borrowedAssetPrice = assetsData[borrowedAsset!.symbol].price;
|
|
67
|
+
const leveragedAssetPrice = assetsData[leveragedAsset].price;
|
|
68
|
+
const isReverse = new Dec(leveragedAssetPrice).lt(borrowedAssetPrice);
|
|
69
|
+
if (isReverse) {
|
|
70
|
+
payload.leveragedType = LeverageType.VolatilePairReverse;
|
|
71
|
+
payload.currentVolatilePairRatio = new Dec(borrowedAssetPrice).div(leveragedAssetPrice).toDP(18).toString();
|
|
72
|
+
assetPrice = new Dec(borrowedAssetPrice).div(assetPrice).toString();
|
|
73
|
+
} else {
|
|
74
|
+
assetPrice = new Dec(assetPrice).div(borrowedAssetPrice).toString();
|
|
75
|
+
payload.currentVolatilePairRatio = new Dec(leveragedAssetPrice).div(borrowedAssetPrice).toDP(18).toString();
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
payload.liquidationPrice = calcLeverageLiqPrice(payload.leveragedType, assetPrice, payload.borrowedUsd, payload.liquidationLimitUsd);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
payload.minCollRatio = new Dec(payload.borrowLimitUsd).eq(0) ? '0' : new Dec(payload.suppliedCollateralUsd).div(payload.borrowLimitUsd).mul(100).toString();
|
|
82
|
+
payload.collLiquidationRatio = new Dec(payload.liquidationLimitUsd).eq(0) ? '0' : new Dec(payload.suppliedCollateralUsd).div(payload.liquidationLimitUsd).mul(100).toString();
|
|
83
|
+
payload.exposure = getExposure(payload.borrowedUsd, payload.suppliedUsd);
|
|
84
|
+
|
|
85
|
+
return payload;
|
|
86
|
+
};
|
package/src/index.ts
CHANGED
|
@@ -17,6 +17,7 @@ import * as markets from './markets';
|
|
|
17
17
|
import * as helpers from './helpers';
|
|
18
18
|
import * as exchange from './exchange';
|
|
19
19
|
import * as morphoBlue from './morphoBlue';
|
|
20
|
+
import * as morphoMidnight from './morphoMidnight';
|
|
20
21
|
import * as llamaLend from './llamaLend';
|
|
21
22
|
import * as eulerV2 from './eulerV2';
|
|
22
23
|
import * as portfolio from './portfolio';
|
|
@@ -42,6 +43,7 @@ export {
|
|
|
42
43
|
markets,
|
|
43
44
|
helpers,
|
|
44
45
|
morphoBlue,
|
|
46
|
+
morphoMidnight,
|
|
45
47
|
llamaLend,
|
|
46
48
|
eulerV2,
|
|
47
49
|
fluid,
|
package/src/markets/index.ts
CHANGED
|
@@ -17,6 +17,7 @@ export {
|
|
|
17
17
|
export { SparkMarkets } from './spark';
|
|
18
18
|
export { CrvUsdMarkets } from './curveUsd';
|
|
19
19
|
export { MorphoBlueMarkets, findMorphoBlueMarket } from './morphoBlue';
|
|
20
|
+
export { MorphoMidnightMarkets, findMorphoMidnightMarket } from './morphoMidnight';
|
|
20
21
|
export { LlamaLendMarkets } from './llamaLend';
|
|
21
22
|
export { LiquityV2Markets, findLiquityV2MarketByAddress } from './liquityV2';
|
|
22
23
|
export { EulerV2Markets } from './euler';
|