use alloy::{network::Ethereum, primitives::Address, providers::DynProvider};
use tracing::{debug, error, instrument};
use uniswap_sdk_core::entities::BaseCurrency;
use waterpump_evm_core::pool_key::SlipstreamPoolKey;
#[derive(Clone, Debug)]
pub struct SlipstreamPoolInfuser {
pub pool_key: SlipstreamPoolKey,
pub pool_address: Address,
pub position_manager_address: Address,
pub sender_address: Address,
pub provider: DynProvider<Ethereum>,
}
impl SlipstreamPoolInfuser {
#[instrument(skip(pool_key), fields(pool_address = ?pool_address, position_manager_address = ?position_manager_address, token_a = ?pool_key.token_a.address(), token_b = ?pool_key.token_b.address(), tick_spacing = ?pool_key.tick_spacing, sender_address = ?sender_address))]
pub fn new(
pool_key: SlipstreamPoolKey,
pool_address: Address,
position_manager_address: Address,
sender_address: Address,
provider: DynProvider<Ethereum>,
) -> Self {
debug!(
pool_address = ?pool_address,
position_manager_address = ?position_manager_address,
"Creating SlipstreamPoolInfuser"
);
Self { pool_key, pool_address, position_manager_address, sender_address, provider }
}
pub fn sender_address(&self) -> Address { self.sender_address }
pub fn pool_address(&self) -> Address { self.pool_address }
pub fn position_manager_address(&self) -> Address { self.position_manager_address }
pub fn pool_key(&self) -> &SlipstreamPoolKey { &self.pool_key }
}
use crate::impl_token_helper;
impl_token_helper!(SlipstreamPoolInfuser);
use crate::{
impl_pool_base, impl_slipstream_pool_infuser, impl_slipstream_pool_state,
impl_slipstream_pool_viewer,
};
impl_slipstream_pool_viewer!(SlipstreamPoolInfuser);
impl_slipstream_pool_state!(SlipstreamPoolInfuser);
impl_slipstream_pool_infuser!(SlipstreamPoolInfuser);
impl_pool_base!(SlipstreamPoolInfuser);
pub fn handle_slipstream_transaction_error(
err: Box<dyn std::fmt::Display + Send + Sync>,
) -> anyhow::Error {
let error_msg = err.to_string();
error!(
error = %error_msg,
"Slipstream transaction error occurred"
);
anyhow::anyhow!(
"Failed to send Slipstream transaction: {}. This may be due to insufficient gas, network \
issues, or contract revert. Check the transaction parameters and network conditions.",
error_msg
)
}