add hasBorrows to marginaccount layout, add function to get all accounts with borrows

This commit is contained in:
Riordan Panayides 2021-05-20 21:25:31 +01:00
parent 3e1130c0c4
commit 90b5a0a2c0
2 changed files with 23 additions and 5 deletions

View File

@ -1335,23 +1335,27 @@ export class MangoClient {
async getAllMarginAccounts(
connection: Connection,
programId: PublicKey,
mangoGroup: MangoGroup
mangoGroup: MangoGroup,
filters?: [any]
): Promise<MarginAccount[]> {
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<MarginAccount[]> {
return await this.getAllMarginAccounts(connection, programId, mangoGroup, [{
memcmp: {
offset: MarginAccountLayout.offsetOf('hasBorrows'),
bytes: 1
}
}])
}
async getMarginAccountsForOwner(
connection: Connection,
programId: PublicKey,

View File

@ -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([