@1delta/margin-fetcher 0.0.15 → 0.0.17
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/dist/abis/oracle/ProxyOracle.d.ts +12 -0
- package/dist/abis/oracle/ProxyOracle.d.ts.map +1 -0
- package/dist/abis/oracle/ProxyOracle.js +15 -0
- package/dist/lending/aave-v3-type/publicCallParse.d.ts +4 -4
- package/dist/lending/aave-v3-type/publicCallParse.d.ts.map +1 -1
- package/dist/lending/aave-v3-type/publicCallParse.js +68 -44
- package/dist/lending/fetchLender.d.ts.map +1 -1
- package/dist/lending/morpho/convertPublic.d.ts.map +1 -1
- package/dist/lending/morpho/convertPublic.js +8 -2
- package/dist/lending/morpho/fetchPublic.d.ts.map +1 -1
- package/dist/lending/morpho/types.d.ts +2 -0
- package/dist/lending/morpho/types.d.ts.map +1 -1
- package/dist/lending/user-data/morpho/userCallParse.d.ts.map +1 -1
- package/dist/lending/user-data/morpho/userCallParse.js +60 -0
- package/dist/prices/main-prices/addresses/morpho.d.ts +11 -0
- package/dist/prices/main-prices/addresses/morpho.d.ts.map +1 -0
- package/dist/prices/main-prices/addresses/morpho.js +903 -0
- package/dist/prices/main-prices/fetchOracleData.d.ts +1 -0
- package/dist/prices/main-prices/fetchOracleData.d.ts.map +1 -1
- package/dist/prices/main-prices/fetchOracleData.js +70 -4
- package/dist/types/providers.d.ts +1 -1
- package/dist/types/providers.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/abis/oracle/ProxyOracle.ts +15 -0
- package/src/lending/aave-v3-type/publicCallParse.ts +312 -110
- package/src/lending/fetchLender.ts +1 -0
- package/src/lending/morpho/convertPublic.ts +10 -3
- package/src/lending/morpho/fetchPublic.ts +0 -1
- package/src/lending/morpho/types.ts +5 -0
- package/src/lending/user-data/morpho/userCallParse.ts +63 -0
- package/src/prices/main-prices/addresses/morpho.ts +912 -0
- package/src/prices/main-prices/fetchOracleData.ts +120 -8
- package/src/types/providers.ts +4 -3
- package/test/mainPriceMB.test.ts +32 -0
- package/test/morpho.ts +66 -0
- package/test/morphoPrice.test.ts +31 -0
- package/test/userDataAll.test.ts +82 -0
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { GetEvmClientFunction } from '../../types';
|
|
2
2
|
export declare const formatAavePrice: (price: string, isV2?: boolean) => number;
|
|
3
|
+
export declare const formatMorphoPrice: (price: string, collateralDec: number, debtDec: number) => number;
|
|
3
4
|
interface OracleData {
|
|
4
5
|
[key: string]: number;
|
|
5
6
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fetchOracleData.d.ts","sourceRoot":"","sources":["../../../src/prices/main-prices/fetchOracleData.ts"],"names":[],"mappings":"AAmBA,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"fetchOracleData.d.ts","sourceRoot":"","sources":["../../../src/prices/main-prices/fetchOracleData.ts"],"names":[],"mappings":"AAmBA,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAA;AAKlD,eAAO,MAAM,eAAe,GAAI,OAAO,MAAM,EAAE,cAAY,KAAG,MAY7D,CAAA;AAED,eAAO,MAAM,iBAAiB,GAC5B,OAAO,MAAM,EACb,eAAe,MAAM,EACrB,SAAS,MAAM,KACd,MAYF,CAAA;AAOD,UAAU,UAAU;IAClB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;CACtB;AAQD;;GAEG;AACH,eAAO,MAAM,eAAe,GAC1B,UAAU,MAAM,EAAE,EAClB,cAAc,oBAAoB,KACjC,OAAO,CAAC,UAAU,CAgJpB,CAAA"}
|
|
@@ -5,7 +5,7 @@ import { Api3OracleAbi } from '../../abis/oracle/Api3Oracle';
|
|
|
5
5
|
import { RWADynamicOracleAbi } from '../../abis/oracle/RWADynamicOracle';
|
|
6
6
|
import { api3OracleAddresses } from './addresses/api3';
|
|
7
7
|
import { AAVE_V2_LENDERS, ASSET_META, Chain } from '@1delta/asset-registry';
|
|
8
|
-
import { formatEther } from 'viem';
|
|
8
|
+
import { formatEther, formatUnits } from 'viem';
|
|
9
9
|
import { getAaveAssets } from '../../assets';
|
|
10
10
|
import { chainlinkOracles, getChainLinkKeys, ChainlinkAggregatorIndexes, } from './addresses/chainlink';
|
|
11
11
|
import { fetchDefillamaData } from '../defillama';
|
|
@@ -13,10 +13,27 @@ import { multicallViemAbiArray } from '../../utils/multicall';
|
|
|
13
13
|
import { AAVE_STYLE_ORACLES } from './addresses/aaveOracles';
|
|
14
14
|
import { AAVES_PER_CHAIN } from '../../utils';
|
|
15
15
|
import { parseRawAmount } from '../../utils/parsing';
|
|
16
|
+
import { ProxyOracleAbi } from '../../abis/oracle/ProxyOracle';
|
|
17
|
+
import { MrophoOracles } from './addresses/morpho';
|
|
16
18
|
export const formatAavePrice = (price, isV2 = false) => {
|
|
17
|
-
|
|
19
|
+
try {
|
|
20
|
+
return Number(formatEther(BigInt(price ?? '0') *
|
|
21
|
+
// 10^(18 - decimals)
|
|
22
|
+
10n ** (isV2 ? 0n : 10n)));
|
|
23
|
+
}
|
|
24
|
+
catch {
|
|
25
|
+
return NaN;
|
|
26
|
+
}
|
|
27
|
+
};
|
|
28
|
+
export const formatMorphoPrice = (price, collateralDec, debtDec) => {
|
|
29
|
+
try {
|
|
30
|
+
return Number(formatUnits(BigInt(price ?? '0'),
|
|
18
31
|
// 10^(18 - decimals)
|
|
19
|
-
|
|
32
|
+
36 + collateralDec - debtDec));
|
|
33
|
+
}
|
|
34
|
+
catch {
|
|
35
|
+
return NaN;
|
|
36
|
+
}
|
|
20
37
|
};
|
|
21
38
|
const LENDLE_PAIR_MANTLE = '0x4c57BE599d0e0414785943569E9B6A66dA79Aa6b';
|
|
22
39
|
const AU_PAIR_MANTLE = '0x709503fbb50b10f921e812c48fbd5c5522a0b20c';
|
|
@@ -43,6 +60,8 @@ export const fetchMainPrices = async (chainIds, getEvmClient) => {
|
|
|
43
60
|
handled = [...handled, ...newOnes];
|
|
44
61
|
}
|
|
45
62
|
});
|
|
63
|
+
const morphoQueries = (MrophoOracles[chainId] ?? []).filter((a) => !handled.includes(a.collateralAsset) || !handled.includes(a.loanAsset));
|
|
64
|
+
const morphoCalls = getMorphoCalls(morphoQueries);
|
|
46
65
|
const callAave = getAaveCalls(queries);
|
|
47
66
|
const [callsChainLink, chainLinkNames] = getChainLinkCalls(chainId);
|
|
48
67
|
const uniswapV2Calls = getUniswapV2Calls(chainId);
|
|
@@ -54,12 +73,14 @@ export const fetchMainPrices = async (chainIds, getEvmClient) => {
|
|
|
54
73
|
...AaveOracleAbi,
|
|
55
74
|
...Api3OracleAbi,
|
|
56
75
|
...RWADynamicOracleAbi,
|
|
76
|
+
...ProxyOracleAbi,
|
|
57
77
|
], [
|
|
58
78
|
...callsChainLink,
|
|
59
79
|
...callAave,
|
|
60
80
|
...uniswapV2Calls,
|
|
61
81
|
...api3Calls,
|
|
62
82
|
...rwaCalls,
|
|
83
|
+
...morphoCalls,
|
|
63
84
|
], getEvmClient).then((multicallResult) => {
|
|
64
85
|
const chainLinkResults = multicallResult.slice(0, callsChainLink.length);
|
|
65
86
|
const aaveResult = multicallResult.slice(callsChainLink.length, callsChainLink.length + callAave.length);
|
|
@@ -82,13 +103,27 @@ export const fetchMainPrices = async (chainIds, getEvmClient) => {
|
|
|
82
103
|
api3Calls.length +
|
|
83
104
|
rwaCalls.length);
|
|
84
105
|
const rwaData = parseRWADynamicOracleResults(chainId, rwaResult, rwaNames);
|
|
85
|
-
|
|
106
|
+
const morphoResult = multicallResult.slice(callsChainLink.length +
|
|
107
|
+
callAave.length +
|
|
108
|
+
uniswapV2Calls.length +
|
|
109
|
+
api3Calls.length +
|
|
110
|
+
rwaCalls.length, callsChainLink.length +
|
|
111
|
+
callAave.length +
|
|
112
|
+
uniswapV2Calls.length +
|
|
113
|
+
api3Calls.length +
|
|
114
|
+
morphoCalls.length);
|
|
115
|
+
const prices = {
|
|
86
116
|
...uniswapData,
|
|
87
117
|
...aaveData,
|
|
88
118
|
...chainLinkData,
|
|
89
119
|
...api3Data,
|
|
90
120
|
...rwaData,
|
|
91
121
|
};
|
|
122
|
+
const morphoData = parseMorphoResults(chainId, morphoResult, morphoQueries, prices);
|
|
123
|
+
return {
|
|
124
|
+
...prices,
|
|
125
|
+
...morphoData,
|
|
126
|
+
};
|
|
92
127
|
});
|
|
93
128
|
});
|
|
94
129
|
promises.push(fetchDefillamaData());
|
|
@@ -145,6 +180,21 @@ const getAaveCalls = (query) => {
|
|
|
145
180
|
}))
|
|
146
181
|
.flat();
|
|
147
182
|
};
|
|
183
|
+
/**
|
|
184
|
+
* Create calldata for aave oracles
|
|
185
|
+
* @param chainId network
|
|
186
|
+
* @param addressesAaveUnderlyings address array
|
|
187
|
+
* @returns call data
|
|
188
|
+
*/
|
|
189
|
+
const getMorphoCalls = (query = []) => {
|
|
190
|
+
if (query.length === 0)
|
|
191
|
+
return [];
|
|
192
|
+
return query.map(({ oracle }) => ({
|
|
193
|
+
address: oracle,
|
|
194
|
+
name: 'price',
|
|
195
|
+
params: [],
|
|
196
|
+
}));
|
|
197
|
+
};
|
|
148
198
|
/**
|
|
149
199
|
* Create calldata for chainLink oracles
|
|
150
200
|
* @param chainId network
|
|
@@ -232,6 +282,22 @@ const parseAaveResults = (chainId, data, queries) => {
|
|
|
232
282
|
});
|
|
233
283
|
return prices;
|
|
234
284
|
};
|
|
285
|
+
const parseMorphoResults = (chainId, data, queries, donePrices = {}) => {
|
|
286
|
+
let prices = {};
|
|
287
|
+
data.forEach((d, i) => {
|
|
288
|
+
const details = queries[i];
|
|
289
|
+
const { loanAsset, collateralAsset, loanAssetDecimals, collateralAssetDecimals, } = details;
|
|
290
|
+
const oracleId = ASSET_META[chainId][loanAsset]?.assetGroup ?? chainId + '-' + loanAsset;
|
|
291
|
+
const debtPrice = donePrices[oracleId];
|
|
292
|
+
const oracleIdCollateral = ASSET_META[chainId][collateralAsset]?.assetGroup ??
|
|
293
|
+
chainId + '-' + collateralAsset;
|
|
294
|
+
if (debtPrice) {
|
|
295
|
+
const priceCollateral = formatMorphoPrice(d.toString(), loanAssetDecimals, collateralAssetDecimals);
|
|
296
|
+
prices[oracleIdCollateral] = priceCollateral * debtPrice;
|
|
297
|
+
}
|
|
298
|
+
});
|
|
299
|
+
return prices;
|
|
300
|
+
};
|
|
235
301
|
/**
|
|
236
302
|
* Parser for aave results in ulticall slice
|
|
237
303
|
* @param chainId network
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { PublicClient } from 'viem';
|
|
2
|
-
export type MulticallRetryFunction = (chain: string, calls: any[], abi: any, batchSize?: number, maxRetries?: number, providerId?: number, allowFailure?: boolean) => Promise<any[]>;
|
|
2
|
+
export type MulticallRetryFunction = (chain: string, calls: any[], abi: any, batchSize?: number, maxRetries?: number, providerId?: number, allowFailure?: boolean, orverrides?: any) => Promise<any[]>;
|
|
3
3
|
export type GetEvmClientFunction = (chain: string, rpcId?: number) => PublicClient;
|
|
4
4
|
export interface ProviderDependencies {
|
|
5
5
|
multicallRetry: MulticallRetryFunction;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"providers.d.ts","sourceRoot":"","sources":["../../src/types/providers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,MAAM,CAAA;AAEnC,MAAM,MAAM,sBAAsB,GAAG,CACnC,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,GAAG,EAAE,EACZ,GAAG,EAAE,GAAG,EACR,SAAS,CAAC,EAAE,MAAM,EAClB,UAAU,CAAC,EAAE,MAAM,EACnB,UAAU,CAAC,EAAE,MAAM,EACnB,YAAY,CAAC,EAAE,OAAO,
|
|
1
|
+
{"version":3,"file":"providers.d.ts","sourceRoot":"","sources":["../../src/types/providers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,MAAM,CAAA;AAEnC,MAAM,MAAM,sBAAsB,GAAG,CACnC,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,GAAG,EAAE,EACZ,GAAG,EAAE,GAAG,EACR,SAAS,CAAC,EAAE,MAAM,EAClB,UAAU,CAAC,EAAE,MAAM,EACnB,UAAU,CAAC,EAAE,MAAM,EACnB,YAAY,CAAC,EAAE,OAAO,EACtB,UAAU,CAAC,EAAE,GAAG,KACb,OAAO,CAAC,GAAG,EAAE,CAAC,CAAA;AAEnB,MAAM,MAAM,oBAAoB,GAAG,CACjC,KAAK,EAAE,MAAM,EACb,KAAK,CAAC,EAAE,MAAM,KACX,YAAY,CAAA;AAEjB,MAAM,WAAW,oBAAoB;IACnC,cAAc,EAAE,sBAAsB,CAAA;IACtC,YAAY,EAAE,oBAAoB,CAAA;CACnC;AAED,MAAM,WAAW,4BAA4B;IAC3C,cAAc,CAAC,EAAE,sBAAsB,CAAA;IACvC,YAAY,CAAC,EAAE,oBAAoB,CAAA;CACpC"}
|
package/package.json
CHANGED