Skip to content

Commit 1e19b7e

Browse files
committed
program: add taker_speed_bump_override and amm_spread_adjustment
1 parent 4dd023f commit 1e19b7e

File tree

5 files changed

+77
-8
lines changed

5 files changed

+77
-8
lines changed

programs/drift/src/controller/orders.rs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1057,6 +1057,7 @@ pub fn fill_perp_order(
10571057
let amm_lp_allowed_to_jit_make: bool;
10581058
let oracle_valid_for_amm_fill: bool;
10591059
let oracle_stale_for_margin: bool;
1060+
let min_auction_duration: u8;
10601061
let mut amm_is_available = !state.amm_paused()?;
10611062
{
10621063
let market = &mut perp_market_map.get_ref_mut(&market_index)?;
@@ -1113,6 +1114,8 @@ pub fn fill_perp_order(
11131114
.last_oracle_price_twap_5min;
11141115
oracle_validity = _oracle_validity;
11151116
perp_market_index = market.market_index;
1117+
1118+
min_auction_duration = market.get_min_perp_auction_duration(state.min_perp_auction_duration);
11161119
}
11171120

11181121
// allow oracle price to be used to calculate limit price if it's valid or stale for amm
@@ -1288,7 +1291,7 @@ pub fn fill_perp_order(
12881291
valid_oracle_price,
12891292
now,
12901293
slot,
1291-
state.min_perp_auction_duration,
1294+
min_auction_duration,
12921295
amm_availability,
12931296
fill_mode,
12941297
oracle_stale_for_margin,

programs/drift/src/instructions/admin.rs

Lines changed: 44 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1041,7 +1041,8 @@ pub fn handle_initialize_perp_market(
10411041
target_base_asset_amount_per_lp: 0,
10421042
per_lp_base: 0,
10431043
padding1: 0,
1044-
padding2: 0,
1044+
taker_speed_bump_override: 0,
1045+
amm_spread_adjustment: 0,
10451046
total_fee_earned_per_lp: 0,
10461047
net_unsettled_funding_pnl: 0,
10471048
quote_asset_amount_with_unsettled_lp: 0,
@@ -3910,7 +3911,7 @@ pub fn handle_update_perp_market_number_of_users(
39103911
}
39113912

39123913
pub fn handle_update_perp_market_fuel(
3913-
ctx: Context<AdminUpdatePerpMarketFuel>,
3914+
ctx: Context<HotAdminUpdatePerpMarket>,
39143915
fuel_boost_taker: Option<u8>,
39153916
fuel_boost_maker: Option<u8>,
39163917
fuel_boost_position: Option<u8>,
@@ -3987,6 +3988,46 @@ pub fn handle_update_perp_market_protected_maker_params(
39873988
Ok(())
39883989
}
39893990

3991+
#[access_control(
3992+
perp_market_valid(&ctx.accounts.perp_market)
3993+
)]
3994+
pub fn handle_update_perp_market_taker_speed_bump_override(
3995+
ctx: Context<HotAdminUpdatePerpMarket>,
3996+
taker_speed_bump_override: i8,
3997+
) -> Result<()> {
3998+
let perp_market = &mut load_mut!(ctx.accounts.perp_market)?;
3999+
msg!("perp market {}", perp_market.market_index);
4000+
4001+
msg!(
4002+
"perp_market.amm.taker_speed_bump_override: {:?} -> {:?}",
4003+
perp_market.amm.taker_speed_bump_override,
4004+
taker_speed_bump_override
4005+
);
4006+
4007+
perp_market.amm.taker_speed_bump_override = taker_speed_bump_override;
4008+
Ok(())
4009+
}
4010+
4011+
#[access_control(
4012+
perp_market_valid(&ctx.accounts.perp_market)
4013+
)]
4014+
pub fn handle_update_perp_market_amm_spread_adjustment(
4015+
ctx: Context<HotAdminUpdatePerpMarket>,
4016+
amm_spread_adjustment: i8,
4017+
) -> Result<()> {
4018+
let perp_market = &mut load_mut!(ctx.accounts.perp_market)?;
4019+
msg!("perp market {}", perp_market.market_index);
4020+
4021+
msg!(
4022+
"perp_market.amm.amm_spread_adjustment: {:?} -> {:?}",
4023+
perp_market.amm.amm_spread_adjustment,
4024+
amm_spread_adjustment
4025+
);
4026+
4027+
perp_market.amm.amm_spread_adjustment = amm_spread_adjustment;
4028+
Ok(())
4029+
}
4030+
39904031
#[access_control(
39914032
spot_market_valid(&ctx.accounts.spot_market)
39924033
)]
@@ -4865,7 +4906,7 @@ pub struct AdminUpdatePerpMarket<'info> {
48654906
}
48664907

48674908
#[derive(Accounts)]
4868-
pub struct AdminUpdatePerpMarketFuel<'info> {
4909+
pub struct HotAdminUpdatePerpMarket<'info> {
48694910
#[account(
48704911
constraint = admin.key() == admin_hot_wallet::id() || admin.key() == state.admin
48714912
)]

programs/drift/src/lib.rs

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1513,7 +1513,7 @@ pub mod drift {
15131513
}
15141514

15151515
pub fn update_perp_market_fuel(
1516-
ctx: Context<AdminUpdatePerpMarketFuel>,
1516+
ctx: Context<HotAdminUpdatePerpMarket>,
15171517
fuel_boost_taker: Option<u8>,
15181518
fuel_boost_maker: Option<u8>,
15191519
fuel_boost_position: Option<u8>,
@@ -1533,6 +1533,20 @@ pub mod drift {
15331533
)
15341534
}
15351535

1536+
pub fn update_perp_market_taker_speed_bump_override(
1537+
ctx: Context<HotAdminUpdatePerpMarket>,
1538+
taker_speed_bump_override: i8,
1539+
) -> Result<()> {
1540+
handle_update_perp_market_taker_speed_bump_override(ctx, taker_speed_bump_override)
1541+
}
1542+
1543+
pub fn update_perp_market_amm_spread_adjustment(
1544+
ctx: Context<HotAdminUpdatePerpMarket>,
1545+
amm_spread_adjustment: i8,
1546+
) -> Result<()> {
1547+
handle_update_perp_market_amm_spread_adjustment(ctx, amm_spread_adjustment)
1548+
}
1549+
15361550
pub fn update_spot_market_fuel(
15371551
ctx: Context<AdminUpdateSpotMarketFuel>,
15381552
fuel_boost_deposits: Option<u8>,

programs/drift/src/math/orders.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ use crate::math::casting::Cast;
1212
use crate::state::fill_mode::FillMode;
1313
use crate::state::protected_maker_mode_config::ProtectedMakerParams;
1414
use crate::state::user::OrderBitFlag;
15-
use crate::BASE_PRECISION_U64;
1615
use crate::{
1716
load, math, FeeTier, State, BASE_PRECISION_I128, FEE_ADJUSTMENT_MAX,
1817
MAX_PREDICTION_MARKET_PRICE, MAX_PREDICTION_MARKET_PRICE_I64, OPEN_ORDER_MARGIN_REQUIREMENT,

programs/drift/src/state/perp_market.rs

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -735,6 +735,14 @@ impl PerpMarket {
735735
tick_size: self.amm.order_tick_size,
736736
}
737737
}
738+
739+
pub fn get_min_perp_auction_duration(&self, default_min_auction_duration: u8) -> u8 {
740+
if self.amm.taker_speed_bump_override != 0 {
741+
self.amm.taker_speed_bump_override.max(0).unsigned_abs()
742+
} else {
743+
default_min_auction_duration
744+
}
745+
}
738746
}
739747

740748
#[cfg(test)]
@@ -1034,8 +1042,11 @@ pub struct AMM {
10341042
pub target_base_asset_amount_per_lp: i32,
10351043
/// expo for unit of per_lp, base 10 (if per_lp_base=X, then per_lp unit is 10^X)
10361044
pub per_lp_base: i8,
1045+
/// the override for the state.min_perp_auction_duration
1046+
/// 0 is no override, -1 is disable speed bump, 1-100 is literal speed bump
1047+
pub taker_speed_bump_override: i8,
1048+
pub amm_spread_adjustment: i8,
10371049
pub padding1: u8,
1038-
pub padding2: u16,
10391050
pub total_fee_earned_per_lp: u64,
10401051
pub net_unsettled_funding_pnl: i64,
10411052
pub quote_asset_amount_with_unsettled_lp: i64,
@@ -1123,8 +1134,9 @@ impl Default for AMM {
11231134
last_oracle_valid: false,
11241135
target_base_asset_amount_per_lp: 0,
11251136
per_lp_base: 0,
1137+
taker_speed_bump_override: 0,
1138+
amm_spread_adjustment: 0,
11261139
padding1: 0,
1127-
padding2: 0,
11281140
total_fee_earned_per_lp: 0,
11291141
net_unsettled_funding_pnl: 0,
11301142
quote_asset_amount_with_unsettled_lp: 0,

0 commit comments

Comments
 (0)