// Package validation defines the validation interface for swap events and pools package validation import ( "context" "math/big" "github.com/ethereum/go-ethereum/common" "github.com/your-org/mev-bot/pkg/types" ) // Validator defines the interface for validating swap events and pools type Validator interface { // ValidateSwapEvent validates a swap event ValidateSwapEvent(ctx context.Context, event *types.SwapEvent) error // ValidatePoolInfo validates pool information ValidatePoolInfo(ctx context.Context, pool *types.PoolInfo) error // FilterValid filters a slice of swap events, returning only valid ones FilterValid(ctx context.Context, events []*types.SwapEvent) []*types.SwapEvent // GetValidationRules returns the current validation rules GetValidationRules() *ValidationRules } // ValidationRules defines the rules for validation type ValidationRules struct { // Reject zero addresses RejectZeroAddresses bool // Reject zero amounts RejectZeroAmounts bool // Minimum amount threshold (in wei, scaled to 18 decimals) MinAmount *big.Int // Maximum amount threshold (in wei, scaled to 18 decimals) MaxAmount *big.Int // Allowed protocols (empty = all allowed) AllowedProtocols map[types.ProtocolType]bool // Reject events from blacklisted pools BlacklistedPools map[common.Address]bool // Reject events from blacklisted tokens BlacklistedTokens map[common.Address]bool // Validate decimal precision ValidateDecimals bool // Maximum acceptable slippage (in basis points, e.g. 50 = 0.5%) MaxSlippageBps uint32 } // DefaultValidationRules returns the default validation rules func DefaultValidationRules() *ValidationRules { return &ValidationRules{ RejectZeroAddresses: true, RejectZeroAmounts: true, MinAmount: big.NewInt(1000), // 0.000000000000001 ETH minimum MaxAmount: new(big.Int).Exp(big.NewInt(10), big.NewInt(30), nil), // 1 trillion tokens max AllowedProtocols: make(map[types.ProtocolType]bool), BlacklistedPools: make(map[common.Address]bool), BlacklistedTokens: make(map[common.Address]bool), ValidateDecimals: true, MaxSlippageBps: 50, // 0.5% max slippage } }