@@ -2,7 +2,7 @@ use crate::math::swap::{amount_before_fee, compute_fee};
22use crate :: math:: tick:: { approximate_sqrt_ratio_to_tick, FULL_RANGE_TICK_SPACING } ;
33use crate :: quoting:: base_pool:: { BasePool , BasePoolQuoteError , BasePoolResources , BasePoolState } ;
44use crate :: quoting:: types:: { BlockTimestamp , NodeKey , Pool , Quote , QuoteParams } ;
5- use core:: ops:: { Add , AddAssign } ;
5+ use core:: ops:: { Add , AddAssign , Sub , SubAssign } ;
66
77// Resources consumed during any swap execution in a full range pool.
88#[ derive( Clone , Copy , Default , Debug , PartialEq , Eq ) ]
@@ -27,6 +27,22 @@ impl Add for MEVResistPoolResources {
2727 }
2828}
2929
30+ impl SubAssign for MEVResistPoolResources {
31+ fn sub_assign ( & mut self , rhs : Self ) {
32+ self . state_update_count -= rhs. state_update_count ;
33+ self . base_pool_resources -= rhs. base_pool_resources ;
34+ }
35+ }
36+
37+ impl Sub for MEVResistPoolResources {
38+ type Output = Self ;
39+
40+ fn sub ( mut self , rhs : Self ) -> Self :: Output {
41+ self -= rhs;
42+ self
43+ }
44+ }
45+
3046#[ derive( Clone , Debug , PartialEq , Eq ) ]
3147#[ cfg_attr( feature = "serde" , derive( serde:: Serialize , serde:: Deserialize ) ) ]
3248pub struct MEVResistPool {
@@ -142,7 +158,7 @@ impl Pool for MEVResistPool {
142158 . map_or ( self . last_update_time , |mrps| mrps. last_update_time ) ;
143159
144160 // if the time is updated, fees are accumulated to the current liquidity providers
145- // this is at least 2 additional SSTOREs
161+ // this causes up to 3 additional SSTOREs (~15k gas)
146162 let state_update_count = if pool_time != current_time { 1 } else { 0 } ;
147163
148164 if fixed_point_additional_fee == 0 {
@@ -167,12 +183,10 @@ impl Pool for MEVResistPool {
167183
168184 if params. token_amount . amount >= 0 {
169185 // exact input, remove the additional fee from the output
170- calculated_amount -=
171- compute_fee ( calculated_amount as u128 , fixed_point_additional_fee) ;
186+ calculated_amount -= compute_fee ( calculated_amount, fixed_point_additional_fee) ;
172187 } else {
173- let input_amount_fee: u128 =
174- compute_fee ( calculated_amount as u128 , pool_config. fee ) ;
175- let input_amount = ( calculated_amount as u128 ) - input_amount_fee;
188+ let input_amount_fee: u128 = compute_fee ( calculated_amount, pool_config. fee ) ;
189+ let input_amount = calculated_amount - input_amount_fee;
176190
177191 if let Some ( bf) = amount_before_fee ( input_amount, fixed_point_additional_fee) {
178192 let fee = bf - input_amount;
0 commit comments