@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.
Files changed (37) hide show
  1. package/dist/abis/oracle/ProxyOracle.d.ts +12 -0
  2. package/dist/abis/oracle/ProxyOracle.d.ts.map +1 -0
  3. package/dist/abis/oracle/ProxyOracle.js +15 -0
  4. package/dist/lending/aave-v3-type/publicCallParse.d.ts +4 -4
  5. package/dist/lending/aave-v3-type/publicCallParse.d.ts.map +1 -1
  6. package/dist/lending/aave-v3-type/publicCallParse.js +68 -44
  7. package/dist/lending/fetchLender.d.ts.map +1 -1
  8. package/dist/lending/morpho/convertPublic.d.ts.map +1 -1
  9. package/dist/lending/morpho/convertPublic.js +8 -2
  10. package/dist/lending/morpho/fetchPublic.d.ts.map +1 -1
  11. package/dist/lending/morpho/types.d.ts +2 -0
  12. package/dist/lending/morpho/types.d.ts.map +1 -1
  13. package/dist/lending/user-data/morpho/userCallParse.d.ts.map +1 -1
  14. package/dist/lending/user-data/morpho/userCallParse.js +60 -0
  15. package/dist/prices/main-prices/addresses/morpho.d.ts +11 -0
  16. package/dist/prices/main-prices/addresses/morpho.d.ts.map +1 -0
  17. package/dist/prices/main-prices/addresses/morpho.js +903 -0
  18. package/dist/prices/main-prices/fetchOracleData.d.ts +1 -0
  19. package/dist/prices/main-prices/fetchOracleData.d.ts.map +1 -1
  20. package/dist/prices/main-prices/fetchOracleData.js +70 -4
  21. package/dist/types/providers.d.ts +1 -1
  22. package/dist/types/providers.d.ts.map +1 -1
  23. package/package.json +1 -1
  24. package/src/abis/oracle/ProxyOracle.ts +15 -0
  25. package/src/lending/aave-v3-type/publicCallParse.ts +312 -110
  26. package/src/lending/fetchLender.ts +1 -0
  27. package/src/lending/morpho/convertPublic.ts +10 -3
  28. package/src/lending/morpho/fetchPublic.ts +0 -1
  29. package/src/lending/morpho/types.ts +5 -0
  30. package/src/lending/user-data/morpho/userCallParse.ts +63 -0
  31. package/src/prices/main-prices/addresses/morpho.ts +912 -0
  32. package/src/prices/main-prices/fetchOracleData.ts +120 -8
  33. package/src/types/providers.ts +4 -3
  34. package/test/mainPriceMB.test.ts +32 -0
  35. package/test/morpho.ts +66 -0
  36. package/test/morphoPrice.test.ts +31 -0
  37. 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;AAGlD,eAAO,MAAM,eAAe,GAAI,OAAO,MAAM,EAAE,cAAY,KAAG,MAQ7D,CAAA;AAOD,UAAU,UAAU;IAClB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;CACtB;AAID;;GAEG;AACH,eAAO,MAAM,eAAe,GAC1B,UAAU,MAAM,EAAE,EAClB,cAAc,oBAAoB,KACjC,OAAO,CAAC,UAAU,CA8GpB,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
- return Number(formatEther(BigInt(price ?? '0') *
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
- 10n ** (isV2 ? 0n : 10n)));
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
- return {
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,KACnB,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"}
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@1delta/margin-fetcher",
3
- "version": "0.0.15",
3
+ "version": "0.0.17",
4
4
  "description": "",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -0,0 +1,15 @@
1
+ export const ProxyOracleAbi = [
2
+ {
3
+ inputs: [],
4
+ name: 'price',
5
+ outputs: [
6
+ {
7
+ internalType: 'uint256',
8
+ name: '',
9
+ type: 'uint256',
10
+ },
11
+ ],
12
+ stateMutability: 'view',
13
+ type: 'function',
14
+ },
15
+ ] as const