Skip to content
This repository was archived by the owner on Jun 1, 2026. It is now read-only.

Commit 70228f9

Browse files
authored
Update Jupiter v6 and remove auto-slippage (#950)
1 parent 936a0b1 commit 70228f9

3 files changed

Lines changed: 9 additions & 31 deletions

File tree

‎crates/swapper/src/config.rs‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,7 @@ pub fn get_default_slippage(chain: &Chain) -> SwapperSlippage {
138138
match chain {
139139
Chain::Solana => SwapperSlippage {
140140
bps: DEFAULT_SLIPPAGE_BPS * 3,
141-
mode: SwapperSlippageMode::Auto,
141+
mode: SwapperSlippageMode::Exact,
142142
},
143143
_ => SwapperSlippage {
144144
bps: DEFAULT_SLIPPAGE_BPS,

‎crates/swapper/src/jupiter/model.rs‎

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,7 @@ pub struct QuoteRequest {
88
pub amount: String,
99
pub slippage_bps: u32,
1010
pub platform_fee_bps: u32,
11-
pub auto_slippage: bool,
12-
pub max_auto_slippage_bps: u32,
11+
pub instruction_version: String,
1312
}
1413

1514
#[derive(Debug, Clone, Serialize, Deserialize)]
@@ -22,12 +21,12 @@ pub struct QuoteResponse {
2221
pub other_amount_threshold: String,
2322
pub swap_mode: String,
2423
pub slippage_bps: u32,
25-
pub computed_auto_slippage: Option<u32>,
2624
pub platform_fee: Value,
2725
pub price_impact_pct: String,
2826
pub route_plan: Value,
2927
pub context_slot: i64,
3028
pub time_taken: f64,
29+
pub instruction_version: String,
3130
}
3231

3332
#[derive(Debug, Clone, Serialize, Deserialize)]
@@ -43,12 +42,6 @@ pub struct SimulationError {
4342
pub error: String,
4443
}
4544

46-
#[derive(Debug, Clone, Serialize, Deserialize)]
47-
#[serde(rename_all = "camelCase")]
48-
pub struct DynamicSlippage {
49-
pub max_bps: u32,
50-
}
51-
5245
#[derive(Debug, Clone, Serialize, Deserialize)]
5346
#[serde(rename_all = "camelCase")]
5447
pub struct QuoteDataRequest {
@@ -57,6 +50,4 @@ pub struct QuoteDataRequest {
5750
pub fee_account: String,
5851
pub quote_response: QuoteResponse,
5952
pub prioritization_fee_lamports: i64,
60-
#[serde(skip_serializing_if = "Option::is_none")]
61-
pub dynamic_slippage: Option<DynamicSlippage>,
6253
}

‎crates/swapper/src/jupiter/provider.rs‎

Lines changed: 6 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
use super::{
22
PROGRAM_ADDRESS,
33
client::JupiterClient,
4-
model::{DynamicSlippage, QuoteDataRequest, QuoteRequest as JupiterRequest, QuoteResponse},
4+
model::{QuoteDataRequest, QuoteRequest as JupiterRequest, QuoteResponse},
55
};
66
use crate::{
77
FetchQuoteData, Options, ProviderData, ProviderType, Quote, QuoteRequest, Route, Swapper, SwapperChainAsset, SwapperError, SwapperMode, SwapperProvider, SwapperQuoteData,
8-
SwapperSlippageMode, error::INVALID_ADDRESS,
8+
error::INVALID_ADDRESS,
99
};
1010
use alloy_primitives::U256;
1111
use async_trait::async_trait;
@@ -19,6 +19,8 @@ use gem_solana::{
1919
use primitives::{AssetId, Chain};
2020
use std::collections::HashSet;
2121

22+
const INSTRUCTION_VERSION: &str = "V2";
23+
2224
#[derive(Debug)]
2325
pub struct Jupiter<C, R>
2426
where
@@ -127,22 +129,15 @@ where
127129
let slippage_bps = swap_options.slippage.bps;
128130
let platform_fee_bps = swap_options.fee.unwrap_or_default().solana.bps;
129131

130-
let auto_slippage = match swap_options.slippage.mode {
131-
SwapperSlippageMode::Auto => true,
132-
SwapperSlippageMode::Exact => false,
133-
};
134-
135132
let quote_request = JupiterRequest {
136133
input_mint: input_mint.clone(),
137134
output_mint: output_mint.clone(),
138135
amount: request.value.clone(),
139136
platform_fee_bps,
140137
slippage_bps,
141-
auto_slippage,
142-
max_auto_slippage_bps: slippage_bps,
138+
instruction_version: INSTRUCTION_VERSION.to_string(),
143139
};
144140
let swap_quote = self.http_client.get_swap_quote(quote_request).await?;
145-
let computed_auto_slippage = swap_quote.computed_auto_slippage.unwrap_or(swap_quote.slippage_bps);
146141

147142
// Updated docs: https://dev.jup.ag/docs/api/swap-api/quote
148143
// The value includes platform fees and DEX fees, excluding slippage.
@@ -159,7 +154,7 @@ where
159154
route_data: serde_json::to_string(&swap_quote).unwrap_or_default(),
160155
gas_limit: None,
161156
}],
162-
slippage_bps: computed_auto_slippage,
157+
slippage_bps: swap_quote.slippage_bps,
163158
},
164159
request: request.clone(),
165160
eta_in_seconds: None,
@@ -178,19 +173,11 @@ where
178173
let quote_response: QuoteResponse = serde_json::from_str(&route.route_data).map_err(|_| SwapperError::InvalidRoute)?;
179174
let fee_account = self.fetch_fee_account(&quote.request.mode, &quote.request.options, &input_mint, &output_mint).await?;
180175

181-
let dynamic_slippage = match quote.request.options.slippage.mode {
182-
SwapperSlippageMode::Auto => Some(DynamicSlippage {
183-
max_bps: quote.request.options.slippage.bps,
184-
}),
185-
SwapperSlippageMode::Exact => None,
186-
};
187-
188176
let request = QuoteDataRequest {
189177
user_public_key: quote.request.wallet_address.clone(),
190178
fee_account,
191179
quote_response,
192180
prioritization_fee_lamports: 500_000,
193-
dynamic_slippage,
194181
};
195182

196183
let quote_data = self.http_client.get_swap_quote_data(&request).await?;

0 commit comments

Comments
 (0)