more resilent openbook decode
This commit is contained in:
parent
562395dfee
commit
61dc94011a
|
@ -31,7 +31,6 @@ import {
|
||||||
decodeBookL2,
|
decodeBookL2,
|
||||||
formatOrderbookData,
|
formatOrderbookData,
|
||||||
getMarket,
|
getMarket,
|
||||||
isMarketReadyForDecode,
|
|
||||||
updatePerpMarketOnGroup,
|
updatePerpMarketOnGroup,
|
||||||
} from 'utils/orderbook'
|
} from 'utils/orderbook'
|
||||||
import { OrderbookData, OrderbookL2 } from 'types'
|
import { OrderbookData, OrderbookL2 } from 'types'
|
||||||
|
@ -305,13 +304,18 @@ const Orderbook = () => {
|
||||||
connection
|
connection
|
||||||
.getAccountInfoAndContext(bidsPk)
|
.getAccountInfoAndContext(bidsPk)
|
||||||
.then(({ context, value: info }) => {
|
.then(({ context, value: info }) => {
|
||||||
if (!info || !isMarketReadyForDecode(market)) return
|
try {
|
||||||
const decodedBook = decodeBook(client, market, info, 'bids')
|
if (!info || !market) return
|
||||||
set((state) => {
|
const decodedBook = decodeBook(client, market, info, 'bids')
|
||||||
state.selectedMarket.lastSeenSlot.bids = context.slot
|
set((state) => {
|
||||||
state.selectedMarket.bidsAccount = decodedBook
|
state.selectedMarket.lastSeenSlot.bids = context.slot
|
||||||
state.selectedMarket.orderbook.bids = decodeBookL2(decodedBook)
|
state.selectedMarket.bidsAccount = decodedBook
|
||||||
})
|
state.selectedMarket.orderbook.bids = decodeBookL2(decodedBook)
|
||||||
|
})
|
||||||
|
} catch (e) {
|
||||||
|
console.log(e)
|
||||||
|
return
|
||||||
|
}
|
||||||
})
|
})
|
||||||
bidSubscriptionId = connection.onAccountChange(
|
bidSubscriptionId = connection.onAccountChange(
|
||||||
bidsPk,
|
bidsPk,
|
||||||
|
@ -319,16 +323,22 @@ const Orderbook = () => {
|
||||||
const lastSeenSlot =
|
const lastSeenSlot =
|
||||||
mangoStore.getState().selectedMarket.lastSeenSlot.bids
|
mangoStore.getState().selectedMarket.lastSeenSlot.bids
|
||||||
if (context.slot > lastSeenSlot) {
|
if (context.slot > lastSeenSlot) {
|
||||||
if (!isMarketReadyForDecode(market)) return
|
try {
|
||||||
const decodedBook = decodeBook(client, market!, info, 'bids')
|
if (!market) return
|
||||||
if (decodedBook instanceof BookSide) {
|
const decodedBook = decodeBook(client, market!, info, 'bids')
|
||||||
updatePerpMarketOnGroup(decodedBook, 'bids')
|
if (decodedBook instanceof BookSide) {
|
||||||
|
updatePerpMarketOnGroup(decodedBook, 'bids')
|
||||||
|
}
|
||||||
|
set((state) => {
|
||||||
|
state.selectedMarket.bidsAccount = decodedBook
|
||||||
|
state.selectedMarket.orderbook.bids =
|
||||||
|
decodeBookL2(decodedBook)
|
||||||
|
state.selectedMarket.lastSeenSlot.bids = context.slot
|
||||||
|
})
|
||||||
|
} catch (e) {
|
||||||
|
console.log(e)
|
||||||
|
return
|
||||||
}
|
}
|
||||||
set((state) => {
|
|
||||||
state.selectedMarket.bidsAccount = decodedBook
|
|
||||||
state.selectedMarket.orderbook.bids = decodeBookL2(decodedBook)
|
|
||||||
state.selectedMarket.lastSeenSlot.bids = context.slot
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
'processed',
|
'processed',
|
||||||
|
@ -340,13 +350,18 @@ const Orderbook = () => {
|
||||||
connection
|
connection
|
||||||
.getAccountInfoAndContext(asksPk)
|
.getAccountInfoAndContext(asksPk)
|
||||||
.then(({ context, value: info }) => {
|
.then(({ context, value: info }) => {
|
||||||
if (!info || !isMarketReadyForDecode(market)) return
|
try {
|
||||||
const decodedBook = decodeBook(client, market, info, 'asks')
|
if (!info || !market) return
|
||||||
set((state) => {
|
const decodedBook = decodeBook(client, market, info, 'asks')
|
||||||
state.selectedMarket.asksAccount = decodedBook
|
set((state) => {
|
||||||
state.selectedMarket.orderbook.asks = decodeBookL2(decodedBook)
|
state.selectedMarket.asksAccount = decodedBook
|
||||||
state.selectedMarket.lastSeenSlot.asks = context.slot
|
state.selectedMarket.orderbook.asks = decodeBookL2(decodedBook)
|
||||||
})
|
state.selectedMarket.lastSeenSlot.asks = context.slot
|
||||||
|
})
|
||||||
|
} catch (e) {
|
||||||
|
console.log(e)
|
||||||
|
return
|
||||||
|
}
|
||||||
})
|
})
|
||||||
askSubscriptionId = connection.onAccountChange(
|
askSubscriptionId = connection.onAccountChange(
|
||||||
asksPk,
|
asksPk,
|
||||||
|
@ -354,16 +369,22 @@ const Orderbook = () => {
|
||||||
const lastSeenSlot =
|
const lastSeenSlot =
|
||||||
mangoStore.getState().selectedMarket.lastSeenSlot.asks
|
mangoStore.getState().selectedMarket.lastSeenSlot.asks
|
||||||
if (context.slot > lastSeenSlot) {
|
if (context.slot > lastSeenSlot) {
|
||||||
if (!isMarketReadyForDecode(market)) return
|
try {
|
||||||
const decodedBook = decodeBook(client, market!, info, 'asks')
|
if (!market) return
|
||||||
if (decodedBook instanceof BookSide) {
|
const decodedBook = decodeBook(client, market!, info, 'asks')
|
||||||
updatePerpMarketOnGroup(decodedBook, 'asks')
|
if (decodedBook instanceof BookSide) {
|
||||||
|
updatePerpMarketOnGroup(decodedBook, 'asks')
|
||||||
|
}
|
||||||
|
set((state) => {
|
||||||
|
state.selectedMarket.asksAccount = decodedBook
|
||||||
|
state.selectedMarket.orderbook.asks =
|
||||||
|
decodeBookL2(decodedBook)
|
||||||
|
state.selectedMarket.lastSeenSlot.asks = context.slot
|
||||||
|
})
|
||||||
|
} catch (e) {
|
||||||
|
console.log(e)
|
||||||
|
return
|
||||||
}
|
}
|
||||||
set((state) => {
|
|
||||||
state.selectedMarket.asksAccount = decodedBook
|
|
||||||
state.selectedMarket.orderbook.asks = decodeBookL2(decodedBook)
|
|
||||||
state.selectedMarket.lastSeenSlot.asks = context.slot
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
'processed',
|
'processed',
|
||||||
|
@ -379,13 +400,7 @@ const Orderbook = () => {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}, [
|
}, [bidAccountAddress, askAccountAddress, connection, useOrderbookFeed])
|
||||||
bidAccountAddress,
|
|
||||||
askAccountAddress,
|
|
||||||
connection,
|
|
||||||
useOrderbookFeed,
|
|
||||||
market,
|
|
||||||
])
|
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
const market = getMarket()
|
const market = getMarket()
|
||||||
|
|
|
@ -54,19 +54,6 @@ export function decodeBook(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export const isMarketReadyForDecode = (
|
|
||||||
market: PerpMarket | Market | undefined,
|
|
||||||
) => {
|
|
||||||
if (
|
|
||||||
!market ||
|
|
||||||
(market instanceof Market && !market.decoded.accountFlags.initialized)
|
|
||||||
) {
|
|
||||||
return false
|
|
||||||
} else {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
export const updatePerpMarketOnGroup = (
|
export const updatePerpMarketOnGroup = (
|
||||||
book: BookSide,
|
book: BookSide,
|
||||||
side: 'bids' | 'asks',
|
side: 'bids' | 'asks',
|
||||||
|
|
Loading…
Reference in New Issue