software.sava.core.accounts.Signer signer = ...
var tokens = jupiterClient.verifiedTokenMap().join();
var outputTokenContext = tokens.get(SolanaAccounts.MAIN_NET.wrappedSolTokenMint());
var inputTokenContext = tokens.values().stream()
.filter(tokenContext -> tokenContext.symbol().equals("USDC"))
.findFirst().orElseThrow();
var quoteRequest = JupiterQuoteRequest.buildRequest()
.swapMode(SwapMode.ExactIn)
.amount(inputTokenContext.fromDecimal(BigDecimal.ONE).toBigInteger())
.inputTokenMint(inputTokenContext.address())
.outputTokenMint(outputTokenContext.address())
.slippageBps(2)
.dexes(Set.of(
"Meteora",
"Meteora DLMM",
"Orca V2",
"OpenBook V2",
"Phoenix",
"Raydium",
"Raydium CLMM",
"Raydium CP",
"Whirlpool"
))
.restrictIntermediateTokens(true)
.onlyDirectRoutes(false)
.create();
var quote = jupiterClient.getQuote(quoteRequest).join();
System.out.println(quote);
var swapRequest = JupiterSwapRequest
.buildRequest()
.userPublicKey(signer.publicKey())
.skipUserAccountsRpcCalls(true)
.useSharedAccounts(true)
.createRequest();
var swapTransaction = jupiterClient.swap(
swapRequest.preSerialize(),
quote.quoteResponseJson()
).join();
var txBytes = swapTransaction.swapTransaction();
Transaction.sign(signer, txBytes);
// send transaction