11use std:: convert:: identity;
22use std:: mem:: size_of;
33
4- use crate :: math:: amm:: calculate_amm_available_liquidity;
5- use crate :: { compute_fn, msg} ;
4+ use crate :: msg;
65use anchor_lang:: prelude:: * ;
7- use anchor_spl:: token:: Token ;
86use anchor_spl:: token_2022:: Token2022 ;
97use anchor_spl:: token_interface:: { Mint , TokenAccount , TokenInterface } ;
108use phoenix:: quantities:: WrapperU64 ;
@@ -19,13 +17,12 @@ use crate::instructions::constraints::*;
1917use crate :: instructions:: optional_accounts:: { load_maps, AccountMaps } ;
2018use crate :: math:: casting:: Cast ;
2119use crate :: math:: constants:: {
22- AMM_TIMES_PEG_TO_QUOTE_PRECISION_RATIO , AMM_TIMES_PEG_TO_QUOTE_PRECISION_RATIO_I128 ,
23- DEFAULT_LIQUIDATION_MARGIN_BUFFER_RATIO , FEE_POOL_TO_REVENUE_POOL_THRESHOLD ,
24- IF_FACTOR_PRECISION , INSURANCE_A_MAX , INSURANCE_B_MAX , INSURANCE_C_MAX ,
25- INSURANCE_SPECULATIVE_MAX , LIQUIDATION_FEE_PRECISION , MAX_CONCENTRATION_COEFFICIENT ,
26- MAX_SQRT_K , MAX_UPDATE_K_PRICE_CHANGE , PERCENTAGE_PRECISION , PERCENTAGE_PRECISION_I64 ,
27- QUOTE_SPOT_MARKET_INDEX , SPOT_CUMULATIVE_INTEREST_PRECISION , SPOT_IMF_PRECISION ,
28- SPOT_WEIGHT_PRECISION , THIRTEEN_DAY , TWENTY_FOUR_HOUR ,
20+ AMM_TIMES_PEG_TO_QUOTE_PRECISION_RATIO , DEFAULT_LIQUIDATION_MARGIN_BUFFER_RATIO ,
21+ FEE_POOL_TO_REVENUE_POOL_THRESHOLD , IF_FACTOR_PRECISION , INSURANCE_A_MAX , INSURANCE_B_MAX ,
22+ INSURANCE_C_MAX , INSURANCE_SPECULATIVE_MAX , LIQUIDATION_FEE_PRECISION ,
23+ MAX_CONCENTRATION_COEFFICIENT , MAX_SQRT_K , MAX_UPDATE_K_PRICE_CHANGE , PERCENTAGE_PRECISION ,
24+ PERCENTAGE_PRECISION_I64 , QUOTE_SPOT_MARKET_INDEX , SPOT_CUMULATIVE_INTEREST_PRECISION ,
25+ SPOT_IMF_PRECISION , SPOT_WEIGHT_PRECISION , THIRTEEN_DAY , TWENTY_FOUR_HOUR ,
2926} ;
3027use crate :: math:: cp_curve:: get_update_k_result;
3128use crate :: math:: helpers:: get_proportion_u128;
@@ -4860,27 +4857,18 @@ pub fn handle_update_mm_oracle(ctx: Context<Empty>, oracle_price: i64) -> Result
48604857 Ok ( ( ) )
48614858}
48624859
4863- pub fn handle_update_mm_oracle_native ( accounts : & [ AccountInfo ] , oracle_price : i64 ) -> Result < ( ) > {
4864- :: solana_program:: log:: sol_log_compute_units ( ) ;
4865-
4866- let accounts_iter = & mut accounts. iter ( ) ;
4867- let perp_market_account = next_account_info ( accounts_iter) ?;
4868- let signer_account = next_account_info ( accounts_iter) ?;
4869-
4870- validate ! (
4871- * signer_account. key == admin_hot_wallet:: id( ) && signer_account. is_signer,
4872- ErrorCode :: DefaultError ,
4860+ pub fn handle_update_mm_oracle_native ( accounts : & [ AccountInfo ] , data : & [ u8 ] ) -> Result < ( ) > {
4861+ let signer_account = & accounts[ 1 ] ;
4862+ #[ cfg( not( feature = "anchor-test" ) ) ]
4863+ assert ! (
4864+ signer_account. is_signer && * signer_account. key == admin_hot_wallet:: id( ) ,
48734865 "signer must be admin hot wallet, signer: {}, admin hot wallet: {}" ,
48744866 signer_account. key,
48754867 admin_hot_wallet:: id( )
4876- ) ?;
4877-
4878- let mut data = perp_market_account
4879- . try_borrow_mut_data ( )
4880- . or ( Err ( ErrorCode :: DefaultError ) ) ?;
4881-
4882- data[ 828 ..840 ] . copy_from_slice ( & Clock :: get ( ) ?. slot . to_le_bytes ( ) ) ;
4883- data[ 912 ..920 ] . copy_from_slice ( oracle_price. to_le_bytes ( ) . as_ref ( ) ) ;
4868+ ) ;
4869+ let mut perp_market = accounts[ 0 ] . data . borrow_mut ( ) ;
4870+ perp_market[ 832 ..840 ] . copy_from_slice ( & data[ 5 ..5 + 8 ] ) ;
4871+ perp_market[ 912 ..920 ] . copy_from_slice ( & data[ 13 ..13 + 8 ] ) ;
48844872
48854873 Ok ( ( ) )
48864874}
0 commit comments