kabu_strategy_backrun/
swap_calculator.rs

1use alloy_evm::EvmEnv;
2use alloy_primitives::U256;
3use alloy_primitives::utils::parse_units;
4use kabu_evm_db::KabuDBError;
5use kabu_types_swap::{SwapError, SwapErrorKind, SwapLine};
6use lazy_static::lazy_static;
7use revm::DatabaseRef;
8
9lazy_static! {
10    static ref START_OPTIMIZE_INPUT: U256 = parse_units("0.01", "ether").unwrap().get_absolute();
11}
12
13pub struct SwapCalculator {}
14
15impl SwapCalculator {
16    #[inline]
17    #[allow(clippy::result_large_err)]
18    pub fn calculate<'a, DB: DatabaseRef<Error = KabuDBError>>(
19        path: &'a mut SwapLine,
20        db: &DB,
21        evm_env: EvmEnv,
22    ) -> eyre::Result<&'a mut SwapLine, SwapError> {
23        let first_token = path.get_first_token().unwrap();
24        if let Some(amount_in) = first_token.calc_token_value_from_eth(*START_OPTIMIZE_INPUT) {
25            //trace!("calculate : {} amount in : {}",first_token.get_symbol(), first_token.to_float(amount_in) );
26            path.optimize_with_in_amount(db, evm_env, amount_in)
27        } else {
28            Err(path.to_error(SwapErrorKind::CalculationError("PRICE_NOT_SET".to_string())))
29        }
30    }
31}