ts: mb-admin-close script closes all groups for the key
This commit is contained in:
parent
13e4d0a432
commit
29c7d5b45a
|
@ -128,10 +128,9 @@ export class MangoClient {
|
|||
return group;
|
||||
}
|
||||
|
||||
public async getGroupForCreator(
|
||||
public async getGroupsForCreator(
|
||||
creatorPk: PublicKey,
|
||||
groupNum?: number,
|
||||
): Promise<Group> {
|
||||
): Promise<Group[]> {
|
||||
const filters: MemcmpFilter[] = [
|
||||
{
|
||||
memcmp: {
|
||||
|
@ -141,20 +140,24 @@ export class MangoClient {
|
|||
},
|
||||
];
|
||||
|
||||
if (groupNum !== undefined) {
|
||||
const bbuf = Buffer.alloc(4);
|
||||
bbuf.writeUInt32LE(groupNum);
|
||||
filters.push({
|
||||
memcmp: {
|
||||
bytes: bs58.encode(bbuf),
|
||||
offset: 40,
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
const groups = (await this.program.account.group.all(filters)).map(
|
||||
return (await this.program.account.group.all(filters)).map(
|
||||
(tuple) => Group.from(tuple.publicKey, tuple.account),
|
||||
);
|
||||
}
|
||||
|
||||
public async getGroupForCreator(
|
||||
creatorPk: PublicKey,
|
||||
groupNum?: number,
|
||||
): Promise<Group> {
|
||||
const groups = (await this.getGroupsForCreator(creatorPk))
|
||||
.filter((group) => {
|
||||
if (groupNum !== undefined) {
|
||||
return group.groupNum == groupNum;
|
||||
} else {
|
||||
return true;
|
||||
}
|
||||
});
|
||||
|
||||
await groups[0].reloadAll(this);
|
||||
return groups[0];
|
||||
}
|
||||
|
|
|
@ -8,11 +8,8 @@ import { MANGO_V4_ID } from '../constants';
|
|||
// example script to close accounts - banks, markets, group etc. which require admin to be the signer
|
||||
//
|
||||
|
||||
const MAINNET_MINTS = new Map([
|
||||
['USDC', 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v'],
|
||||
['BTC', '9n4nbM75f5Ui33ZbPYXn59EwSgE8CGsHtAeTH5YFeJ9E'],
|
||||
['SOL', 'So11111111111111111111111111111111111111112'],
|
||||
]);
|
||||
// Use to close only a specific group by number. Use "all" to close all groups.
|
||||
const GROUP_NUM = process.env.GROUP_NUM;
|
||||
|
||||
async function main() {
|
||||
const options = AnchorProvider.defaultOptions();
|
||||
|
@ -32,22 +29,28 @@ async function main() {
|
|||
MANGO_V4_ID['mainnet-beta'],
|
||||
);
|
||||
|
||||
const group = await client.getGroupForCreator(admin.publicKey);
|
||||
const groups = await (async () => {
|
||||
if (GROUP_NUM === "all") {
|
||||
return await client.getGroupsForCreator(admin.publicKey);
|
||||
} else {
|
||||
return [await client.getGroupForCreator(admin.publicKey, Number(GROUP_NUM))];
|
||||
}
|
||||
})();
|
||||
for (const group of groups) {
|
||||
console.log(`Group ${group.publicKey}`);
|
||||
|
||||
let sig;
|
||||
|
||||
// close stub oracle
|
||||
const usdcMainnetBetaMint = new PublicKey(MAINNET_MINTS.get('USDC')!);
|
||||
const usdcMainnetBetaOracle = (
|
||||
await client.getStubOracle(group, usdcMainnetBetaMint)
|
||||
)[0];
|
||||
sig = await client.stubOracleClose(group, usdcMainnetBetaOracle.publicKey);
|
||||
// close stub oracles
|
||||
const stubOracles = await client.getStubOracle(group);
|
||||
for (const stubOracle of stubOracles) {
|
||||
sig = await client.stubOracleClose(group, stubOracle.publicKey);
|
||||
console.log(
|
||||
`Closed USDC stub oracle, sig https://explorer.solana.com/tx/${sig}`,
|
||||
`Closed stub oracle ${stubOracle.publicKey}, sig https://explorer.solana.com/tx/${sig}`,
|
||||
);
|
||||
}
|
||||
|
||||
// close all bank
|
||||
// close all banks
|
||||
for (const bank of group.banksMap.values()) {
|
||||
sig = await client.tokenDeregister(group, bank.name);
|
||||
console.log(
|
||||
|
@ -74,6 +77,7 @@ async function main() {
|
|||
// finally, close the group
|
||||
sig = await client.groupClose(group);
|
||||
console.log(`Closed group, sig https://explorer.solana.com/tx/${sig}`);
|
||||
}
|
||||
|
||||
process.exit();
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue