From f41f2ab33729fef21bc3e41c6c14f99d9d8f7dab Mon Sep 17 00:00:00 2001 From: tylersssss Date: Wed, 22 Feb 2023 02:07:06 -0500 Subject: [PATCH] Ts/client fixes (#471) * fix bug with marking perp orders as expired * support passing in perp books to find mango account orders * support force reloading of acct perp open orders * make perp market _bids and _asks public * dont fetch open order accts if no serum3active --- ts/client/src/accounts/mangoAccount.ts | 21 +++++++++++++++------ ts/client/src/accounts/perp.ts | 9 ++++----- 2 files changed, 19 insertions(+), 11 deletions(-) diff --git a/ts/client/src/accounts/mangoAccount.ts b/ts/client/src/accounts/mangoAccount.ts index b1bf28eac..e6f03de02 100644 --- a/ts/client/src/accounts/mangoAccount.ts +++ b/ts/client/src/accounts/mangoAccount.ts @@ -9,7 +9,13 @@ import { toNativeI80F48, toUiDecimals, toUiDecimalsForQuote } from '../utils'; import { Bank, TokenIndex } from './bank'; import { Group } from './group'; import { HealthCache } from './healthCache'; -import { PerpMarket, PerpMarketIndex, PerpOrder, PerpOrderSide } from './perp'; +import { + BookSide, + PerpMarket, + PerpMarketIndex, + PerpOrder, + PerpOrderSide, +} from './perp'; import { MarketIndex, Serum3Side } from './serum3'; export class MangoAccount { public name: string; @@ -588,9 +594,11 @@ export class MangoAccount { public async loadSerum3OpenOrdersAccounts( client: MangoClient, ): Promise { + const openOrderPks = this.serum3Active().map((s) => s.openOrders); + if (!openOrderPks.length) return []; const response = await client.program.provider.connection.getMultipleAccountsInfo( - this.serum3Active().map((s) => s.openOrders), + openOrderPks, ); const accounts = response.filter((a): a is AccountInfo => Boolean(a), @@ -940,15 +948,16 @@ export class MangoAccount { client: MangoClient, group: Group, perpMarketIndex: PerpMarketIndex, + forceReload?: boolean, ): Promise { const perpMarket = group.getPerpMarketByMarketIndex(perpMarketIndex); const [bids, asks] = await Promise.all([ - perpMarket.loadBids(client), - perpMarket.loadAsks(client), + perpMarket.loadBids(client, forceReload), + perpMarket.loadAsks(client, forceReload), ]); - return [...Array.from(bids.items()), ...Array.from(asks.items())].filter( - (order) => order.owner.equals(this.publicKey), + return [...bids.items(), ...asks.items()].filter((order) => + order.owner.equals(this.publicKey), ); } diff --git a/ts/client/src/accounts/perp.ts b/ts/client/src/accounts/perp.ts index 642332f82..f64e08ff3 100644 --- a/ts/client/src/accounts/perp.ts +++ b/ts/client/src/accounts/perp.ts @@ -49,14 +49,13 @@ export class PerpMarket { public _price: I80F48; public _uiPrice: number; public _oracleLastUpdatedSlot: number; + public _bids: BookSide; + public _asks: BookSide; private priceLotsToUiConverter: number; private baseLotsToUiConverter: number; private quoteLotsToUiConverter: number; - private _bids: BookSide; - private _asks: BookSide; - static from( publicKey: PublicKey, obj: { @@ -683,7 +682,7 @@ export class BookSide { this.perpMarket, leafNode, this.type, - now.lt(expiryTimestamp), + now.gt(expiryTimestamp), ); } } @@ -713,7 +712,7 @@ export class BookSide { this.perpMarket, leafNode, this.type, - now.lt(expiryTimestamp), + now.gt(expiryTimestamp), true, ); }