From 90b5a0a2c0ac2a0c99d315b6a498c66774cb6917 Mon Sep 17 00:00:00 2001 From: Riordan Panayides Date: Thu, 20 May 2021 21:25:31 +0100 Subject: [PATCH] add hasBorrows to marginaccount layout, add function to get all accounts with borrows --- src/client.ts | 25 +++++++++++++++++++++---- src/layout.ts | 3 ++- 2 files changed, 23 insertions(+), 5 deletions(-) diff --git a/src/client.ts b/src/client.ts index 91e9ac0..df0bb60 100644 --- a/src/client.ts +++ b/src/client.ts @@ -1335,23 +1335,27 @@ export class MangoClient { async getAllMarginAccounts( connection: Connection, programId: PublicKey, - mangoGroup: MangoGroup + mangoGroup: MangoGroup, + filters?: [any] ): Promise { - const filters = [ + const marginAccountsFilters = [ { memcmp: { offset: MarginAccountLayout.offsetOf('mangoGroup'), bytes: mangoGroup.publicKey.toBase58(), } }, - { dataSize: MarginAccountLayout.span, }, ]; - const marginAccountsProms = getFilteredProgramAccounts(connection, programId, filters) + if(filters && filters.length) { + marginAccountsFilters.push(...filters); + } + + const marginAccountsProms = getFilteredProgramAccounts(connection, programId, marginAccountsFilters) .then((accounts) => ( accounts.map(({ publicKey, accountInfo }) => new MarginAccount(publicKey, MarginAccountLayout.decode(accountInfo == null ? undefined : accountInfo.data)) @@ -1400,6 +1404,19 @@ export class MangoClient { return marginAccounts } + async getAllMarginAccountsWithBorrows( + connection: Connection, + programId: PublicKey, + mangoGroup: MangoGroup + ): Promise { + return await this.getAllMarginAccounts(connection, programId, mangoGroup, [{ + memcmp: { + offset: MarginAccountLayout.offsetOf('hasBorrows'), + bytes: 1 + } + }]) + } + async getMarginAccountsForOwner( connection: Connection, programId: PublicKey, diff --git a/src/layout.ts b/src/layout.ts index 0726015..db31af1 100644 --- a/src/layout.ts +++ b/src/layout.ts @@ -156,7 +156,8 @@ export const MarginAccountLayout = struct([ seq(U64F64(), NUM_TOKENS, 'borrows'), seq(publicKeyLayout(), NUM_MARKETS, 'openOrders'), u8('beingLiquidated'), - seq(u8(), 7, 'padding') + u8('hasBorrows'), + seq(u8(), 6, 'padding') ]); export const MangoSrmAccountLayout = struct([