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:
@@ -9,6 +9,7 @@ import (
|
||||
|
||||
"github.com/ethereum/go-ethereum/common"
|
||||
"github.com/ethereum/go-ethereum/core/types"
|
||||
|
||||
"github.com/fraktal/mev-beta/internal/config"
|
||||
"github.com/fraktal/mev-beta/internal/logger"
|
||||
"github.com/fraktal/mev-beta/pkg/arbitrage"
|
||||
@@ -35,7 +36,7 @@ type MEVCoordinator struct {
|
||||
rawTransactions chan *RawTransaction
|
||||
parsedEvents chan *events.Event
|
||||
poolUpdates chan *PoolUpdate
|
||||
arbitrageOppCh chan *ArbitrageOpportunity
|
||||
arbitrageOppCh chan *OrchestratorOpportunity
|
||||
|
||||
// Coordination
|
||||
wg sync.WaitGroup
|
||||
@@ -65,6 +66,14 @@ type PoolUpdate struct {
|
||||
}
|
||||
|
||||
// Use the canonical ArbitrageOpportunity from types package
|
||||
type OrchestratorOpportunity struct {
|
||||
Paths []*arbitrage.ArbitragePath
|
||||
TriggerToken common.Address
|
||||
Amount *big.Int
|
||||
NetProfit *big.Int
|
||||
ROI float64
|
||||
DetectedAt time.Time
|
||||
}
|
||||
|
||||
// CoordinatorMetrics tracks performance metrics
|
||||
type CoordinatorMetrics struct {
|
||||
@@ -103,7 +112,7 @@ func NewMEVCoordinator(
|
||||
rawTransactions: make(chan *RawTransaction, config.Bot.ChannelBufferSize),
|
||||
parsedEvents: make(chan *events.Event, config.Bot.ChannelBufferSize),
|
||||
poolUpdates: make(chan *PoolUpdate, config.Bot.ChannelBufferSize),
|
||||
arbitrageOppCh: make(chan *ArbitrageOpportunity, 100),
|
||||
arbitrageOppCh: make(chan *OrchestratorOpportunity, 100),
|
||||
|
||||
ctx: ctx,
|
||||
cancel: cancel,
|
||||
@@ -356,7 +365,7 @@ func (mc *MEVCoordinator) triggerArbitrageScan(event *events.Event) {
|
||||
totalProfit.Add(totalProfit, path.NetProfit)
|
||||
}
|
||||
|
||||
opportunity := &ArbitrageOpportunity{
|
||||
opportunity := &OrchestratorOpportunity{
|
||||
Paths: paths,
|
||||
TriggerToken: triggerToken,
|
||||
Amount: amount,
|
||||
@@ -431,7 +440,7 @@ func (mc *MEVCoordinator) startOpportunityHandler() {
|
||||
}
|
||||
|
||||
// handleArbitrageOpportunity handles a detected arbitrage opportunity
|
||||
func (mc *MEVCoordinator) handleArbitrageOpportunity(opp *ArbitrageOpportunity) {
|
||||
func (mc *MEVCoordinator) handleArbitrageOpportunity(opp *OrchestratorOpportunity) {
|
||||
mc.logger.Info(fmt.Sprintf("🎯 ARBITRAGE OPPORTUNITY DETECTED!"))
|
||||
mc.logger.Info(fmt.Sprintf(" Token: %s", opp.TriggerToken.Hex()))
|
||||
mc.logger.Info(fmt.Sprintf(" Amount: %s wei", opp.Amount.String()))
|
||||
|
||||
Reference in New Issue
Block a user