Skip to content

Commit

Permalink
more resilent openbook decode
Browse files Browse the repository at this point in the history
  • Loading branch information
abrzezinski94 committed Dec 28, 2023
1 parent 562395d commit 61dc940
Show file tree
Hide file tree
Showing 2 changed files with 55 additions and 53 deletions.
95 changes: 55 additions & 40 deletions components/trade/Orderbook.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,6 @@ import {
decodeBookL2,
formatOrderbookData,
getMarket,
isMarketReadyForDecode,
updatePerpMarketOnGroup,
} from 'utils/orderbook'
import { OrderbookData, OrderbookL2 } from 'types'
Expand Down Expand Up @@ -305,30 +304,41 @@ const Orderbook = () => {
connection
.getAccountInfoAndContext(bidsPk)
.then(({ context, value: info }) => {
if (!info || !isMarketReadyForDecode(market)) return
const decodedBook = decodeBook(client, market, info, 'bids')
set((state) => {
state.selectedMarket.lastSeenSlot.bids = context.slot
state.selectedMarket.bidsAccount = decodedBook
state.selectedMarket.orderbook.bids = decodeBookL2(decodedBook)
})
try {
if (!info || !market) return
const decodedBook = decodeBook(client, market, info, 'bids')
set((state) => {
state.selectedMarket.lastSeenSlot.bids = context.slot
state.selectedMarket.bidsAccount = decodedBook
state.selectedMarket.orderbook.bids = decodeBookL2(decodedBook)
})
} catch (e) {
console.log(e)
return
}
})
bidSubscriptionId = connection.onAccountChange(
bidsPk,
(info, context) => {
const lastSeenSlot =
mangoStore.getState().selectedMarket.lastSeenSlot.bids
if (context.slot > lastSeenSlot) {
if (!isMarketReadyForDecode(market)) return
const decodedBook = decodeBook(client, market!, info, 'bids')
if (decodedBook instanceof BookSide) {
updatePerpMarketOnGroup(decodedBook, 'bids')
try {
if (!market) return
const decodedBook = decodeBook(client, market!, info, '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',
Expand All @@ -340,30 +350,41 @@ const Orderbook = () => {
connection
.getAccountInfoAndContext(asksPk)
.then(({ context, value: info }) => {
if (!info || !isMarketReadyForDecode(market)) return
const decodedBook = decodeBook(client, market, info, 'asks')
set((state) => {
state.selectedMarket.asksAccount = decodedBook
state.selectedMarket.orderbook.asks = decodeBookL2(decodedBook)
state.selectedMarket.lastSeenSlot.asks = context.slot
})
try {
if (!info || !market) return
const decodedBook = decodeBook(client, market, info, '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
}
})
askSubscriptionId = connection.onAccountChange(
asksPk,
(info, context) => {
const lastSeenSlot =
mangoStore.getState().selectedMarket.lastSeenSlot.asks
if (context.slot > lastSeenSlot) {
if (!isMarketReadyForDecode(market)) return
const decodedBook = decodeBook(client, market!, info, 'asks')
if (decodedBook instanceof BookSide) {
updatePerpMarketOnGroup(decodedBook, 'asks')
try {
if (!market) return
const decodedBook = decodeBook(client, market!, info, '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',
Expand All @@ -379,13 +400,7 @@ const Orderbook = () => {
}
}
}
}, [
bidAccountAddress,
askAccountAddress,
connection,
useOrderbookFeed,
market,
])
}, [bidAccountAddress, askAccountAddress, connection, useOrderbookFeed])

useEffect(() => {
const market = getMarket()
Expand Down
13 changes: 0 additions & 13 deletions utils/orderbook.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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 = (
book: BookSide,
side: 'bids' | 'asks',
Expand Down

1 comment on commit 61dc940

@vercel
Copy link

@vercel vercel bot commented on 61dc940 Dec 28, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please sign in to comment.