From ac4f1e251a4773a43c7b92478f2d6c1a417546ad Mon Sep 17 00:00:00 2001 From: soundsonacid Date: Fri, 29 Mar 2024 11:38:22 -0500 Subject: [PATCH] dbg --- rust/Cargo.lock | 12 +++--- rust/Cargo.toml | 2 +- rust/src/jit_proxy_client.rs | 10 +++-- rust/src/jitter.rs | 73 ++++++++++++++---------------------- rust/src/main.rs | 2 + 5 files changed, 44 insertions(+), 55 deletions(-) diff --git a/rust/Cargo.lock b/rust/Cargo.lock index ee5c496f..9f105642 100644 --- a/rust/Cargo.lock +++ b/rust/Cargo.lock @@ -1064,7 +1064,7 @@ checksum = "77c90badedccf4105eca100756a0b1289e191f6fcbdadd3cee1d2f614f97da8f" [[package]] name = "drift" version = "2.74.0" -source = "git+https://github.com/drift-labs/protocol-v2.git#2bbe28cf37ca0dc59c93617076ce50a928597eb4" +source = "git+https://github.com/drift-labs/protocol-v2.git#8b76cc05e64c063750f6dc7f3cebd86214c0a20b" dependencies = [ "anchor-lang", "anchor-spl", @@ -1100,7 +1100,7 @@ dependencies = [ [[package]] name = "drift-sdk" version = "0.1.0" -source = "git+https://github.com/soundsonacid/drift-rs#3f1b0fbda58dba1a5ee9aae699958b8e4e49ee6c" +source = "git+https://github.com/soundsonacid/drift-rs#c825659a08ba1fd264d0f11517bdb65bc4cda0e5" dependencies = [ "anchor-lang", "base64 0.13.1", @@ -1944,7 +1944,7 @@ checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" [[package]] name = "jit-proxy" version = "0.10.2" -source = "git+https://github.com/soundsonacid/jit-proxy#f983986a601d44ff9c347b740e4470e4c518ea4c" +source = "git+https://github.com/soundsonacid/jit-proxy#79d372ca89e15c73c25dcc8a4d014ac4636b293d" dependencies = [ "anchor-lang", "anchor-spl", @@ -2438,9 +2438,9 @@ checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" [[package]] name = "openssl-sys" -version = "0.9.101" +version = "0.9.102" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dda2b0f344e78efc2facf7d195d098df0dd72151b26ab98da807afc26c198dff" +checksum = "c597637d56fbc83893a35eb0dd04b2b8e7a50c91e64e9493e398b5df4fb45fa2" dependencies = [ "cc", "libc", @@ -4199,7 +4199,7 @@ checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" [[package]] name = "switchboard" version = "0.1.0" -source = "git+https://github.com/drift-labs/protocol-v2.git#2bbe28cf37ca0dc59c93617076ce50a928597eb4" +source = "git+https://github.com/drift-labs/protocol-v2.git#8b76cc05e64c063750f6dc7f3cebd86214c0a20b" dependencies = [ "anchor-lang", ] diff --git a/rust/Cargo.toml b/rust/Cargo.toml index 4f6e3553..273bab43 100644 --- a/rust/Cargo.toml +++ b/rust/Cargo.toml @@ -9,7 +9,7 @@ edition = "2021" anchor-client = "0.27.0" jit-proxy = { git = "https://github.com/soundsonacid/jit-proxy", commit = "740bc36" } solana-sdk = "1.14.16" -drift-sdk = { git = "https://github.com/soundsonacid/drift-rs", commit = "3f1b0fb" } +drift-sdk = { git = "https://github.com/soundsonacid/drift-rs", commit = "c825659" } tokio = { version = "1.35.1", features = ["full"] } drift = { git = "https://github.com/drift-labs/protocol-v2.git", commit = "2bbe28c", features = ["mainnet-beta"]} thiserror = "1.0.38" diff --git a/rust/src/jit_proxy_client.rs b/rust/src/jit_proxy_client.rs index ff541dc6..d7751d28 100644 --- a/rust/src/jit_proxy_client.rs +++ b/rust/src/jit_proxy_client.rs @@ -89,6 +89,7 @@ impl JitProxyClient { } pub async fn jit(&self, params: JitIxParams, start: std::time::Instant) -> JitResult { + let start_jit = std::time::Instant::now(); if let Some(order) = params .taker .orders @@ -141,13 +142,13 @@ impl JitProxyClient { if order.market_type == MarketType::Spot { let spot_market_vault = self .drift_client - .get_spot_market_info(order.market_index) - .await? + .get_spot_market_account(order.market_index) + .expect("spot market") .vault; let quote_spot_market_vault = self .drift_client - .get_spot_market_info(QUOTE_SPOT_MARKET_INDEX) - .await? + .get_spot_market_account(QUOTE_SPOT_MARKET_INDEX) + .expect("spot market") .vault; accounts.push(AccountMeta::new_readonly(spot_market_vault, false)); accounts.push(AccountMeta::new_readonly(quote_spot_market_vault, false)); @@ -202,6 +203,7 @@ impl JitProxyClient { .await; log::error!("fill time: {:?}", start.elapsed()); + log::error!("jit time: {:?}", start_jit.elapsed()); sig.map_err(|e| { log::error!("Error: {}", e); JitError::Sdk(e.to_string()) diff --git a/rust/src/jitter.rs b/rust/src/jitter.rs index 502ed093..ce632433 100644 --- a/rust/src/jitter.rs +++ b/rust/src/jitter.rs @@ -125,6 +125,7 @@ pub trait JitterStrategy { order_sig: String, referrer_info: Option, params: JitParams, + now: std::time::Instant, ) -> JitResult<()>; } @@ -165,7 +166,7 @@ impl Jitter { // Subscribe to auction events and start listening for them pub async fn subscribe(self: Arc, url: String) -> JitResult<()> { let (auction_sender, mut auction_receiver): ( - Sender>, + Sender>, Receiver>, ) = mpsc::channel(100); @@ -213,27 +214,20 @@ impl Jitter { pub async fn on_auction(&self, event: Box) -> JitResult<()> { if let Some(auction) = event.as_any().downcast_ref::>() { log::info!("Auction received"); + let now = std::time::Instant::now(); - let user_pubkey = auction.pubkey.clone(); + let user_pubkey = &auction.pubkey; let user = auction.data_and_slot.data.clone(); let user_stats_key = Wallet::derive_stats_account(&user.authority, &drift_program); for order in user.orders { - if order.status != OrderStatus::Open { - continue; - } - - if !order.has_auction() { - continue; - } - - if self.exclusion_criteria.load(Ordering::Relaxed) { + if order.status != OrderStatus::Open || !order.has_auction() || self.exclusion_criteria.load(Ordering::Relaxed) { continue; } let order_sig = self.get_order_signatures(&user_pubkey, order.order_id); - if let Some(_) = self.ongoing_auctions.get(&order_sig) { + if self.ongoing_auctions.contains_key(&order_sig) { continue; } @@ -242,34 +236,25 @@ impl Jitter { if let Some(param) = self.perp_params.get(&order.market_index) { let perp_market: PerpMarket = self .drift_client - .get_perp_market_info(order.market_index) - .await?; + .get_perp_market_account(order.market_index).expect("perp market"); + let remaining = order.base_asset_amount - order.base_asset_amount_filled; + let min_order_size = perp_market.amm.min_order_size; - if order.base_asset_amount - order.base_asset_amount_filled - < perp_market.amm.min_order_size - { - log::warn!("Order filled within min order size"); - log::warn!( - "Remaining: {}", - order.base_asset_amount - order.base_asset_amount_filled - ); + if remaining < min_order_size { log::warn!( - "Minimum order size: {}", - perp_market.amm.min_order_size + "Order filled within min order size\nRemaining: {}\nMinimum order size: {}", + remaining, + min_order_size ); return Ok(()); } - if (order.base_asset_amount as i128) - - (order.base_asset_amount_filled as i128) - < param.min_position.into() - { - log::warn!("Order filled within min position"); + if (remaining as i128) < param.min_position.into() { log::warn!( - "Remaining: {}", - order.base_asset_amount - order.base_asset_amount_filled + "Order filled within min position\nRemaining: {}\nMin position: {}", + remaining, + param.min_position ); - log::warn!("Min position: {}", param.min_position); return Ok(()); } @@ -281,7 +266,7 @@ impl Jitter { .drift_client .get_user_stats(&user.authority) .await - .unwrap(); + .expect("user stats"); let referrer_info = ReferrerInfo::get_referrer_info(taker_stats); let param = param.clone(); @@ -295,6 +280,7 @@ impl Jitter { order_signature.clone(), referrer_info, param.clone(), + now ) .await; }); @@ -309,18 +295,17 @@ impl Jitter { if let Some(param) = self.spot_params.get(&order.market_index) { let spot_market = self .drift_client - .get_spot_market_info(order.market_index) - .await?; + .get_spot_market_account(order.market_index) + .expect("spot market"); if order.base_asset_amount - order.base_asset_amount_filled < spot_market.min_order_size { - log::warn!("Order filled within min order size"); log::warn!( - "Remaining: {}", - order.base_asset_amount - order.base_asset_amount_filled + "Order filled within min order size\nRemaining: {}\nMinimum order size: {}", + order.base_asset_amount - order.base_asset_amount_filled, + spot_market.min_order_size ); - log::warn!("Minimum order size: {}", spot_market.min_order_size); return Ok(()); } @@ -328,12 +313,11 @@ impl Jitter { - (order.base_asset_amount_filled as i128) < param.min_position.into() { - log::warn!("Order filled within min position"); log::warn!( - "Remaining: {}", - order.base_asset_amount - order.base_asset_amount_filled + "Order filled within min order size\nRemaining: {}\nMinimum order size: {}", + order.base_asset_amount - order.base_asset_amount_filled, + spot_market.min_order_size ); - log::warn!("Min position: {}", param.min_position); return Ok(()); } @@ -356,6 +340,7 @@ impl Jitter { order_signature.clone(), referrer_info, param.clone(), + now ) .await; }); @@ -415,9 +400,9 @@ impl JitterStrategy for Shotgun { order_sig: String, referrer_info: Option, params: JitParams, + now: std::time::Instant, ) -> JitResult<()> { log::info!("Trying to fill with Shotgun:"); - let now = std::time::Instant::now(); log_details(&order); for i in 0..order.auction_duration { diff --git a/rust/src/main.rs b/rust/src/main.rs index b8f875b5..f9a3f3fd 100644 --- a/rust/src/main.rs +++ b/rust/src/main.rs @@ -39,6 +39,8 @@ async fn main() { .await .unwrap(); + drift_client.subscribe().await.unwrap(); + let config = RpcSendTransactionConfig::default(); let cu_params = ComputeBudgetParams::new(100_000, 1_400_000);