Skip to content

Commit

Permalink
Create Swap Instruction (#30)
Browse files Browse the repository at this point in the history
* Add swap instruction

* Market signer validation

* Add swap TS function

* fix imports

* remove self trade behavior for swaps

* Update swap instruction with referral fees

* Update bindings

* run `cargo autobindings` & `cargo autodoc`

Co-authored-by: DR497 <47689875+dr497@users.noreply.github.com>
  • Loading branch information
jhlx and dr497 committed Mar 22, 2022
1 parent 37be38a commit bf23fc2
Show file tree
Hide file tree
Showing 13 changed files with 1,295 additions and 584 deletions.
52 changes: 52 additions & 0 deletions js/src/bindings.ts
Expand Up @@ -8,6 +8,7 @@ import {
newOrderInstruction,
settleInstruction,
closeAccountInstruction,
swapInstruction,
} from "./raw_instructions";
import { OrderType, PrimedTransaction, Side } from "./types";
import * as aaob from "@bonfida/aaob";
Expand Down Expand Up @@ -290,3 +291,54 @@ export const closeAccount = async (market: PublicKey, owner: PublicKey) => {

return instruction;
};

export const swap = async (
market: Market,
side: Side,
minOutputQuantity: number,
inputQuantity: number,
selfTradeBehaviour: SelfTradeBehavior,
ownerBaseTokenAccount: PublicKey,
ownerQuoteTokenAccount: PublicKey,
owner: PublicKey,
discountTokenAccount?: PublicKey,
referralFeeAccount?: PublicKey,
) => {
// Market signer
const [marketSigner] = await PublicKey.findProgramAddress(
[market.address.toBuffer()],
DEX_ID
);

// Uncomment for mainnet
// if (!discountTokenAccount) {
// discountTokenAccount = await findAssociatedTokenAddress(owner, SRM_MINT);
// }

const instruction = new swapInstruction({
side: side as number,
baseQty: side === Side.Bid ? minOutputQuantity : inputQuantity,
quoteQty: side === Side.Bid ? inputQuantity : minOutputQuantity,
matchLimit: new BN(Number.MAX_SAFE_INTEGER), // TODO Change
hasDiscountTokenAccount: discountTokenAccount !== undefined,
}).getInstruction(
DEX_ID,
TOKEN_PROGRAM_ID,
SystemProgram.programId,
market.address,
market.orderbookAddress,
market.eventQueueAddress,
market.bidsAddress,
market.asksAddress,
market.baseVault,
market.quoteVault,
marketSigner,
ownerBaseTokenAccount,
ownerQuoteTokenAccount,
owner,
discountTokenAccount,
referralFeeAccount,
);

return instruction;
};

0 comments on commit bf23fc2

Please sign in to comment.