mango-v4/ts/client/src/scripts/mb-example1-admin-close.ts

101 lines
2.8 KiB
TypeScript

import { AnchorProvider, Wallet } from '@project-serum/anchor';
import { Connection, Keypair, PublicKey } from '@solana/web3.js';
import fs from 'fs';
import { MangoClient } from '../client';
import { MANGO_V4_ID } from '../constants';
const MAINNET_MINTS = new Map([
['USDC', 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v'],
['BTC', '9n4nbM75f5Ui33ZbPYXn59EwSgE8CGsHtAeTH5YFeJ9E'],
['SOL', 'So11111111111111111111111111111111111111112'],
]);
async function main() {
const options = AnchorProvider.defaultOptions();
const connection = new Connection(process.env.CLUSTER_URL, options);
const admin = Keypair.fromSecretKey(
Buffer.from(
JSON.parse(
fs.readFileSync(process.env.MANGO_MAINNET_PAYER_KEYPAIR!, 'utf-8'),
),
),
);
const adminWallet = new Wallet(admin);
console.log(`Admin ${adminWallet.publicKey.toBase58()}`);
const adminProvider = new AnchorProvider(connection, adminWallet, options);
const client = await MangoClient.connect(
adminProvider,
'mainnet-beta',
MANGO_V4_ID['mainnet-beta'],
);
const group = await client.getGroupForAdmin(admin.publicKey);
console.log(`Group ${group.publicKey}`);
let sig;
// close stub oracle
const usdcDevnetMint = new PublicKey(MAINNET_MINTS.get('USDC')!);
try {
const usdcDevnetOracle = await client.getStubOracle(
group,
usdcDevnetMint,
)[0];
let sig = await client.closeStubOracle(group, usdcDevnetOracle.publicKey);
console.log(
`Closed USDC stub oracle, sig https://explorer.solana.com/address/${sig}`,
);
} catch (error) {
console.error(error);
}
// close all bank
for (const bank of group.banksMap.values()) {
try {
sig = await client.tokenDeregister(group, bank.name);
console.log(
`Removed token ${bank.name}, sig https://explorer.solana.com/address/${sig}`,
);
} catch (error) {
console.error(error);
}
}
// deregister all serum markets
for (const market of group.serum3MarketsMap.values()) {
try {
sig = await client.serum3deregisterMarket(group, market.name);
console.log(
`Deregistered serum market ${market.name}, sig https://explorer.solana.com/address/${sig}`,
);
} catch (error) {
console.error(error);
}
}
// close all perp markets
for (const market of group.perpMarketsMap.values()) {
try {
sig = await client.perpCloseMarket(group, market.name);
console.log(
`Closed perp market ${market.name}, sig https://explorer.solana.com/address/${sig}`,
);
} catch (error) {
console.error(error);
}
}
// finally, close the group
try {
sig = await client.closeGroup(group);
console.log(`Closed group, sig https://explorer.solana.com/address/${sig}`);
} catch (error) {
console.error(error);
}
process.exit();
}
main();