mango-v4/ts/client/src/example1-admin.ts

128 lines
3.0 KiB
TypeScript
Raw Normal View History

import { Provider, Wallet } from '@project-serum/anchor';
import { Connection, Keypair, PublicKey } from '@solana/web3.js';
import fs from 'fs';
import { MangoClient } from './client';
import {
DEVNET_MINTS,
DEVNET_ORACLES,
DEVNET_SERUM3_MARKETS,
DEVNET_SERUM3_PROGRAM_ID,
} from './constants';
//
// An example for admins based on high level api i.e. the client
//
async function main() {
const options = Provider.defaultOptions();
const connection = new Connection(
'https://mango.devnet.rpcpool.com',
options,
);
const admin = Keypair.fromSecretKey(
Buffer.from(
JSON.parse(fs.readFileSync(process.env.ADMIN_KEYPAIR!, 'utf-8')),
),
);
const adminWallet = new Wallet(admin);
console.log(`Admin ${adminWallet.publicKey.toBase58()}`);
const adminProvider = new Provider(connection, adminWallet, options);
const client = await MangoClient.connect(adminProvider, true);
// group
console.log(`Group...`);
try {
await client.createGroup();
} catch (error) {}
const group = await client.getGroupForAdmin(admin.publicKey);
console.log(`Group ${group.publicKey}`);
// register token 0
console.log(`Token 0...`);
const btcDevnetMint = new PublicKey(DEVNET_MINTS.get('BTC')!);
const btcDevnetOracle = new PublicKey(DEVNET_ORACLES.get('BTC')!);
try {
await client.registerToken(
group,
btcDevnetMint,
btcDevnetOracle,
0,
'BTC',
0.4,
0.07,
0.8,
0.9,
1.5,
0.8,
0.6,
1.2,
1.4,
0.02,
);
} catch (error) {}
// stub oracle + register token 1
console.log(`Token 1...`);
const usdcDevnetMint = new PublicKey(DEVNET_MINTS.get('USDC')!);
try {
await client.createStubOracle(group, usdcDevnetMint, 1.0);
} catch (error) {}
const usdcDevnetOracle = await client.getStubOracle(group, usdcDevnetMint);
try {
await client.registerToken(
group,
usdcDevnetMint,
usdcDevnetOracle.publicKey,
1,
'USDC',
0.4,
0.07,
0.8,
0.9,
1.5,
0.8,
0.6,
1.2,
1.4,
0.02,
);
} catch (error) {}
// log tokens/banks
const banks = await client.getBanksForGroup(group);
for (const bank of banks) {
console.log(
`Bank ${bank.tokenIndex} ${bank.publicKey}, mint ${bank.mint}, oracle ${bank.oracle}`,
);
}
// register serum market
console.log(`Serum3 market...`);
const serumMarketExternalPk = new PublicKey(
DEVNET_SERUM3_MARKETS.get('BTC/USDC')!,
);
try {
await client.serum3RegisterMarket(
group,
DEVNET_SERUM3_PROGRAM_ID,
serumMarketExternalPk,
banks[0],
banks[1],
0,
'BTC/USDC',
);
} catch (error) {}
const markets = await client.serum3GetMarket(
group,
banks.find((bank) => bank.mint.toBase58() === DEVNET_MINTS.get('BTC'))
?.tokenIndex,
banks.find((bank) => bank.mint.toBase58() === DEVNET_MINTS.get('USDC'))
?.tokenIndex,
);
console.log(`Serum3 market ${markets[0].publicKey}`);
process.exit();
}
main();