Skip to Content
DevelopersDrift TS SDKSwaps (Jupiter)

Swaps (Jupiter)

You can route spot swaps using Jupiter. In TypeScript, the SDK exposes a JupiterClient plus a convenience driftClient.swap(...) helper.

import { Connection } from "@solana/web3.js"; import { JupiterClient } from "@drift-labs/sdk"; const connection = new Connection("<RPC_URL>", "confirmed"); const jupiterClient = new JupiterClient({ connection });
Class JupiterClientReference ↗
NameTypeDefault
urlstring
connectionConnection
lookupTableCahceMap<string, AddressLookupTableAccount>
apiKeyany
getHeadersany

Get the headers for API requests, including API key if configured

getQuote({ inputMint, outputMint, amount, maxAccounts, slippageBps, swapMode, onlyDirectRoutes, excludeDexes, autoSlippage, maxAutoSlippageBps, usdEstimate, }: { inputMint: PublicKey; outputMint: PublicKey; amount: BN; maxAccounts?: number; slippageBps?: number; swapMode?: SwapMode; onlyDirectRoutes?: boolean; excludeDexes?...

Get routes for a swap

getSwap({ quote, userPublicKey, slippageBps, }: { quote: QuoteResponse; userPublicKey: PublicKey; slippageBps?: number; }) => Promise<VersionedTransaction>

Get a swap transaction for quote

getTransactionMessageAndLookupTables({ transaction, }: { transaction: VersionedTransaction; }) => Promise<{ transactionMessage: TransactionMessage; lookupTables: AddressLookupTableAccount[]; }>

Get the transaction message and lookup tables for a transaction

getLookupTable(accountKey: PublicKey) => Promise<AddressLookupTableAccount>
getJupiterInstructions({ transactionMessage, inputMint, outputMint, }: { transactionMessage: TransactionMessage; inputMint: PublicKey; outputMint: PublicKey; }) => TransactionInstruction[]

Get the jupiter instructions from transaction by filtering out instructions to compute budget and associated token programs

// Preview a quote before swapping (shape depends on Jupiter route selection). const quote = await jupiterClient.getQuote({ inputMint: "<INPUT_MINT>", outputMint: "<OUTPUT_MINT>", amount: "<AMOUNT_IN_BASE_UNITS>", }); console.log(quote);
Method JupiterClient.getQuoteReference ↗
Parameters:
NameTypeDefault
__0{ inputMint: PublicKey; outputMint: PublicKey; amount: BN; maxAccounts?: number; slippageBps?: number; swapMode?: SwapMode; onlyDirectRoutes?: boolean; excludeDexes?: string[]; autoSlippage?: boolean; maxAutoSlippageBps?: number; usdEstimate?: number; }

the mint of the input token

Returns:
Promise<QuoteResponse>
// Assumes `driftClient` is subscribed. const txSig = await driftClient.swap({ jupiterClient, inMarketIndex: 0, // e.g. USDC outMarketIndex: 1, // e.g. SOL amount: driftClient.convertToSpotPrecision(0, 10), // 10 USDC (example) slippageBps: 50, onlyDirectRoutes: false, }); console.log(txSig);
Method DriftClient.swapReference ↗
Parameters:
NameTypeDefault
__0{ swapClient?: UnifiedSwapClient | SwapClient; jupiterClient?: JupiterClient; outMarketIndex: number; inMarketIndex: number; outAssociatedTokenAccount?: PublicKey; ... 8 more ...; quote?: UnifiedQuoteResponse; }

swap client to find routes and instructions (Titan or Jupiter)

Returns:
Promise<string>
Last updated on