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 // MangoAccount
public async getOrCreateMangoAccount( public async getOrCreateMangoAccount(group: Group): Promise<MangoAccount> {
group: Group, const clientOwner = (this.program.provider as AnchorProvider).wallet
ownerPk: PublicKey, .publicKey;
accountNumber?: number, let mangoAccounts = await this.getMangoAccountsForOwner(
name?: string, group,
): Promise<MangoAccount | undefined> { (this.program.provider as AnchorProvider).wallet.publicKey,
// TODO: this function discards accountSize and name when the account exists already! );
// TODO: this function always creates accounts for this.program.owner, and not if (mangoAccounts.length === 0) {
// ownerPk! It needs to get passed a keypair, and we need to add await this.createMangoAccount(group);
// createMangoAccountForOwner mangoAccounts = await this.getMangoAccountsForOwner(group, clientOwner);
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;
} }
return mangoAccounts.sort((a, b) => a.accountNum - b.accountNum)[0];
} }
public async createMangoAccount( public async createMangoAccount(

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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