🐛stAtom chart data (#533)

This commit is contained in:
Bob van der Helm 2023-10-11 11:07:56 +02:00 committed by GitHub
parent ae8c07d6ce
commit 7fac73b4dd
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -34,7 +34,7 @@ export class OsmosisTheGraphDataFeed implements IDatafeedChartApi {
baseDenom: string = 'uosmo' baseDenom: string = 'uosmo'
batchSize = 1000 batchSize = 1000
enabledMarketAssetDenoms: string[] = [] enabledMarketAssetDenoms: string[] = []
pairs: string[] = [] pairs: { baseAsset: string; quoteAsset: string }[] = []
pairsWithData: string[] = [] pairsWithData: string[] = []
intervals: { [key: string]: string } = { intervals: { [key: string]: string } = {
'15': '15m', '15': '15m',
@ -55,19 +55,6 @@ export class OsmosisTheGraphDataFeed implements IDatafeedChartApi {
this.supportedPools = enabledMarketAssets this.supportedPools = enabledMarketAssets
.map((asset) => asset.poolId?.toString()) .map((asset) => asset.poolId?.toString())
.filter((poolId) => typeof poolId === 'string') as string[] .filter((poolId) => typeof poolId === 'string') as string[]
this.getAllPairs()
}
getAllPairs() {
const assets = getEnabledMarketAssets()
const pairs: Set<string> = new Set()
assets.forEach((asset1) => {
assets.forEach((asset2) => {
if (asset1.symbol === asset2.symbol) return
pairs.add(`${asset1.denom}${PAIR_SEPARATOR}${asset2.denom}`)
})
})
this.pairs = Array.from(pairs)
} }
getDescription(pairName: string) { getDescription(pairName: string) {
@ -102,6 +89,7 @@ export class OsmosisTheGraphDataFeed implements IDatafeedChartApi {
}) })
.then((res) => res.json()) .then((res) => res.json())
.then((json) => { .then((json) => {
this.pairs = json.data.pairs
this.pairsWithData = json.data.pairs.map( this.pairsWithData = json.data.pairs.map(
(pair: { baseAsset: string; quoteAsset: string }) => { (pair: { baseAsset: string; quoteAsset: string }) => {
return `${pair.baseAsset}${PAIR_SEPARATOR}${pair.quoteAsset}` return `${pair.baseAsset}${PAIR_SEPARATOR}${pair.quoteAsset}`
@ -150,14 +138,35 @@ export class OsmosisTheGraphDataFeed implements IDatafeedChartApi {
let pair1 = symbolInfo.full_name let pair1 = symbolInfo.full_name
let pair2: string = '' let pair2: string = ''
let pair3: string = ''
if (!this.pairsWithData.includes(pair1)) { if (!this.pairsWithData.includes(pair1)) {
if (this.debug) console.log('Pair does not have data, need to combine with 2nd pair') if (this.debug) console.log('Pair does not have data, need to combine with other pairs')
const [buyAssetDenom, sellAssetDenom] = pair1.split(PAIR_SEPARATOR) const [buyAssetDenom, sellAssetDenom] = pair1.split(PAIR_SEPARATOR)
pair1 = `${buyAssetDenom}${PAIR_SEPARATOR}${this.baseDenom}` const pair1Pools = this.pairs.filter((pair) => pair.baseAsset === buyAssetDenom)
pair2 = `${this.baseDenom}${PAIR_SEPARATOR}${sellAssetDenom}` const pair2Pools = this.pairs.filter((pair) => pair.quoteAsset === sellAssetDenom)
const matchedPools = pair1Pools.filter((pool) => {
const asset = pool.quoteAsset
return !!pair2Pools.find((pool) => pool.baseAsset === asset)
})
if (matchedPools.length) {
pair1 = `${buyAssetDenom}${PAIR_SEPARATOR}${matchedPools[0].quoteAsset}`
pair2 = `${matchedPools[0].quoteAsset}${PAIR_SEPARATOR}${sellAssetDenom}`
} else {
const middlePair = this.pairs.filter(
(pair) =>
pair1Pools.map((pairs) => pairs.quoteAsset).includes(pair.baseAsset) &&
pair2Pools.map((pairs) => pairs.baseAsset).includes(pair.quoteAsset),
)
pair1 = `${buyAssetDenom}${PAIR_SEPARATOR}${middlePair[0].baseAsset}`
pair2 = `${middlePair[0].baseAsset}${PAIR_SEPARATOR}${middlePair[0].quoteAsset}`
pair3 = `${middlePair[0].quoteAsset}${PAIR_SEPARATOR}${sellAssetDenom}`
}
} }
const pair1Bars = this.queryBarData( const pair1Bars = this.queryBarData(
@ -176,13 +185,28 @@ export class OsmosisTheGraphDataFeed implements IDatafeedChartApi {
) )
} }
await Promise.all([pair1Bars, pair2Bars]).then(([pair1Bars, pair2Bars]) => { let pair3Bars: Promise<Bar[]> | null = null
let bars = pair1Bars
if (pair2Bars) { if (pair3) {
bars = this.combineBars(pair1Bars, pair2Bars) pair3Bars = this.queryBarData(
} pair3.split(PAIR_SEPARATOR)[0],
onResult(bars) pair3.split(PAIR_SEPARATOR)[1],
}) interval,
)
}
await Promise.all([pair1Bars, pair2Bars, pair3Bars]).then(
([pair1Bars, pair2Bars, pair3Bars]) => {
let bars = pair1Bars
if (pair2Bars) {
bars = this.combineBars(pair1Bars, pair2Bars)
}
if (pair3Bars) {
bars = this.combineBars(bars, pair3Bars)
}
onResult(bars)
},
)
} }
async queryBarData(quote: string, base: string, interval: string): Promise<Bar[]> { async queryBarData(quote: string, base: string, interval: string): Promise<Bar[]> {