2022-04-08 08:25:34 -07:00
|
|
|
import { PublicKey } from '@solana/web3.js';
|
2022-04-12 08:28:47 -07:00
|
|
|
import { MangoClient } from '../client';
|
2022-06-09 09:27:31 -07:00
|
|
|
import { Bank, MintInfo } from './bank';
|
2022-05-11 04:33:01 -07:00
|
|
|
import { PerpMarket } from './perp';
|
2022-04-08 03:30:21 -07:00
|
|
|
import { Serum3Market } from './serum3';
|
2022-04-02 23:57:45 -07:00
|
|
|
|
|
|
|
export class Group {
|
2022-05-27 05:43:53 -07:00
|
|
|
static from(
|
|
|
|
publicKey: PublicKey,
|
|
|
|
obj: { admin: PublicKey; groupNum: number },
|
|
|
|
): Group {
|
|
|
|
return new Group(
|
|
|
|
publicKey,
|
|
|
|
obj.admin,
|
|
|
|
obj.groupNum,
|
|
|
|
new Map(),
|
|
|
|
new Map(),
|
|
|
|
new Map(),
|
2022-06-09 09:27:31 -07:00
|
|
|
new Map(),
|
2022-05-27 05:43:53 -07:00
|
|
|
);
|
2022-04-02 23:57:45 -07:00
|
|
|
}
|
|
|
|
|
2022-04-08 03:30:21 -07:00
|
|
|
constructor(
|
|
|
|
public publicKey: PublicKey,
|
|
|
|
public admin: PublicKey,
|
2022-05-27 05:43:53 -07:00
|
|
|
public groupNum: number,
|
2022-04-08 03:30:21 -07:00
|
|
|
public banksMap: Map<string, Bank>,
|
|
|
|
public serum3MarketsMap: Map<string, Serum3Market>,
|
2022-05-11 04:33:01 -07:00
|
|
|
public perpMarketsMap: Map<string, PerpMarket>,
|
2022-06-09 09:27:31 -07:00
|
|
|
public mintInfosMap: Map<string, MintInfo>,
|
2022-04-08 03:30:21 -07:00
|
|
|
) {}
|
|
|
|
|
|
|
|
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);
|
2022-06-09 09:27:31 -07:00
|
|
|
await this.reloadMintInfos(client);
|
2022-04-08 03:30:21 -07:00
|
|
|
await this.reloadSerum3Markets(client);
|
2022-05-11 04:33:01 -07:00
|
|
|
await this.reloadPerpMarkets(client);
|
2022-04-08 03:30:21 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
public async reloadBanks(client: MangoClient) {
|
|
|
|
const banks = await client.getBanksForGroup(this);
|
2022-04-12 07:19:58 -07:00
|
|
|
this.banksMap = new Map(banks.map((bank) => [bank.name, bank]));
|
2022-04-08 03:30:21 -07:00
|
|
|
}
|
|
|
|
|
2022-06-09 09:27:31 -07:00
|
|
|
public async reloadMintInfos(client: MangoClient) {
|
|
|
|
const mintInfos = await client.getMintInfosForGroup(this);
|
|
|
|
this.mintInfosMap = new Map(
|
|
|
|
mintInfos.map((mintInfo) => {
|
|
|
|
// console.log(
|
|
|
|
// Array.from(this.banksMap.values()).find(
|
|
|
|
// (bank) => bank.mint.toBase58() === mintInfo.mint.toBase58(),
|
|
|
|
// ),
|
|
|
|
// );
|
|
|
|
return [
|
|
|
|
Array.from(this.banksMap.values()).find(
|
|
|
|
(bank) => bank.mint.toBase58() === mintInfo.mint.toBase58(),
|
|
|
|
)?.name!,
|
|
|
|
mintInfo,
|
|
|
|
];
|
|
|
|
}),
|
|
|
|
);
|
|
|
|
|
|
|
|
// console.log(this.banksMap);
|
|
|
|
// console.log(this.mintInfosMap);
|
|
|
|
}
|
|
|
|
|
2022-04-08 03:30:21 -07:00
|
|
|
public async reloadSerum3Markets(client: MangoClient) {
|
|
|
|
const serum3Markets = await client.serum3GetMarket(this);
|
|
|
|
this.serum3MarketsMap = new Map(
|
2022-04-12 07:19:58 -07:00
|
|
|
serum3Markets.map((serum3Market) => [serum3Market.name, serum3Market]),
|
2022-04-08 03:30:21 -07:00
|
|
|
);
|
|
|
|
}
|
2022-05-11 04:33:01 -07:00
|
|
|
|
|
|
|
public async reloadPerpMarkets(client: MangoClient) {
|
|
|
|
const perpMarkets = await client.perpGetMarket(this);
|
|
|
|
this.perpMarketsMap = new Map(
|
|
|
|
perpMarkets.map((perpMarket) => [perpMarket.name, perpMarket]),
|
|
|
|
);
|
|
|
|
}
|
2022-04-02 23:57:45 -07:00
|
|
|
}
|