use last slot when updating mango account

This commit is contained in:
tjs 2022-10-29 20:30:37 -04:00
parent 8254602691
commit 7c34ed0bcb
3 changed files with 36 additions and 31 deletions

View File

@ -42,8 +42,7 @@ const HydrateStore = () => {
async (info, context) => {
if (info?.lamports === 0) return
// const lastSeenSlot =
// mangoStore.getState().mangoAccount.lastSlot
const lastSeenSlot = mangoStore.getState().mangoAccount.lastSlot
// const mangoAccountLastUpdated = new Date(
// mangoStore.getState().mangoAccount.lastUpdatedAt
// )
@ -55,30 +54,29 @@ const HydrateStore = () => {
// only updated mango account if it's been more than 1 second since last update
// if (Math.abs(timeDiff) >= 500 && context.slot > lastSeenSlot) {
const decodedMangoAccount = client.program.coder.accounts.decode(
'mangoAccount',
info?.data
)
const newMangoAccount = MangoAccount.from(
mangoAccount.publicKey,
decodedMangoAccount
)
await newMangoAccount.reloadAccountData(client)
console.log('WEBSOCKET ma:', newMangoAccount)
if (context.slot > lastSeenSlot) {
const decodedMangoAccount = client.program.coder.accounts.decode(
'mangoAccount',
info?.data
)
const newMangoAccount = MangoAccount.from(
mangoAccount.publicKey,
decodedMangoAccount
)
await newMangoAccount.reloadAccountData(client)
console.log('WEBSOCKET ma:', newMangoAccount)
// newMangoAccount.spotOpenOrdersAccounts =
// mangoAccount.spotOpenOrdersAccounts
// newMangoAccount.advancedOrders = mangoAccount.advancedOrders
mangoStore.setState({
// state.mangoAccount.lastSlot = context.slot
mangoAccount: {
...mangoStore.getState().mangoAccount,
current: newMangoAccount,
},
// state.mangoAccount.lastUpdatedAt =
// newUpdatedAt.toISOString()
})
// }
// newMangoAccount.spotOpenOrdersAccounts =
// mangoAccount.spotOpenOrdersAccounts
// newMangoAccount.advancedOrders = mangoAccount.advancedOrders
mangoStore.setState({
mangoAccount: {
...mangoStore.getState().mangoAccount,
current: newMangoAccount,
lastSlot: context.slot,
},
})
}
}
)

View File

@ -151,7 +151,7 @@ function DepositModal({ isOpen, onClose, token }: ModalCombinedProps) {
txid: tx,
})
// await actions.reloadMangoAccount()
await actions.reloadMangoAccount()
actions.fetchWalletTokens(wallet!.adapter as unknown as Wallet)
setSubmitting(false)
} catch (e: any) {

View File

@ -176,6 +176,7 @@ export type MangoStore = {
current: MangoAccount | undefined
initialLoad: boolean
lastUpdatedAt: string
lastSlot: number
openOrderAccounts: OpenOrders[]
openOrders: Record<string, Order[]>
spotBalances: SpotBalances
@ -279,6 +280,7 @@ const mangoStore = create<MangoStore>()(
mangoAccount: {
current: undefined,
initialLoad: true,
lastSlot: 0,
lastUpdatedAt: '',
openOrderAccounts: [],
openOrders: {},
@ -547,15 +549,20 @@ const mangoStore = create<MangoStore>()(
const group = get().group
const client = get().client
const mangoAccount = get().mangoAccount.current
const lastSlot = get().mangoAccount.lastSlot
if (!group) throw new Error('Group not loaded')
if (!mangoAccount)
throw new Error('No mango account exists for reload')
const reloadedMangoAccount = await mangoAccount.reload(client)
set((state) => {
state.mangoAccount.current = reloadedMangoAccount
state.mangoAccount.lastUpdatedAt = new Date().toISOString()
})
const { value: reloadedMangoAccount, slot } =
await mangoAccount.reloadWithSlot(client)
if (slot > lastSlot) {
set((state) => {
state.mangoAccount.current = reloadedMangoAccount
state.mangoAccount.lastUpdatedAt = new Date().toISOString()
state.mangoAccount.lastSlot = slot
})
}
} catch (e) {
console.error('Error reloading mango acct', e)
actions.reloadMangoAccount()