- java.net.http
- software.sava.json.iterator
- software.sava.core
- software.sava.rpc
Helius
Implements the priority fee API.
Create Client
try (var httpClient = HttpClient.newHttpClient()) {
var heliusClient = HeliusClient.createHttpClient(URI.create("https://mainnet.helius-rpc.com/?api-key="), httpClient);
}
Recommended Transaction Priority Fee
Transaction transaction = ...
var base64EncodedTx = transaction.base64EncodeToString();
var feeEstimate = heliusClient.getRecommendedTransactionPriorityFeeEstimate(base64EncodedTx).join();
System.out.format(
"Mert recommends a %s micro lamport compute unit price.",
feeEstimate.toPlainString()
);
Jupiter
Implements the Swap and Token API.
Create Client
try (var httpClient = HttpClient.newHttpClient()) {
var jupiterClient = JupiterClient.createClient(httpClient);
}
Quote & Swap
Fetches verified tokens, gets a quote for buying 1 USDC worth of SOL, requests a swap transaction and signs the transaction.
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