From b490e420861afa218e0a9bae019fd99ca4226dc9 Mon Sep 17 00:00:00 2001 From: 0xbigz <83473873+0xbigz@users.noreply.github.com> Date: Wed, 11 Jun 2025 15:48:51 -0400 Subject: [PATCH 1/2] program: update-amm-spread-and-availability-constraints --- programs/drift/src/math/amm_spread.rs | 6 +++--- programs/drift/src/state/perp_market.rs | 9 ++++++--- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/programs/drift/src/math/amm_spread.rs b/programs/drift/src/math/amm_spread.rs index 33ab54bf5f..635fa9888d 100644 --- a/programs/drift/src/math/amm_spread.rs +++ b/programs/drift/src/math/amm_spread.rs @@ -121,10 +121,10 @@ pub fn calculate_long_short_vol_spread( let vol_spread: u128 = last_oracle_conf_pct .cast::()? - .max(market_avg_std_pct.safe_div(2)?); + .max(market_avg_std_pct.safe_div(4)?); let factor_clamp_min: u128 = PERCENTAGE_PRECISION / 100; // .01 - let factor_clamp_max: u128 = 16 * PERCENTAGE_PRECISION / 10; // 1.6 + let factor_clamp_max: u128 = PERCENTAGE_PRECISION; // 1 let long_vol_spread_factor: u128 = long_intensity_volume .cast::()? @@ -141,7 +141,7 @@ pub fn calculate_long_short_vol_spread( let conf_component = if last_oracle_conf_pct > PERCENTAGE_PRECISION_U64 / 400 { last_oracle_conf_pct } else { - last_oracle_conf_pct.safe_div(10)? + last_oracle_conf_pct.safe_div(20)? }; Ok(( diff --git a/programs/drift/src/state/perp_market.rs b/programs/drift/src/state/perp_market.rs index 869c22af13..5bbb2a1b86 100644 --- a/programs/drift/src/state/perp_market.rs +++ b/programs/drift/src/state/perp_market.rs @@ -336,9 +336,12 @@ impl PerpMarket { return Ok(false); } - let amm_low_inventory_and_profitable = - self.amm.net_revenue_since_last_funding > 0 && amm_lp_allowed_to_jit_make; - let amm_oracle_no_latency = self.amm.oracle_source == OracleSource::Prelaunch; + let amm_low_inventory_and_profitable = self.amm.net_revenue_since_last_funding + >= DEFAULT_REVENUE_SINCE_LAST_FUNDING_SPREAD_RETREAT + && amm_lp_allowed_to_jit_make; + let amm_oracle_no_latency = self.amm.oracle_source == OracleSource::Prelaunch + || (self.amm.historical_oracle_data.last_oracle_delay == 0 + && self.amm.oracle_source == OracleSource::PythLazer); let can_skip = amm_low_inventory_and_profitable || amm_oracle_no_latency; if can_skip { From 2b1f08bf041bc87d1fd1fb285f82ece063e959ba Mon Sep 17 00:00:00 2001 From: 0xbigz <83473873+0xbigz@users.noreply.github.com> Date: Thu, 12 Jun 2025 12:29:57 -0400 Subject: [PATCH 2/2] fix cargo tests --- .../drift/src/controller/position/tests.rs | 4 +- programs/drift/src/controller/repeg/tests.rs | 4 +- programs/drift/src/math/amm_spread/tests.rs | 46 +++++++++---------- 3 files changed, 27 insertions(+), 27 deletions(-) diff --git a/programs/drift/src/controller/position/tests.rs b/programs/drift/src/controller/position/tests.rs index 7dd593ebb6..7debf1a978 100644 --- a/programs/drift/src/controller/position/tests.rs +++ b/programs/drift/src/controller/position/tests.rs @@ -2338,8 +2338,8 @@ fn recenter_amm_1() { ) .unwrap(); - assert_eq!(r1_orig, 334837204625); - assert_eq!(r2_orig, 703359043); + assert_eq!(r1_orig, 334835721519); + assert_eq!(r2_orig, 704842149); let current_k = perp_market.amm.sqrt_k; let _current_peg = perp_market.amm.peg_multiplier; diff --git a/programs/drift/src/controller/repeg/tests.rs b/programs/drift/src/controller/repeg/tests.rs index c8463e07a0..1131b58b1c 100644 --- a/programs/drift/src/controller/repeg/tests.rs +++ b/programs/drift/src/controller/repeg/tests.rs @@ -159,10 +159,10 @@ pub fn update_amm_test() { 244822 // (market.margin_ratio_initial * 100) as u32 ); - assert_eq!(bid, 9781849613); + assert_eq!(bid, 9757967541); assert!(bid < (oracle_price_data.price as u64)); assert_eq!(reserve_price, 12743902015); - assert_eq!(ask, 12901837192); + assert_eq!(ask, 12877955120); assert!(ask >= (oracle_price_data.price as u64)); assert_eq!( (ask - bid) * 1000000 / reserve_price, diff --git a/programs/drift/src/math/amm_spread/tests.rs b/programs/drift/src/math/amm_spread/tests.rs index ff1059f1c3..19550a2abd 100644 --- a/programs/drift/src/math/amm_spread/tests.rs +++ b/programs/drift/src/math/amm_spread/tests.rs @@ -490,7 +490,7 @@ mod test { .unwrap(); assert_eq!(long_spread_btc, 250); - assert_eq!(short_spread_btc, 74142); + assert_eq!(short_spread_btc, 74117); let (long_spread_btc1, short_spread_btc1) = calculate_spread( 500, @@ -1064,8 +1064,8 @@ mod test { volume_24h, ) .unwrap(); - assert_eq!(long_vspread, 1639); - assert_eq!(short_vspread, 4918); + assert_eq!(long_vspread, 819); + assert_eq!(short_vspread, 2459); // since short volume ~= 3 * long volume intensity, expect short spread to be larger by this factor assert_eq!(short_vspread >= long_vspread * 3, true); @@ -1125,7 +1125,7 @@ mod test { .unwrap(); // since total_fee_minus_distributions <=0, 10 * vol spread - assert_eq!(long_spread, 16390); // vs 2500 + assert_eq!(long_spread, 8190); // vs 2500 assert_eq!( long_spread > (base_spread @@ -1133,7 +1133,7 @@ mod test { true ); - assert_eq!(short_spread, 49180); + assert_eq!(short_spread, 24590); assert_eq!( short_spread > (base_spread @@ -1164,8 +1164,8 @@ mod test { ) .unwrap(); - assert_eq!(long_spread, 1639); - assert_eq!(short_spread, 4918); + assert_eq!(long_spread, 819); + assert_eq!(short_spread, 2459); let (long_spread, short_spread) = calculate_spread( base_spread, @@ -1189,8 +1189,8 @@ mod test { volume_24h, ) .unwrap(); - assert_eq!(long_spread, 195556); - assert_eq!(short_spread, 4444); + assert_eq!(long_spread, 197666); + assert_eq!(short_spread, 2334); let (long_spread, short_spread) = calculate_spread( base_spread, @@ -1214,8 +1214,8 @@ mod test { volume_24h, ) .unwrap(); - assert_eq!(long_spread, 1639); - assert_eq!(short_spread, 24917); + assert_eq!(long_spread, 819); + assert_eq!(short_spread, 22458); } #[test] @@ -1254,8 +1254,8 @@ mod test { volume_24h, ) .unwrap(); - assert_eq!(long_vspread, 1639); - assert_eq!(short_vspread, 4918); + assert_eq!(long_vspread, 819); + assert_eq!(short_vspread, 2459); // since short volume ~= 3 * long volume intensity, expect short spread to be larger by this factor assert_eq!(short_vspread >= long_vspread * 3, true); @@ -1315,7 +1315,7 @@ mod test { .unwrap(); // since total_fee_minus_distributions <=0, 10 * vol spread - assert_eq!(long_spread, 16390); // vs 2500 + assert_eq!(long_spread, 8190); // vs 2500 assert_eq!( long_spread > (base_spread @@ -1323,7 +1323,7 @@ mod test { true ); - assert_eq!(short_spread, 99180); + assert_eq!(short_spread, 74590); assert_eq!( short_spread > (base_spread @@ -1354,8 +1354,8 @@ mod test { ) .unwrap(); - assert_eq!(long_spread, 1639); - assert_eq!(short_spread, 9918); + assert_eq!(long_spread, 819); + assert_eq!(short_spread, 7459); let (long_spread, short_spread) = calculate_spread( base_spread, @@ -1379,8 +1379,8 @@ mod test { volume_24h, ) .unwrap(); - assert_eq!(long_spread, 197138); // big cause of oracel pct - assert_eq!(short_spread, 2862); + assert_eq!(long_spread, 197814); // big cause of oracel pct + assert_eq!(short_spread, 2186); let (long_spread, short_spread) = calculate_spread( base_spread, @@ -1404,8 +1404,8 @@ mod test { volume_24h, ) .unwrap(); - assert_eq!(long_spread, 1639); - assert_eq!(short_spread, 76584); // big + assert_eq!(long_spread, 819); + assert_eq!(short_spread, 74125); // big } #[test] @@ -1513,8 +1513,8 @@ mod test { 427588331503, ) .unwrap(); - assert_eq!(long_spread, 22137); - assert_eq!(short_spread, 217356); + assert_eq!(long_spread, 11068); + assert_eq!(short_spread, 135916); } #[test]