mango-v4/ts/client/src/ids.ts

68 lines
1.8 KiB
TypeScript

import { Cluster, PublicKey } from '@solana/web3.js';
import ids from '../ids.json';
export class Id {
constructor(
public cluster: Cluster,
public name: string,
public publicKey: string,
public serum3ProgramId: string,
public mangoProgramId: string,
public banks: { name: string; publicKey: string }[],
public stubOracles: { name: string; publicKey: string }[],
public mintInfos: { name: string; publicKey: string }[],
public serum3Markets: {
name: string;
publicKey: string;
marketExternal: string;
}[],
public perpMarkets: { name: string; publicKey: string }[],
) {}
public getBanks(): PublicKey[] {
return Array.from(this.banks.map((bank) => new PublicKey(bank.publicKey)));
}
public getStubOracles(): PublicKey[] {
return Array.from(
this.stubOracles.map((stubOracle) => new PublicKey(stubOracle.publicKey)),
);
}
public getMintInfos(): PublicKey[] {
return Array.from(
this.mintInfos.map((mintInfo) => new PublicKey(mintInfo.publicKey)),
);
}
public getSerum3Markets(): PublicKey[] {
return Array.from(
this.serum3Markets.map(
(serum3Market) => new PublicKey(serum3Market.publicKey),
),
);
}
public getPerpMarkets(): PublicKey[] {
return Array.from(
this.perpMarkets.map((perpMarket) => new PublicKey(perpMarket.publicKey)),
);
}
static fromIds(name: string): Id {
const groupConfig = ids.groups.find((id) => id['name'] === name);
return new Id(
groupConfig.cluster as Cluster,
name,
groupConfig.publicKey,
groupConfig.serum3ProgramId,
groupConfig.mangoProgramId,
groupConfig['banks'],
groupConfig['stubOracles'],
groupConfig['mintInfos'],
groupConfig['serum3Markets'],
groupConfig['perpMarkets'],
);
}
}