// Package types provides shared types used across multiple packages to avoid circular dependencies package types import ( "math/big" "github.com/ethereum/go-ethereum/common" ) // ArbitrageOpportunity represents a potential arbitrage opportunity // This is the canonical definition used across all packages type ArbitrageOpportunity struct { Path []string // Token path for the arbitrage Pools []string // Pools involved in the arbitrage AmountIn *big.Int // Input amount for the arbitrage Profit *big.Int // Estimated profit in wei NetProfit *big.Int // Net profit after gas costs GasEstimate *big.Int // Estimated gas cost ROI float64 // Return on investment percentage Protocol string // DEX protocol ExecutionTime int64 // Estimated execution time in milliseconds Confidence float64 // 0-1 confidence score PriceImpact float64 // Price impact percentage MaxSlippage float64 // Maximum acceptable slippage TokenIn common.Address // Input token address TokenOut common.Address // Output token address Timestamp int64 // Detection timestamp Risk float64 // Risk assessment score (0-1) } // PriceMovement represents a potential price movement type PriceMovement struct { Token0 string // Token address Token1 string // Token address Pool string // Pool address Protocol string // DEX protocol AmountIn *big.Int // Amount of token being swapped in AmountOut *big.Int // Amount of token being swapped out PriceBefore *big.Float // Price before the swap PriceAfter *big.Float // Price after the swap (to be calculated) PriceImpact float64 // Calculated price impact TickBefore int // Tick before the swap TickAfter int // Tick after the swap (to be calculated) Timestamp int64 // Event timestamp } // CachedData represents cached pool data type CachedData struct { Address common.Address Token0 common.Address Token1 common.Address Fee int64 Liquidity *big.Int SqrtPriceX96 *big.Int Tick int TickSpacing int LastUpdated int64 Protocol string } // SwapEvent represents a swap event type SwapEvent struct { Type int Protocol string PoolAddress common.Address Token0 common.Address Token1 common.Address Amount0 *big.Int Amount1 *big.Int SqrtPriceX96 *big.Int Liquidity *big.Int Tick int Timestamp int64 TransactionHash common.Hash BlockNumber uint64 Fee uint32 } // LiquidityEvent represents a liquidity event (add/remove) type LiquidityEvent struct { Type int Protocol string PoolAddress common.Address Token0 common.Address Token1 common.Address Amount0 *big.Int Amount1 *big.Int Liquidity *big.Int Tick int Timestamp int64 TransactionHash common.Hash BlockNumber uint64 Fee uint32 Sender common.Address Recipient common.Address EventType string // "add" or "remove" } // PoolData represents pool data type PoolData struct { Address common.Address Token0 common.Address Token1 common.Address Fee int64 Liquidity *big.Int SqrtPriceX96 *big.Int Tick int64 TickSpacing int LastUpdated int64 Protocol string } // Constants for event types const ( Unknown = iota Swap AddLiquidity RemoveLiquidity NewPool )