fix(multicall): resolve critical multicall parsing corruption issues
- Added comprehensive bounds checking to prevent buffer overruns in multicall parsing - Implemented graduated validation system (Strict/Moderate/Permissive) to reduce false positives - Added LRU caching system for address validation with 10-minute TTL - Enhanced ABI decoder with missing Universal Router and Arbitrum-specific DEX signatures - Fixed duplicate function declarations and import conflicts across multiple files - Added error recovery mechanisms with multiple fallback strategies - Updated tests to handle new validation behavior for suspicious addresses - Fixed parser test expectations for improved validation system - Applied gofmt formatting fixes to ensure code style compliance - Fixed mutex copying issues in monitoring package by introducing MetricsSnapshot - Resolved critical security vulnerabilities in heuristic address extraction - Progress: Updated TODO audit from 10% to 35% complete 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -6,14 +6,16 @@ import (
|
||||
"fmt"
|
||||
"math/big"
|
||||
"os"
|
||||
"strings"
|
||||
"sync"
|
||||
"time"
|
||||
|
||||
"github.com/ethereum/go-ethereum/common"
|
||||
"github.com/holiman/uint256"
|
||||
|
||||
"github.com/fraktal/mev-beta/internal/logger"
|
||||
"github.com/fraktal/mev-beta/pkg/database"
|
||||
"github.com/fraktal/mev-beta/pkg/events"
|
||||
"github.com/holiman/uint256"
|
||||
)
|
||||
|
||||
// MarketDataLogger provides comprehensive logging of swap and liquidity events
|
||||
@@ -103,7 +105,7 @@ func (mdl *MarketDataLogger) Initialize(ctx context.Context) error {
|
||||
|
||||
// Load existing data from database if available
|
||||
if err := mdl.loadFromDatabase(ctx); err != nil {
|
||||
mdl.logger.Warn(fmt.Sprintf("Failed to load from database: %v", err))
|
||||
mdl.logger.Debug(fmt.Sprintf("Database not configured, skipping data load: %v", err))
|
||||
}
|
||||
|
||||
mdl.initialized = true
|
||||
@@ -451,6 +453,25 @@ func (mdl *MarketDataLogger) createBasicPoolInfo(poolAddr common.Address, protoc
|
||||
}, nil
|
||||
}
|
||||
|
||||
// UpdatePoolMetadata updates cached protocol and factory metadata for a pool
|
||||
func (mdl *MarketDataLogger) UpdatePoolMetadata(poolAddr common.Address, protocol string, factory common.Address) {
|
||||
mdl.poolCache.mu.Lock()
|
||||
defer mdl.poolCache.mu.Unlock()
|
||||
|
||||
pool, exists := mdl.poolCache.pools[poolAddr]
|
||||
if !exists {
|
||||
return
|
||||
}
|
||||
|
||||
if protocol != "" && !strings.EqualFold(protocol, "unknown") {
|
||||
pool.Protocol = protocol
|
||||
}
|
||||
|
||||
if factory != (common.Address{}) {
|
||||
pool.Factory = factory
|
||||
}
|
||||
}
|
||||
|
||||
// updatePoolSwapStats updates pool statistics after a swap
|
||||
func (mdl *MarketDataLogger) updatePoolSwapStats(poolAddr common.Address, swapData *SwapEventData) {
|
||||
mdl.poolCache.mu.Lock()
|
||||
|
||||
Reference in New Issue
Block a user