wip: exampl1 based on higher level api in client

Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
This commit is contained in:
microwavedcola1 2022-04-07 17:58:20 +02:00
parent ed312e71d5
commit 70e39f6333
7 changed files with 91 additions and 24 deletions

View File

@ -3,6 +3,7 @@ import {
SYSVAR_RENT_PUBKEY,
Transaction,
TransactionInstruction,
TransactionSignature,
} from '@solana/web3.js';
import bs58 from 'bs58';
import { MangoClient } from '../../client';
@ -88,7 +89,7 @@ export async function registerToken(
mintPk: PublicKey,
oraclePk: PublicKey,
tokenIndex: number,
): Promise<void> {
): Promise<TransactionSignature> {
const tx = new Transaction();
const ix = await registerTokenIx(
client,
@ -99,7 +100,7 @@ export async function registerToken(
tokenIndex,
);
tx.add(ix);
await client.program.provider.send(tx);
return await client.program.provider.send(tx);
}
export async function registerTokenIx(

View File

@ -2,6 +2,7 @@ import {
PublicKey,
Transaction,
TransactionInstruction,
TransactionSignature,
} from '@solana/web3.js';
import { assert } from 'console';
import { MangoClient } from '../../client';
@ -17,11 +18,11 @@ export class Group {
export async function createGroup(
client: MangoClient,
adminPk: PublicKey,
): Promise<void> {
): Promise<TransactionSignature> {
const tx = new Transaction();
const ix = await createGroupIx(client, adminPk);
tx.add(ix);
await client.program.provider.send(tx);
return await client.program.provider.send(tx);
}
export async function createGroupIx(

View File

@ -1,10 +1,10 @@
import { BN } from '@project-serum/anchor';
import {
AccountMeta,
Keypair,
PublicKey,
Transaction,
TransactionInstruction,
TransactionSignature,
} from '@solana/web3.js';
import { MangoClient } from '../../client';
import { Bank } from './bank';
@ -137,24 +137,31 @@ export async function createMangoAccount(
client: MangoClient,
groupPk: PublicKey,
ownerPk: PublicKey,
): Promise<void> {
accountNumber: number,
): Promise<TransactionSignature> {
const tx = new Transaction();
const ix = await createMangoAccountIx(client, groupPk, ownerPk);
const ix = await createMangoAccountIx(
client,
groupPk,
ownerPk,
accountNumber,
);
tx.add(ix);
await client.program.provider.send(tx);
return await client.program.provider.send(tx);
}
export async function createMangoAccountIx(
client: MangoClient,
groupPk: PublicKey,
ownerPk: PublicKey,
accountNumber: number,
): Promise<TransactionInstruction> {
return await client.program.methods
.createAccount(11)
.createAccount(accountNumber)
.accounts({
group: groupPk,
owner: ownerPk,
payer: ownerPk
payer: ownerPk,
})
.signers()
.instruction();
@ -164,11 +171,11 @@ export async function closeMangoAccount(
client: MangoClient,
accountPk: PublicKey,
ownerPk: PublicKey,
) {
): Promise<TransactionSignature> {
const tx = new Transaction();
const ix = await closeMangoAccountIx(client, accountPk, ownerPk);
tx.add(ix);
await client.program.provider.send(tx);
return await client.program.provider.send(tx);
}
export async function closeMangoAccountIx(
@ -247,7 +254,7 @@ export async function deposit(
ownerPk: PublicKey,
healthRemainingAccounts: PublicKey[],
amount: number,
): Promise<void> {
): Promise<TransactionSignature> {
const tx = new Transaction();
const ix = await depositIx(
client,
@ -261,7 +268,7 @@ export async function deposit(
amount,
);
tx.add(ix);
await client.program.provider.send(tx);
return await client.program.provider.send(tx);
}
export async function depositIx(
@ -305,7 +312,7 @@ export async function withdraw(
healthRemainingAccounts: PublicKey[],
amount: number,
allowBorrow: boolean,
): Promise<void> {
): Promise<TransactionSignature> {
const tx = new Transaction();
const ix = await withdrawIx(
client,
@ -320,7 +327,7 @@ export async function withdraw(
allowBorrow,
);
tx.add(ix);
await client.program.provider.send(tx);
return await client.program.provider.send(tx);
}
export async function withdrawIx(

View File

@ -3,6 +3,7 @@ import {
PublicKey,
Transaction,
TransactionInstruction,
TransactionSignature,
} from '@solana/web3.js';
import BN from 'bn.js';
import * as bs58 from 'bs58';
@ -53,7 +54,7 @@ export async function serum3RegisterMarket(
quoteBankPk: PublicKey,
baseBankPk: PublicKey,
marketIndex: number,
): Promise<void> {
): Promise<TransactionSignature> {
const tx = new Transaction();
const ix = await serum3RegisterMarketIx(
client,
@ -66,7 +67,7 @@ export async function serum3RegisterMarket(
marketIndex,
);
tx.add(ix);
await client.program.provider.send(tx);
return await client.program.provider.send(tx);
}
export async function serum3RegisterMarketIx(

View File

@ -1,6 +1,12 @@
import { Program, Provider } from '@project-serum/anchor';
import { PublicKey } from '@solana/web3.js';
import { PublicKey, TransactionSignature } from '@solana/web3.js';
import { Bank, getBanksForGroup } from './accounts/types/bank';
import { getGroupForAdmin, Group } from './accounts/types/group';
import {
createMangoAccount,
getMangoAccountsForGroupAndOwner,
MangoAccount,
} from './accounts/types/mangoAccount';
import { IDL, MangoV4 } from './mango_v4';
export const MANGO_V4_ID = new PublicKey(
@ -49,9 +55,42 @@ export class MangoClient {
);
}
public getGroup(adminPk: PublicKey): Promise<Group> {
return getGroupForAdmin(this, adminPk);
public async getGroup(adminPk: PublicKey): Promise<Group> {
return await getGroupForAdmin(this, adminPk);
}
public async getBanksForGroup(group: Group): Promise<Bank[]> {
return await getBanksForGroup(this, group.publicKey);
}
public async createMangoAccount(
group: Group,
ownerPk: PublicKey,
accountNumber: number,
): Promise<TransactionSignature> {
return createMangoAccount(this, group.publicKey, ownerPk, accountNumber);
}
public async getMangoAccount(
group: Group,
ownerPk: PublicKey,
): Promise<MangoAccount[]> {
return await getMangoAccountsForGroupAndOwner(
this,
group.publicKey,
ownerPk,
);
}
// public async deposit(group: Group, mangoAccount: MangoAccount, bank: Bank) {
// return await deposit(
// this,
// group.publicKey,
// mangoAccount.publicKey,
// bank.publicKey,
// bank.vault,
// tokenAccountPk,
// ownerPk,
// );
// }
}

View File

@ -162,7 +162,7 @@ async function main() {
getMangoAccountsForGroupAndOwner,
[userClient, group.publicKey, user.publicKey],
createMangoAccount,
[userClient, group.publicKey, user.publicKey],
[userClient, group.publicKey, user.publicKey, 0],
);
console.log(`MangoAccount ${mangoAccount.publicKey}`);

View File

@ -1,6 +1,7 @@
import { Provider, Wallet } from '@project-serum/anchor';
import { Connection, Keypair, PublicKey } from '@solana/web3.js';
import fs from 'fs';
import { MangoAccount } from './accounts/types/mangoAccount';
import { MangoClient } from './client';
//
@ -26,7 +27,24 @@ async function main() {
const group = await client.getGroup(
new PublicKey('6ACH752p6FsdLzuociVkmDwc3wJW8pcCoxZKfXJKfKcD'),
);
console.log(group);
console.log(`Group ${group.publicKey}`);
const banks = await client.getBanksForGroup(group);
for (const bank of banks) {
console.log(`Bank ${bank.tokenIndex} ${bank.publicKey}`);
}
let mangoAccounts: MangoAccount[] = [];
let mangoAccount: MangoAccount;
mangoAccounts = await client.getMangoAccount(group, user.publicKey);
if (mangoAccounts.length === 0) {
await client.createMangoAccount(group, user.publicKey, 0);
mangoAccounts = await client.getMangoAccount(group, user.publicKey);
}
mangoAccount = mangoAccounts[0];
console.log(`MangoAccount ${mangoAccount.publicKey}`);
process.exit(0);
}
main();