@defisaver/positions-sdk 2.1.161-portfolio-api-1-dev → 2.1.162
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/aaveV3/index.js +7 -1
- package/cjs/helpers/aaveHelpers/index.d.ts +9 -1
- package/cjs/helpers/aaveHelpers/index.js +23 -6
- package/cjs/portfolio/index.d.ts +2 -2
- package/cjs/portfolio/index.js +3 -5
- package/cjs/savings/index.js +5 -2
- package/cjs/savings/morphoVaults/index.d.ts +1 -1
- package/cjs/savings/morphoVaults/index.js +56 -18
- package/cjs/savings/morphoVaults/options.d.ts +2 -0
- package/cjs/savings/morphoVaults/options.js +61 -1
- package/cjs/spark/index.js +1 -0
- package/cjs/types/aave.d.ts +3 -15
- package/cjs/types/compound.d.ts +2 -26
- package/cjs/types/curveUsd.d.ts +1 -9
- package/cjs/types/llamaLend.d.ts +1 -12
- package/cjs/types/morphoBlue.d.ts +0 -2
- package/cjs/types/portfolio.d.ts +8 -23
- package/cjs/types/savings/morphoVaults.d.ts +10 -2
- package/cjs/types/savings/morphoVaults.js +9 -1
- package/cjs/types/spark.d.ts +1 -21
- package/esm/aaveV3/index.js +7 -1
- package/esm/helpers/aaveHelpers/index.d.ts +9 -1
- package/esm/helpers/aaveHelpers/index.js +20 -5
- package/esm/portfolio/index.d.ts +2 -2
- package/esm/portfolio/index.js +3 -5
- package/esm/savings/index.js +5 -2
- package/esm/savings/morphoVaults/index.d.ts +1 -1
- package/esm/savings/morphoVaults/index.js +57 -19
- package/esm/savings/morphoVaults/options.d.ts +2 -0
- package/esm/savings/morphoVaults/options.js +61 -1
- package/esm/spark/index.js +1 -0
- package/esm/types/aave.d.ts +3 -15
- package/esm/types/compound.d.ts +2 -26
- package/esm/types/curveUsd.d.ts +1 -9
- package/esm/types/llamaLend.d.ts +1 -12
- package/esm/types/morphoBlue.d.ts +0 -2
- package/esm/types/portfolio.d.ts +8 -23
- package/esm/types/savings/morphoVaults.d.ts +10 -2
- package/esm/types/savings/morphoVaults.js +8 -0
- package/esm/types/spark.d.ts +1 -21
- package/package.json +1 -1
- package/src/aaveV3/index.ts +6 -1
- package/src/helpers/aaveHelpers/index.ts +24 -7
- package/src/portfolio/index.ts +4 -7
- package/src/savings/index.ts +5 -2
- package/src/savings/morphoVaults/index.ts +73 -21
- package/src/savings/morphoVaults/options.ts +67 -1
- package/src/spark/index.ts +1 -0
- package/src/types/aave.ts +2 -18
- package/src/types/compound.ts +2 -38
- package/src/types/curveUsd.ts +1 -17
- package/src/types/llamaLend.ts +1 -19
- package/src/types/morphoBlue.ts +0 -3
- package/src/types/portfolio.ts +9 -28
- package/src/types/savings/morphoVaults.ts +11 -1
- package/src/types/spark.ts +1 -25
package/src/savings/index.ts
CHANGED
|
@@ -32,7 +32,8 @@ export const getSavingsData = async (
|
|
|
32
32
|
network: NetworkNumber,
|
|
33
33
|
accounts: EthAddress[],
|
|
34
34
|
) => {
|
|
35
|
-
const morphoVaultsList = Object.keys(morphoVaults.morphoVaultsOptions.MORPHO_VAULTS) as MorphoVaultType[]
|
|
35
|
+
const morphoVaultsList = (Object.keys(morphoVaults.morphoVaultsOptions.MORPHO_VAULTS) as MorphoVaultType[])
|
|
36
|
+
.filter((key) => morphoVaults.morphoVaultsOptions.getMorphoVault(key).network === network);
|
|
36
37
|
const yearnVaultsList = Object.keys(yearnVaults.yearnVaultsOptions.YEARN_VAULTS) as YearnVaultType[];
|
|
37
38
|
const sparkSavingsVaultsList = Object.keys(sparkSavingsVaults.sparkSavingsVaultsOptions.SPARK_SAVINGS_VAULTS) as SparkSavingsVaultType[];
|
|
38
39
|
const yearnV3VaultsList = Object.keys(yearnV3Vaults.yearnV3VaultsOptions.YEARN_V3_VAULTS) as YearnV3VaultType[];
|
|
@@ -42,7 +43,7 @@ export const getSavingsData = async (
|
|
|
42
43
|
const savingsData: SavingsData = {};
|
|
43
44
|
|
|
44
45
|
await Promise.all([
|
|
45
|
-
...(
|
|
46
|
+
...(morphoVaultsList.length ? [
|
|
46
47
|
(async () => {
|
|
47
48
|
try {
|
|
48
49
|
const vaults = morphoVaultsList.map((vaultKey) => morphoVaults.morphoVaultsOptions.getMorphoVault(vaultKey));
|
|
@@ -52,6 +53,8 @@ export const getSavingsData = async (
|
|
|
52
53
|
console.error('[getSavingsData] Error fetching morpho vaults:', err);
|
|
53
54
|
}
|
|
54
55
|
})(),
|
|
56
|
+
] : []),
|
|
57
|
+
...(network === NetworkNumber.Eth ? [
|
|
55
58
|
...yearnVaultsList.map(async (vaultKey) => {
|
|
56
59
|
try {
|
|
57
60
|
const vault = yearnVaults.yearnVaultsOptions.getYearnVault(vaultKey);
|
|
@@ -4,10 +4,10 @@ import { request as graphqlRequest } from 'graphql-request';
|
|
|
4
4
|
import { assetAmountInEth } from '@defisaver/tokens';
|
|
5
5
|
import * as morphoVaultsOptions from './options';
|
|
6
6
|
import {
|
|
7
|
-
EthAddress, EthereumProvider, NetworkNumber, MorphoVault, MorphoVaultType, SavingsVaultData,
|
|
7
|
+
EthAddress, EthereumProvider, NetworkNumber, MorphoVault, MorphoVaultType, MorphoVaultVersion, SavingsVaultData,
|
|
8
8
|
} from '../../types';
|
|
9
9
|
import { getViemProvider } from '../../services/viem';
|
|
10
|
-
import { getMorphoVaultContractViem } from '../../contracts';
|
|
10
|
+
import { getErc4626ContractViem, getMorphoVaultContractViem } from '../../contracts';
|
|
11
11
|
import { MORPHO_API_URL } from '../../constants';
|
|
12
12
|
|
|
13
13
|
export {
|
|
@@ -17,38 +17,49 @@ export {
|
|
|
17
17
|
// Morpho API caps list page size at 100 items
|
|
18
18
|
const MORPHO_API_PAGE_SIZE = 100;
|
|
19
19
|
|
|
20
|
-
const
|
|
20
|
+
const buildLiquidityQuery = (listField: 'vaults' | 'vaultV2s') => `
|
|
21
21
|
query VaultsLiquidity($addresses: [String!], $chainIds: [Int!]) {
|
|
22
|
-
|
|
22
|
+
${listField}(first: ${MORPHO_API_PAGE_SIZE}, where: { address_in: $addresses, chainId_in: $chainIds }) {
|
|
23
23
|
items {
|
|
24
24
|
address
|
|
25
|
-
liquidity {
|
|
26
|
-
underlying
|
|
27
|
-
}
|
|
25
|
+
liquidity${listField === 'vaults' ? ' {\n underlying\n }' : ''}
|
|
28
26
|
}
|
|
29
27
|
}
|
|
30
28
|
}`;
|
|
31
29
|
|
|
30
|
+
const liquidityQueries = {
|
|
31
|
+
[MorphoVaultVersion.V1]: { field: 'vaults', query: buildLiquidityQuery('vaults') },
|
|
32
|
+
[MorphoVaultVersion.V2]: { field: 'vaultV2s', query: buildLiquidityQuery('vaultV2s') },
|
|
33
|
+
} as const;
|
|
34
|
+
|
|
35
|
+
type LiquidityItem = { address: string, liquidity: { underlying: string | number | null } | string | number | null };
|
|
36
|
+
|
|
32
37
|
/**
|
|
33
|
-
* Fetches liquidity for all given vaults
|
|
38
|
+
* Fetches liquidity for all given vaults, one API request per vault version (chunked if over the page cap),
|
|
34
39
|
* returned as a map keyed by lowercased vault address. A vault missing from the API response is
|
|
35
40
|
* absent from the map.
|
|
36
41
|
*/
|
|
37
42
|
export const fetchMorphoVaultsLiquidity = async (network: NetworkNumber, vaults: MorphoVault[]): Promise<Record<string, string>> => {
|
|
38
|
-
const
|
|
39
|
-
|
|
43
|
+
const requests: { version: MorphoVaultVersion, chunk: MorphoVault[] }[] = [];
|
|
44
|
+
[MorphoVaultVersion.V1, MorphoVaultVersion.V2].forEach((version) => {
|
|
45
|
+
const versionVaults = vaults.filter((vault) => vault.version === version);
|
|
46
|
+
for (let i = 0; i < versionVaults.length; i += MORPHO_API_PAGE_SIZE) requests.push({ version, chunk: versionVaults.slice(i, i + MORPHO_API_PAGE_SIZE) });
|
|
47
|
+
});
|
|
40
48
|
|
|
41
49
|
const liquidityByAddress: Record<string, string> = {};
|
|
42
|
-
await Promise.all(
|
|
43
|
-
const
|
|
50
|
+
await Promise.all(requests.map(async ({ version, chunk }) => {
|
|
51
|
+
const { field, query } = liquidityQueries[version];
|
|
52
|
+
const data = await graphqlRequest(MORPHO_API_URL, query, {
|
|
44
53
|
addresses: chunk.map((vault) => vault.address),
|
|
45
54
|
chainIds: [network],
|
|
46
55
|
// the BigInt scalar serializes as a JSON number when it fits in Number.MAX_SAFE_INTEGER, a string otherwise
|
|
47
|
-
}) as
|
|
56
|
+
}) as Record<string, { items: LiquidityItem[] | null }>;
|
|
48
57
|
|
|
49
|
-
(data.
|
|
50
|
-
|
|
51
|
-
|
|
58
|
+
(data[field].items || []).forEach((item) => {
|
|
59
|
+
// V1 exposes liquidity as { underlying }, V2 as a plain BigInt scalar
|
|
60
|
+
const underlying = item?.liquidity !== null && typeof item?.liquidity === 'object' ? item.liquidity.underlying : item?.liquidity;
|
|
61
|
+
if (underlying !== undefined && underlying !== null) {
|
|
62
|
+
liquidityByAddress[item.address.toLowerCase()] = String(underlying);
|
|
52
63
|
}
|
|
53
64
|
});
|
|
54
65
|
}));
|
|
@@ -63,7 +74,22 @@ const getBatchedViemProvider = (provider: EthereumProvider, network: NetworkNumb
|
|
|
63
74
|
},
|
|
64
75
|
});
|
|
65
76
|
|
|
66
|
-
|
|
77
|
+
// Vault V2 is ERC-4626 but has no decimals offset, so shares are converted with convertToAssets
|
|
78
|
+
const getMorphoVaultV2ChainData = async (provider: Client, morphoVault: MorphoVault, accounts: EthAddress[]) => {
|
|
79
|
+
const vaultContract = getErc4626ContractViem(provider, morphoVault.address);
|
|
80
|
+
|
|
81
|
+
const [totalAssets, suppliedAssets] = await Promise.all([
|
|
82
|
+
vaultContract.read.totalAssets(),
|
|
83
|
+
Promise.all(accounts.map(async (account) => {
|
|
84
|
+
const share = await vaultContract.read.balanceOf([account]);
|
|
85
|
+
return share === BigInt(0) ? BigInt(0) : vaultContract.read.convertToAssets([share]);
|
|
86
|
+
})),
|
|
87
|
+
]);
|
|
88
|
+
|
|
89
|
+
return { totalAssets, suppliedAssets };
|
|
90
|
+
};
|
|
91
|
+
|
|
92
|
+
const getMorphoVaultV1ChainData = async (provider: Client, morphoVault: MorphoVault, accounts: EthAddress[]) => {
|
|
67
93
|
const morphoVaultContract = getMorphoVaultContractViem(provider, morphoVault.address);
|
|
68
94
|
|
|
69
95
|
const shares: Record<EthAddress, bigint> = {};
|
|
@@ -84,20 +110,46 @@ const getMorphoVaultChainData = async (provider: Client, morphoVault: MorphoVaul
|
|
|
84
110
|
};
|
|
85
111
|
};
|
|
86
112
|
|
|
113
|
+
type MorphoVaultChainData = {
|
|
114
|
+
v1?: Awaited<ReturnType<typeof getMorphoVaultV1ChainData>>,
|
|
115
|
+
v2?: Awaited<ReturnType<typeof getMorphoVaultV2ChainData>>,
|
|
116
|
+
};
|
|
117
|
+
|
|
118
|
+
const getMorphoVaultChainData = async (provider: Client, morphoVault: MorphoVault, accounts: EthAddress[]): Promise<MorphoVaultChainData> => (
|
|
119
|
+
morphoVault.version === MorphoVaultVersion.V2
|
|
120
|
+
? { v2: await getMorphoVaultV2ChainData(provider, morphoVault, accounts) }
|
|
121
|
+
: { v1: await getMorphoVaultV1ChainData(provider, morphoVault, accounts) }
|
|
122
|
+
);
|
|
123
|
+
|
|
87
124
|
const formatMorphoVaultData = (
|
|
88
125
|
morphoVault: MorphoVault,
|
|
89
|
-
chainData:
|
|
126
|
+
chainData: MorphoVaultChainData,
|
|
90
127
|
liquidityUnderlying: string,
|
|
91
128
|
accounts: EthAddress[],
|
|
92
129
|
): SavingsVaultData => {
|
|
130
|
+
const liquidity = assetAmountInEth(liquidityUnderlying, morphoVault.asset);
|
|
131
|
+
const supplied: Record<EthAddress, string> = {};
|
|
132
|
+
|
|
133
|
+
if (chainData.v2) {
|
|
134
|
+
const { totalAssets, suppliedAssets } = chainData.v2;
|
|
135
|
+
accounts.forEach((account, i) => {
|
|
136
|
+
supplied[account.toLowerCase() as EthAddress] = assetAmountInEth(suppliedAssets[i].toString(), morphoVault.asset);
|
|
137
|
+
});
|
|
138
|
+
return {
|
|
139
|
+
poolSize: assetAmountInEth(totalAssets.toString(), morphoVault.asset),
|
|
140
|
+
supplied,
|
|
141
|
+
liquidity,
|
|
142
|
+
asset: morphoVault.asset,
|
|
143
|
+
optionType: morphoVault.type,
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
|
|
93
147
|
const {
|
|
94
148
|
totalAssets, totalSupply, decimals, decimalsOffset, shares,
|
|
95
|
-
} = chainData
|
|
149
|
+
} = chainData.v1!;
|
|
96
150
|
|
|
97
151
|
const poolSize = assetAmountInEth(totalAssets.toString(), morphoVault.asset);
|
|
98
|
-
const liquidity = assetAmountInEth(liquidityUnderlying, morphoVault.asset);
|
|
99
152
|
|
|
100
|
-
const supplied: Record<EthAddress, string> = {};
|
|
101
153
|
accounts.forEach((account) => {
|
|
102
154
|
const share = shares[account] || BigInt(0);
|
|
103
155
|
supplied[account.toLowerCase() as EthAddress] = new Dec(new Dec(share.toString()).mul(new Dec(totalAssets.toString()).add(1)).div(new Dec(totalSupply.toString()).add(10 ** decimalsOffset)).div(10 ** 18)
|
|
@@ -1,10 +1,14 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
MorphoVault, MorphoVaultType, MorphoVaultVersion, NetworkNumber,
|
|
3
|
+
} from '../../types';
|
|
2
4
|
|
|
3
5
|
export const MORPHO_VAULT_FLAGSHIP_ETH: MorphoVault = {
|
|
4
6
|
type: MorphoVaultType.MorphoVaultFlagshipEth,
|
|
5
7
|
name: 'Flagship ETH',
|
|
6
8
|
address: '0x38989BBA00BDF8181F4082995b3DEAe96163aC5D',
|
|
7
9
|
asset: 'WETH',
|
|
10
|
+
network: NetworkNumber.Eth,
|
|
11
|
+
version: MorphoVaultVersion.V1,
|
|
8
12
|
deploymentBlock: 18927491,
|
|
9
13
|
isLegacy: true,
|
|
10
14
|
};
|
|
@@ -14,6 +18,8 @@ export const MORPHO_VAULT_GAUNTLET_USDC_CORE: MorphoVault = {
|
|
|
14
18
|
name: 'Gauntlet USDC Core',
|
|
15
19
|
address: '0x8eB67A509616cd6A7c1B3c8C21D48FF57df3d458',
|
|
16
20
|
asset: 'USDC',
|
|
21
|
+
network: NetworkNumber.Eth,
|
|
22
|
+
version: MorphoVaultVersion.V1,
|
|
17
23
|
deploymentBlock: 19777569,
|
|
18
24
|
isLegacy: true,
|
|
19
25
|
};
|
|
@@ -23,6 +29,8 @@ export const MORPHO_VAULT_GAUNTLET_USDC_PRIME: MorphoVault = {
|
|
|
23
29
|
name: 'Gauntlet USDC Prime',
|
|
24
30
|
address: '0xdd0f28e19C1780eb6396170735D45153D261490d',
|
|
25
31
|
asset: 'USDC',
|
|
32
|
+
network: NetworkNumber.Eth,
|
|
33
|
+
version: MorphoVaultVersion.V1,
|
|
26
34
|
deploymentBlock: 19777569,
|
|
27
35
|
isLegacy: true,
|
|
28
36
|
};
|
|
@@ -32,6 +40,8 @@ export const MORPHO_VAULT_RE7_WETH: MorphoVault = {
|
|
|
32
40
|
name: 'RE7 WETH',
|
|
33
41
|
address: '0x78Fc2c2eD1A4cDb5402365934aE5648aDAd094d0',
|
|
34
42
|
asset: 'WETH',
|
|
43
|
+
network: NetworkNumber.Eth,
|
|
44
|
+
version: MorphoVaultVersion.V1,
|
|
35
45
|
deploymentBlock: 19121118,
|
|
36
46
|
isLegacy: true,
|
|
37
47
|
};
|
|
@@ -41,6 +51,8 @@ export const MORPHO_VAULT_GAUNTLET_WETH_CORE: MorphoVault = {
|
|
|
41
51
|
name: 'Gauntlet WETH Core',
|
|
42
52
|
address: '0x4881Ef0BF6d2365D3dd6499ccd7532bcdBCE0658',
|
|
43
53
|
asset: 'WETH',
|
|
54
|
+
network: NetworkNumber.Eth,
|
|
55
|
+
version: MorphoVaultVersion.V1,
|
|
44
56
|
deploymentBlock: 19541126,
|
|
45
57
|
isLegacy: true,
|
|
46
58
|
};
|
|
@@ -50,6 +62,8 @@ export const MORPHO_VAULT_GAUNTLET_WETH_PRIME: MorphoVault = {
|
|
|
50
62
|
name: 'Gauntlet WETH Prime',
|
|
51
63
|
address: '0x2371e134e3455e0593363cBF89d3b6cf53740618',
|
|
52
64
|
asset: 'WETH',
|
|
65
|
+
network: NetworkNumber.Eth,
|
|
66
|
+
version: MorphoVaultVersion.V1,
|
|
53
67
|
deploymentBlock: 19372149,
|
|
54
68
|
isLegacy: true,
|
|
55
69
|
};
|
|
@@ -59,6 +73,8 @@ export const MORPHO_VAULT_BOOSTED_USDC: MorphoVault = {
|
|
|
59
73
|
name: 'Boosted USDC',
|
|
60
74
|
address: '0xd63070114470f685b75B74D60EEc7c1113d33a3D',
|
|
61
75
|
asset: 'USDC',
|
|
76
|
+
network: NetworkNumber.Eth,
|
|
77
|
+
version: MorphoVaultVersion.V1,
|
|
62
78
|
deploymentBlock: 20377233,
|
|
63
79
|
isLegacy: true,
|
|
64
80
|
};
|
|
@@ -68,6 +84,8 @@ export const MORPHO_VAULT_FLAGSHIP_USDT: MorphoVault = {
|
|
|
68
84
|
name: 'Flagship USDT',
|
|
69
85
|
address: '0x2C25f6C25770fFEC5959D34B94Bf898865e5D6b1',
|
|
70
86
|
asset: 'USDT',
|
|
87
|
+
network: NetworkNumber.Eth,
|
|
88
|
+
version: MorphoVaultVersion.V1,
|
|
71
89
|
deploymentBlock: 19127039,
|
|
72
90
|
isLegacy: true,
|
|
73
91
|
};
|
|
@@ -77,6 +95,8 @@ export const MORPHO_VAULT_GAUNTLET_USDA_CORE: MorphoVault = {
|
|
|
77
95
|
name: 'Gauntlet USDA Core',
|
|
78
96
|
address: '0x125D41A6e5dbf455cD9Df8F80BCC6fd172D52Cc6',
|
|
79
97
|
asset: 'USDA',
|
|
98
|
+
network: NetworkNumber.Eth,
|
|
99
|
+
version: MorphoVaultVersion.V1,
|
|
80
100
|
deploymentBlock: 19633608,
|
|
81
101
|
isLegacy: true,
|
|
82
102
|
};
|
|
@@ -86,6 +106,8 @@ export const MORPHO_VAULT_GAUNTLET_USDT_PRIME: MorphoVault = {
|
|
|
86
106
|
name: 'Gauntlet USDT Prime',
|
|
87
107
|
address: '0x8CB3649114051cA5119141a34C200D65dc0Faa73',
|
|
88
108
|
asset: 'USDT',
|
|
109
|
+
network: NetworkNumber.Eth,
|
|
110
|
+
version: MorphoVaultVersion.V1,
|
|
89
111
|
deploymentBlock: 19486541,
|
|
90
112
|
isLegacy: true,
|
|
91
113
|
};
|
|
@@ -95,6 +117,8 @@ export const MORPHO_VAULT_GAUNTLET_RESOLV_USDC: MorphoVault = {
|
|
|
95
117
|
name: 'Gauntlet Resolv USDC',
|
|
96
118
|
address: '0x132E6C9C33A62D7727cd359b1f51e5B566E485Eb',
|
|
97
119
|
asset: 'USDC',
|
|
120
|
+
network: NetworkNumber.Eth,
|
|
121
|
+
version: MorphoVaultVersion.V1,
|
|
98
122
|
deploymentBlock: 21487882,
|
|
99
123
|
isLegacy: true,
|
|
100
124
|
};
|
|
@@ -106,6 +130,8 @@ export const MORPHO_VAULT_STEAKHOUSE_USDT: MorphoVault = {
|
|
|
106
130
|
name: 'Steakhouse USDT',
|
|
107
131
|
address: '0xbEef047a543E45807105E51A8BBEFCc5950fcfBa',
|
|
108
132
|
asset: 'USDT',
|
|
133
|
+
network: NetworkNumber.Eth,
|
|
134
|
+
version: MorphoVaultVersion.V1,
|
|
109
135
|
deploymentBlock: 19043398,
|
|
110
136
|
isLegacy: false,
|
|
111
137
|
};
|
|
@@ -115,6 +141,8 @@ export const MORPHO_VAULT_STEAKHOUSE_USDC: MorphoVault = {
|
|
|
115
141
|
name: 'Steakhouse USDC',
|
|
116
142
|
address: '0xBEEF01735c132Ada46AA9aA4c54623cAA92A64CB',
|
|
117
143
|
asset: 'USDC',
|
|
144
|
+
network: NetworkNumber.Eth,
|
|
145
|
+
version: MorphoVaultVersion.V1,
|
|
118
146
|
deploymentBlock: 18928285,
|
|
119
147
|
isLegacy: false,
|
|
120
148
|
};
|
|
@@ -124,6 +152,8 @@ export const MORPHO_VAULT_STEAKHOUSE_ETH: MorphoVault = {
|
|
|
124
152
|
name: 'Steakhouse WETH',
|
|
125
153
|
address: '0xBEEf050ecd6a16c4e7bfFbB52Ebba7846C4b8cD4',
|
|
126
154
|
asset: 'WETH',
|
|
155
|
+
network: NetworkNumber.Eth,
|
|
156
|
+
version: MorphoVaultVersion.V1,
|
|
127
157
|
deploymentBlock: 19380443,
|
|
128
158
|
isLegacy: false,
|
|
129
159
|
};
|
|
@@ -133,6 +163,8 @@ export const MORPHO_VAULT_STEAKHOUSE_PYUSD: MorphoVault = {
|
|
|
133
163
|
name: 'Steakhouse PYUSD',
|
|
134
164
|
address: '0xbEEF02e5E13584ab96848af90261f0C8Ee04722a',
|
|
135
165
|
asset: 'PYUSD',
|
|
166
|
+
network: NetworkNumber.Eth,
|
|
167
|
+
version: MorphoVaultVersion.V1,
|
|
136
168
|
deploymentBlock: 19043398,
|
|
137
169
|
isLegacy: false,
|
|
138
170
|
};
|
|
@@ -144,6 +176,8 @@ export const MORPHO_VAULT_SMOKEHOUSE_USDT: MorphoVault = {
|
|
|
144
176
|
name: 'Smokehouse USDT',
|
|
145
177
|
address: '0xA0804346780b4c2e3bE118ac957D1DB82F9d7484',
|
|
146
178
|
asset: 'USDT',
|
|
179
|
+
network: NetworkNumber.Eth,
|
|
180
|
+
version: MorphoVaultVersion.V1,
|
|
147
181
|
deploymentBlock: 21522238,
|
|
148
182
|
isLegacy: false,
|
|
149
183
|
};
|
|
@@ -153,6 +187,8 @@ export const MORPHO_VAULT_SMOKEHOUSE_USDC: MorphoVault = {
|
|
|
153
187
|
name: 'Smokehouse USDC',
|
|
154
188
|
address: '0xBEeFFF209270748ddd194831b3fa287a5386f5bC',
|
|
155
189
|
asset: 'USDC',
|
|
190
|
+
network: NetworkNumber.Eth,
|
|
191
|
+
version: MorphoVaultVersion.V1,
|
|
156
192
|
deploymentBlock: 21337719,
|
|
157
193
|
isLegacy: false,
|
|
158
194
|
};
|
|
@@ -162,10 +198,36 @@ export const MORPHO_VAULT_SMOKEHOUSE_DAI: MorphoVault = {
|
|
|
162
198
|
name: 'Smokehouse DAI',
|
|
163
199
|
address: '0xbeeFfF68CC520D68f82641EFF84330C631E2490E',
|
|
164
200
|
asset: 'DAI',
|
|
201
|
+
network: NetworkNumber.Eth,
|
|
202
|
+
version: MorphoVaultVersion.V1,
|
|
165
203
|
deploymentBlock: 21343808,
|
|
166
204
|
isLegacy: false,
|
|
167
205
|
};
|
|
168
206
|
|
|
207
|
+
// Vault V2
|
|
208
|
+
|
|
209
|
+
export const MORPHO_VAULT_GAUNTLET_USDG_PREMIUM: MorphoVault = {
|
|
210
|
+
type: MorphoVaultType.MorphoVaultGauntletUSDGPremium,
|
|
211
|
+
name: 'Gauntlet USDG Premium',
|
|
212
|
+
address: '0x390c1bb01F3F627144a40617e287d4cE3D5aBCfa',
|
|
213
|
+
asset: 'USDG',
|
|
214
|
+
network: NetworkNumber.Arb,
|
|
215
|
+
version: MorphoVaultVersion.V2,
|
|
216
|
+
deploymentBlock: 510799903,
|
|
217
|
+
isLegacy: false,
|
|
218
|
+
};
|
|
219
|
+
|
|
220
|
+
export const MORPHO_VAULT_STEAKHOUSE_USDG_PRO: MorphoVault = {
|
|
221
|
+
type: MorphoVaultType.MorphoVaultSteakhouseUSDGPro,
|
|
222
|
+
name: 'Steakhouse USDG Pro',
|
|
223
|
+
address: '0xbeeFf72B77e7584a450E887125F25E8D8819016a',
|
|
224
|
+
asset: 'USDG',
|
|
225
|
+
network: NetworkNumber.Arb,
|
|
226
|
+
version: MorphoVaultVersion.V2,
|
|
227
|
+
deploymentBlock: 512247107,
|
|
228
|
+
isLegacy: false,
|
|
229
|
+
};
|
|
230
|
+
|
|
169
231
|
export const MORPHO_VAULTS: Record<MorphoVaultType, MorphoVault> = {
|
|
170
232
|
[MorphoVaultType.MorphoVaultFlagshipEth]: MORPHO_VAULT_FLAGSHIP_ETH,
|
|
171
233
|
[MorphoVaultType.MorphoVaultGauntletUSDCCore]: MORPHO_VAULT_GAUNTLET_USDC_CORE,
|
|
@@ -189,6 +251,10 @@ export const MORPHO_VAULTS: Record<MorphoVaultType, MorphoVault> = {
|
|
|
189
251
|
[MorphoVaultType.MorphoVaultSmokehouseUSDT]: MORPHO_VAULT_SMOKEHOUSE_USDT,
|
|
190
252
|
[MorphoVaultType.MorphoVaultSmokehouseUSDC]: MORPHO_VAULT_SMOKEHOUSE_USDC,
|
|
191
253
|
[MorphoVaultType.MorphoVaultSmokehouseDAI]: MORPHO_VAULT_SMOKEHOUSE_DAI,
|
|
254
|
+
|
|
255
|
+
// Vault V2
|
|
256
|
+
[MorphoVaultType.MorphoVaultGauntletUSDGPremium]: MORPHO_VAULT_GAUNTLET_USDG_PREMIUM,
|
|
257
|
+
[MorphoVaultType.MorphoVaultSteakhouseUSDGPro]: MORPHO_VAULT_STEAKHOUSE_USDG_PRO,
|
|
192
258
|
};
|
|
193
259
|
|
|
194
260
|
export const getMorphoVault = (type: MorphoVaultType): MorphoVault => MORPHO_VAULTS[type];
|
package/src/spark/index.ts
CHANGED
|
@@ -108,6 +108,7 @@ export const _getSparkMarketsData = async (provider: Client, network: NetworkNum
|
|
|
108
108
|
collateralAssets: eModeCategoriesData[emodeCategoryId] ? [...eModeCategoriesData[emodeCategoryId].collateralAssets, selectedMarket.assets[i]] : [selectedMarket.assets[i]],
|
|
109
109
|
borrowAssets: eModeCategoriesData[emodeCategoryId] ? [...eModeCategoriesData[emodeCategoryId].borrowAssets, selectedMarket.assets[i]] : [selectedMarket.assets[i]],
|
|
110
110
|
ltvZeroAssets: [],
|
|
111
|
+
isolated: false,
|
|
111
112
|
};
|
|
112
113
|
|
|
113
114
|
return ({
|
package/src/types/aave.ts
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import {
|
|
2
|
-
EthAddress,
|
|
3
2
|
IncentiveData,
|
|
4
3
|
LeverageType,
|
|
5
4
|
MMAssetData, MMPositionData, MMUsedAsset, NetworkNumber,
|
|
@@ -49,6 +48,7 @@ export interface EModeCategoryData {
|
|
|
49
48
|
borrowAssets: string[],
|
|
50
49
|
ltvzeroBitmap?: string,
|
|
51
50
|
ltvZeroAssets: string[],
|
|
51
|
+
isolated: boolean,
|
|
52
52
|
}
|
|
53
53
|
export interface EModeCategoryDataMapping {
|
|
54
54
|
enteringTerms: boolean[],
|
|
@@ -97,9 +97,6 @@ export interface AaveV3AssetData extends AaveAssetData {
|
|
|
97
97
|
liquidationBonus: string,
|
|
98
98
|
supplyIncentives: IncentiveData[];
|
|
99
99
|
borrowIncentives: IncentiveData[];
|
|
100
|
-
// Set by _getAaveV3MarketData. Optional, so objects built by hand still type-check.
|
|
101
|
-
aTokenAddress?: EthAddress,
|
|
102
|
-
vTokenAddress?: EthAddress,
|
|
103
100
|
}
|
|
104
101
|
|
|
105
102
|
export type EModeCategoriesData = Record<number, EModeCategoryData>;
|
|
@@ -141,15 +138,7 @@ export type AaveV2UsedAssets = AaveUsedAssets<AaveV2UsedAsset>;
|
|
|
141
138
|
|
|
142
139
|
export type AaveV3UsedAssets = AaveUsedAssets<AaveV3UsedAsset>;
|
|
143
140
|
|
|
144
|
-
|
|
145
|
-
* Fields aaveAnyGetAggregatedPositionData adds to every Aave V2/V3 position at runtime, on top of those declared
|
|
146
|
-
* below. Optional, so code that builds a position by hand keeps compiling.
|
|
147
|
-
*/
|
|
148
|
-
export type AavePositionAggregatedFields = Partial<Omit<AaveV3AggregatedPositionData,
|
|
149
|
-
| keyof MMPositionData | 'ratio' | 'collRatio' | 'safetyRatioWithLtvZeroFallback' | 'suppliedUsd' | 'borrowedUsd'
|
|
150
|
-
| 'borrowLimitUsd' | 'suppliedCollateralUsd' | 'incentiveUsd' | 'totalInterestUsd'>>;
|
|
151
|
-
|
|
152
|
-
export interface AavePositionData extends MMPositionData, AavePositionAggregatedFields {
|
|
141
|
+
export interface AavePositionData extends MMPositionData {
|
|
153
142
|
ratio: string,
|
|
154
143
|
minRatio: string,
|
|
155
144
|
collRatio: string,
|
|
@@ -168,11 +157,6 @@ export interface AavePositionData extends MMPositionData, AavePositionAggregated
|
|
|
168
157
|
|
|
169
158
|
export interface AaveV2PositionData extends AavePositionData {
|
|
170
159
|
usedAssets: AaveV2UsedAssets,
|
|
171
|
-
// Always their empty values: _getAaveV2AccountData starts from Aave V3's EMPTY_AAVE_DATA, which carries them.
|
|
172
|
-
eModeCategory?: number,
|
|
173
|
-
isInIsolationMode?: boolean,
|
|
174
|
-
isInSiloedMode?: boolean,
|
|
175
|
-
eModeCategories?: { [key: number]: EModeCategoryDataMapping },
|
|
176
160
|
}
|
|
177
161
|
|
|
178
162
|
export interface AaveV3PositionData extends AavePositionData {
|
package/src/types/compound.ts
CHANGED
|
@@ -70,8 +70,6 @@ export interface CompoundAssetData extends MMAssetData {
|
|
|
70
70
|
}
|
|
71
71
|
|
|
72
72
|
export interface CompoundV2AssetData extends CompoundAssetData {
|
|
73
|
-
// Set by _getCompoundV2MarketsData. Optional, so objects built by hand still type-check.
|
|
74
|
-
exchangeRate?: string,
|
|
75
73
|
}
|
|
76
74
|
export interface CompoundV3AssetData extends CompoundAssetData {
|
|
77
75
|
borrowCollateralFactor: string,
|
|
@@ -83,20 +81,6 @@ export interface CompoundV3AssetData extends CompoundAssetData {
|
|
|
83
81
|
supplyCap: string,
|
|
84
82
|
priceInBaseAsset: string,
|
|
85
83
|
canBeWithdrawn: boolean,
|
|
86
|
-
// The rest are set by formatMarketData and formatBaseData, which also spread in the view contract's raw asset
|
|
87
|
-
// data. Optional, so objects built by hand still type-check.
|
|
88
|
-
tokenAddr?: EthAddress,
|
|
89
|
-
// The base asset's only.
|
|
90
|
-
isBase?: boolean,
|
|
91
|
-
baseBorrowMin?: string,
|
|
92
|
-
baseTrackingBorrowRewardsSpeed?: string,
|
|
93
|
-
baseTrackingSupplyRewardsSpeed?: string,
|
|
94
|
-
borrowIndex?: string,
|
|
95
|
-
supplyIndex?: string,
|
|
96
|
-
trackingBorrowIndex?: string,
|
|
97
|
-
trackingSupplyIndex?: string,
|
|
98
|
-
rewardSupplySpeed?: string,
|
|
99
|
-
rewardBorrowSpeed?: string,
|
|
100
84
|
}
|
|
101
85
|
|
|
102
86
|
export interface CompoundAssetsData<T> {
|
|
@@ -157,30 +141,10 @@ export interface CompoundPositionData extends MMPositionData {
|
|
|
157
141
|
automationResubscribeRequired?: boolean,
|
|
158
142
|
}
|
|
159
143
|
|
|
160
|
-
|
|
161
|
-
* Fields getCompoundV2AggregatedData adds to every Compound V2 position at runtime — a subset of
|
|
162
|
-
* CompoundAggregatedPositionData. Optional, so code that builds a position by hand keeps compiling.
|
|
163
|
-
*/
|
|
164
|
-
export type CompoundV2PositionAggregatedFields = Partial<Pick<CompoundAggregatedPositionData,
|
|
165
|
-
| 'suppliedCollateralUsd' | 'liquidationLimitUsd' | 'leftToBorrowUsd' | 'collRatio' | 'leveragedType'
|
|
166
|
-
| 'leveragedAsset' | 'liquidationPrice'>>;
|
|
167
|
-
|
|
168
|
-
/**
|
|
169
|
-
* Fields getCompoundV3AggregatedData adds to every Compound V3 position at runtime, on top of those declared in
|
|
170
|
-
* CompoundPositionData. Optional, so code that builds a position by hand keeps compiling.
|
|
171
|
-
*/
|
|
172
|
-
export type CompoundV3PositionAggregatedFields = Partial<Omit<CompoundAggregatedPositionData,
|
|
173
|
-
| keyof MMPositionData | 'ratio' | 'minRatio' | 'suppliedUsd' | 'borrowedUsd' | 'borrowLimitUsd' | 'incentiveUsd'
|
|
174
|
-
| 'totalInterestUsd'>>;
|
|
175
|
-
|
|
176
|
-
export interface CompoundV2PositionData extends CompoundPositionData, CompoundV2PositionAggregatedFields {
|
|
144
|
+
export interface CompoundV2PositionData extends CompoundPositionData {
|
|
177
145
|
usedAssets: CompoundV2UsedAssets,
|
|
178
|
-
// Always false: _getCompoundV2AccountData starts from EMPTY_COMPOUND_DATA, which carries it.
|
|
179
|
-
borrowStableSupplyUnstable?: boolean,
|
|
180
146
|
}
|
|
181
147
|
|
|
182
|
-
export interface CompoundV3PositionData extends CompoundPositionData
|
|
148
|
+
export interface CompoundV3PositionData extends CompoundPositionData {
|
|
183
149
|
usedAssets: CompoundV3UsedAssets,
|
|
184
|
-
// Whether the user's smart wallet is allowed to manage the account on Comet (Comet.isAllowed).
|
|
185
|
-
isAllowed?: boolean,
|
|
186
150
|
}
|
package/src/types/curveUsd.ts
CHANGED
|
@@ -66,9 +66,6 @@ export interface CrvUSDGlobalMarketData {
|
|
|
66
66
|
leftToBorrow: string,
|
|
67
67
|
bands: BandData[],
|
|
68
68
|
loanDiscount: string;
|
|
69
|
-
// crvUSDView's globalData field that _getCurveUsdGlobalData spreads in unconverted. Optional, so objects built by
|
|
70
|
-
// hand still type-check.
|
|
71
|
-
A?: bigint,
|
|
72
69
|
}
|
|
73
70
|
|
|
74
71
|
export interface CrvUSDAggregatedPositionData {
|
|
@@ -104,12 +101,7 @@ export interface CrvUSDUsedAssets {
|
|
|
104
101
|
[key: string]: CrvUSDUsedAsset,
|
|
105
102
|
}
|
|
106
103
|
|
|
107
|
-
|
|
108
|
-
// type-check.
|
|
109
|
-
export type CrvUSDPositionAggregatedFields = Partial<Pick<CrvUSDAggregatedPositionData,
|
|
110
|
-
| 'borrowLimitUsd' | 'minAllowedRatio' | 'collFactor' | 'leveragedType' | 'leveragedAsset' | 'liquidationPrice'>>;
|
|
111
|
-
|
|
112
|
-
export interface CrvUSDUserData extends CrvUSDPositionAggregatedFields {
|
|
104
|
+
export interface CrvUSDUserData {
|
|
113
105
|
debtAmount: string,
|
|
114
106
|
health: string,
|
|
115
107
|
healthPercent: string,
|
|
@@ -131,12 +123,4 @@ export interface CrvUSDUserData extends CrvUSDPositionAggregatedFields {
|
|
|
131
123
|
collateralPrice: string,
|
|
132
124
|
collRatio: string,
|
|
133
125
|
exposure: string,
|
|
134
|
-
// Fields of crvUSDView's userData that _getCurveUsdUserData spreads in unconverted. Optional, so objects built by
|
|
135
|
-
// hand still type-check.
|
|
136
|
-
marketCollateralAmount?: bigint,
|
|
137
|
-
curveUsdCollateralAmount?: bigint,
|
|
138
|
-
N?: bigint,
|
|
139
|
-
bandRange?: readonly [bigint, bigint],
|
|
140
|
-
usersBands?: readonly [readonly bigint[], readonly bigint[]],
|
|
141
|
-
isInSoftLiquidation?: boolean,
|
|
142
126
|
}
|
package/src/types/llamaLend.ts
CHANGED
|
@@ -141,13 +141,7 @@ export interface LlamaLendUsedAssets {
|
|
|
141
141
|
[key: string]: LlamaLendUsedAsset,
|
|
142
142
|
}
|
|
143
143
|
|
|
144
|
-
|
|
145
|
-
// type-check.
|
|
146
|
-
export type LlamaLendPositionAggregatedFields = Partial<Pick<LlamaLendAggregatedPositionData,
|
|
147
|
-
| 'borrowLimitUsd' | 'minAllowedRatio' | 'collFactor' | 'leveragedType' | 'leveragedAsset' | 'liquidationPrice'
|
|
148
|
-
| 'netApy' | 'incentiveUsd' | 'totalInterestUsd'>>;
|
|
149
|
-
|
|
150
|
-
export interface LlamaLendUserData extends LlamaLendPositionAggregatedFields {
|
|
144
|
+
export interface LlamaLendUserData {
|
|
151
145
|
debtAmount: string,
|
|
152
146
|
health: string,
|
|
153
147
|
healthPercent: string,
|
|
@@ -166,16 +160,4 @@ export interface LlamaLendUserData extends LlamaLendPositionAggregatedFields {
|
|
|
166
160
|
loanExists: boolean,
|
|
167
161
|
borrowRate?: string,
|
|
168
162
|
exposure: string,
|
|
169
|
-
// Fields of LlamaLendView's userData that _getLlamaLendUserData spreads in unconverted. Optional, so objects built
|
|
170
|
-
// by hand still type-check.
|
|
171
|
-
collateralPrice?: bigint,
|
|
172
|
-
marketCollateralAmount?: bigint,
|
|
173
|
-
debtTokenCollateralAmount?: bigint,
|
|
174
|
-
N?: bigint,
|
|
175
|
-
bandRange?: readonly [bigint, bigint],
|
|
176
|
-
usersBands?: readonly [readonly bigint[], readonly bigint[]],
|
|
177
|
-
collRatio?: bigint,
|
|
178
|
-
isInSoftLiquidation?: boolean,
|
|
179
|
-
debtTokenSuppliedShares?: bigint,
|
|
180
|
-
debtTokenSuppliedAssets?: bigint,
|
|
181
163
|
}
|
package/src/types/morphoBlue.ts
CHANGED
|
@@ -236,9 +236,6 @@ export interface MorphoBluePositionData {
|
|
|
236
236
|
supplyShares: string,
|
|
237
237
|
borrowShares: string,
|
|
238
238
|
exposure: string,
|
|
239
|
-
// Set by getMorphoBlueAggregatedPositionData. Optional, so objects built by hand still type-check.
|
|
240
|
-
minCollRatio?: string,
|
|
241
|
-
collLiquidationRatio?: string,
|
|
242
239
|
}
|
|
243
240
|
|
|
244
241
|
export interface MorphoBlueEarnData {
|
package/src/types/portfolio.ts
CHANGED
|
@@ -1,20 +1,16 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
} from './aave';
|
|
4
|
-
import { AaveV4AccountData, AaveV4SpokeData, AaveV4SpokesType } from './aaveV4';
|
|
1
|
+
import { AaveV2PositionData, AaveV3PositionData, AaveVersions } from './aave';
|
|
2
|
+
import { AaveV4AccountData, AaveV4SpokesType } from './aaveV4';
|
|
5
3
|
import { EthAddress } from './common';
|
|
6
|
-
import {
|
|
7
|
-
|
|
8
|
-
} from './compound';
|
|
9
|
-
import { CrvUSDGlobalMarketData, CrvUSDUserData, CrvUSDVersions } from './curveUsd';
|
|
4
|
+
import { CompoundV2PositionData, CompoundV3PositionData, CompoundVersions } from './compound';
|
|
5
|
+
import { CrvUSDUserData, CrvUSDVersions } from './curveUsd';
|
|
10
6
|
import { FluidVaultData } from './fluid';
|
|
11
7
|
import { LiquityTroveInfo } from './liquity';
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
8
|
+
import { LiquityV2TroveData, LiquityV2Versions } from './liquityV2';
|
|
9
|
+
import { LlamaLendUserData, LlamaLendVersionsType } from './llamaLend';
|
|
14
10
|
import { CdpData } from './maker';
|
|
15
|
-
import {
|
|
16
|
-
import {
|
|
17
|
-
import {
|
|
11
|
+
import { MorphoBluePositionData, MorphoBlueVersions } from './morphoBlue';
|
|
12
|
+
import { MorphoMidnightPositionData, MorphoMidnightVersions } from './morphoMidnight';
|
|
13
|
+
import { SparkPositionData, SparkVersions } from './spark';
|
|
18
14
|
|
|
19
15
|
export interface PortfolioProtocolData<T> {
|
|
20
16
|
error: string,
|
|
@@ -66,19 +62,4 @@ export interface PortfolioPositionsDataForAddress {
|
|
|
66
62
|
|
|
67
63
|
export interface PortfolioPositionsData {
|
|
68
64
|
[key: EthAddress]: PortfolioPositionsDataForAddress;
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
/** The `markets` getPortfolioData returns: every market it read, by protocol, keyed by market or spoke. */
|
|
72
|
-
export interface PortfolioMarketsData {
|
|
73
|
-
morphoMarketsData: Record<string, MorphoBlueMarketInfo>;
|
|
74
|
-
morphoMidnightMarketsData: Record<string, MorphoMidnightMarketInfo>;
|
|
75
|
-
compoundV3MarketsData: Record<string, CompoundV3MarketsData>;
|
|
76
|
-
sparkMarketsData: Record<string, SparkMarketsData>;
|
|
77
|
-
aaveV3MarketsData: Record<string, AaveV3MarketData>;
|
|
78
|
-
aaveV2MarketsData: Record<string, AaveV2MarketData>;
|
|
79
|
-
compoundV2MarketsData: Record<string, CompoundV2MarketsData>;
|
|
80
|
-
crvUsdMarketsData: Record<string, CrvUSDGlobalMarketData>;
|
|
81
|
-
llamaLendMarketsData: Record<string, LlamaLendGlobalMarketData>;
|
|
82
|
-
liquityV2MarketsData: Record<string, LiquityV2MarketData>;
|
|
83
|
-
aaveV4SpokesData: Record<string, AaveV4SpokeData>;
|
|
84
65
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { EthAddress } from '../common';
|
|
1
|
+
import { EthAddress, NetworkNumber } from '../common';
|
|
2
2
|
|
|
3
3
|
export enum MorphoVaultType {
|
|
4
4
|
MorphoVaultFlagshipEth = 'morpho_vault_flagship_eth',
|
|
@@ -21,6 +21,14 @@ export enum MorphoVaultType {
|
|
|
21
21
|
MorphoVaultSmokehouseUSDT = 'morpho_vault_smokehouse_usdt',
|
|
22
22
|
MorphoVaultSmokehouseUSDC = 'morpho_vault_smokehouse_usdc',
|
|
23
23
|
MorphoVaultSmokehouseDAI = 'morpho_vault_smokehouse_dai',
|
|
24
|
+
// Vault V2
|
|
25
|
+
MorphoVaultGauntletUSDGPremium = 'morpho_vault_gauntlet_usdg_premium',
|
|
26
|
+
MorphoVaultSteakhouseUSDGPro = 'morpho_vault_steakhouse_usdg_pro',
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export enum MorphoVaultVersion {
|
|
30
|
+
V1 = 1,
|
|
31
|
+
V2 = 2,
|
|
24
32
|
}
|
|
25
33
|
|
|
26
34
|
export interface MorphoVault {
|
|
@@ -28,6 +36,8 @@ export interface MorphoVault {
|
|
|
28
36
|
name: string;
|
|
29
37
|
address: EthAddress;
|
|
30
38
|
asset: string;
|
|
39
|
+
network: NetworkNumber;
|
|
40
|
+
version: MorphoVaultVersion;
|
|
31
41
|
deploymentBlock: number;
|
|
32
42
|
isLegacy: boolean;
|
|
33
43
|
}
|