use last slot when updating mango account
This commit is contained in:
parent
8254602691
commit
7c34ed0bcb
|
@ -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,
|
||||
},
|
||||
})
|
||||
}
|
||||
}
|
||||
)
|
||||
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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()
|
||||
|
|
Loading…
Reference in New Issue