use alloy_primitives::{Address, B256, U256};
use wp_evm_algebra_interfaces::farming::IncentiveKey;
#[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, Copy, PartialEq, Eq)]
pub struct AlgebraProtocolConfig {
pub factory: Address,
pub pool_deployer: Address,
pub router: Address,
pub position_mgr: Address,
pub init_code_hash: B256,
pub multicall: Address,
pub quoter: Option<Address>,
pub farming_center: Option<Address>,
}
#[derive(Debug, Clone)]
pub struct FarmingClaim {
pub incentive_key: IncentiveKey,
pub token_ids: Vec<U256>,
}
#[derive(Debug, Clone)]
pub struct FarmingEarnedGrid {
pub pool: Address,
pub incentive_key: IncentiveKey,
pub token_ids: Vec<U256>,
pub reward: Vec<U256>,
pub bonus_reward: Vec<U256>,
}
#[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,
pub effective_fee_pips: u32,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct AddLiquidityParams {
pub token0: Address,
pub token1: Address,
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 PositionState {
pub token_id: U256,
pub owner: Address,
pub token0: Address,
pub token1: Address,
pub tick_lower: i32,
pub tick_upper: i32,
pub liquidity: u128,
pub fees_owed_0: U256,
pub fees_owed_1: U256,
}
pub use wp_evm_base::types::PlanFragment;
pub use wp_evm_v3_core::data::{CollectFeesParams, RemoveAndCollectParams, RemoveLiquidityParams};
#[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: 500,
tick_spacing: 60,
sqrt_price_x96: U256::from(1u64) << 96,
liquidity: 0u128,
tick: 0i32,
ticks: vec![],
};
assert_eq!(s.fee, 500);
}
#[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);
}
}