2022-04-08 08:17:26 -07:00
|
|
|
import { AccountMeta, PublicKey } from '@solana/web3.js';
|
2022-04-03 04:50:46 -07:00
|
|
|
import BN from 'bn.js';
|
2022-04-03 11:29:22 -07:00
|
|
|
import { MangoClient } from '../../client';
|
2022-04-02 23:57:45 -07:00
|
|
|
|
|
|
|
export class Serum3Market {
|
|
|
|
static from(
|
|
|
|
publicKey: PublicKey,
|
|
|
|
obj: {
|
|
|
|
group: PublicKey;
|
|
|
|
serumProgram: PublicKey;
|
|
|
|
serumMarketExternal: PublicKey;
|
|
|
|
marketIndex: number;
|
|
|
|
baseTokenIndex: number;
|
|
|
|
quoteTokenIndex: number;
|
|
|
|
bump: number;
|
|
|
|
reserved: unknown;
|
|
|
|
},
|
|
|
|
): Serum3Market {
|
|
|
|
return new Serum3Market(
|
|
|
|
publicKey,
|
|
|
|
obj.group,
|
|
|
|
obj.serumProgram,
|
|
|
|
obj.serumMarketExternal,
|
|
|
|
obj.marketIndex,
|
|
|
|
obj.baseTokenIndex,
|
|
|
|
obj.quoteTokenIndex,
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
constructor(
|
|
|
|
public publicKey: PublicKey,
|
|
|
|
public group: PublicKey,
|
|
|
|
public serumProgram: PublicKey,
|
|
|
|
public serumMarketExternal: PublicKey,
|
|
|
|
public marketIndex: number,
|
|
|
|
public baseTokenIndex: number,
|
|
|
|
public quoteTokenIndex: number,
|
|
|
|
) {}
|
|
|
|
}
|
|
|
|
|
2022-04-03 04:50:46 -07:00
|
|
|
export async function serum3CreateOpenOrders(
|
|
|
|
client: MangoClient,
|
|
|
|
groupPk: PublicKey,
|
|
|
|
accountPk: PublicKey,
|
|
|
|
serumMarketPk: PublicKey,
|
|
|
|
serumProgramPk: PublicKey,
|
|
|
|
serumMarketExternalPk: PublicKey,
|
|
|
|
ownerPk: PublicKey,
|
|
|
|
): Promise<void> {
|
|
|
|
return await client.program.methods
|
|
|
|
.serum3CreateOpenOrders()
|
|
|
|
.accounts({
|
|
|
|
group: groupPk,
|
|
|
|
account: accountPk,
|
|
|
|
serumMarket: serumMarketPk,
|
|
|
|
serumProgram: serumProgramPk,
|
|
|
|
serumMarketExternal: serumMarketExternalPk,
|
|
|
|
owner: ownerPk,
|
2022-04-07 08:03:44 -07:00
|
|
|
payer: ownerPk,
|
2022-04-03 04:50:46 -07:00
|
|
|
})
|
|
|
|
.rpc();
|
|
|
|
}
|
2022-04-03 22:29:22 -07:00
|
|
|
export class Serum3SelfTradeBehavior {
|
|
|
|
static decrementTake = { decrementTake: {} };
|
|
|
|
static cancelProvide = { cancelProvide: {} };
|
|
|
|
static abortTransaction = { abortTransaction: {} };
|
|
|
|
}
|
|
|
|
|
|
|
|
export class Serum3OrderType {
|
|
|
|
static limit = { limit: {} };
|
|
|
|
static immediateOrCancel = { immediateOrCancel: {} };
|
|
|
|
static postOnly = { postOnly: {} };
|
|
|
|
}
|
|
|
|
|
|
|
|
export class Serum3Side {
|
|
|
|
static bid = { bid: {} };
|
|
|
|
static ask = { ask: {} };
|
|
|
|
}
|
2022-04-03 04:50:46 -07:00
|
|
|
|
|
|
|
export async function serum3PlaceOrder(
|
|
|
|
client: MangoClient,
|
|
|
|
groupPk: PublicKey,
|
|
|
|
accountPk: PublicKey,
|
|
|
|
ownerPk: PublicKey,
|
|
|
|
openOrdersPk: PublicKey,
|
|
|
|
serumMarketPk: PublicKey,
|
|
|
|
serumProgramPk: PublicKey,
|
|
|
|
serumMarketExternalPk: PublicKey,
|
|
|
|
marketBidsPk: PublicKey,
|
|
|
|
marketAsksPk: PublicKey,
|
|
|
|
marketEventQueuePk: PublicKey,
|
|
|
|
marketRequestQueuePk: PublicKey,
|
|
|
|
marketBaseVaultPk: PublicKey,
|
|
|
|
marketQuoteVaultPk: PublicKey,
|
|
|
|
marketVaultSignerPk: PublicKey,
|
|
|
|
quoteBankPk: PublicKey,
|
|
|
|
quoteVaultPk: PublicKey,
|
|
|
|
baseBankPk: PublicKey,
|
|
|
|
baseVaultPk: PublicKey,
|
2022-04-03 22:20:46 -07:00
|
|
|
healthRemainingAccounts: PublicKey[],
|
2022-04-03 04:50:46 -07:00
|
|
|
side: Serum3Side,
|
|
|
|
limitPrice: number,
|
|
|
|
maxBaseQty: number,
|
|
|
|
maxNativeQuoteQtyIncludingFees: number,
|
|
|
|
selfTradeBehavior: Serum3SelfTradeBehavior,
|
|
|
|
orderType: Serum3OrderType,
|
|
|
|
clientOrderId: number,
|
|
|
|
limit: number,
|
|
|
|
): Promise<void> {
|
|
|
|
return await client.program.methods
|
|
|
|
.serum3PlaceOrder(
|
2022-04-03 22:29:22 -07:00
|
|
|
side,
|
2022-04-03 04:50:46 -07:00
|
|
|
new BN(limitPrice),
|
|
|
|
new BN(maxBaseQty),
|
|
|
|
new BN(maxNativeQuoteQtyIncludingFees),
|
2022-04-03 22:29:22 -07:00
|
|
|
selfTradeBehavior,
|
|
|
|
orderType,
|
2022-04-03 04:50:46 -07:00
|
|
|
new BN(clientOrderId),
|
|
|
|
limit,
|
|
|
|
)
|
|
|
|
.accounts({
|
|
|
|
group: groupPk,
|
|
|
|
account: accountPk,
|
|
|
|
owner: ownerPk,
|
|
|
|
openOrders: openOrdersPk,
|
|
|
|
serumMarket: serumMarketPk,
|
|
|
|
serumProgram: serumProgramPk,
|
|
|
|
serumMarketExternal: serumMarketExternalPk,
|
|
|
|
marketBids: marketBidsPk,
|
|
|
|
marketAsks: marketAsksPk,
|
|
|
|
marketEventQueue: marketEventQueuePk,
|
|
|
|
marketRequestQueue: marketRequestQueuePk,
|
|
|
|
marketBaseVault: marketBaseVaultPk,
|
|
|
|
marketQuoteVault: marketQuoteVaultPk,
|
|
|
|
marketVaultSigner: marketVaultSignerPk,
|
|
|
|
quoteBank: quoteBankPk,
|
|
|
|
quoteVault: quoteVaultPk,
|
|
|
|
baseBank: baseBankPk,
|
|
|
|
baseVault: baseVaultPk,
|
|
|
|
})
|
2022-04-03 22:20:46 -07:00
|
|
|
.remainingAccounts(
|
|
|
|
healthRemainingAccounts.map(
|
|
|
|
(pk) =>
|
|
|
|
({ pubkey: pk, isWritable: false, isSigner: false } as AccountMeta),
|
|
|
|
),
|
|
|
|
)
|
|
|
|
|
2022-04-03 04:50:46 -07:00
|
|
|
.rpc();
|
|
|
|
}
|