Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 8 additions & 3 deletions programs/drift/src/controller/orders.rs
Original file line number Diff line number Diff line change
Expand Up @@ -996,8 +996,13 @@ pub fn fill_perp_order(
.position(|order| order.order_id == order_id && order.status == OrderStatus::Open)
.ok_or_else(print_error!(ErrorCode::OrderDoesNotExist))?;

let (order_status, market_index, order_market_type) =
get_struct_values!(user.orders[order_index], status, market_index, market_type);
let (order_status, market_index, order_market_type, order_reduce_only) = get_struct_values!(
user.orders[order_index],
status,
market_index,
market_type,
reduce_only
);

validate!(
order_market_type == MarketType::Perp,
Expand Down Expand Up @@ -1095,7 +1100,7 @@ pub fn fill_perp_order(
market.amm.oracle_low_risk_slot_delay_override,
)?;

user_can_skip_duration = user.can_skip_auction_duration(user_stats)?;
user_can_skip_duration = user.can_skip_auction_duration(user_stats, order_reduce_only)?;
amm_is_available &= market.amm_can_fill_order(
&user.orders[order_index],
slot,
Expand Down
45 changes: 33 additions & 12 deletions programs/drift/src/controller/orders/amm_jit_tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -332,7 +332,9 @@ pub mod amm_jit {

let order_index = 0;
let min_auction_duration = 0;
let user_can_skip_auction_duration = taker.can_skip_auction_duration(&taker_stats).unwrap();
let user_can_skip_auction_duration = taker
.can_skip_auction_duration(&taker_stats, false)
.unwrap();
let is_amm_available = get_amm_is_available(
&taker.orders[order_index],
min_auction_duration,
Expand Down Expand Up @@ -535,7 +537,9 @@ pub mod amm_jit {

let order_index = 0;
let min_auction_duration = 10;
let user_can_skip_auction_duration = taker.can_skip_auction_duration(&taker_stats).unwrap();
let user_can_skip_auction_duration = taker
.can_skip_auction_duration(&taker_stats, false)
.unwrap();
let is_amm_available = get_amm_is_available(
&taker.orders[order_index],
min_auction_duration,
Expand Down Expand Up @@ -749,7 +753,9 @@ pub mod amm_jit {

let order_index = 0;
let min_auction_duration = 10;
let user_can_skip_auction_duration = taker.can_skip_auction_duration(&taker_stats).unwrap();
let user_can_skip_auction_duration = taker
.can_skip_auction_duration(&taker_stats, false)
.unwrap();
let is_amm_available = get_amm_is_available(
&taker.orders[order_index],
min_auction_duration,
Expand Down Expand Up @@ -959,7 +965,9 @@ pub mod amm_jit {

let order_index = 0;
let min_auction_duration = 10;
let user_can_skip_auction_duration = taker.can_skip_auction_duration(&taker_stats).unwrap();
let user_can_skip_auction_duration = taker
.can_skip_auction_duration(&taker_stats, false)
.unwrap();
let is_amm_available = get_amm_is_available(
&taker.orders[order_index],
min_auction_duration,
Expand Down Expand Up @@ -1172,7 +1180,9 @@ pub mod amm_jit {

let order_index = 0;
let min_auction_duration = 0;
let user_can_skip_auction_duration = taker.can_skip_auction_duration(&taker_stats).unwrap();
let user_can_skip_auction_duration = taker
.can_skip_auction_duration(&taker_stats, false)
.unwrap();
let is_amm_available = get_amm_is_available(
&taker.orders[order_index],
min_auction_duration,
Expand Down Expand Up @@ -1393,7 +1403,9 @@ pub mod amm_jit {

let order_index = 0;
let min_auction_duration = 10;
let user_can_skip_auction_duration = taker.can_skip_auction_duration(&taker_stats).unwrap();
let user_can_skip_auction_duration = taker
.can_skip_auction_duration(&taker_stats, false)
.unwrap();
let is_amm_available = get_amm_is_available(
&taker.orders[order_index],
min_auction_duration,
Expand Down Expand Up @@ -1813,7 +1825,9 @@ pub mod amm_jit {

let order_index = 0;
let min_auction_duration = 0;
let user_can_skip_auction_duration = taker.can_skip_auction_duration(&taker_stats).unwrap();
let user_can_skip_auction_duration = taker
.can_skip_auction_duration(&taker_stats, false)
.unwrap();
let is_amm_available = get_amm_is_available(
&taker.orders[order_index],
min_auction_duration,
Expand Down Expand Up @@ -2013,7 +2027,9 @@ pub mod amm_jit {

let order_index = 0;
let min_auction_duration = 10;
let user_can_skip_auction_duration = taker.can_skip_auction_duration(&taker_stats).unwrap();
let user_can_skip_auction_duration = taker
.can_skip_auction_duration(&taker_stats, false)
.unwrap();
let is_amm_available = get_amm_is_available(
&taker.orders[order_index],
min_auction_duration,
Expand Down Expand Up @@ -2226,7 +2242,9 @@ pub mod amm_jit {

let order_index = 0;
let min_auction_duration = 10;
let user_can_skip_auction_duration = taker.can_skip_auction_duration(&taker_stats).unwrap();
let user_can_skip_auction_duration = taker
.can_skip_auction_duration(&taker_stats, false)
.unwrap();
let is_amm_available = get_amm_is_available(
&taker.orders[order_index],
min_auction_duration,
Expand Down Expand Up @@ -2778,8 +2796,9 @@ pub mod amm_jit {

let order_index = 0;
let min_auction_duration = 10;
let user_can_skip_auction_duration =
taker.can_skip_auction_duration(&taker_stats).unwrap();
let user_can_skip_auction_duration = taker
.can_skip_auction_duration(&taker_stats, false)
.unwrap();
let is_amm_available = get_amm_is_available(
&taker.orders[order_index],
min_auction_duration,
Expand Down Expand Up @@ -3022,7 +3041,9 @@ pub mod amm_jit {

let order_index = 0;
let min_auction_duration = 0;
let user_can_skip_auction_duration = taker.can_skip_auction_duration(&taker_stats).unwrap();
let user_can_skip_auction_duration = taker
.can_skip_auction_duration(&taker_stats, false)
.unwrap();
let is_amm_available = get_amm_is_available(
&taker.orders[order_index],
min_auction_duration,
Expand Down
4 changes: 3 additions & 1 deletion programs/drift/src/controller/orders/fuel_tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -270,7 +270,9 @@ pub mod fuel_scoring {

let order_index = 0;
let min_auction_duration = 0;
let user_can_skip_auction_duration = taker.can_skip_auction_duration(&taker_stats).unwrap();
let user_can_skip_auction_duration = taker
.can_skip_auction_duration(&taker_stats, false)
.unwrap();
let is_amm_available = get_amm_is_available(
&taker.orders[order_index],
min_auction_duration,
Expand Down
51 changes: 37 additions & 14 deletions programs/drift/src/controller/orders/tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,8 @@ pub mod fill_order_protected_maker {
use crate::state::spot_market_map::SpotMarketMap;
use crate::state::state::State;
use crate::state::user::{
MarketType, OrderStatus, OrderType, SpotPosition, User, UserStats, UserStatus,
MarketType, OrderStatus, OrderType, SpotPosition, User, UserStats,
UserStatsPausedOperations, UserStatus,
};
use crate::test_utils::*;
use crate::test_utils::{
Expand Down Expand Up @@ -231,7 +232,7 @@ pub mod fill_order_protected_maker {
AccountLoader::try_from(&user_account_info).unwrap();

let mut taker_stats = UserStats {
disable_update_perp_bid_ask_twap: true,
paused_operations: UserStatsPausedOperations::AmmAtomicFill as u8,
..UserStats::default()
};

Expand Down Expand Up @@ -323,7 +324,7 @@ pub mod fill_order_protected_maker {

// user exempt, no 10 bps applied for pmm
let mut taker_stats = UserStats {
disable_update_perp_bid_ask_twap: false,
paused_operations: 0,
..UserStats::default()
};

Expand Down Expand Up @@ -3367,7 +3368,9 @@ pub mod fulfill_order {

let order_index = 0;
let min_auction_duration = 0;
let user_can_skip_auction_duration = taker.can_skip_auction_duration(&taker_stats).unwrap();
let user_can_skip_auction_duration = taker
.can_skip_auction_duration(&taker_stats, false)
.unwrap();
let is_amm_available = get_amm_is_available(
&taker.orders[order_index],
min_auction_duration,
Expand Down Expand Up @@ -3625,7 +3628,9 @@ pub mod fulfill_order {

let order_index = 0;
let min_auction_duration = 10;
let user_can_skip_auction_duration = taker.can_skip_auction_duration(&taker_stats).unwrap();
let user_can_skip_auction_duration = taker
.can_skip_auction_duration(&taker_stats, false)
.unwrap();
let is_amm_available = get_amm_is_available(
&taker.orders[order_index],
min_auction_duration,
Expand Down Expand Up @@ -3831,7 +3836,9 @@ pub mod fulfill_order {

let order_index = 0;
let min_auction_duration = 0;
let user_can_skip_auction_duration = taker.can_skip_auction_duration(&taker_stats).unwrap();
let user_can_skip_auction_duration = taker
.can_skip_auction_duration(&taker_stats, false)
.unwrap();
let is_amm_available = get_amm_is_available(
&taker.orders[order_index],
min_auction_duration,
Expand Down Expand Up @@ -4050,7 +4057,9 @@ pub mod fulfill_order {

let order_index = 0;
let min_auction_duration = 10;
let user_can_skip_auction_duration = taker.can_skip_auction_duration(&taker_stats).unwrap();
let user_can_skip_auction_duration = taker
.can_skip_auction_duration(&taker_stats, false)
.unwrap();
let is_amm_available = get_amm_is_available(
&taker.orders[order_index],
min_auction_duration,
Expand Down Expand Up @@ -4229,7 +4238,9 @@ pub mod fulfill_order {

let order_index = 0;
let min_auction_duration = 0;
let user_can_skip_auction_duration = taker.can_skip_auction_duration(&taker_stats).unwrap();
let user_can_skip_auction_duration = taker
.can_skip_auction_duration(&taker_stats, false)
.unwrap();
let is_amm_available = get_amm_is_available(
&taker.orders[order_index],
min_auction_duration,
Expand Down Expand Up @@ -4440,7 +4451,9 @@ pub mod fulfill_order {

let order_index = 0;
let min_auction_duration = 10;
let user_can_skip_auction_duration = taker.can_skip_auction_duration(&taker_stats).unwrap();
let user_can_skip_auction_duration = taker
.can_skip_auction_duration(&taker_stats, false)
.unwrap();
let is_amm_available = get_amm_is_available(
&taker.orders[order_index],
min_auction_duration,
Expand Down Expand Up @@ -4640,7 +4653,9 @@ pub mod fulfill_order {

let order_index = 0;
let min_auction_duration = 0;
let user_can_skip_auction_duration = taker.can_skip_auction_duration(&taker_stats).unwrap();
let user_can_skip_auction_duration = taker
.can_skip_auction_duration(&taker_stats, false)
.unwrap();
let is_amm_available = get_amm_is_available(
&taker.orders[order_index],
min_auction_duration,
Expand Down Expand Up @@ -4793,7 +4808,9 @@ pub mod fulfill_order {

let order_index = 0;
let min_auction_duration = 0;
let user_can_skip_auction_duration = taker.can_skip_auction_duration(&taker_stats).unwrap();
let user_can_skip_auction_duration = taker
.can_skip_auction_duration(&taker_stats, false)
.unwrap();
let is_amm_available = get_amm_is_available(
&taker.orders[order_index],
min_auction_duration,
Expand Down Expand Up @@ -4973,7 +4990,9 @@ pub mod fulfill_order {

let order_index = 0;
let min_auction_duration = 0;
let user_can_skip_auction_duration = taker.can_skip_auction_duration(&taker_stats).unwrap();
let user_can_skip_auction_duration = taker
.can_skip_auction_duration(&taker_stats, false)
.unwrap();
let is_amm_available = get_amm_is_available(
&taker.orders[order_index],
min_auction_duration,
Expand Down Expand Up @@ -5576,7 +5595,9 @@ pub mod fulfill_order {

let order_index = 0;
let min_auction_duration = 10;
let user_can_skip_auction_duration = taker.can_skip_auction_duration(&taker_stats).unwrap();
let user_can_skip_auction_duration = taker
.can_skip_auction_duration(&taker_stats, false)
.unwrap();
let is_amm_available = get_amm_is_available(
&taker.orders[order_index],
min_auction_duration,
Expand Down Expand Up @@ -5833,7 +5854,9 @@ pub mod fulfill_order {

let order_index = 0;
let min_auction_duration = 0;
let user_can_skip_auction_duration = taker.can_skip_auction_duration(&taker_stats).unwrap();
let user_can_skip_auction_duration = taker
.can_skip_auction_duration(&taker_stats, false)
.unwrap();
let is_amm_available = get_amm_is_available(
&taker.orders[order_index],
min_auction_duration,
Expand Down
12 changes: 6 additions & 6 deletions programs/drift/src/instructions/admin.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4484,19 +4484,19 @@ pub fn handle_update_spot_auction_duration(
Ok(())
}

pub fn handle_admin_disable_update_perp_bid_ask_twap(
pub fn handle_admin_update_user_stats_paused_operations(
ctx: Context<AdminDisableBidAskTwapUpdate>,
disable: bool,
paused_operations: u8,
) -> Result<()> {
let mut user_stats = load_mut!(ctx.accounts.user_stats)?;

msg!(
"disable_update_perp_bid_ask_twap: {:?} -> {:?}",
user_stats.disable_update_perp_bid_ask_twap,
disable
"user_stats.paused_operations: {:?} -> {:?}",
user_stats.paused_operations,
paused_operations
);

user_stats.disable_update_perp_bid_ask_twap = disable;
user_stats.paused_operations = paused_operations;
Ok(())
}

Expand Down
4 changes: 2 additions & 2 deletions programs/drift/src/instructions/keeper.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2604,9 +2604,9 @@ pub fn handle_update_perp_bid_ask_twap<'c: 'info, 'info>(

let keeper_stats = load!(ctx.accounts.keeper_stats)?;
validate!(
!keeper_stats.disable_update_perp_bid_ask_twap,
keeper_stats.can_update_bid_ask_twap(),
ErrorCode::CantUpdatePerpBidAskTwap,
"Keeper stats disable_update_perp_bid_ask_twap is true"
"Keeper stats can_update_bid_ask_twap is false"
)?;

let min_if_stake = 1000 * QUOTE_PRECISION_U64;
Expand Down
6 changes: 3 additions & 3 deletions programs/drift/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -528,11 +528,11 @@ pub mod drift {
// handle_update_user_open_orders_count(ctx)
// }

pub fn admin_disable_update_perp_bid_ask_twap(
pub fn admin_update_user_stats_paused_operations(
ctx: Context<AdminDisableBidAskTwapUpdate>,
disable: bool,
paused_operations: u8,
) -> Result<()> {
handle_admin_disable_update_perp_bid_ask_twap(ctx, disable)
handle_admin_update_user_stats_paused_operations(ctx, paused_operations)
}

pub fn settle_pnl<'c: 'info, 'info>(
Expand Down
Loading
Loading