kabu_strategy_backrun/
swap_calculator.rs1use 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 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}