@1delta/margin-fetcher 0.0.16 → 0.0.18
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/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/aave-v3-type/userCallParse.d.ts.map +1 -1
- package/dist/lending/user-data/fetchUserData.d.ts.map +1 -1
- package/dist/lending/user-data/fetchUserData.js +1 -3
- package/dist/lending/user-data/morpho/userCallParse.d.ts.map +1 -1
- package/dist/lending/user-data/morpho/userCallParse.js +2 -1
- 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 +63 -2
- package/package.json +1 -1
- package/src/abis/oracle/ProxyOracle.ts +15 -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/aave-v3-type/userCallParse.ts +2 -0
- package/src/lending/user-data/fetchUserData.ts +1 -4
- package/src/lending/user-data/morpho/userCallParse.ts +2 -1
- package/src/prices/main-prices/addresses/morpho.ts +912 -0
- package/src/prices/main-prices/fetchOracleData.ts +110 -2
- package/test/data.ts +47979 -0
- 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 +73 -0
|
@@ -6,7 +6,7 @@ import { RWADynamicOracleAbi } from '../../abis/oracle/RWADynamicOracle'
|
|
|
6
6
|
|
|
7
7
|
import { api3OracleAddresses } from './addresses/api3'
|
|
8
8
|
import { AAVE_V2_LENDERS, ASSET_META, Chain } from '@1delta/asset-registry'
|
|
9
|
-
import { formatEther } from 'viem'
|
|
9
|
+
import { formatEther, formatUnits } from 'viem'
|
|
10
10
|
import { getAaveAssets } from '../../assets'
|
|
11
11
|
import {
|
|
12
12
|
chainlinkOracles,
|
|
@@ -19,6 +19,8 @@ import { AAVE_STYLE_ORACLES } from './addresses/aaveOracles'
|
|
|
19
19
|
import { AAVES_PER_CHAIN } from '../../utils'
|
|
20
20
|
import { GetEvmClientFunction } from '../../types'
|
|
21
21
|
import { parseRawAmount } from '../../utils/parsing'
|
|
22
|
+
import { ProxyOracleAbi } from '../../abis/oracle/ProxyOracle'
|
|
23
|
+
import { MrophoOracleInfo, MrophoOracles } from './addresses/morpho'
|
|
22
24
|
|
|
23
25
|
export const formatAavePrice = (price: string, isV2 = false): number => {
|
|
24
26
|
try {
|
|
@@ -34,6 +36,24 @@ export const formatAavePrice = (price: string, isV2 = false): number => {
|
|
|
34
36
|
}
|
|
35
37
|
}
|
|
36
38
|
|
|
39
|
+
export const formatMorphoPrice = (
|
|
40
|
+
price: string,
|
|
41
|
+
collateralDec: number,
|
|
42
|
+
debtDec: number,
|
|
43
|
+
): number => {
|
|
44
|
+
try {
|
|
45
|
+
return Number(
|
|
46
|
+
formatUnits(
|
|
47
|
+
BigInt(price ?? '0'),
|
|
48
|
+
// 10^(18 - decimals)
|
|
49
|
+
36 + collateralDec - debtDec,
|
|
50
|
+
),
|
|
51
|
+
)
|
|
52
|
+
} catch {
|
|
53
|
+
return NaN
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
|
|
37
57
|
const LENDLE_PAIR_MANTLE = '0x4c57BE599d0e0414785943569E9B6A66dA79Aa6b'
|
|
38
58
|
const AU_PAIR_MANTLE = '0x709503fbb50b10f921e812c48fbd5c5522a0b20c'
|
|
39
59
|
const WMNT_USDT_PAIR = '0x3e5922cd0cec71dc2d60ec8b36aa4c05b7c1672f'
|
|
@@ -44,6 +64,10 @@ interface OracleData {
|
|
|
44
64
|
}
|
|
45
65
|
|
|
46
66
|
type QueryAave = { oracle: string; assets: string[]; fork: string }
|
|
67
|
+
type QueryMorpho = {
|
|
68
|
+
oracle: string
|
|
69
|
+
assets: [string, string, number, number][]
|
|
70
|
+
}
|
|
47
71
|
|
|
48
72
|
/**
|
|
49
73
|
* Fetches Aave and uniswap V2 oracle data
|
|
@@ -71,6 +95,14 @@ export const fetchMainPrices = async (
|
|
|
71
95
|
handled = [...handled, ...newOnes]
|
|
72
96
|
}
|
|
73
97
|
})
|
|
98
|
+
|
|
99
|
+
const morphoQueries = (MrophoOracles[chainId] ?? []).filter(
|
|
100
|
+
(a) =>
|
|
101
|
+
!handled.includes(a.collateralAsset) || !handled.includes(a.loanAsset),
|
|
102
|
+
)
|
|
103
|
+
|
|
104
|
+
const morphoCalls = getMorphoCalls(morphoQueries)
|
|
105
|
+
|
|
74
106
|
const callAave = getAaveCalls(queries)
|
|
75
107
|
|
|
76
108
|
const [callsChainLink, chainLinkNames] = getChainLinkCalls(chainId)
|
|
@@ -89,6 +121,7 @@ export const fetchMainPrices = async (
|
|
|
89
121
|
...AaveOracleAbi,
|
|
90
122
|
...Api3OracleAbi,
|
|
91
123
|
...RWADynamicOracleAbi,
|
|
124
|
+
...ProxyOracleAbi,
|
|
92
125
|
],
|
|
93
126
|
[
|
|
94
127
|
...callsChainLink,
|
|
@@ -96,6 +129,7 @@ export const fetchMainPrices = async (
|
|
|
96
129
|
...uniswapV2Calls,
|
|
97
130
|
...api3Calls,
|
|
98
131
|
...rwaCalls,
|
|
132
|
+
...morphoCalls,
|
|
99
133
|
],
|
|
100
134
|
getEvmClient,
|
|
101
135
|
).then((multicallResult) => {
|
|
@@ -144,13 +178,37 @@ export const fetchMainPrices = async (
|
|
|
144
178
|
)
|
|
145
179
|
|
|
146
180
|
const rwaData = parseRWADynamicOracleResults(chainId, rwaResult, rwaNames)
|
|
147
|
-
|
|
181
|
+
|
|
182
|
+
const morphoResult = multicallResult.slice(
|
|
183
|
+
callsChainLink.length +
|
|
184
|
+
callAave.length +
|
|
185
|
+
uniswapV2Calls.length +
|
|
186
|
+
api3Calls.length +
|
|
187
|
+
rwaCalls.length,
|
|
188
|
+
callsChainLink.length +
|
|
189
|
+
callAave.length +
|
|
190
|
+
uniswapV2Calls.length +
|
|
191
|
+
api3Calls.length +
|
|
192
|
+
morphoCalls.length,
|
|
193
|
+
)
|
|
194
|
+
const prices = {
|
|
148
195
|
...uniswapData,
|
|
149
196
|
...aaveData,
|
|
150
197
|
...chainLinkData,
|
|
151
198
|
...api3Data,
|
|
152
199
|
...rwaData,
|
|
153
200
|
}
|
|
201
|
+
const morphoData = parseMorphoResults(
|
|
202
|
+
chainId,
|
|
203
|
+
morphoResult,
|
|
204
|
+
morphoQueries,
|
|
205
|
+
prices,
|
|
206
|
+
)
|
|
207
|
+
|
|
208
|
+
return {
|
|
209
|
+
...prices,
|
|
210
|
+
...morphoData,
|
|
211
|
+
}
|
|
154
212
|
})
|
|
155
213
|
})
|
|
156
214
|
promises.push(fetchDefillamaData())
|
|
@@ -210,6 +268,21 @@ const getAaveCalls = (query: QueryAave[]) => {
|
|
|
210
268
|
.flat()
|
|
211
269
|
}
|
|
212
270
|
|
|
271
|
+
/**
|
|
272
|
+
* Create calldata for aave oracles
|
|
273
|
+
* @param chainId network
|
|
274
|
+
* @param addressesAaveUnderlyings address array
|
|
275
|
+
* @returns call data
|
|
276
|
+
*/
|
|
277
|
+
const getMorphoCalls = (query: MrophoOracleInfo[] = []) => {
|
|
278
|
+
if (query.length === 0) return []
|
|
279
|
+
return query.map(({ oracle }) => ({
|
|
280
|
+
address: oracle,
|
|
281
|
+
name: 'price',
|
|
282
|
+
params: [],
|
|
283
|
+
}))
|
|
284
|
+
}
|
|
285
|
+
|
|
213
286
|
/**
|
|
214
287
|
* Create calldata for chainLink oracles
|
|
215
288
|
* @param chainId network
|
|
@@ -332,6 +405,41 @@ const parseAaveResults = (
|
|
|
332
405
|
return prices
|
|
333
406
|
}
|
|
334
407
|
|
|
408
|
+
const parseMorphoResults = (
|
|
409
|
+
chainId: string,
|
|
410
|
+
data: any[],
|
|
411
|
+
queries: MrophoOracleInfo[],
|
|
412
|
+
donePrices: any = {},
|
|
413
|
+
) => {
|
|
414
|
+
let prices: any = {}
|
|
415
|
+
|
|
416
|
+
data.forEach((d, i) => {
|
|
417
|
+
const details = queries[i]
|
|
418
|
+
const {
|
|
419
|
+
loanAsset,
|
|
420
|
+
collateralAsset,
|
|
421
|
+
loanAssetDecimals,
|
|
422
|
+
collateralAssetDecimals,
|
|
423
|
+
} = details
|
|
424
|
+
const oracleId =
|
|
425
|
+
ASSET_META[chainId][loanAsset]?.assetGroup ?? chainId + '-' + loanAsset
|
|
426
|
+
const debtPrice = donePrices[oracleId]
|
|
427
|
+
const oracleIdCollateral =
|
|
428
|
+
ASSET_META[chainId][collateralAsset]?.assetGroup ??
|
|
429
|
+
chainId + '-' + collateralAsset
|
|
430
|
+
if (debtPrice) {
|
|
431
|
+
const priceCollateral = formatMorphoPrice(
|
|
432
|
+
d.toString(),
|
|
433
|
+
loanAssetDecimals,
|
|
434
|
+
collateralAssetDecimals,
|
|
435
|
+
)
|
|
436
|
+
prices[oracleIdCollateral] = priceCollateral * debtPrice
|
|
437
|
+
}
|
|
438
|
+
})
|
|
439
|
+
|
|
440
|
+
return prices
|
|
441
|
+
}
|
|
442
|
+
|
|
335
443
|
/**
|
|
336
444
|
* Parser for aave results in ulticall slice
|
|
337
445
|
* @param chainId network
|