use alloy_primitives::{Address, B256, U256};
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct PoolState {
pub token0: Address,
pub token1: Address,
pub fee: u32,
pub tick_spacing: i32,
pub sqrt_price_x96: U256,
pub liquidity: u128,
pub tick: i32,
pub ticks: Vec<TickInfo>,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct TickInfo {
pub tick: i32,
pub liquidity_net: i128,
pub liquidity_gross: u128,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct PositionState {
pub token_id: U256,
pub owner: Address,
pub token0: Address,
pub token1: Address,
pub fee: u32,
pub tick_lower: i32,
pub tick_upper: i32,
pub liquidity: u128,
pub fees_owed_0: U256,
pub fees_owed_1: U256,
}
#[derive(Copy, Clone, Debug, PartialEq, Eq)]
pub enum SwapRouterKind {
V1,
V02,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct V3ProtocolConfig {
pub factory: Address,
pub pool_deployer: Option<Address>,
pub router: Address,
pub swap_router_kind: SwapRouterKind,
pub position_mgr: Address,
pub init_code_hash: B256,
pub fee_tiers: &'static [u32],
pub multicall: Address,
pub quoter: Option<Address>,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct ExactInParams {
pub token_in: Address,
pub token_out: Address,
pub amount_in: U256,
pub recipient: Address,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct ExactOutParams {
pub token_in: Address,
pub token_out: Address,
pub amount_out: U256,
pub recipient: Address,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct Quote {
pub amount_in: U256,
pub amount_out: U256,
pub sqrt_price_x96_after: U256,
pub price_impact_bps: u16,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct AddLiquidityParams {
pub token0: Address,
pub token1: Address,
pub fee: u32,
pub tick_lower: i32,
pub tick_upper: i32,
pub amount0_desired: U256,
pub amount1_desired: U256,
pub recipient: Address,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct RemoveLiquidityParams {
pub token_id: U256,
pub liquidity: u128,
pub amount0_min: Option<U256>,
pub amount1_min: Option<U256>,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct CollectFeesParams {
pub token_id: U256,
pub recipient: Address,
pub token0: Address,
pub token1: Address,
pub caller: Address,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct RemoveAndCollectParams {
pub token_id: U256,
pub liquidity: u128,
pub amount0_min: Option<U256>,
pub amount1_min: Option<U256>,
pub recipient: Address,
pub token0: Address,
pub token1: Address,
pub caller: Address,
}
pub use wp_evm_base::types::PlanFragment;
#[cfg(test)]
mod tests {
use super::*;
use alloy_primitives::{address, U256};
#[test]
fn pool_state_constructs() {
let s = PoolState {
token0: address!("0x0000000000000000000000000000000000000001"),
token1: address!("0x0000000000000000000000000000000000000002"),
fee: 3000,
tick_spacing: 60,
sqrt_price_x96: U256::from(1u64) << 96,
liquidity: 0u128,
tick: 0i32,
ticks: vec![],
};
assert_eq!(s.fee, 3000);
}
#[test]
fn plan_fragment_default_is_empty() {
let f = PlanFragment::default();
assert!(f.calls.is_empty());
assert!(f.approvals.is_empty());
assert_eq!(f.value, U256::ZERO);
}
}