2022-03-31 00:10:06 -07:00
|
|
|
import { BN, Provider, Wallet, web3 } from '@project-serum/anchor';
|
|
|
|
import { Connection, Keypair, SystemProgram } from '@solana/web3.js';
|
2022-03-23 07:39:11 -07:00
|
|
|
import { MangoClient } from './client';
|
2022-03-31 00:10:06 -07:00
|
|
|
import os from 'os';
|
|
|
|
import fs from 'fs';
|
|
|
|
import { bs58 } from '@project-serum/anchor/dist/cjs/utils/bytes';
|
|
|
|
import { TOKEN_PROGRAM_ID } from '@project-serum/anchor/dist/cjs/utils/token';
|
|
|
|
import { TokenIndex } from './types';
|
2022-03-23 07:39:11 -07:00
|
|
|
|
|
|
|
async function main() {
|
|
|
|
const options = Provider.defaultOptions();
|
2022-03-31 00:10:06 -07:00
|
|
|
const connection = new Connection(
|
|
|
|
'https://mango.devnet.rpcpool.com',
|
|
|
|
options,
|
|
|
|
);
|
|
|
|
|
2022-03-31 02:15:39 -07:00
|
|
|
const admin = Keypair.fromSecretKey(
|
|
|
|
Buffer.from(
|
|
|
|
JSON.parse(
|
|
|
|
fs.readFileSync(os.homedir() + '/.config/solana/dev.json', 'utf-8'),
|
|
|
|
),
|
|
|
|
),
|
|
|
|
);
|
|
|
|
const wallet = new Wallet(admin);
|
|
|
|
|
|
|
|
const payer = Keypair.fromSecretKey(
|
|
|
|
Buffer.from(
|
|
|
|
JSON.parse(
|
|
|
|
fs.readFileSync(
|
|
|
|
os.homedir() + '/.config/solana/mango-devnet.json',
|
|
|
|
'utf-8',
|
|
|
|
),
|
|
|
|
),
|
|
|
|
),
|
2022-03-31 00:10:06 -07:00
|
|
|
);
|
|
|
|
|
2022-03-23 07:39:11 -07:00
|
|
|
const provider = new Provider(connection, wallet, options);
|
|
|
|
const client = await MangoClient.connect(provider, true);
|
|
|
|
|
2022-03-31 02:28:47 -07:00
|
|
|
//
|
|
|
|
// check if group exists, iff not, then create
|
|
|
|
//
|
2022-03-31 00:10:06 -07:00
|
|
|
let group;
|
|
|
|
let gpa = await client.program.account.group.all([
|
|
|
|
{
|
|
|
|
memcmp: {
|
2022-03-31 02:15:39 -07:00
|
|
|
bytes: bs58.encode(admin.publicKey.toBuffer()),
|
2022-03-31 00:10:06 -07:00
|
|
|
offset: 8,
|
|
|
|
},
|
|
|
|
},
|
|
|
|
]);
|
|
|
|
if (gpa.length > 0) {
|
|
|
|
group = gpa[0];
|
|
|
|
} else {
|
|
|
|
await client.program.methods
|
|
|
|
.createGroup()
|
|
|
|
.accounts({
|
2022-03-31 02:15:39 -07:00
|
|
|
admin: admin.publicKey,
|
|
|
|
payer: admin.publicKey,
|
2022-03-31 00:10:06 -07:00
|
|
|
system_program: SystemProgram.programId,
|
|
|
|
})
|
2022-03-31 02:15:39 -07:00
|
|
|
.signers([admin])
|
2022-03-31 00:10:06 -07:00
|
|
|
.rpc();
|
|
|
|
|
|
|
|
gpa = await client.program.account.group.all([
|
|
|
|
{
|
|
|
|
memcmp: {
|
2022-03-31 02:15:39 -07:00
|
|
|
bytes: bs58.encode(admin.publicKey.toBuffer()),
|
2022-03-31 00:10:06 -07:00
|
|
|
offset: 8,
|
|
|
|
},
|
|
|
|
},
|
|
|
|
]);
|
|
|
|
if (gpa.length > 0) {
|
|
|
|
group = gpa[0];
|
|
|
|
}
|
|
|
|
}
|
|
|
|
console.log(`Group address: ${group.publicKey.toBase58()}`);
|
2022-03-31 04:30:05 -07:00
|
|
|
// console.log(group);
|
2022-03-31 00:10:06 -07:00
|
|
|
|
2022-03-31 02:28:47 -07:00
|
|
|
//
|
|
|
|
// check if token is already registered, iff not, then register
|
|
|
|
//
|
2022-03-31 00:10:06 -07:00
|
|
|
// mngo devnet mint
|
|
|
|
const mint = new web3.PublicKey(
|
|
|
|
'Bb9bsTQa1bGEtQ5KagGkvSHyuLqDWumFUcRqFusFNJWC',
|
|
|
|
);
|
|
|
|
// mngo devnet oracle
|
|
|
|
const mngoOracle = new web3.PublicKey(
|
|
|
|
'8k7F9Xb36oFJsjpCKpsXvg4cgBRoZtwNTc3EzG5Ttd2o',
|
|
|
|
);
|
2022-03-31 02:28:47 -07:00
|
|
|
let bank;
|
2022-03-31 00:10:06 -07:00
|
|
|
gpa = await client.program.account.bank.all([
|
|
|
|
{
|
|
|
|
memcmp: {
|
|
|
|
bytes: bs58.encode(group.publicKey.toBuffer()),
|
|
|
|
offset: 8,
|
|
|
|
},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
memcmp: {
|
|
|
|
bytes: bs58.encode(mint.toBuffer()),
|
|
|
|
offset: 40,
|
|
|
|
},
|
|
|
|
},
|
|
|
|
]);
|
2022-03-31 02:28:47 -07:00
|
|
|
if (gpa.length > 0) {
|
|
|
|
bank = gpa[0];
|
|
|
|
} else {
|
|
|
|
await client.program.methods
|
|
|
|
.registerToken(0, 0.8, 0.6, 1.2, 1.4, 0.02)
|
|
|
|
.accounts({
|
|
|
|
group: group.publicKey,
|
|
|
|
admin: admin.publicKey,
|
|
|
|
mint,
|
|
|
|
oracle: mngoOracle,
|
|
|
|
payer: payer.publicKey,
|
|
|
|
token_program: TOKEN_PROGRAM_ID,
|
|
|
|
system_program: SystemProgram.programId,
|
|
|
|
rent: web3.SYSVAR_RENT_PUBKEY,
|
|
|
|
})
|
|
|
|
.signers([admin, payer])
|
|
|
|
.rpc();
|
|
|
|
|
|
|
|
gpa = await client.program.account.bank.all([
|
|
|
|
{
|
|
|
|
memcmp: {
|
|
|
|
bytes: bs58.encode(group.publicKey.toBuffer()),
|
|
|
|
offset: 8,
|
|
|
|
},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
memcmp: {
|
|
|
|
bytes: bs58.encode(mint.toBuffer()),
|
|
|
|
offset: 40,
|
|
|
|
},
|
|
|
|
},
|
|
|
|
]);
|
|
|
|
bank = gpa[0];
|
|
|
|
}
|
|
|
|
console.log(`Bank address: ${bank.publicKey.toBase58()}`);
|
2022-03-31 04:30:05 -07:00
|
|
|
// console.log(bank);
|
|
|
|
|
|
|
|
//
|
|
|
|
// mango account
|
|
|
|
//
|
|
|
|
|
|
|
|
let mangoAccount;
|
|
|
|
gpa = await client.program.account.mangoAccount.all([
|
|
|
|
{
|
|
|
|
memcmp: {
|
|
|
|
bytes: bs58.encode(group.publicKey.toBuffer()),
|
|
|
|
offset: 8,
|
|
|
|
},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
memcmp: {
|
|
|
|
bytes: bs58.encode(admin.publicKey.toBuffer()),
|
|
|
|
offset: 40,
|
|
|
|
},
|
|
|
|
},
|
|
|
|
]);
|
|
|
|
if (gpa.length > 0) {
|
|
|
|
mangoAccount = gpa[0];
|
|
|
|
} else {
|
|
|
|
await client.program.methods
|
|
|
|
.createAccount(0)
|
|
|
|
.accounts({
|
|
|
|
group: group.publicKey,
|
|
|
|
owner: admin.publicKey,
|
|
|
|
payer: payer.publicKey,
|
|
|
|
system_program: SystemProgram.programId,
|
|
|
|
})
|
|
|
|
.signers([admin, payer])
|
|
|
|
.rpc();
|
|
|
|
|
|
|
|
gpa = await client.program.account.mangoAccount.all([
|
|
|
|
{
|
|
|
|
memcmp: {
|
|
|
|
bytes: bs58.encode(group.publicKey.toBuffer()),
|
|
|
|
offset: 8,
|
|
|
|
},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
memcmp: {
|
|
|
|
bytes: bs58.encode(admin.publicKey.toBuffer()),
|
|
|
|
offset: 40,
|
|
|
|
},
|
|
|
|
},
|
|
|
|
]);
|
|
|
|
mangoAccount = gpa[0];
|
|
|
|
}
|
|
|
|
console.log(`Mango account address: ${mangoAccount.publicKey.toBase58()}`);
|
|
|
|
console.log(mangoAccount);
|
2022-03-23 07:39:11 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
main();
|