@1delta/margin-fetcher 0.0.8 → 0.0.10
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/aave/AaveOracle.d.ts +10 -0
- package/dist/abis/aave/AaveOracle.d.ts.map +1 -1
- package/dist/abis/aave/AaveOracle.js +13 -0
- package/dist/abis/morpho/blue.d.ts +76 -0
- package/dist/abis/morpho/blue.d.ts.map +1 -0
- package/dist/abis/morpho/blue.js +99 -0
- package/dist/abis/morpho/lens.d.ts +16 -0
- package/dist/abis/morpho/lens.d.ts.map +1 -0
- package/dist/abis/morpho/lens.js +31 -0
- package/dist/abis/oracle/AaveOracle.d.ts +10 -0
- package/dist/abis/oracle/AaveOracle.d.ts.map +1 -1
- package/dist/abis/oracle/AaveOracle.js +13 -0
- package/dist/assets/index.d.ts +4 -4
- package/dist/assets/index.d.ts.map +1 -1
- package/dist/assets/index.js +7 -7
- package/dist/assets/liquidityThresholds.d.ts +29 -0
- package/dist/assets/liquidityThresholds.d.ts.map +1 -0
- package/dist/assets/liquidityThresholds.js +51 -0
- package/dist/flash-liquidity/index.d.ts +1 -0
- package/dist/flash-liquidity/index.d.ts.map +1 -1
- package/dist/flash-liquidity/index.js +1 -0
- package/dist/flash-liquidity/utils.d.ts +11 -0
- package/dist/flash-liquidity/utils.d.ts.map +1 -0
- package/dist/flash-liquidity/utils.js +17 -0
- package/dist/lending/aave-v2-type/publicCallParse.d.ts +2 -1
- package/dist/lending/aave-v2-type/publicCallParse.d.ts.map +1 -1
- package/dist/lending/aave-v2-type/publicCallParse.js +10 -7
- package/dist/lending/aave-v3-type/publicCallParse.d.ts +3 -2
- package/dist/lending/aave-v3-type/publicCallParse.d.ts.map +1 -1
- package/dist/lending/aave-v3-type/publicCallParse.js +11 -8
- package/dist/lending/aave-v3-type/types.d.ts +2 -0
- package/dist/lending/aave-v3-type/types.d.ts.map +1 -1
- package/dist/lending/addresses/compoundV3.d.ts +1 -1
- package/dist/lending/addresses/compoundV3.d.ts.map +1 -1
- package/dist/lending/addresses/compoundV3.js +8 -7
- package/dist/lending/compound-v3/publicCallParse.d.ts +2 -1
- package/dist/lending/compound-v3/publicCallParse.d.ts.map +1 -1
- package/dist/lending/compound-v3/publicCallParse.js +3 -2
- package/dist/lending/compound-v3/types.d.ts +2 -0
- package/dist/lending/compound-v3/types.d.ts.map +1 -1
- package/dist/lending/fetchLender.d.ts +2 -1
- package/dist/lending/fetchLender.d.ts.map +1 -1
- package/dist/lending/fetchLender.js +12 -8
- package/dist/lending/fetchLenderAll.d.ts +8 -0
- package/dist/lending/fetchLenderAll.d.ts.map +1 -0
- package/dist/lending/fetchLenderAll.js +12 -0
- package/dist/lending/fetchLenderExt.d.ts +8 -0
- package/dist/lending/fetchLenderExt.d.ts.map +1 -0
- package/dist/lending/fetchLenderExt.js +28 -0
- package/dist/lending/index.d.ts +1 -0
- package/dist/lending/index.d.ts.map +1 -1
- package/dist/lending/index.js +1 -0
- package/dist/lending/init/publicCallParse.d.ts +2 -1
- package/dist/lending/init/publicCallParse.d.ts.map +1 -1
- package/dist/lending/init/publicCallParse.js +3 -2
- package/dist/lending/init/types.d.ts +2 -0
- package/dist/lending/init/types.d.ts.map +1 -1
- package/dist/lending/morpho/convertPublic.d.ts +9 -0
- package/dist/lending/morpho/convertPublic.d.ts.map +1 -0
- package/dist/lending/morpho/convertPublic.js +115 -0
- package/dist/lending/morpho/fetchPublic.d.ts +3 -0
- package/dist/lending/morpho/fetchPublic.d.ts.map +1 -0
- package/dist/lending/morpho/fetchPublic.js +72 -0
- package/dist/lending/morpho/publicCallBuild.d.ts +8 -0
- package/dist/lending/morpho/publicCallBuild.d.ts.map +1 -0
- package/dist/lending/morpho/publicCallBuild.js +6 -0
- package/dist/lending/morpho/types.d.ts +106 -0
- package/dist/lending/morpho/types.d.ts.map +1 -0
- package/dist/lending/morpho/types.js +1 -0
- package/dist/lending/types/index.d.ts +18 -0
- package/dist/lending/types/index.d.ts.map +1 -0
- package/dist/lending/types/index.js +1 -0
- package/dist/lending/user-data/aave-v2-type/userCallBuild.d.ts.map +1 -1
- package/dist/lending/user-data/aave-v2-type/userCallBuild.js +4 -23
- package/dist/lending/user-data/aave-v2-type/userCallParse.d.ts.map +1 -1
- package/dist/lending/user-data/aave-v2-type/userCallParse.js +24 -11
- package/dist/lending/user-data/aave-v3-type/userCallBuild.d.ts.map +1 -1
- package/dist/lending/user-data/aave-v3-type/userCallBuild.js +1 -16
- package/dist/lending/user-data/aave-v3-type/userCallParse.d.ts.map +1 -1
- package/dist/lending/user-data/aave-v3-type/userCallParse.js +13 -6
- package/dist/lending/user-data/aave-v3-type/userCallParseYldr.d.ts.map +1 -1
- package/dist/lending/user-data/aave-v3-type/userCallParseYldr.js +12 -6
- package/dist/lending/user-data/compound-v3/addresses.d.ts.map +1 -1
- package/dist/lending/user-data/compound-v3/addresses.js +8 -7
- package/dist/lending/user-data/compound-v3/userCallParse.d.ts.map +1 -1
- package/dist/lending/user-data/compound-v3/userCallParse.js +2 -0
- package/dist/lending/user-data/morpho/decoder.d.ts +21 -0
- package/dist/lending/user-data/morpho/decoder.d.ts.map +1 -0
- package/dist/lending/user-data/morpho/decoder.js +52 -0
- package/dist/lending/user-data/morpho/morphoLib.d.ts +5 -0
- package/dist/lending/user-data/morpho/morphoLib.d.ts.map +1 -0
- package/dist/lending/user-data/morpho/morphoLib.js +21 -0
- package/dist/lending/user-data/morpho/types.d.ts +12 -0
- package/dist/lending/user-data/morpho/types.d.ts.map +1 -0
- package/dist/lending/user-data/morpho/types.js +13 -0
- package/dist/lending/user-data/morpho/userCallBuild.d.ts +6 -0
- package/dist/lending/user-data/morpho/userCallBuild.d.ts.map +1 -0
- package/dist/lending/user-data/morpho/userCallBuild.js +36 -0
- package/dist/lending/user-data/morpho/userCallParse.d.ts +11 -0
- package/dist/lending/user-data/morpho/userCallParse.d.ts.map +1 -0
- package/dist/lending/user-data/morpho/userCallParse.js +99 -0
- package/dist/lending/user-data/morpho/userCallParseNoDeploy.d.ts +11 -0
- package/dist/lending/user-data/morpho/userCallParseNoDeploy.d.ts.map +1 -0
- package/dist/lending/user-data/morpho/userCallParseNoDeploy.js +112 -0
- package/dist/lending-pairs/computeLendingPairs.d.ts +13 -0
- package/dist/lending-pairs/computeLendingPairs.d.ts.map +1 -1
- package/dist/lending-pairs/computeLendingPairs.js +129 -23
- package/dist/prices/main-prices/fetchOracleData.d.ts +1 -2
- package/dist/prices/main-prices/fetchOracleData.d.ts.map +1 -1
- package/dist/prices/main-prices/fetchOracleData.js +95 -55
- package/dist/utils/index.d.ts +2 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +41 -16
- package/dist/utils/parsing.d.ts.map +1 -1
- package/dist/utils/parsing.js +4 -2
- package/package.json +2 -2
- package/src/abis/aave/AaveOracle.ts +13 -0
- package/src/abis/oracle/AaveOracle.ts +13 -0
- package/src/assets/index.ts +70 -51
- package/src/assets/liquidityThresholds.ts +83 -0
- package/src/flash-liquidity/index.ts +2 -1
- package/src/flash-liquidity/utils.ts +22 -0
- package/src/lending/aave-v2-type/publicCallParse.ts +12 -7
- package/src/lending/aave-v3-type/publicCallParse.ts +13 -8
- package/src/lending/aave-v3-type/types.ts +2 -0
- package/src/lending/addresses/compoundV3.ts +29 -15
- package/src/lending/compound-v3/publicCallParse.ts +5 -2
- package/src/lending/compound-v3/types.ts +2 -0
- package/src/lending/fetchLender.ts +23 -17
- package/src/lending/index.ts +2 -1
- package/src/lending/init/publicCallParse.ts +5 -2
- package/src/lending/init/types.ts +3 -0
- package/src/lending/types/index.ts +16 -0
- package/src/lending/user-data/aave-v2-type/userCallBuild.ts +1 -25
- package/src/lending/user-data/aave-v2-type/userCallParse.ts +24 -11
- package/src/lending/user-data/aave-v3-type/userCallBuild.ts +1 -16
- package/src/lending/user-data/aave-v3-type/userCallParse.ts +15 -6
- package/src/lending/user-data/aave-v3-type/userCallParseYldr.ts +14 -6
- package/src/lending/user-data/compound-v3/addresses.ts +58 -39
- package/src/lending/user-data/compound-v3/userCallParse.ts +2 -2
- package/src/lending-pairs/computeLendingPairs.ts +421 -189
- package/src/prices/main-prices/fetchOracleData.ts +197 -107
- package/src/utils/index.ts +90 -58
- package/src/utils/parsing.ts +51 -51
- package/test/index.test.ts +15 -7
- package/test/userdata.test.ts +5 -5
|
@@ -6,29 +6,28 @@ 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
|
|
9
|
+
import { formatEther } from 'viem'
|
|
10
10
|
import { getAaveAssets } from '../../assets'
|
|
11
|
-
import {
|
|
11
|
+
import {
|
|
12
|
+
chainlinkOracles,
|
|
13
|
+
getChainLinkKeys,
|
|
14
|
+
ChainlinkAggregatorIndexes,
|
|
15
|
+
} from './addresses/chainlink'
|
|
12
16
|
import { fetchDefillamaData } from '../defillama'
|
|
13
17
|
import { multicallViemAbiArray } from '../../utils/multicall'
|
|
14
18
|
import { AAVE_STYLE_ORACLES } from './addresses/aaveOracles'
|
|
15
19
|
import { AAVES_PER_CHAIN } from '../../utils'
|
|
16
20
|
import { GetEvmClientFunction } from '../../types'
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
try {
|
|
28
|
-
return Number(formatUnits(BigInt(answer ?? '0'), decimals ?? 18))
|
|
29
|
-
} catch (e) {
|
|
30
|
-
return 0
|
|
31
|
-
}
|
|
21
|
+
import { parseRawAmount } from '../../utils/parsing'
|
|
22
|
+
|
|
23
|
+
export const formatAavePrice = (price: string, isV2 = false): number => {
|
|
24
|
+
return Number(
|
|
25
|
+
formatEther(
|
|
26
|
+
BigInt(price ?? '0') *
|
|
27
|
+
// 10^(18 - decimals)
|
|
28
|
+
10n ** (isV2 ? 0n : 10n),
|
|
29
|
+
),
|
|
30
|
+
)
|
|
32
31
|
}
|
|
33
32
|
|
|
34
33
|
const LENDLE_PAIR_MANTLE = '0x4c57BE599d0e0414785943569E9B6A66dA79Aa6b'
|
|
@@ -40,24 +39,31 @@ interface OracleData {
|
|
|
40
39
|
[key: string]: number
|
|
41
40
|
}
|
|
42
41
|
|
|
43
|
-
type QueryAave = { oracle: string
|
|
42
|
+
type QueryAave = { oracle: string; assets: string[]; fork: string }
|
|
44
43
|
|
|
45
44
|
/**
|
|
46
45
|
* Fetches Aave and uniswap V2 oracle data
|
|
47
46
|
*/
|
|
48
|
-
export const fetchMainPrices = async (
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
47
|
+
export const fetchMainPrices = async (
|
|
48
|
+
chainIds: string[],
|
|
49
|
+
getEvmClient: GetEvmClientFunction,
|
|
50
|
+
): Promise<OracleData> => {
|
|
51
|
+
let promises = chainIds.map((chainId) => {
|
|
52
52
|
const aaveForks = AAVES_PER_CHAIN[chainId]
|
|
53
|
-
let reservesToQuery: { fork: string
|
|
53
|
+
let reservesToQuery: { fork: string; assets: string[] }[] = aaveForks.map(
|
|
54
|
+
(a) => ({ fork: a, assets: getAaveAssets(chainId, a) }),
|
|
55
|
+
)
|
|
54
56
|
let handled: string[] = []
|
|
55
57
|
let queries: QueryAave[] = []
|
|
56
|
-
reservesToQuery.forEach(e => {
|
|
57
|
-
const newOnes = e.assets.filter(a => !handled.includes(a))
|
|
58
|
+
reservesToQuery.forEach((e) => {
|
|
59
|
+
const newOnes = e.assets.filter((a) => !handled.includes(a))
|
|
58
60
|
if (newOnes.length > 0) {
|
|
59
|
-
|
|
60
|
-
|
|
61
|
+
queries.push({
|
|
62
|
+
assets: newOnes,
|
|
63
|
+
// @ts-ignore
|
|
64
|
+
oracle: AAVE_STYLE_ORACLES[e.fork][chainId],
|
|
65
|
+
fork: e.fork,
|
|
66
|
+
})
|
|
61
67
|
handled = [...handled, ...newOnes]
|
|
62
68
|
}
|
|
63
69
|
})
|
|
@@ -73,52 +79,80 @@ export const fetchMainPrices = async (chainIds: string[], getEvmClient: GetEvmCl
|
|
|
73
79
|
|
|
74
80
|
return multicallViemAbiArray(
|
|
75
81
|
chainId,
|
|
76
|
-
[
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
82
|
+
[
|
|
83
|
+
...ChainLinkAggregatorAbi,
|
|
84
|
+
...UniswapV2PairAbi,
|
|
85
|
+
...AaveOracleAbi,
|
|
86
|
+
...Api3OracleAbi,
|
|
87
|
+
...RWADynamicOracleAbi,
|
|
88
|
+
],
|
|
89
|
+
[
|
|
90
|
+
...callsChainLink,
|
|
91
|
+
...callAave,
|
|
92
|
+
...uniswapV2Calls,
|
|
93
|
+
...api3Calls,
|
|
94
|
+
...rwaCalls,
|
|
95
|
+
],
|
|
96
|
+
getEvmClient,
|
|
97
|
+
).then((multicallResult) => {
|
|
98
|
+
const chainLinkResults = multicallResult.slice(0, callsChainLink.length)
|
|
84
99
|
|
|
85
100
|
const aaveResult = multicallResult.slice(
|
|
86
101
|
callsChainLink.length,
|
|
87
|
-
callsChainLink.length + callAave.length
|
|
102
|
+
callsChainLink.length + callAave.length,
|
|
88
103
|
)
|
|
89
104
|
|
|
90
|
-
const chainLinkData = parseChainLinkResults(
|
|
105
|
+
const chainLinkData = parseChainLinkResults(
|
|
106
|
+
chainId,
|
|
107
|
+
chainLinkResults,
|
|
108
|
+
chainLinkNames,
|
|
109
|
+
)
|
|
91
110
|
// @ts-ignore
|
|
92
111
|
const aaveData = parseAaveResults(chainId, aaveResult, queries)
|
|
93
112
|
|
|
94
113
|
const uniswapResult = multicallResult.slice(
|
|
95
114
|
callsChainLink.length + callAave.length,
|
|
96
|
-
callsChainLink.length + callAave.length + uniswapV2Calls.length
|
|
115
|
+
callsChainLink.length + callAave.length + uniswapV2Calls.length,
|
|
97
116
|
)
|
|
98
117
|
|
|
99
118
|
const api3Result = multicallResult.slice(
|
|
100
119
|
callsChainLink.length + callAave.length + uniswapV2Calls.length,
|
|
101
|
-
callsChainLink.length +
|
|
120
|
+
callsChainLink.length +
|
|
121
|
+
callAave.length +
|
|
122
|
+
uniswapV2Calls.length +
|
|
123
|
+
api3Calls.length,
|
|
102
124
|
)
|
|
103
125
|
|
|
104
|
-
|
|
105
126
|
const uniswapData = parseUniswapV2results(uniswapResult, chainId)
|
|
106
127
|
|
|
107
128
|
const api3Data = parseApi3Results(chainId, api3Result, api3Names)
|
|
108
129
|
|
|
109
130
|
const rwaResult = multicallResult.slice(
|
|
110
|
-
callsChainLink.length +
|
|
111
|
-
|
|
131
|
+
callsChainLink.length +
|
|
132
|
+
callAave.length +
|
|
133
|
+
uniswapV2Calls.length +
|
|
134
|
+
api3Calls.length,
|
|
135
|
+
callsChainLink.length +
|
|
136
|
+
callAave.length +
|
|
137
|
+
uniswapV2Calls.length +
|
|
138
|
+
api3Calls.length +
|
|
139
|
+
rwaCalls.length,
|
|
112
140
|
)
|
|
113
141
|
|
|
114
142
|
const rwaData = parseRWADynamicOracleResults(chainId, rwaResult, rwaNames)
|
|
115
|
-
return {
|
|
143
|
+
return {
|
|
144
|
+
...uniswapData,
|
|
145
|
+
...aaveData,
|
|
146
|
+
...chainLinkData,
|
|
147
|
+
...api3Data,
|
|
148
|
+
...rwaData,
|
|
149
|
+
}
|
|
116
150
|
})
|
|
117
151
|
})
|
|
118
152
|
promises.push(fetchDefillamaData())
|
|
119
153
|
const result = await Promise.all(promises)
|
|
120
154
|
let data: any = {}
|
|
121
|
-
result.forEach(r => {
|
|
155
|
+
result.forEach((r) => {
|
|
122
156
|
data = { ...data, ...r }
|
|
123
157
|
})
|
|
124
158
|
|
|
@@ -137,17 +171,17 @@ const getUniswapV2Calls = (chainId: string) => {
|
|
|
137
171
|
{
|
|
138
172
|
address: WMNT_USDT_PAIR,
|
|
139
173
|
name: 'getReserves',
|
|
140
|
-
params: []
|
|
174
|
+
params: [],
|
|
141
175
|
},
|
|
142
176
|
{
|
|
143
177
|
address: LENDLE_PAIR_MANTLE,
|
|
144
178
|
name: 'getReserves',
|
|
145
|
-
params: []
|
|
179
|
+
params: [],
|
|
146
180
|
},
|
|
147
181
|
{
|
|
148
182
|
address: AU_PAIR_MANTLE,
|
|
149
183
|
name: 'getReserves',
|
|
150
|
-
params: []
|
|
184
|
+
params: [],
|
|
151
185
|
},
|
|
152
186
|
]
|
|
153
187
|
default:
|
|
@@ -158,38 +192,43 @@ const getUniswapV2Calls = (chainId: string) => {
|
|
|
158
192
|
/**
|
|
159
193
|
* Create calldata for aave oracles
|
|
160
194
|
* @param chainId network
|
|
161
|
-
* @param addressesAaveUnderlyings address array
|
|
195
|
+
* @param addressesAaveUnderlyings address array
|
|
162
196
|
* @returns call data
|
|
163
197
|
*/
|
|
164
198
|
const getAaveCalls = (query: QueryAave[]) => {
|
|
165
199
|
if (query.length === 0) return []
|
|
166
|
-
return query
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
200
|
+
return query
|
|
201
|
+
.map(({ oracle, assets }) => ({
|
|
202
|
+
address: oracle,
|
|
203
|
+
name: 'getAssetsPrices',
|
|
204
|
+
params: [assets],
|
|
205
|
+
}))
|
|
206
|
+
.flat()
|
|
172
207
|
}
|
|
173
208
|
|
|
174
209
|
/**
|
|
175
210
|
* Create calldata for chainLink oracles
|
|
176
211
|
* @param chainId network
|
|
177
|
-
* @param addressesAaveUnderlyings address array
|
|
212
|
+
* @param addressesAaveUnderlyings address array
|
|
178
213
|
* @returns call data
|
|
179
214
|
*/
|
|
180
|
-
const getChainLinkCalls = (
|
|
215
|
+
const getChainLinkCalls = (
|
|
216
|
+
chainId: string,
|
|
217
|
+
): [
|
|
181
218
|
{
|
|
182
|
-
address: string
|
|
219
|
+
address: string
|
|
183
220
|
name: string
|
|
184
|
-
params: any[]
|
|
221
|
+
params: any[]
|
|
185
222
|
}[],
|
|
186
|
-
string[]
|
|
223
|
+
string[],
|
|
187
224
|
] => {
|
|
188
225
|
switch (chainId) {
|
|
189
226
|
case Chain.MANTLE:
|
|
190
227
|
return [[], []]
|
|
191
228
|
default: {
|
|
192
|
-
const keys = getChainLinkKeys(chainId).filter(
|
|
229
|
+
const keys = getChainLinkKeys(chainId).filter(
|
|
230
|
+
(k) => k.split('-')[1] === 'USD',
|
|
231
|
+
)
|
|
193
232
|
// @ts-ignore
|
|
194
233
|
const addresses = keys.map((k) => chainlinkOracles[k][chainId])
|
|
195
234
|
return [
|
|
@@ -200,13 +239,12 @@ const getChainLinkCalls = (chainId: string): [
|
|
|
200
239
|
params: [],
|
|
201
240
|
}
|
|
202
241
|
}),
|
|
203
|
-
keys.map(k => k.split('-')[0])
|
|
242
|
+
keys.map((k) => k.split('-')[0]),
|
|
204
243
|
]
|
|
205
244
|
}
|
|
206
245
|
}
|
|
207
246
|
}
|
|
208
247
|
|
|
209
|
-
|
|
210
248
|
/**
|
|
211
249
|
* Processes data creeated from fetch through 'getUniswapV2Calls
|
|
212
250
|
* @param data the result data array slice from the multicall
|
|
@@ -220,18 +258,26 @@ const parseUniswapV2results = (data: any[], chainId: string) => {
|
|
|
220
258
|
if (data.length > 0) {
|
|
221
259
|
const reserves = data[1]
|
|
222
260
|
// lendle and wmnt are respective token0s
|
|
223
|
-
const lendleReserve = parseRawAmount(reserves[0].toString(), 18)
|
|
224
|
-
const wmntReserve = parseRawAmount(reserves[1].toString(), 18)
|
|
261
|
+
const lendleReserve = Number(parseRawAmount(reserves[0].toString(), 18))
|
|
262
|
+
const wmntReserve = Number(parseRawAmount(reserves[1].toString(), 18))
|
|
225
263
|
|
|
226
264
|
const auReserves = data[2]
|
|
227
|
-
const auReserve = parseRawAmount(auReserves[1].toString(), 18)
|
|
228
|
-
const wmntReserve_au =
|
|
265
|
+
const auReserve = Number(parseRawAmount(auReserves[1].toString(), 18))
|
|
266
|
+
const wmntReserve_au = Number(
|
|
267
|
+
parseRawAmount(auReserves[0].toString(), 18),
|
|
268
|
+
)
|
|
229
269
|
|
|
230
270
|
const reservesWmntUsdt = data[0]
|
|
231
|
-
const usdtReserve =
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
const
|
|
271
|
+
const usdtReserve = Number(
|
|
272
|
+
parseRawAmount(reservesWmntUsdt[0].toString(), 6),
|
|
273
|
+
)
|
|
274
|
+
const wmnt2Reserve = Number(
|
|
275
|
+
parseRawAmount(reservesWmntUsdt[1].toString(), 18),
|
|
276
|
+
)
|
|
277
|
+
const lendPrice =
|
|
278
|
+
(wmntReserve / lendleReserve / wmnt2Reserve) * usdtReserve
|
|
279
|
+
const auPrice =
|
|
280
|
+
(wmntReserve_au / auReserve / wmnt2Reserve) * usdtReserve
|
|
235
281
|
uniswapData['LEND'] = lendPrice
|
|
236
282
|
uniswapData['AU'] = auPrice
|
|
237
283
|
}
|
|
@@ -242,6 +288,15 @@ const parseUniswapV2results = (data: any[], chainId: string) => {
|
|
|
242
288
|
}
|
|
243
289
|
}
|
|
244
290
|
|
|
291
|
+
function lowDecimalOracle(chainId: string, fork: string) {
|
|
292
|
+
// some chains only have high decimal oracles
|
|
293
|
+
if (chainId === Chain.AVALANCHE_C_CHAIN || chainId === Chain.MODE) {
|
|
294
|
+
return false
|
|
295
|
+
}
|
|
296
|
+
// otherwise, it depends on whether it is aave V3
|
|
297
|
+
return AAVE_V2_LENDERS.includes(fork as any)
|
|
298
|
+
}
|
|
299
|
+
|
|
245
300
|
/**
|
|
246
301
|
* Parser for aave results in ulticall slice
|
|
247
302
|
* @param chainId network
|
|
@@ -249,24 +304,30 @@ const parseUniswapV2results = (data: any[], chainId: string) => {
|
|
|
249
304
|
* @param assetName asset names (aligned with the originall addresses called)
|
|
250
305
|
* @returns price mapping asset->number
|
|
251
306
|
*/
|
|
252
|
-
const parseAaveResults = (
|
|
253
|
-
|
|
307
|
+
const parseAaveResults = (
|
|
308
|
+
chainId: string,
|
|
309
|
+
data: any[],
|
|
310
|
+
queries: QueryAave[],
|
|
311
|
+
) => {
|
|
254
312
|
let prices: any = {}
|
|
255
313
|
|
|
256
314
|
data.forEach((d, i) => {
|
|
257
315
|
const details = queries[i]
|
|
258
316
|
details.assets.forEach((a, j) => {
|
|
259
|
-
const oracleId =
|
|
260
|
-
|
|
317
|
+
const oracleId =
|
|
318
|
+
ASSET_META[chainId][a]?.assetGroup ??
|
|
319
|
+
ASSET_META[chainId]?.[a]?.symbol ??
|
|
320
|
+
chainId + '-' + a
|
|
321
|
+
prices[oracleId] = formatAavePrice(
|
|
322
|
+
d[j].toString(),
|
|
323
|
+
lowDecimalOracle(chainId, details.fork as any),
|
|
324
|
+
)
|
|
261
325
|
})
|
|
262
326
|
})
|
|
263
327
|
|
|
264
328
|
return prices
|
|
265
|
-
|
|
266
|
-
|
|
267
329
|
}
|
|
268
330
|
|
|
269
|
-
|
|
270
331
|
/**
|
|
271
332
|
* Parser for aave results in ulticall slice
|
|
272
333
|
* @param chainId network
|
|
@@ -274,38 +335,48 @@ const parseAaveResults = (chainId: string, data: any[], queries: QueryAave[]) =>
|
|
|
274
335
|
* @param assetName asset names (aligned with the originall addresses called)
|
|
275
336
|
* @returns price mapping asset->number
|
|
276
337
|
*/
|
|
277
|
-
const parseChainLinkResults = (
|
|
338
|
+
const parseChainLinkResults = (
|
|
339
|
+
chainId: string,
|
|
340
|
+
data: any[],
|
|
341
|
+
assetName: string[],
|
|
342
|
+
) => {
|
|
278
343
|
switch (chainId) {
|
|
279
344
|
default: {
|
|
280
345
|
return Object.assign(
|
|
281
346
|
{},
|
|
282
347
|
...data.map((entry, index) => {
|
|
283
348
|
return {
|
|
284
|
-
[assetName[index]]:
|
|
349
|
+
[assetName[index]]: Number(
|
|
350
|
+
parseRawAmount(
|
|
351
|
+
entry?.[ChainlinkAggregatorIndexes.answer]?.toString() ?? '0',
|
|
352
|
+
8,
|
|
353
|
+
),
|
|
354
|
+
),
|
|
285
355
|
}
|
|
286
|
-
})
|
|
356
|
+
}),
|
|
287
357
|
)
|
|
288
358
|
}
|
|
289
359
|
}
|
|
290
360
|
}
|
|
291
361
|
|
|
292
|
-
|
|
293
362
|
/**
|
|
294
363
|
* Create calldata for api3 oracles
|
|
295
364
|
* @param chainId network
|
|
296
365
|
* @returns call data
|
|
297
366
|
*/
|
|
298
|
-
const getApi3Calls = (
|
|
367
|
+
const getApi3Calls = (
|
|
368
|
+
chainId: string,
|
|
369
|
+
): [
|
|
299
370
|
{
|
|
300
|
-
address: string
|
|
371
|
+
address: string
|
|
301
372
|
name: string
|
|
302
|
-
params: any[]
|
|
373
|
+
params: any[]
|
|
303
374
|
}[],
|
|
304
|
-
string[]
|
|
375
|
+
string[],
|
|
305
376
|
] => {
|
|
306
377
|
switch (chainId) {
|
|
307
378
|
case Chain.MANTLE: {
|
|
308
|
-
const keys = [
|
|
379
|
+
const keys = ['WETH', 'METH', 'FBTC', 'CMETH']
|
|
309
380
|
const addresses = keys.map((k) => api3OracleAddresses[chainId][k])
|
|
310
381
|
return [
|
|
311
382
|
addresses.map((tk) => {
|
|
@@ -315,7 +386,7 @@ const getApi3Calls = (chainId: string): [
|
|
|
315
386
|
params: [],
|
|
316
387
|
}
|
|
317
388
|
}),
|
|
318
|
-
keys
|
|
389
|
+
keys,
|
|
319
390
|
]
|
|
320
391
|
}
|
|
321
392
|
default:
|
|
@@ -330,20 +401,26 @@ const getApi3Calls = (chainId: string): [
|
|
|
330
401
|
* @param assetName asset names (aligned with the originall addresses called)
|
|
331
402
|
* @returns price mapping asset->number
|
|
332
403
|
*/
|
|
333
|
-
const parseApi3Results = (
|
|
404
|
+
const parseApi3Results = (
|
|
405
|
+
chainId: string,
|
|
406
|
+
data: any[],
|
|
407
|
+
assetName: string[],
|
|
408
|
+
) => {
|
|
334
409
|
switch (chainId) {
|
|
335
410
|
case Chain.MANTLE: {
|
|
336
411
|
let prices = Object.assign(
|
|
337
412
|
{},
|
|
338
413
|
...data.map((entry, index) => {
|
|
339
414
|
return {
|
|
340
|
-
[assetName[index]]:
|
|
415
|
+
[assetName[index]]: Number(
|
|
416
|
+
parseRawAmount(entry?.[0]?.toString() ?? '0', 18),
|
|
417
|
+
),
|
|
341
418
|
}
|
|
342
|
-
})
|
|
419
|
+
}),
|
|
343
420
|
)
|
|
344
|
-
// METH is given in mETH/WETH
|
|
345
|
-
prices[
|
|
346
|
-
prices[
|
|
421
|
+
// METH is given in mETH/WETH
|
|
422
|
+
prices['METH'] = prices['METH'] * prices['WETH']
|
|
423
|
+
prices['CMETH'] = prices['CMETH'] * prices['METH']
|
|
347
424
|
return prices
|
|
348
425
|
}
|
|
349
426
|
default: {
|
|
@@ -357,22 +434,29 @@ const parseApi3Results = (chainId: string, data: any[], assetName: string[]) =>
|
|
|
357
434
|
* @param chainId network
|
|
358
435
|
* @returns call data
|
|
359
436
|
*/
|
|
360
|
-
const getRWADynamicOracleCalls = (
|
|
437
|
+
const getRWADynamicOracleCalls = (
|
|
438
|
+
chainId: string,
|
|
439
|
+
): [
|
|
361
440
|
{
|
|
362
|
-
address: string
|
|
441
|
+
address: string
|
|
363
442
|
name: string
|
|
364
|
-
params: any[]
|
|
443
|
+
params: any[]
|
|
365
444
|
}[],
|
|
366
|
-
string[]
|
|
445
|
+
string[],
|
|
367
446
|
] => {
|
|
368
447
|
switch (chainId) {
|
|
369
448
|
case Chain.MANTLE: {
|
|
370
|
-
const keys = [
|
|
371
|
-
return [
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
449
|
+
const keys = ['USDY_MUSD']
|
|
450
|
+
return [
|
|
451
|
+
[
|
|
452
|
+
{
|
|
453
|
+
address: RWA_DYNAMIC_ORACLE,
|
|
454
|
+
name: 'getPrice',
|
|
455
|
+
params: [],
|
|
456
|
+
},
|
|
457
|
+
],
|
|
458
|
+
keys,
|
|
459
|
+
]
|
|
376
460
|
}
|
|
377
461
|
default:
|
|
378
462
|
return [[], []]
|
|
@@ -386,16 +470,22 @@ const getRWADynamicOracleCalls = (chainId: string): [
|
|
|
386
470
|
* @param assetName asset names (aligned with the originall addresses called)
|
|
387
471
|
* @returns price mapping asset->number
|
|
388
472
|
*/
|
|
389
|
-
const parseRWADynamicOracleResults = (
|
|
473
|
+
const parseRWADynamicOracleResults = (
|
|
474
|
+
chainId: string,
|
|
475
|
+
data: any[],
|
|
476
|
+
assetName: string[],
|
|
477
|
+
) => {
|
|
390
478
|
switch (chainId) {
|
|
391
479
|
case Chain.MANTLE: {
|
|
392
480
|
let prices = Object.assign(
|
|
393
481
|
{},
|
|
394
482
|
...data.map((entry, index) => {
|
|
395
483
|
return {
|
|
396
|
-
[assetName[index]]:
|
|
484
|
+
[assetName[index]]: Number(
|
|
485
|
+
parseRawAmount(entry?.toString() ?? '0', 18),
|
|
486
|
+
),
|
|
397
487
|
}
|
|
398
|
-
})
|
|
488
|
+
}),
|
|
399
489
|
)
|
|
400
490
|
return prices
|
|
401
491
|
}
|
|
@@ -403,4 +493,4 @@ const parseRWADynamicOracleResults = (chainId: string, data: any[], assetName: s
|
|
|
403
493
|
return {}
|
|
404
494
|
}
|
|
405
495
|
}
|
|
406
|
-
}
|
|
496
|
+
}
|