fix serum3PlaceOrder logic so health remaining accounts are in order

This commit is contained in:
tjs 2023-01-07 00:10:50 -05:00
parent c28f3cd07a
commit 9efe95cc75
2 changed files with 6 additions and 16 deletions

View File

@ -1200,6 +1200,8 @@ export class MangoClient {
let ooPk;
let additionalAccounts: AdditionalHealthAccounts | undefined = undefined;
let tokenIsInactive;
let baseBank;
if (!mangoAccount.getSerum3Account(serum3Market.marketIndex)) {
const ix = await this.serum3CreateOpenOrdersIx(
group,
@ -1211,17 +1213,14 @@ export class MangoClient {
this.program.programId,
mangoAccount.publicKey,
);
const tokenIndex = serum3Market['baseTokenIndex'];
const baseBank = group.getFirstBankByTokenIndex(tokenIndex);
const tokenIndex = serum3Market.baseTokenIndex;
baseBank = group.getFirstBankByTokenIndex(tokenIndex);
// only push bank/oracle if no deposit has been previously made for same token
const wasTokenInUseBefore = mangoAccount.getToken(tokenIndex);
tokenIsInactive = !mangoAccount.getToken(tokenIndex)?.isActive();
additionalAccounts = {
banks: !wasTokenInUseBefore ? [baseBank.publicKey] : [],
oracles: !wasTokenInUseBefore ? [baseBank.oracle] : [],
openOrders: [ooPk],
perps: [],
};
ixs.push(ix);
}
@ -1231,7 +1230,7 @@ export class MangoClient {
AccountRetriever.Fixed,
group,
[mangoAccount],
[],
tokenIsInactive ? [baseBank] : [],
[],
additionalAccounts,
);
@ -2596,9 +2595,6 @@ export class MangoClient {
banks: Bank[],
perpMarkets: PerpMarket[],
additionalAccounts: AdditionalHealthAccounts = {
oracles: [],
banks: [],
perps: [],
openOrders: [],
},
): PublicKey[] {
@ -2627,11 +2623,9 @@ export class MangoClient {
healthRemainingAccounts.push(
...mintInfos.map((mintInfo) => mintInfo.firstBank()),
...additionalAccounts.banks,
);
healthRemainingAccounts.push(
...mintInfos.map((mintInfo) => mintInfo.oracle),
...additionalAccounts.oracles,
);
const allPerpIndices = mangoAccount.perps.map((perp) => perp.marketIndex);
@ -2655,7 +2649,6 @@ export class MangoClient {
.map((index) => group.findPerpMarket(index)!);
healthRemainingAccounts.push(
...allPerpMarkets.map((perp) => perp.publicKey),
...additionalAccounts.perps,
);
healthRemainingAccounts.push(...allPerpMarkets.map((perp) => perp.oracle));

View File

@ -28,8 +28,5 @@ export class OracleConfigParams {
}
export type AdditionalHealthAccounts = {
banks: PublicKey[];
oracles: PublicKey[];
perps: PublicKey[];
openOrders: PublicKey[];
};