diff --git a/Cargo.lock b/Cargo.lock index b3b37ff5..079b2ad9 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -942,8 +942,8 @@ dependencies = [ [[package]] name = "drift" -version = "2.119.0" -source = "git+https://github.com/drift-labs/protocol-v2.git?rev=3a7e11e2beea9118c35bcc83d80b75d91c69a196#3a7e11e2beea9118c35bcc83d80b75d91c69a196" +version = "2.129.0" +source = "git+https://github.com/drift-labs/protocol-v2.git?rev=607a687b853df54a79d490d296a6130a0f4fe691#607a687b853df54a79d490d296a6130a0f4fe691" dependencies = [ "ahash 0.8.6", "anchor-lang", @@ -1656,7 +1656,7 @@ checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" [[package]] name = "openbook-v2-light" version = "0.1.0" -source = "git+https://github.com/drift-labs/protocol-v2.git?rev=3a7e11e2beea9118c35bcc83d80b75d91c69a196#3a7e11e2beea9118c35bcc83d80b75d91c69a196" +source = "git+https://github.com/drift-labs/protocol-v2.git?rev=607a687b853df54a79d490d296a6130a0f4fe691#607a687b853df54a79d490d296a6130a0f4fe691" dependencies = [ "anchor-lang", "borsh 0.10.3", @@ -2806,7 +2806,7 @@ checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" [[package]] name = "switchboard" version = "0.1.0" -source = "git+https://github.com/drift-labs/protocol-v2.git?rev=3a7e11e2beea9118c35bcc83d80b75d91c69a196#3a7e11e2beea9118c35bcc83d80b75d91c69a196" +source = "git+https://github.com/drift-labs/protocol-v2.git?rev=607a687b853df54a79d490d296a6130a0f4fe691#607a687b853df54a79d490d296a6130a0f4fe691" dependencies = [ "anchor-lang", ] @@ -2814,7 +2814,7 @@ dependencies = [ [[package]] name = "switchboard-on-demand" version = "0.1.0" -source = "git+https://github.com/drift-labs/protocol-v2.git?rev=3a7e11e2beea9118c35bcc83d80b75d91c69a196#3a7e11e2beea9118c35bcc83d80b75d91c69a196" +source = "git+https://github.com/drift-labs/protocol-v2.git?rev=607a687b853df54a79d490d296a6130a0f4fe691#607a687b853df54a79d490d296a6130a0f4fe691" dependencies = [ "anchor-lang", "bytemuck", diff --git a/programs/jit-proxy/Cargo.toml b/programs/jit-proxy/Cargo.toml index e368bfdd..09a865aa 100644 --- a/programs/jit-proxy/Cargo.toml +++ b/programs/jit-proxy/Cargo.toml @@ -17,7 +17,7 @@ default = [] anchor-lang = "0.29.0" anchor-spl = "0.29.0" bytemuck = { version = "1.4.0" } -drift = { git = "https://github.com/drift-labs/protocol-v2.git", rev = "3a7e11e2beea9118c35bcc83d80b75d91c69a196", features = ["cpi", "mainnet-beta"]} +drift = { git = "https://github.com/drift-labs/protocol-v2.git", rev = "607a687b853df54a79d490d296a6130a0f4fe691", features = ["cpi", "mainnet-beta"]} static_assertions = "1.1.0" solana-program = "1.16" ahash = "=0.8.6" diff --git a/programs/jit-proxy/src/instructions/jit.rs b/programs/jit-proxy/src/instructions/jit.rs index 9e0c68c0..3419de1c 100644 --- a/programs/jit-proxy/src/instructions/jit.rs +++ b/programs/jit-proxy/src/instructions/jit.rs @@ -1,7 +1,7 @@ use anchor_lang::prelude::Pubkey; use anchor_lang::prelude::*; use drift::controller::position::PositionDirection; -use drift::cpi::accounts::{PlaceAndMake, PlaceAndMakeSignedMsg}; +use drift::cpi::accounts::{PlaceAndMake, PlaceAndMakeSignedMsg, UpdateAMM}; use drift::error::DriftResult; use drift::instructions::optional_accounts::{load_maps, AccountMaps}; use drift::math::casting::Cast; @@ -58,6 +58,19 @@ pub fn jit<'c: 'info, 'info>( oracle_map.get_price_data(&spot_market.oracle_id())?.price }; + if market_type == DriftMarketType::Perp { + let drift_program = ctx.accounts.drift_program.to_account_info().clone(); + let cpi_accounts = UpdateAMM { + state: ctx.accounts.state.to_account_info().clone(), + authority: ctx.accounts.authority.to_account_info().clone(), + }; + + let cpi_context = CpiContext::new(drift_program, cpi_accounts) + .with_remaining_accounts(ctx.remaining_accounts.into()); + + drift::cpi::update_amms(cpi_context, vec![market_index])?; + } + let (order_params, taker_base_asset_amount_unfilled, taker_price, maker_price) = process_order( &maker, &perp_market_map, @@ -141,6 +154,17 @@ pub fn jit_signed_msg<'c: 'info, 'info>( None, )?; + let drift_program = ctx.accounts.drift_program.to_account_info().clone(); + let cpi_accounts = UpdateAMM { + state: ctx.accounts.state.to_account_info().clone(), + authority: ctx.accounts.authority.to_account_info().clone(), + }; + + let cpi_context = CpiContext::new(drift_program, cpi_accounts) + .with_remaining_accounts(ctx.remaining_accounts.into()); + + drift::cpi::update_amms(cpi_context, vec![taker_order.market_index])?; + let oracle_price = oracle_map .get_price_data( &perp_market_map @@ -241,7 +265,6 @@ fn process_order( let (tick_size, min_order_size, is_prediction_market) = if market_type == DriftMarketType::Perp { let perp_market = perp_market_map.get_ref(&market_index)?; - ( perp_market.amm.order_tick_size, perp_market.amm.min_order_size,