2022-04-08 08:25:34 -07:00
|
|
|
import { PublicKey } from '@solana/web3.js';
|
2022-04-02 23:57:45 -07:00
|
|
|
import { MangoClient } from '../../client';
|
2022-04-08 03:30:21 -07:00
|
|
|
import {
|
|
|
|
DEVNET_MINTS_REVERSE,
|
|
|
|
DEVNET_SERUM3_MARKETS_REVERSE,
|
|
|
|
} from '../../constants';
|
|
|
|
import { Bank } from './bank';
|
|
|
|
import { Serum3Market } from './serum3';
|
2022-04-02 23:57:45 -07:00
|
|
|
|
|
|
|
export class Group {
|
|
|
|
static from(publicKey: PublicKey, obj: { admin: PublicKey }): Group {
|
2022-04-08 03:30:21 -07:00
|
|
|
return new Group(publicKey, obj.admin, new Map(), new Map());
|
2022-04-02 23:57:45 -07:00
|
|
|
}
|
|
|
|
|
2022-04-08 03:30:21 -07:00
|
|
|
constructor(
|
|
|
|
public publicKey: PublicKey,
|
|
|
|
public admin: PublicKey,
|
|
|
|
public banksMap: Map<string, Bank>,
|
|
|
|
public serum3MarketsMap: Map<string, Serum3Market>,
|
|
|
|
) {}
|
|
|
|
|
|
|
|
public findBank(tokenIndex: number): Bank | undefined {
|
|
|
|
return Array.from(this.banksMap.values()).find(
|
|
|
|
(bank) => bank.tokenIndex === tokenIndex,
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
public async reload(client: MangoClient) {
|
|
|
|
await this.reloadBanks(client);
|
|
|
|
await this.reloadSerum3Markets(client);
|
|
|
|
}
|
|
|
|
|
|
|
|
public async reloadBanks(client: MangoClient) {
|
|
|
|
const banks = await client.getBanksForGroup(this);
|
|
|
|
this.banksMap = new Map(
|
|
|
|
banks.map((bank) => [DEVNET_MINTS_REVERSE[bank.mint.toBase58()], bank]),
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
public async reloadSerum3Markets(client: MangoClient) {
|
|
|
|
const serum3Markets = await client.serum3GetMarket(this);
|
|
|
|
this.serum3MarketsMap = new Map(
|
|
|
|
serum3Markets.map((serum3Market) => [
|
|
|
|
DEVNET_SERUM3_MARKETS_REVERSE[
|
|
|
|
serum3Market.serumMarketExternal.toBase58()
|
|
|
|
],
|
|
|
|
serum3Market,
|
|
|
|
]),
|
|
|
|
);
|
|
|
|
}
|
2022-04-02 23:57:45 -07:00
|
|
|
}
|