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 ↗
Class JupiterClientReference ↗| Property | Type | Required |
|---|---|---|
url | string | Yes |
connection | Connection | Yes |
lookupTableCahce | Map<string, AddressLookupTableAccount> | Yes |
apiKey | any | No |
getHeaders | anyGet the headers for API requests, including API key if configured | Yes |
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 | Yes |
getSwap | ({ quote, userPublicKey, slippageBps, }: { quote: QuoteResponse; userPublicKey: PublicKey; slippageBps?: number; }) => Promise<VersionedTransaction>Get a swap transaction for quote | Yes |
getTransactionMessageAndLookupTables | ({ transaction, }: { transaction: VersionedTransaction; }) => Promise<{ transactionMessage: TransactionMessage; lookupTables: AddressLookupTableAccount[]; }>Get the transaction message and lookup tables for a transaction | Yes |
getLookupTable | (accountKey: PublicKey) => Promise<AddressLookupTableAccount> | Yes |
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 | Yes |
// 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 ↗
Method JupiterClient.getQuoteReference ↗| Parameter | Type | Required |
|---|---|---|
__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 | Yes |
| 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 ↗
Method DriftClient.swapReference ↗| Parameter | Type | Required |
|---|---|---|
__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) | Yes |
| Returns |
|---|
Promise<string> |
Last updated on