- Created UniswapV2Parser with Swap event parsing - Manual ABI decoding for reliability and performance - Token extraction from pool cache - Proper decimal handling (6, 8, 18 decimals) - Mint/Burn events recognized but ignored for MVP - Receipt parsing for multi-event transactions - Comprehensive test suite with 14 test cases - Test helpers for reusable mock logger and ABI encoding - Factory registration via NewDefaultFactory() - Defensive programming (nil logger allowed) Coverage: 86.6% on uniswap_v2.go Tests: All 14 test cases passing Lines: ~240 implementation, ~400 tests Fast MVP: Week 1, Days 1-2 ✅ COMPLETE 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
42 lines
936 B
Go
42 lines
936 B
Go
package parsers
|
|
|
|
import (
|
|
"log/slog"
|
|
|
|
"coppertone.tech/fraktal/mev-bot/pkg/cache"
|
|
"coppertone.tech/fraktal/mev-bot/pkg/observability"
|
|
"coppertone.tech/fraktal/mev-bot/pkg/types"
|
|
)
|
|
|
|
// NewDefaultFactory creates a factory with all parsers registered
|
|
func NewDefaultFactory(poolCache cache.PoolCache, logger observability.Logger) (Factory, error) {
|
|
if poolCache == nil {
|
|
return nil, types.ErrCacheNotInitialized
|
|
}
|
|
|
|
if logger == nil {
|
|
// Create default logger
|
|
logger = observability.NewLogger(slog.LevelInfo)
|
|
}
|
|
|
|
factory := NewFactory()
|
|
|
|
// Register UniswapV2 parser
|
|
uniV2Parser, err := NewUniswapV2Parser(poolCache, logger)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if err := factory.RegisterParser(types.ProtocolUniswapV2, uniV2Parser); err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
// TODO: Register other parsers as they're implemented
|
|
// - UniswapV3
|
|
// - Curve
|
|
// - Balancer
|
|
// - SushiSwap
|
|
// - Camelot
|
|
|
|
return factory, nil
|
|
}
|