fix bug where serum oo where not loaded (#403)
* fix bug where serum oo where not loaded Signed-off-by: microwavedcola1 <microwavedcola@gmail.com> * fixes from review Signed-off-by: microwavedcola1 <microwavedcola@gmail.com> * fixes from review Signed-off-by: microwavedcola1 <microwavedcola@gmail.com> Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
This commit is contained in:
parent
44f599ca62
commit
919f09bb8c
|
@ -90,7 +90,7 @@ export class MangoAccount {
|
|||
|
||||
public async reload(client: MangoClient): Promise<MangoAccount> {
|
||||
const mangoAccount = await client.getMangoAccount(this);
|
||||
await mangoAccount.reloadAccountData(client);
|
||||
await mangoAccount.reloadSerum3OpenOrders(client);
|
||||
Object.assign(this, mangoAccount);
|
||||
return mangoAccount;
|
||||
}
|
||||
|
@ -99,12 +99,12 @@ export class MangoAccount {
|
|||
client: MangoClient,
|
||||
): Promise<{ value: MangoAccount; slot: number }> {
|
||||
const resp = await client.getMangoAccountWithSlot(this.publicKey);
|
||||
await resp?.value.reloadAccountData(client);
|
||||
await resp?.value.reloadSerum3OpenOrders(client);
|
||||
Object.assign(this, resp?.value);
|
||||
return { value: resp!.value, slot: resp!.slot };
|
||||
}
|
||||
|
||||
async reloadAccountData(client: MangoClient): Promise<MangoAccount> {
|
||||
async reloadSerum3OpenOrders(client: MangoClient): Promise<MangoAccount> {
|
||||
const serum3Active = this.serum3Active();
|
||||
const ais =
|
||||
await client.program.provider.connection.getMultipleAccountsInfo(
|
||||
|
|
|
@ -431,7 +431,9 @@ export class PerpMarket {
|
|||
direction: 'negative' | 'positive',
|
||||
count = 2,
|
||||
): Promise<{ account: MangoAccount; settleablePnl: I80F48 }[]> {
|
||||
let accountsWithSettleablePnl = (await client.getAllMangoAccounts(group))
|
||||
let accountsWithSettleablePnl = (
|
||||
await client.getAllMangoAccounts(group, true)
|
||||
)
|
||||
.filter((acc) => acc.perpPositionExistsForMarket(this))
|
||||
.map((acc) => {
|
||||
const pp = acc
|
||||
|
|
|
@ -53,10 +53,10 @@ import { I80F48 } from './numbers/I80F48';
|
|||
import { FlashLoanType, InterestRateParams, OracleConfigParams } from './types';
|
||||
import {
|
||||
I64_MAX_BN,
|
||||
U64_MAX_BN,
|
||||
createAssociatedTokenAccountIdempotentInstruction,
|
||||
getAssociatedTokenAddress,
|
||||
toNative,
|
||||
U64_MAX_BN,
|
||||
} from './utils';
|
||||
import { sendTransaction } from './utils/rpc';
|
||||
|
||||
|
@ -540,16 +540,24 @@ export class MangoClient {
|
|||
|
||||
// MangoAccount
|
||||
|
||||
public async getOrCreateMangoAccount(group: Group): Promise<MangoAccount> {
|
||||
public async getOrCreateMangoAccount(
|
||||
group: Group,
|
||||
loadSerum3Oo = false,
|
||||
): Promise<MangoAccount> {
|
||||
const clientOwner = (this.program.provider as AnchorProvider).wallet
|
||||
.publicKey;
|
||||
let mangoAccounts = await this.getMangoAccountsForOwner(
|
||||
group,
|
||||
(this.program.provider as AnchorProvider).wallet.publicKey,
|
||||
loadSerum3Oo,
|
||||
);
|
||||
if (mangoAccounts.length === 0) {
|
||||
await this.createMangoAccount(group);
|
||||
mangoAccounts = await this.getMangoAccountsForOwner(group, clientOwner);
|
||||
mangoAccounts = await this.getMangoAccountsForOwner(
|
||||
group,
|
||||
clientOwner,
|
||||
loadSerum3Oo,
|
||||
);
|
||||
}
|
||||
return mangoAccounts.sort((a, b) => a.accountNum - b.accountNum)[0];
|
||||
}
|
||||
|
@ -593,6 +601,7 @@ export class MangoClient {
|
|||
serum3Count?: number,
|
||||
perpCount?: number,
|
||||
perpOoCount?: number,
|
||||
loadSerum3Oo = false,
|
||||
): Promise<MangoAccount | undefined> {
|
||||
const accNum = accountNumber ?? 0;
|
||||
await this.createMangoAccount(
|
||||
|
@ -608,6 +617,7 @@ export class MangoClient {
|
|||
group,
|
||||
(this.program.provider as AnchorProvider).wallet.publicKey,
|
||||
accNum,
|
||||
loadSerum3Oo,
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -668,28 +678,25 @@ export class MangoClient {
|
|||
|
||||
public async getMangoAccount(
|
||||
mangoAccount: MangoAccount | PublicKey,
|
||||
loadSerum3Oo = false,
|
||||
): Promise<MangoAccount> {
|
||||
const mangoAccountPk =
|
||||
mangoAccount instanceof MangoAccount
|
||||
? mangoAccount.publicKey
|
||||
: mangoAccount;
|
||||
return MangoAccount.from(
|
||||
mangoAccountPk,
|
||||
await this.program.account.mangoAccount.fetch(mangoAccountPk),
|
||||
);
|
||||
}
|
||||
|
||||
public async getMangoAccountForPublicKey(
|
||||
mangoAccountPk: PublicKey,
|
||||
): Promise<MangoAccount> {
|
||||
return MangoAccount.from(
|
||||
const mangoAccount_ = MangoAccount.from(
|
||||
mangoAccountPk,
|
||||
await this.program.account.mangoAccount.fetch(mangoAccountPk),
|
||||
);
|
||||
if (loadSerum3Oo) {
|
||||
await mangoAccount_?.reloadSerum3OpenOrders(this);
|
||||
}
|
||||
return mangoAccount_;
|
||||
}
|
||||
|
||||
public async getMangoAccountWithSlot(
|
||||
mangoAccountPk: PublicKey,
|
||||
loadSerum3Oo = false,
|
||||
): Promise<{ slot: number; value: MangoAccount } | undefined> {
|
||||
const resp =
|
||||
await this.program.provider.connection.getAccountInfoAndContext(
|
||||
|
@ -701,6 +708,9 @@ export class MangoClient {
|
|||
resp.value.data,
|
||||
);
|
||||
const mangoAccount = MangoAccount.from(mangoAccountPk, decodedMangoAccount);
|
||||
if (loadSerum3Oo) {
|
||||
await mangoAccount?.reloadSerum3OpenOrders(this);
|
||||
}
|
||||
return { slot: resp.context.slot, value: mangoAccount };
|
||||
}
|
||||
|
||||
|
@ -708,8 +718,13 @@ export class MangoClient {
|
|||
group: Group,
|
||||
ownerPk: PublicKey,
|
||||
accountNumber: number,
|
||||
loadSerum3Oo = false,
|
||||
): Promise<MangoAccount | undefined> {
|
||||
const mangoAccounts = await this.getMangoAccountsForOwner(group, ownerPk);
|
||||
const mangoAccounts = await this.getMangoAccountsForOwner(
|
||||
group,
|
||||
ownerPk,
|
||||
loadSerum3Oo,
|
||||
);
|
||||
const foundMangoAccount = mangoAccounts.find(
|
||||
(a) => a.accountNum == accountNumber,
|
||||
);
|
||||
|
@ -720,8 +735,9 @@ export class MangoClient {
|
|||
public async getMangoAccountsForOwner(
|
||||
group: Group,
|
||||
ownerPk: PublicKey,
|
||||
loadSerum3Oo = false,
|
||||
): Promise<MangoAccount[]> {
|
||||
return (
|
||||
const accounts = (
|
||||
await this.program.account.mangoAccount.all([
|
||||
{
|
||||
memcmp: {
|
||||
|
@ -739,13 +755,22 @@ export class MangoClient {
|
|||
).map((pa) => {
|
||||
return MangoAccount.from(pa.publicKey, pa.account);
|
||||
});
|
||||
|
||||
if (loadSerum3Oo) {
|
||||
await Promise.all(
|
||||
accounts.map(async (a) => await a.reloadSerum3OpenOrders(this)),
|
||||
);
|
||||
}
|
||||
|
||||
return accounts;
|
||||
}
|
||||
|
||||
public async getMangoAccountsForDelegate(
|
||||
group: Group,
|
||||
delegate: PublicKey,
|
||||
loadSerum3Oo = false,
|
||||
): Promise<MangoAccount[]> {
|
||||
return (
|
||||
const accounts = (
|
||||
await this.program.account.mangoAccount.all([
|
||||
{
|
||||
memcmp: {
|
||||
|
@ -763,10 +788,21 @@ export class MangoClient {
|
|||
).map((pa) => {
|
||||
return MangoAccount.from(pa.publicKey, pa.account);
|
||||
});
|
||||
|
||||
if (loadSerum3Oo) {
|
||||
await Promise.all(
|
||||
accounts.map(async (a) => await a.reloadSerum3OpenOrders(this)),
|
||||
);
|
||||
}
|
||||
|
||||
return accounts;
|
||||
}
|
||||
|
||||
public async getAllMangoAccounts(group: Group): Promise<MangoAccount[]> {
|
||||
return (
|
||||
public async getAllMangoAccounts(
|
||||
group: Group,
|
||||
loadSerum3Oo = false,
|
||||
): Promise<MangoAccount[]> {
|
||||
const accounts = (
|
||||
await this.program.account.mangoAccount.all([
|
||||
{
|
||||
memcmp: {
|
||||
|
@ -778,6 +814,14 @@ export class MangoClient {
|
|||
).map((pa) => {
|
||||
return MangoAccount.from(pa.publicKey, pa.account);
|
||||
});
|
||||
|
||||
if (loadSerum3Oo) {
|
||||
await Promise.all(
|
||||
accounts.map(async (a) => await a.reloadSerum3OpenOrders(this)),
|
||||
);
|
||||
}
|
||||
|
||||
return accounts;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -28,7 +28,7 @@ async function main() {
|
|||
);
|
||||
|
||||
// Load mango account
|
||||
let mangoAccount = await client.getMangoAccountForPublicKey(
|
||||
let mangoAccount = await client.getMangoAccount(
|
||||
new PublicKey(MANGO_ACCOUNT_PK),
|
||||
);
|
||||
await mangoAccount.reload(client);
|
||||
|
|
|
@ -28,7 +28,6 @@ import {
|
|||
makeInitSequenceEnforcerAccountIx,
|
||||
seqEnforcerProgramIds,
|
||||
} from './sequence-enforcer-util';
|
||||
import * as defaultParams from './params/default.json';
|
||||
|
||||
// Future
|
||||
// * use async nodejs logging
|
||||
|
@ -248,7 +247,7 @@ async function fullMarketMaker() {
|
|||
);
|
||||
|
||||
// Load mango account
|
||||
let mangoAccount = await client.getMangoAccountForPublicKey(
|
||||
let mangoAccount = await client.getMangoAccount(
|
||||
new PublicKey(MANGO_ACCOUNT_PK),
|
||||
);
|
||||
console.log(
|
||||
|
|
|
@ -177,7 +177,7 @@ async function main() {
|
|||
);
|
||||
|
||||
// Load mango account
|
||||
let mangoAccount = await client.getMangoAccountForPublicKey(
|
||||
let mangoAccount = await client.getMangoAccount(
|
||||
new PublicKey(MANGO_ACCOUNT_PK),
|
||||
);
|
||||
await mangoAccount.reload(client);
|
||||
|
|
Loading…
Reference in New Issue