@defisaver/positions-sdk 2.1.158-dev → 2.1.158-morpho-batch-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/aaveV4/lend.js +1 -0
- package/cjs/config/contracts.d.ts +516 -4
- package/cjs/config/contracts.js +17 -5
- package/cjs/contracts.d.ts +120 -0
- package/cjs/savings/index.js +6 -6
- package/cjs/savings/morphoVaults/index.d.ts +15 -3
- package/cjs/savings/morphoVaults/index.js +97 -26
- package/esm/aaveV4/lend.js +1 -0
- package/esm/config/contracts.d.ts +516 -4
- package/esm/config/contracts.js +17 -5
- package/esm/contracts.d.ts +120 -0
- package/esm/savings/index.js +6 -6
- package/esm/savings/morphoVaults/index.d.ts +15 -3
- package/esm/savings/morphoVaults/index.js +93 -24
- package/package.json +1 -1
- package/src/aaveV4/lend.ts +1 -0
- package/src/config/contracts.ts +17 -5
- package/src/savings/index.ts +6 -6
- package/src/savings/morphoVaults/index.ts +108 -27
package/esm/contracts.d.ts
CHANGED
|
@@ -100745,6 +100745,26 @@ export declare const MorphoBlueViewContractViem: (client: Client, network: Netwo
|
|
|
100745
100745
|
export declare const MorphoMidnightViewContractViem: (client: Client, network: NetworkNumber, block?: Blockish) => {
|
|
100746
100746
|
read: {
|
|
100747
100747
|
getRatio: (args: readonly [`0x${string}`, `0x${string}`], options?: import("viem").Prettify<import("viem").UnionOmit<import("viem").ReadContractParameters<readonly [{
|
|
100748
|
+
readonly inputs: readonly [];
|
|
100749
|
+
readonly name: "InvalidCollateralIndex";
|
|
100750
|
+
readonly type: "error";
|
|
100751
|
+
}, {
|
|
100752
|
+
readonly inputs: readonly [];
|
|
100753
|
+
readonly name: "InvalidOfferMarketId";
|
|
100754
|
+
readonly type: "error";
|
|
100755
|
+
}, {
|
|
100756
|
+
readonly inputs: readonly [];
|
|
100757
|
+
readonly name: "InvalidOfferType";
|
|
100758
|
+
readonly type: "error";
|
|
100759
|
+
}, {
|
|
100760
|
+
readonly inputs: readonly [];
|
|
100761
|
+
readonly name: "NoOrdersProvided";
|
|
100762
|
+
readonly type: "error";
|
|
100763
|
+
}, {
|
|
100764
|
+
readonly inputs: readonly [];
|
|
100765
|
+
readonly name: "ZeroAmountRequested";
|
|
100766
|
+
readonly type: "error";
|
|
100767
|
+
}, {
|
|
100748
100768
|
readonly inputs: readonly [{
|
|
100749
100769
|
readonly internalType: "bytes32";
|
|
100750
100770
|
readonly name: "_id";
|
|
@@ -100986,6 +101006,26 @@ export declare const MorphoMidnightViewContractViem: (client: Client, network: N
|
|
|
100986
101006
|
readonly type: "function";
|
|
100987
101007
|
}], "getRatio", readonly [`0x${string}`, `0x${string}`]>, "address" | "args" | "abi" | "functionName">> | undefined) => Promise<bigint>;
|
|
100988
101008
|
getMarketInfo: (args: readonly [`0x${string}`], options?: import("viem").Prettify<import("viem").UnionOmit<import("viem").ReadContractParameters<readonly [{
|
|
101009
|
+
readonly inputs: readonly [];
|
|
101010
|
+
readonly name: "InvalidCollateralIndex";
|
|
101011
|
+
readonly type: "error";
|
|
101012
|
+
}, {
|
|
101013
|
+
readonly inputs: readonly [];
|
|
101014
|
+
readonly name: "InvalidOfferMarketId";
|
|
101015
|
+
readonly type: "error";
|
|
101016
|
+
}, {
|
|
101017
|
+
readonly inputs: readonly [];
|
|
101018
|
+
readonly name: "InvalidOfferType";
|
|
101019
|
+
readonly type: "error";
|
|
101020
|
+
}, {
|
|
101021
|
+
readonly inputs: readonly [];
|
|
101022
|
+
readonly name: "NoOrdersProvided";
|
|
101023
|
+
readonly type: "error";
|
|
101024
|
+
}, {
|
|
101025
|
+
readonly inputs: readonly [];
|
|
101026
|
+
readonly name: "ZeroAmountRequested";
|
|
101027
|
+
readonly type: "error";
|
|
101028
|
+
}, {
|
|
100989
101029
|
readonly inputs: readonly [{
|
|
100990
101030
|
readonly internalType: "bytes32";
|
|
100991
101031
|
readonly name: "_id";
|
|
@@ -101237,6 +101277,26 @@ export declare const MorphoMidnightViewContractViem: (client: Client, network: N
|
|
|
101237
101277
|
prices: readonly bigint[];
|
|
101238
101278
|
}>;
|
|
101239
101279
|
getPositionInfo: (args: readonly [`0x${string}`, `0x${string}`], options?: import("viem").Prettify<import("viem").UnionOmit<import("viem").ReadContractParameters<readonly [{
|
|
101280
|
+
readonly inputs: readonly [];
|
|
101281
|
+
readonly name: "InvalidCollateralIndex";
|
|
101282
|
+
readonly type: "error";
|
|
101283
|
+
}, {
|
|
101284
|
+
readonly inputs: readonly [];
|
|
101285
|
+
readonly name: "InvalidOfferMarketId";
|
|
101286
|
+
readonly type: "error";
|
|
101287
|
+
}, {
|
|
101288
|
+
readonly inputs: readonly [];
|
|
101289
|
+
readonly name: "InvalidOfferType";
|
|
101290
|
+
readonly type: "error";
|
|
101291
|
+
}, {
|
|
101292
|
+
readonly inputs: readonly [];
|
|
101293
|
+
readonly name: "NoOrdersProvided";
|
|
101294
|
+
readonly type: "error";
|
|
101295
|
+
}, {
|
|
101296
|
+
readonly inputs: readonly [];
|
|
101297
|
+
readonly name: "ZeroAmountRequested";
|
|
101298
|
+
readonly type: "error";
|
|
101299
|
+
}, {
|
|
101240
101300
|
readonly inputs: readonly [{
|
|
101241
101301
|
readonly internalType: "bytes32";
|
|
101242
101302
|
readonly name: "_id";
|
|
@@ -101499,6 +101559,26 @@ export declare const MorphoMidnightViewContractViem: (client: Client, network: N
|
|
|
101499
101559
|
enterGate: `0x${string}`;
|
|
101500
101560
|
liquidatorGate: `0x${string}`;
|
|
101501
101561
|
}], options?: import("viem").Prettify<import("viem").UnionOmit<import("viem").ReadContractParameters<readonly [{
|
|
101562
|
+
readonly inputs: readonly [];
|
|
101563
|
+
readonly name: "InvalidCollateralIndex";
|
|
101564
|
+
readonly type: "error";
|
|
101565
|
+
}, {
|
|
101566
|
+
readonly inputs: readonly [];
|
|
101567
|
+
readonly name: "InvalidOfferMarketId";
|
|
101568
|
+
readonly type: "error";
|
|
101569
|
+
}, {
|
|
101570
|
+
readonly inputs: readonly [];
|
|
101571
|
+
readonly name: "InvalidOfferType";
|
|
101572
|
+
readonly type: "error";
|
|
101573
|
+
}, {
|
|
101574
|
+
readonly inputs: readonly [];
|
|
101575
|
+
readonly name: "NoOrdersProvided";
|
|
101576
|
+
readonly type: "error";
|
|
101577
|
+
}, {
|
|
101578
|
+
readonly inputs: readonly [];
|
|
101579
|
+
readonly name: "ZeroAmountRequested";
|
|
101580
|
+
readonly type: "error";
|
|
101581
|
+
}, {
|
|
101502
101582
|
readonly inputs: readonly [{
|
|
101503
101583
|
readonly internalType: "bytes32";
|
|
101504
101584
|
readonly name: "_id";
|
|
@@ -101754,6 +101834,26 @@ export declare const MorphoMidnightViewContractViem: (client: Client, network: N
|
|
|
101754
101834
|
liquidatorGate: `0x${string}`;
|
|
101755
101835
|
}]>, "address" | "args" | "abi" | "functionName">> | undefined) => Promise<`0x${string}`>;
|
|
101756
101836
|
toMarket: (args: readonly [`0x${string}`], options?: import("viem").Prettify<import("viem").UnionOmit<import("viem").ReadContractParameters<readonly [{
|
|
101837
|
+
readonly inputs: readonly [];
|
|
101838
|
+
readonly name: "InvalidCollateralIndex";
|
|
101839
|
+
readonly type: "error";
|
|
101840
|
+
}, {
|
|
101841
|
+
readonly inputs: readonly [];
|
|
101842
|
+
readonly name: "InvalidOfferMarketId";
|
|
101843
|
+
readonly type: "error";
|
|
101844
|
+
}, {
|
|
101845
|
+
readonly inputs: readonly [];
|
|
101846
|
+
readonly name: "InvalidOfferType";
|
|
101847
|
+
readonly type: "error";
|
|
101848
|
+
}, {
|
|
101849
|
+
readonly inputs: readonly [];
|
|
101850
|
+
readonly name: "NoOrdersProvided";
|
|
101851
|
+
readonly type: "error";
|
|
101852
|
+
}, {
|
|
101853
|
+
readonly inputs: readonly [];
|
|
101854
|
+
readonly name: "ZeroAmountRequested";
|
|
101855
|
+
readonly type: "error";
|
|
101856
|
+
}, {
|
|
101757
101857
|
readonly inputs: readonly [{
|
|
101758
101858
|
readonly internalType: "bytes32";
|
|
101759
101859
|
readonly name: "_id";
|
|
@@ -102011,6 +102111,26 @@ export declare const MorphoMidnightViewContractViem: (client: Client, network: N
|
|
|
102011
102111
|
};
|
|
102012
102112
|
address: `0x${string}`;
|
|
102013
102113
|
abi: readonly [{
|
|
102114
|
+
readonly inputs: readonly [];
|
|
102115
|
+
readonly name: "InvalidCollateralIndex";
|
|
102116
|
+
readonly type: "error";
|
|
102117
|
+
}, {
|
|
102118
|
+
readonly inputs: readonly [];
|
|
102119
|
+
readonly name: "InvalidOfferMarketId";
|
|
102120
|
+
readonly type: "error";
|
|
102121
|
+
}, {
|
|
102122
|
+
readonly inputs: readonly [];
|
|
102123
|
+
readonly name: "InvalidOfferType";
|
|
102124
|
+
readonly type: "error";
|
|
102125
|
+
}, {
|
|
102126
|
+
readonly inputs: readonly [];
|
|
102127
|
+
readonly name: "NoOrdersProvided";
|
|
102128
|
+
readonly type: "error";
|
|
102129
|
+
}, {
|
|
102130
|
+
readonly inputs: readonly [];
|
|
102131
|
+
readonly name: "ZeroAmountRequested";
|
|
102132
|
+
readonly type: "error";
|
|
102133
|
+
}, {
|
|
102014
102134
|
readonly inputs: readonly [{
|
|
102015
102135
|
readonly internalType: "bytes32";
|
|
102016
102136
|
readonly name: "_id";
|
package/esm/savings/index.js
CHANGED
|
@@ -27,16 +27,16 @@ export const getSavingsData = (provider, network, accounts) => __awaiter(void 0,
|
|
|
27
27
|
const savingsData = {};
|
|
28
28
|
yield Promise.all([
|
|
29
29
|
...(network === NetworkNumber.Eth ? [
|
|
30
|
-
|
|
30
|
+
(() => __awaiter(void 0, void 0, void 0, function* () {
|
|
31
31
|
try {
|
|
32
|
-
const
|
|
33
|
-
const data = yield morphoVaults.
|
|
34
|
-
savingsData
|
|
32
|
+
const vaults = morphoVaultsList.map((vaultKey) => morphoVaults.morphoVaultsOptions.getMorphoVault(vaultKey));
|
|
33
|
+
const data = yield morphoVaults.getMorphoVaultsData(provider, network, vaults, accounts);
|
|
34
|
+
Object.assign(savingsData, data);
|
|
35
35
|
}
|
|
36
36
|
catch (err) {
|
|
37
|
-
console.error(
|
|
37
|
+
console.error('[getSavingsData] Error fetching morpho vaults:', err);
|
|
38
38
|
}
|
|
39
|
-
})),
|
|
39
|
+
}))(),
|
|
40
40
|
...yearnVaultsList.map((vaultKey) => __awaiter(void 0, void 0, void 0, function* () {
|
|
41
41
|
try {
|
|
42
42
|
const vault = yearnVaults.yearnVaultsOptions.getYearnVault(vaultKey);
|
|
@@ -1,7 +1,19 @@
|
|
|
1
1
|
import { Client } from 'viem';
|
|
2
2
|
import * as morphoVaultsOptions from './options';
|
|
3
|
-
import { EthAddress, EthereumProvider, NetworkNumber } from '../../types
|
|
4
|
-
import { MorphoVault, SavingsVaultData } from '../../types';
|
|
3
|
+
import { EthAddress, EthereumProvider, NetworkNumber, MorphoVault, MorphoVaultType, SavingsVaultData } from '../../types';
|
|
5
4
|
export { morphoVaultsOptions, };
|
|
6
|
-
|
|
5
|
+
/**
|
|
6
|
+
* Fetches liquidity for all given vaults in a single API request (chunked if over the page cap),
|
|
7
|
+
* returned as a map keyed by lowercased vault address. A vault missing from the API response is
|
|
8
|
+
* absent from the map.
|
|
9
|
+
*/
|
|
10
|
+
export declare const fetchMorphoVaultsLiquidity: (network: NetworkNumber, vaults: MorphoVault[]) => Promise<Record<string, string>>;
|
|
11
|
+
/**
|
|
12
|
+
* Fetches data for all given vaults with a single Morpho API request for their liquidity,
|
|
13
|
+
* instead of one request per vault. The on-chain reads run in parallel with the API request.
|
|
14
|
+
* A vault whose on-chain reads fail or that is missing from the API response is left out of
|
|
15
|
+
* the result; a failed API request rejects, leaving all vaults out.
|
|
16
|
+
*/
|
|
17
|
+
export declare const _getMorphoVaultsData: (provider: Client, network: NetworkNumber, vaults: MorphoVault[], accounts: EthAddress[]) => Promise<Partial<Record<MorphoVaultType, SavingsVaultData>>>;
|
|
18
|
+
export declare function getMorphoVaultsData(provider: EthereumProvider, network: NetworkNumber, vaults: MorphoVault[], accounts: EthAddress[]): Promise<Partial<Record<MorphoVaultType, SavingsVaultData>>>;
|
|
7
19
|
export declare function getMorphoVaultData(provider: EthereumProvider, network: NetworkNumber, morphoVault: MorphoVault, accounts: EthAddress[]): Promise<SavingsVaultData>;
|
|
@@ -14,38 +14,73 @@ import * as morphoVaultsOptions from './options';
|
|
|
14
14
|
import { getViemProvider } from '../../services/viem';
|
|
15
15
|
import { getMorphoVaultContractViem } from '../../contracts';
|
|
16
16
|
export { morphoVaultsOptions, };
|
|
17
|
-
const
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
usd
|
|
17
|
+
const MORPHO_BLUE_API = 'https://api.morpho.org/graphql';
|
|
18
|
+
// Morpho API caps list page size at 100 items
|
|
19
|
+
const MORPHO_API_PAGE_SIZE = 100;
|
|
20
|
+
const vaultsLiquidityQuery = `
|
|
21
|
+
query VaultsLiquidity($addresses: [String!], $chainIds: [Int!]) {
|
|
22
|
+
vaults(first: ${MORPHO_API_PAGE_SIZE}, where: { address_in: $addresses, chainId_in: $chainIds }) {
|
|
23
|
+
items {
|
|
24
|
+
address
|
|
25
|
+
liquidity {
|
|
26
|
+
underlying
|
|
27
|
+
}
|
|
29
28
|
}
|
|
30
29
|
}
|
|
31
30
|
}`;
|
|
32
|
-
|
|
33
|
-
|
|
31
|
+
/**
|
|
32
|
+
* Fetches liquidity for all given vaults in a single API request (chunked if over the page cap),
|
|
33
|
+
* returned as a map keyed by lowercased vault address. A vault missing from the API response is
|
|
34
|
+
* absent from the map.
|
|
35
|
+
*/
|
|
36
|
+
export const fetchMorphoVaultsLiquidity = (network, vaults) => __awaiter(void 0, void 0, void 0, function* () {
|
|
37
|
+
const chunks = [];
|
|
38
|
+
for (let i = 0; i < vaults.length; i += MORPHO_API_PAGE_SIZE)
|
|
39
|
+
chunks.push(vaults.slice(i, i + MORPHO_API_PAGE_SIZE));
|
|
40
|
+
const liquidityByAddress = {};
|
|
41
|
+
yield Promise.all(chunks.map((chunk) => __awaiter(void 0, void 0, void 0, function* () {
|
|
42
|
+
const data = yield graphqlRequest(MORPHO_BLUE_API, vaultsLiquidityQuery, {
|
|
43
|
+
addresses: chunk.map((vault) => vault.address),
|
|
44
|
+
chainIds: [network],
|
|
45
|
+
// the BigInt scalar serializes as a JSON number when it fits in Number.MAX_SAFE_INTEGER, a string otherwise
|
|
46
|
+
});
|
|
47
|
+
(data.vaults.items || []).forEach((item) => {
|
|
48
|
+
var _a, _b;
|
|
49
|
+
if (((_a = item === null || item === void 0 ? void 0 : item.liquidity) === null || _a === void 0 ? void 0 : _a.underlying) !== undefined && ((_b = item.liquidity) === null || _b === void 0 ? void 0 : _b.underlying) !== null) {
|
|
50
|
+
liquidityByAddress[item.address.toLowerCase()] = String(item.liquidity.underlying);
|
|
51
|
+
}
|
|
52
|
+
});
|
|
53
|
+
})));
|
|
54
|
+
return liquidityByAddress;
|
|
55
|
+
});
|
|
56
|
+
const getBatchedViemProvider = (provider, network) => getViemProvider(provider, network, {
|
|
57
|
+
batch: {
|
|
58
|
+
multicall: {
|
|
59
|
+
batchSize: 2500000,
|
|
60
|
+
},
|
|
61
|
+
},
|
|
62
|
+
});
|
|
63
|
+
const getMorphoVaultChainData = (provider, morphoVault, accounts) => __awaiter(void 0, void 0, void 0, function* () {
|
|
34
64
|
const morphoVaultContract = getMorphoVaultContractViem(provider, morphoVault.address);
|
|
35
65
|
const shares = {};
|
|
36
|
-
const [totalAssets, totalSupply, decimals, decimalsOffset
|
|
66
|
+
const [totalAssets, totalSupply, decimals, decimalsOffset] = yield Promise.all([
|
|
37
67
|
morphoVaultContract.read.totalAssets(),
|
|
38
68
|
morphoVaultContract.read.totalSupply(),
|
|
39
69
|
morphoVaultContract.read.decimals(),
|
|
40
70
|
morphoVaultContract.read.DECIMALS_OFFSET(),
|
|
41
|
-
graphqlRequest(MORPHO_BLUE_API, vaultDataQuery, { address: morphoVault.address, chainId: network }),
|
|
42
71
|
...accounts.map((account) => __awaiter(void 0, void 0, void 0, function* () {
|
|
43
72
|
const share = yield morphoVaultContract.read.balanceOf([account]);
|
|
44
73
|
shares[account] = share;
|
|
45
74
|
})),
|
|
46
75
|
]);
|
|
76
|
+
return {
|
|
77
|
+
totalAssets, totalSupply, decimals, decimalsOffset, shares,
|
|
78
|
+
};
|
|
79
|
+
});
|
|
80
|
+
const formatMorphoVaultData = (morphoVault, chainData, liquidityUnderlying, accounts) => {
|
|
81
|
+
const { totalAssets, totalSupply, decimals, decimalsOffset, shares, } = chainData;
|
|
47
82
|
const poolSize = assetAmountInEth(totalAssets.toString(), morphoVault.asset);
|
|
48
|
-
const liquidity = assetAmountInEth(
|
|
83
|
+
const liquidity = assetAmountInEth(liquidityUnderlying, morphoVault.asset);
|
|
49
84
|
const supplied = {};
|
|
50
85
|
accounts.forEach((account) => {
|
|
51
86
|
const share = shares[account] || BigInt(0);
|
|
@@ -60,15 +95,49 @@ export const _getMorphoVaultData = (provider, network, morphoVault, accounts) =>
|
|
|
60
95
|
asset: morphoVault.asset,
|
|
61
96
|
optionType: morphoVault.type,
|
|
62
97
|
};
|
|
98
|
+
};
|
|
99
|
+
/**
|
|
100
|
+
* Fetches data for all given vaults with a single Morpho API request for their liquidity,
|
|
101
|
+
* instead of one request per vault. The on-chain reads run in parallel with the API request.
|
|
102
|
+
* A vault whose on-chain reads fail or that is missing from the API response is left out of
|
|
103
|
+
* the result; a failed API request rejects, leaving all vaults out.
|
|
104
|
+
*/
|
|
105
|
+
export const _getMorphoVaultsData = (provider, network, vaults, accounts) => __awaiter(void 0, void 0, void 0, function* () {
|
|
106
|
+
const [liquidityByAddress, chainData] = yield Promise.all([
|
|
107
|
+
fetchMorphoVaultsLiquidity(network, vaults),
|
|
108
|
+
Promise.all(vaults.map((vault) => getMorphoVaultChainData(provider, vault, accounts).catch((err) => {
|
|
109
|
+
console.error(`[getMorphoVaultsData] Error fetching on-chain data for morpho vault ${vault.type}:`, err);
|
|
110
|
+
return null;
|
|
111
|
+
}))),
|
|
112
|
+
]);
|
|
113
|
+
const savingsData = {};
|
|
114
|
+
vaults.forEach((vault, i) => {
|
|
115
|
+
const vaultChainData = chainData[i];
|
|
116
|
+
if (!vaultChainData)
|
|
117
|
+
return;
|
|
118
|
+
const liquidityUnderlying = liquidityByAddress[vault.address.toLowerCase()];
|
|
119
|
+
if (liquidityUnderlying === undefined) {
|
|
120
|
+
console.error(`[getMorphoVaultsData] Vault ${vault.type} (${vault.address}) missing from Morpho API response`);
|
|
121
|
+
return;
|
|
122
|
+
}
|
|
123
|
+
savingsData[vault.type] = formatMorphoVaultData(vault, vaultChainData, liquidityUnderlying, accounts);
|
|
124
|
+
});
|
|
125
|
+
return savingsData;
|
|
63
126
|
});
|
|
127
|
+
export function getMorphoVaultsData(provider, network, vaults, accounts) {
|
|
128
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
129
|
+
return _getMorphoVaultsData(getBatchedViemProvider(provider, network), network, vaults, accounts);
|
|
130
|
+
});
|
|
131
|
+
}
|
|
64
132
|
export function getMorphoVaultData(provider, network, morphoVault, accounts) {
|
|
65
133
|
return __awaiter(this, void 0, void 0, function* () {
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
134
|
+
const [liquidityByAddress, chainData] = yield Promise.all([
|
|
135
|
+
fetchMorphoVaultsLiquidity(network, [morphoVault]),
|
|
136
|
+
getMorphoVaultChainData(getBatchedViemProvider(provider, network), morphoVault, accounts),
|
|
137
|
+
]);
|
|
138
|
+
const liquidityUnderlying = liquidityByAddress[morphoVault.address.toLowerCase()];
|
|
139
|
+
if (liquidityUnderlying === undefined)
|
|
140
|
+
throw new Error(`Vault ${morphoVault.address} missing from Morpho API response`);
|
|
141
|
+
return formatMorphoVaultData(morphoVault, chainData, liquidityUnderlying, accounts);
|
|
73
142
|
});
|
|
74
143
|
}
|
package/package.json
CHANGED
package/src/aaveV4/lend.ts
CHANGED
|
@@ -50,6 +50,7 @@ export const AAVE_V4_TOKENIZED_SPOKES: Record<string, EthAddress> = {
|
|
|
50
50
|
USDT_PRIME: '0x46c588DD8453aC259c1f6a54b4C9A93C2aC3762D',
|
|
51
51
|
|
|
52
52
|
USDC_PAXOS: '0xaed7c529bD2878170B61C758DfAa215AC7a4FD07',
|
|
53
|
+
USDG_PAXOS: '0x378B4a7c394E22bd562F66eB612165893533c124',
|
|
53
54
|
USDT_PAXOS: '0xa0e97e45C2f89003730E467Bd484fA3eEcE5B4Cf',
|
|
54
55
|
PT_USDG_Sep_PAXOS: '0x7Df10B4A01350D2A1d95cFbE7c9207d7210A2663',
|
|
55
56
|
};
|
package/src/config/contracts.ts
CHANGED
|
@@ -1126,15 +1126,27 @@ export const MorphoBlueView = {
|
|
|
1126
1126
|
},
|
|
1127
1127
|
} as const;
|
|
1128
1128
|
export const MidnightView = {
|
|
1129
|
-
"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"}],
|
|
1129
|
+
"abi": [{"inputs":[],"name":"InvalidCollateralIndex","type":"error"},{"inputs":[],"name":"InvalidOfferMarketId","type":"error"},{"inputs":[],"name":"InvalidOfferType","type":"error"},{"inputs":[],"name":"NoOrdersProvided","type":"error"},{"inputs":[],"name":"ZeroAmountRequested","type":"error"},{"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"}],
|
|
1130
1130
|
"networks": {
|
|
1131
1131
|
"1": {
|
|
1132
|
-
"address": "
|
|
1133
|
-
"createdBlock":
|
|
1132
|
+
"address": "0xb8e1dAAd42e18203cfCED7193FE0e2E19d713A56",
|
|
1133
|
+
"createdBlock": 25983494,
|
|
1134
|
+
"oldVersions": {
|
|
1135
|
+
"25938908": {
|
|
1136
|
+
"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"}],
|
|
1137
|
+
"address": "0xB64FBf011343961D9AC4A04b714414E35ebE6BE0",
|
|
1138
|
+
}
|
|
1139
|
+
},
|
|
1134
1140
|
},
|
|
1135
1141
|
"8453": {
|
|
1136
|
-
"address": "
|
|
1137
|
-
"createdBlock":
|
|
1142
|
+
"address": "0xdEab43eb1519bD4314bc99c4019866734103D3Ae",
|
|
1143
|
+
"createdBlock": 51346932,
|
|
1144
|
+
"oldVersions": {
|
|
1145
|
+
"48932293": {
|
|
1146
|
+
"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"}],
|
|
1147
|
+
"address": "0x3aa272f329E8B562A3bA56Bb6979a44D23A28839",
|
|
1148
|
+
}
|
|
1149
|
+
},
|
|
1138
1150
|
}
|
|
1139
1151
|
},
|
|
1140
1152
|
} as const;
|
package/src/savings/index.ts
CHANGED
|
@@ -43,15 +43,15 @@ export const getSavingsData = async (
|
|
|
43
43
|
|
|
44
44
|
await Promise.all([
|
|
45
45
|
...(network === NetworkNumber.Eth ? [
|
|
46
|
-
|
|
46
|
+
(async () => {
|
|
47
47
|
try {
|
|
48
|
-
const
|
|
49
|
-
const data = await morphoVaults.
|
|
50
|
-
savingsData
|
|
48
|
+
const vaults = morphoVaultsList.map((vaultKey) => morphoVaults.morphoVaultsOptions.getMorphoVault(vaultKey));
|
|
49
|
+
const data = await morphoVaults.getMorphoVaultsData(provider, network, vaults, accounts);
|
|
50
|
+
Object.assign(savingsData, data);
|
|
51
51
|
} catch (err) {
|
|
52
|
-
console.error(
|
|
52
|
+
console.error('[getSavingsData] Error fetching morpho vaults:', err);
|
|
53
53
|
}
|
|
54
|
-
}),
|
|
54
|
+
})(),
|
|
55
55
|
...yearnVaultsList.map(async (vaultKey) => {
|
|
56
56
|
try {
|
|
57
57
|
const vault = yearnVaults.yearnVaultsOptions.getYearnVault(vaultKey);
|