diff --git a/programs/drift/src/controller/orders.rs b/programs/drift/src/controller/orders.rs index 84c2010c6..750be7d1c 100644 --- a/programs/drift/src/controller/orders.rs +++ b/programs/drift/src/controller/orders.rs @@ -2178,12 +2178,13 @@ pub fn fulfill_perp_order_with_amm( }; // if user position is less than min order size, step size is the threshold - let amm_size_threshold = - if existing_base_asset_amount.unsigned_abs() > market.amm.min_order_size { - market.amm.min_order_size - } else { - market.amm.order_step_size - }; + let amm_size_threshold = if !user.orders[order_index].reduce_only + && existing_base_asset_amount.unsigned_abs() > market.amm.min_order_size + { + market.amm.min_order_size + } else { + market.amm.order_step_size + }; if base_asset_amount < amm_size_threshold { // if is an actual swap (and not amm jit order) then msg! diff --git a/programs/drift/src/validation/order.rs b/programs/drift/src/validation/order.rs index 6fdd9e9fc..92dd4da46 100644 --- a/programs/drift/src/validation/order.rs +++ b/programs/drift/src/validation/order.rs @@ -142,7 +142,7 @@ fn validate_limit_order( order, market.amm.order_step_size, market.amm.min_order_size, - order.reduce_only, + order.reduce_only || order.is_jit_maker(), )?; if order.price == 0 && !order.has_oracle_price_offset() { @@ -339,7 +339,7 @@ fn validate_base_asset_amount( order: &Order, step_size: u64, min_order_size: u64, - reduce_only: bool, + reduce_only_or_jit_maker: bool, ) -> DriftResult { if order.base_asset_amount == 0 { msg!("Order base_asset_amount cant be 0"); @@ -355,7 +355,7 @@ fn validate_base_asset_amount( )?; validate!( - reduce_only || order.base_asset_amount >= min_order_size, + reduce_only_or_jit_maker || order.base_asset_amount >= min_order_size, ErrorCode::InvalidOrderMinOrderSize, "Order base_asset_amount ({}) < min_order_size ({})", order.base_asset_amount,