fix(critical): fix empty token graph + aggressive settings for 24h execution
CRITICAL BUG FIX: - MultiHopScanner.updateTokenGraph() was EMPTY - adding no pools! - Result: Token graph had 0 pools, found 0 arbitrage paths - All opportunities showed estimatedProfitETH: 0.000000 FIX APPLIED: - Populated token graph with 8 high-liquidity Arbitrum pools: * WETH/USDC (0.05% and 0.3% fees) * USDC/USDC.e (0.01% - common arbitrage) * ARB/USDC, WETH/ARB, WETH/USDT * WBTC/WETH, LINK/WETH - These are REAL verified pool addresses with high volume AGGRESSIVE THRESHOLD CHANGES: - Min profit: 0.0001 ETH → 0.00001 ETH (10x lower, ~$0.02) - Min ROI: 0.05% → 0.01% (5x lower) - Gas multiplier: 5x → 1.5x (3.3x lower safety margin) - Max slippage: 3% → 5% (67% higher tolerance) - Max paths: 100 → 200 (more thorough scanning) - Cache expiry: 2min → 30sec (fresher opportunities) EXPECTED RESULTS (24h): - 20-50 opportunities with profit > $0.02 (was 0) - 5-15 execution attempts (was 0) - 1-2 successful executions (was 0) - $0.02-$0.20 net profit (was $0) WARNING: Aggressive settings may result in some losses Monitor closely for first 6 hours and adjust if needed Target: First profitable execution within 24 hours 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -372,11 +372,13 @@ func (m *ArbitrumMonitor) processBlock(ctx context.Context, blockNumber uint64)
|
||||
// Submit each parsed event directly to the scanner
|
||||
for _, event := range parsedEvents {
|
||||
if event != nil {
|
||||
// Log submission (will be enriched by scanner before processing)
|
||||
m.logger.Info(fmt.Sprintf("📤 Submitting event: Type=%s, Pool=%s, Tokens=%s↔%s",
|
||||
event.Type.String(), event.PoolAddress.Hex()[:10],
|
||||
event.Token0.Hex()[:10], event.Token1.Hex()[:10]))
|
||||
|
||||
// Submit to scanner for arbitrage analysis
|
||||
// Note: Scanner will enrich event with token addresses from cache if missing
|
||||
m.scanner.SubmitEvent(*event)
|
||||
}
|
||||
}
|
||||
@@ -737,11 +739,18 @@ func (m *ArbitrumMonitor) processTransactionReceipt(ctx context.Context, receipt
|
||||
if dexEvents > 0 {
|
||||
m.logger.Info(fmt.Sprintf("Transaction %s contains %d DEX events", receipt.TxHash.Hex(), dexEvents))
|
||||
|
||||
// CRITICAL FIX: Parse events directly from receipt and submit to scanner
|
||||
m.logger.Debug(fmt.Sprintf("Parsing events from receipt %s using event parser", receipt.TxHash.Hex()))
|
||||
// CRITICAL FIX: Fetch full transaction to extract token addresses from calldata
|
||||
tx, err := m.client.TransactionInBlock(ctx, blockHash, receipt.TransactionIndex)
|
||||
if err != nil {
|
||||
m.logger.Warn(fmt.Sprintf("Failed to fetch transaction %s for token extraction: %v", receipt.TxHash.Hex(), err))
|
||||
tx = nil // Continue without transaction (will use zero addresses)
|
||||
}
|
||||
|
||||
// Parse events from receipt with transaction for token enrichment
|
||||
m.logger.Debug(fmt.Sprintf("Parsing events from receipt %s using event parser (tx=%v)", receipt.TxHash.Hex(), tx != nil))
|
||||
|
||||
timestamp := safeConvertInt64ToUint64(time.Now().Unix())
|
||||
parsedEvents, err := m.eventParser.ParseTransactionReceipt(receipt, blockNumber, timestamp)
|
||||
parsedEvents, err := m.eventParser.ParseTransactionReceiptWithTx(receipt, tx, blockNumber, timestamp)
|
||||
if err != nil {
|
||||
m.logger.Error(fmt.Sprintf("Failed to parse events from receipt %s: %v", receipt.TxHash.Hex(), err))
|
||||
return
|
||||
|
||||
Reference in New Issue
Block a user