@@ -3,6 +3,7 @@ use anchor_spl::associated_token::AssociatedToken;
33use std:: convert:: identity;
44use std:: mem:: size_of;
55
6+ use crate :: math:: amm:: calculate_net_user_pnl;
67use crate :: msg;
78use crate :: state:: lp_pool:: {
89 AmmConstituentDatum , AmmConstituentMapping , Constituent , ConstituentTargetBase , LPPool ,
@@ -72,7 +73,7 @@ use crate::state::perp_market_map::{get_writable_perp_market_set, MarketSet};
7273use crate :: state:: protected_maker_mode_config:: ProtectedMakerModeConfig ;
7374use crate :: state:: pyth_lazer_oracle:: { PythLazerOracle , PYTH_LAZER_ORACLE_SEED } ;
7475use crate :: state:: spot_market:: {
75- AssetTier , InsuranceFund , SpotBalanceType , SpotFulfillmentConfigStatus , SpotMarket ,
76+ AssetTier , InsuranceFund , SpotBalance , SpotBalanceType , SpotFulfillmentConfigStatus , SpotMarket ,
7677} ;
7778use crate :: state:: spot_market_map:: get_writable_spot_market_set;
7879use crate :: state:: state:: { ExchangeStatus , FeeStructure , OracleGuardRails , State } ;
@@ -965,7 +966,8 @@ pub fn handle_initialize_perp_market(
965966 high_leverage_margin_ratio_maintenance : 0 ,
966967 protected_maker_limit_price_divisor : 0 ,
967968 protected_maker_dynamic_divisor : 0 ,
968- padding : [ 0 ; 36 ] ,
969+ lp_fee_transfer_scalar : 1 ,
970+ padding : [ 0 ; 35 ] ,
969971 amm : AMM {
970972 oracle : * ctx. accounts . oracle . key ,
971973 oracle_source,
@@ -1115,8 +1117,8 @@ pub fn handle_update_init_amm_cache_info<'c: 'info, 'info>(
11151117
11161118 let AccountMaps {
11171119 perp_market_map,
1118- spot_market_map : _ ,
1119- oracle_map : _ ,
1120+ spot_market_map,
1121+ mut oracle_map ,
11201122 } = load_maps (
11211123 & mut ctx. remaining_accounts . iter ( ) . peekable ( ) ,
11221124 & MarketSet :: new ( ) ,
@@ -1125,8 +1127,12 @@ pub fn handle_update_init_amm_cache_info<'c: 'info, 'info>(
11251127 None ,
11261128 ) ?;
11271129
1130+ let quote_market = spot_market_map. get_quote_spot_market ( ) ?;
1131+
11281132 for ( _, perp_market_loader) in perp_market_map. 0 {
11291133 let perp_market = perp_market_loader. load ( ) ?;
1134+ let oracle_data = oracle_map. get_price_data ( & perp_market. oracle_id ( ) ) ?;
1135+
11301136 let market_index = perp_market. market_index as usize ;
11311137 let cache = amm_cache. cache . get_mut ( market_index) . unwrap ( ) ;
11321138 cache. oracle = perp_market. amm . oracle ;
@@ -1135,6 +1141,18 @@ pub fn handle_update_init_amm_cache_info<'c: 'info, 'info>(
11351141 . amm
11361142 . historical_oracle_data
11371143 . last_oracle_price_twap ;
1144+ cache. last_fee_pool_balance = get_token_amount (
1145+ perp_market. amm . fee_pool . scaled_balance ,
1146+ & quote_market,
1147+ perp_market. amm . fee_pool . balance_type ( ) ,
1148+ ) ?;
1149+ cache. last_net_pnl_pool_balance = get_token_amount (
1150+ perp_market. pnl_pool . scaled_balance ,
1151+ & quote_market,
1152+ perp_market. pnl_pool . balance_type ( ) ,
1153+ ) ?
1154+ . cast :: < i128 > ( ) ?
1155+ . safe_sub ( calculate_net_user_pnl ( & perp_market. amm , oracle_data. price ) ?) ?;
11381156 }
11391157
11401158 Ok ( ( ) )
@@ -3804,6 +3822,25 @@ pub fn handle_update_perp_market_min_order_size(
38043822 Ok ( ( ) )
38053823}
38063824
3825+ #[ access_control(
3826+ perp_market_valid( & ctx. accounts. perp_market)
3827+ ) ]
3828+ pub fn handle_update_perp_market_lp_pool_fee_transfer_scalar (
3829+ ctx : Context < AdminUpdatePerpMarket > ,
3830+ lp_fee_transfer_scalar : u8 ,
3831+ ) -> Result < ( ) > {
3832+ let perp_market = & mut load_mut ! ( ctx. accounts. perp_market) ?;
3833+ msg ! ( "perp market {}" , perp_market. market_index) ;
3834+ msg ! (
3835+ "perp_market.: {:?} -> {:?}" ,
3836+ perp_market. lp_fee_transfer_scalar,
3837+ lp_fee_transfer_scalar
3838+ ) ;
3839+
3840+ perp_market. lp_fee_transfer_scalar = lp_fee_transfer_scalar;
3841+ Ok ( ( ) )
3842+ }
3843+
38073844#[ access_control(
38083845 spot_market_valid( & ctx. accounts. spot_market)
38093846) ]
@@ -4516,6 +4553,8 @@ pub fn handle_initialize_lp_pool(
45164553 revenue_rebalance_period,
45174554 next_mint_redeem_id : 1 ,
45184555 usdc_consituent_index : 0 ,
4556+ cumulative_usdc_sent_to_perp_markets : 0 ,
4557+ cumulative_usdc_received_from_perp_markets : 0 ,
45194558 _padding : [ 0 ; 10 ] ,
45204559 } ;
45214560
0 commit comments