Merge branch 'main' into dev

This commit is contained in:
tjs 2022-12-15 15:30:18 -05:00
commit 95e8bf2d2c
2 changed files with 163 additions and 7 deletions

View File

@ -928,6 +928,7 @@ export class MangoAccount {
perpMarket.loadBids(client),
perpMarket.loadAsks(client),
]);
return [...Array.from(bids.items()), ...Array.from(asks.items())].filter(
(order) => order.owner.equals(this.publicKey),
);

View File

@ -1133,7 +1133,7 @@ export class MangoClient {
.rpc();
}
public async serum3PlaceOrder(
public async serum3PlaceOrderIx(
group: Group,
mangoAccount: MangoAccount,
externalMarketPk: PublicKey,
@ -1144,7 +1144,7 @@ export class MangoClient {
orderType: Serum3OrderType,
clientOrderId: number,
limit: number,
): Promise<TransactionSignature> {
): Promise<TransactionInstruction> {
const serum3Market = group.serum3MarketsMapByExternal.get(
externalMarketPk.toBase58(),
)!;
@ -1237,6 +1237,34 @@ export class MangoClient {
)
.instruction();
return ix;
}
public async serum3PlaceOrder(
group: Group,
mangoAccount: MangoAccount,
externalMarketPk: PublicKey,
side: Serum3Side,
price: number,
size: number,
selfTradeBehavior: Serum3SelfTradeBehavior,
orderType: Serum3OrderType,
clientOrderId: number,
limit: number,
): Promise<TransactionSignature> {
const ix = await this.serum3PlaceOrderIx(
group,
mangoAccount,
externalMarketPk,
side,
price,
size,
selfTradeBehavior,
orderType,
clientOrderId,
limit,
);
return await sendTransaction(
this.program.provider as AnchorProvider,
[ix],
@ -1288,11 +1316,11 @@ export class MangoClient {
);
}
public async serum3SettleFunds(
public async serum3SettleFundsIx(
group: Group,
mangoAccount: MangoAccount,
externalMarketPk: PublicKey,
): Promise<TransactionSignature> {
): Promise<TransactionInstruction> {
const serum3Market = group.serum3MarketsMapByExternal.get(
externalMarketPk.toBase58(),
)!;
@ -1331,6 +1359,20 @@ export class MangoClient {
})
.instruction();
return ix;
}
public async serum3SettleFunds(
group: Group,
mangoAccount: MangoAccount,
externalMarketPk: PublicKey,
): Promise<TransactionSignature> {
const ix = await this.serum3SettleFundsIx(
group,
mangoAccount,
externalMarketPk,
);
return await sendTransaction(
this.program.provider as AnchorProvider,
[ix],
@ -1341,13 +1383,13 @@ export class MangoClient {
);
}
public async serum3CancelOrder(
public async serum3CancelOrderIx(
group: Group,
mangoAccount: MangoAccount,
externalMarketPk: PublicKey,
side: Serum3Side,
orderId: BN,
): Promise<TransactionSignature> {
): Promise<TransactionInstruction> {
const serum3Market = group.serum3MarketsMapByExternal.get(
externalMarketPk.toBase58(),
)!;
@ -1372,9 +1414,30 @@ export class MangoClient {
})
.instruction();
return ix;
}
public async serum3CancelOrder(
group: Group,
mangoAccount: MangoAccount,
externalMarketPk: PublicKey,
side: Serum3Side,
orderId: BN,
): Promise<TransactionSignature> {
const ixes = await Promise.all([
this.serum3CancelOrderIx(
group,
mangoAccount,
externalMarketPk,
side,
orderId,
),
this.serum3SettleFundsIx(group, mangoAccount, externalMarketPk),
]);
return await sendTransaction(
this.program.provider as AnchorProvider,
[ix],
ixes,
group.addressLookupTablesList,
{
postSendTxCallback: this.postSendTxCallback,
@ -2628,4 +2691,96 @@ export class MangoClient {
return healthRemainingAccounts;
}
public async modifyPerpOrder(
group: Group,
mangoAccount: MangoAccount,
perpMarketIndex: PerpMarketIndex,
orderId: BN,
side: PerpOrderSide,
price: number,
quantity: number,
maxQuoteQuantity?: number,
clientOrderId?: number,
orderType?: PerpOrderType,
reduceOnly?: boolean,
expiryTimestamp?: number,
limit?: number,
): Promise<TransactionSignature> {
const transactionInstructions: TransactionInstruction[] = [];
const [cancelOrderIx, placeOrderIx] = await Promise.all([
this.perpCancelOrderIx(group, mangoAccount, perpMarketIndex, orderId),
this.perpPlaceOrderIx(
group,
mangoAccount,
perpMarketIndex,
side,
price,
quantity,
maxQuoteQuantity,
clientOrderId,
orderType,
reduceOnly,
expiryTimestamp,
limit,
),
]);
transactionInstructions.push(cancelOrderIx, placeOrderIx);
return await sendTransaction(
this.program.provider as AnchorProvider,
transactionInstructions,
group.addressLookupTablesList,
{
postSendTxCallback: this.postSendTxCallback,
},
);
}
public async modifySerum3Order(
group: Group,
orderId: BN,
mangoAccount: MangoAccount,
externalMarketPk: PublicKey,
side: Serum3Side,
price: number,
size: number,
selfTradeBehavior: Serum3SelfTradeBehavior,
orderType: Serum3OrderType,
clientOrderId: number,
limit: number,
): Promise<TransactionSignature> {
const transactionInstructions: TransactionInstruction[] = [];
const [cancelOrderIx, settleIx, placeOrderIx] = await Promise.all([
this.serum3CancelOrderIx(
group,
mangoAccount,
externalMarketPk,
side,
orderId,
),
this.serum3SettleFundsIx(group, mangoAccount, externalMarketPk),
this.serum3PlaceOrderIx(
group,
mangoAccount,
externalMarketPk,
side,
price,
size,
selfTradeBehavior,
orderType,
clientOrderId,
limit,
),
]);
transactionInstructions.push(cancelOrderIx, settleIx, placeOrderIx);
return await sendTransaction(
this.program.provider as AnchorProvider,
transactionInstructions,
group.addressLookupTablesList,
{
postSendTxCallback: this.postSendTxCallback,
},
);
}
}