ts: simplify getOrCreateMangoAccount (#256)

Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>

Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
This commit is contained in:
microwavedcola1 2022-09-30 12:16:24 +02:00 committed by GitHub
parent c22302a1da
commit 4b52d9a072
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
11 changed files with 22 additions and 79 deletions

View File

@ -505,41 +505,18 @@ export class MangoClient {
// MangoAccount
public async getOrCreateMangoAccount(
group: Group,
ownerPk: PublicKey,
accountNumber?: number,
name?: string,
): Promise<MangoAccount | undefined> {
// TODO: this function discards accountSize and name when the account exists already!
// TODO: this function always creates accounts for this.program.owner, and not
// ownerPk! It needs to get passed a keypair, and we need to add
// createMangoAccountForOwner
if (accountNumber === undefined) {
// Get any MangoAccount
// TODO: should probably sort by accountNum for deterministic output!
let mangoAccounts = await this.getMangoAccountsForOwner(group, ownerPk);
if (mangoAccounts.length === 0) {
await this.createMangoAccount(group, accountNumber, name);
mangoAccounts = await this.getMangoAccountsForOwner(group, ownerPk);
}
return mangoAccounts[0];
} else {
let account = await this.getMangoAccountForOwner(
group,
ownerPk,
accountNumber,
);
if (account === undefined) {
await this.createMangoAccount(group, accountNumber, name);
account = await this.getMangoAccountForOwner(
group,
ownerPk,
accountNumber,
);
}
return account;
public async getOrCreateMangoAccount(group: Group): Promise<MangoAccount> {
const clientOwner = (this.program.provider as AnchorProvider).wallet
.publicKey;
let mangoAccounts = await this.getMangoAccountsForOwner(
group,
(this.program.provider as AnchorProvider).wallet.publicKey,
);
if (mangoAccounts.length === 0) {
await this.createMangoAccount(group);
mangoAccounts = await this.getMangoAccountsForOwner(group, clientOwner);
}
return mangoAccounts.sort((a, b) => a.accountNum - b.accountNum)[0];
}
public async createMangoAccount(

View File

@ -1,7 +1,6 @@
import { AnchorProvider, Wallet } from '@project-serum/anchor';
import { Connection, Keypair } from '@solana/web3.js';
import fs from 'fs';
import { AccountSize } from '../../accounts/mangoAccount';
import { MangoClient } from '../../client';
import { MANGO_V4_ID } from '../../constants';
@ -45,10 +44,7 @@ async function main() {
const group = await user1Client.getGroupForAdmin(admin.publicKey, GROUP_NUM);
console.log(`Found group ${group.publicKey.toBase58()}`);
const user1MangoAccount = await user1Client.getOrCreateMangoAccount(
group,
user1.publicKey,
);
const user1MangoAccount = await user1Client.getOrCreateMangoAccount(group);
console.log(`...mangoAccount1 ${user1MangoAccount.publicKey}`);
@ -75,10 +71,7 @@ async function main() {
);
console.log(`user2 ${user2Wallet.publicKey.toBase58()}`);
const user2MangoAccount = await user2Client.getOrCreateMangoAccount(
group,
user2.publicKey,
);
const user2MangoAccount = await user2Client.getOrCreateMangoAccount(group);
console.log(`...mangoAccount2 ${user2MangoAccount.publicKey}`);
/// Increase usdc price temporarily to allow lots of borrows

View File

@ -48,10 +48,7 @@ async function main() {
// create + fetch account
console.log(`Creating mangoaccount...`);
const mangoAccount = await client.getOrCreateMangoAccount(
group,
user.publicKey,
);
const mangoAccount = await client.getOrCreateMangoAccount(group);
console.log(`...created/found mangoAccount ${mangoAccount.publicKey}`);
console.log(mangoAccount.toString());

View File

@ -42,10 +42,7 @@ async function main() {
// create + fetch account
console.log(`Creating mangoaccount...`);
const mangoAccount = await client.getOrCreateMangoAccount(
group,
user.publicKey,
);
const mangoAccount = await client.getOrCreateMangoAccount(group);
console.log(`...created/found mangoAccount ${mangoAccount.publicKey}`);
// logging serum3 open orders for user

View File

@ -43,10 +43,7 @@ async function main() {
// create + fetch account
console.log(`Creating mangoaccount...`);
const mangoAccount = await client.getOrCreateMangoAccount(
group,
user.publicKey,
);
const mangoAccount = await client.getOrCreateMangoAccount(group);
console.log(`...created/found mangoAccount ${mangoAccount.publicKey}`);
// log users tokens

View File

@ -48,10 +48,7 @@ async function main() {
// create + fetch account
console.log(`Creating mangoaccount...`);
const mangoAccount = await client.getOrCreateMangoAccount(
group,
user.publicKey,
);
const mangoAccount = await client.getOrCreateMangoAccount(group);
console.log(`...created/found mangoAccount ${mangoAccount.publicKey}`);
console.log(mangoAccount.toString());

View File

@ -53,10 +53,7 @@ async function main() {
// create + fetch account
console.log(`Creating mangoaccount...`);
const mangoAccount = await client.getOrCreateMangoAccount(
group,
user.publicKey,
);
const mangoAccount = await client.getOrCreateMangoAccount(group);
console.log(`...created/found mangoAccount ${mangoAccount.publicKey}`);
console.log(`start balance \n${mangoAccount.toString(group)}`);

View File

@ -71,10 +71,7 @@ async function main() {
// create + fetch account
console.log(`Creating mangoaccount...`);
const mangoAccount = await client.getOrCreateMangoAccount(
group,
user.publicKey,
);
const mangoAccount = await client.getOrCreateMangoAccount(group);
console.log(`...created/found mangoAccount ${mangoAccount.publicKey}`);
console.log(mangoAccount.toString(group));

View File

@ -68,10 +68,7 @@ async function main() {
// create + fetch account
console.log(`Creating mangoaccount...`);
let mangoAccount = (await client.getOrCreateMangoAccount(
group,
user.publicKey,
))!;
let mangoAccount = (await client.getOrCreateMangoAccount(group))!;
if (!mangoAccount) {
throw new Error(`MangoAccount not found for user ${user.publicKey}`);
}

View File

@ -337,10 +337,7 @@ async function createUser(userKeypair: string) {
const user = result[2];
console.log(`Creating MangoAccount...`);
const mangoAccount = await client.getOrCreateMangoAccount(
group,
user.publicKey,
);
const mangoAccount = await client.getOrCreateMangoAccount(group);
if (!mangoAccount) {
throw new Error(`MangoAccount not found for user ${user.publicKey}`);
}

View File

@ -34,10 +34,7 @@ async function main() {
// create + fetch account
console.log(`Creating mangoaccount...`);
const mangoAccount = await client.getOrCreateMangoAccount(
group,
user.publicKey,
);
const mangoAccount = await client.getOrCreateMangoAccount(group);
console.log(`...created/found mangoAccount ${mangoAccount.publicKey}`);
console.log(mangoAccount.toString(group));