Running comprehensive analysis of the MEV bot system... Checking Go imports Checking Go module dependencies... Running all tests... === RUN TestEthAmountStringPrefersDecimalSnapshot --- PASS: TestEthAmountStringPrefersDecimalSnapshot (0.00s) === RUN TestEthAmountStringFallsBackToWei --- PASS: TestEthAmountStringFallsBackToWei (0.00s) === RUN TestGweiAmountStringFormatsTwoDecimals --- PASS: TestGweiAmountStringFormatsTwoDecimals (0.00s) === RUN TestPerformRiskChecksRespectsDailyLossLimitDecimals 2025/10/08 05:28:26 Failed to create log file logs/mev_bot_opportunities.log: open logs/mev_bot_opportunities.log: no such file or directory, falling back to stdout 2025/10/08 05:28:26 Failed to create log file logs/mev_bot_errors.log: open logs/mev_bot_errors.log: no such file or directory, falling back to stdout 2025/10/08 05:28:26 Failed to create log file logs/mev_bot_performance.log: open logs/mev_bot_performance.log: no such file or directory, falling back to stdout 2025/10/08 05:28:26 Failed to create log file logs/mev_bot_transactions.log: open logs/mev_bot_transactions.log: no such file or directory, falling back to stdout 2025/10/08 05:28:26 [WARN] Daily loss limit reached, skipping opportunity 2025/10/08 05:28:26 [WARN] Daily loss limit reached, skipping opportunity --- PASS: TestPerformRiskChecksRespectsDailyLossLimitDecimals (0.00s) === RUN TestOpportunityHelpersHandleMissingQuantities --- PASS: TestOpportunityHelpersHandleMissingQuantities (0.00s) === RUN TestOpportunityHelpersPreferDecimalSnapshots --- PASS: TestOpportunityHelpersPreferDecimalSnapshots (0.00s) === RUN TestNewMultiHopScanner 2025/10/08 05:28:26 Failed to create log file logs/mev_bot_opportunities.log: open logs/mev_bot_opportunities.log: no such file or directory, falling back to stdout 2025/10/08 05:28:26 Failed to create log file logs/mev_bot_errors.log: open logs/mev_bot_errors.log: no such file or directory, falling back to stdout 2025/10/08 05:28:26 Failed to create log file logs/mev_bot_performance.log: open logs/mev_bot_performance.log: no such file or directory, falling back to stdout 2025/10/08 05:28:26 Failed to create log file logs/mev_bot_transactions.log: open logs/mev_bot_transactions.log: no such file or directory, falling back to stdout --- PASS: TestNewMultiHopScanner (0.00s) === RUN TestTokenGraph --- PASS: TestTokenGraph (0.00s) === RUN TestIsPoolUsable 2025/10/08 05:28:26 Failed to create log file logs/mev_bot_opportunities.log: open logs/mev_bot_opportunities.log: no such file or directory, falling back to stdout 2025/10/08 05:28:26 Failed to create log file logs/mev_bot_errors.log: open logs/mev_bot_errors.log: no such file or directory, falling back to stdout 2025/10/08 05:28:26 Failed to create log file logs/mev_bot_performance.log: open logs/mev_bot_performance.log: no such file or directory, falling back to stdout 2025/10/08 05:28:26 Failed to create log file logs/mev_bot_transactions.log: open logs/mev_bot_transactions.log: no such file or directory, falling back to stdout --- PASS: TestIsPoolUsable (0.00s) === RUN TestCalculateSimpleAMMOutput 2025/10/08 05:28:26 Failed to create log file logs/mev_bot_opportunities.log: open logs/mev_bot_opportunities.log: no such file or directory, falling back to stdout 2025/10/08 05:28:26 Failed to create log file logs/mev_bot_errors.log: open logs/mev_bot_errors.log: no such file or directory, falling back to stdout 2025/10/08 05:28:26 Failed to create log file logs/mev_bot_performance.log: open logs/mev_bot_performance.log: no such file or directory, falling back to stdout 2025/10/08 05:28:26 Failed to create log file logs/mev_bot_transactions.log: open logs/mev_bot_transactions.log: no such file or directory, falling back to stdout --- PASS: TestCalculateSimpleAMMOutput (0.00s) === RUN TestCalculateUniswapV3Output 2025/10/08 05:28:26 Failed to create log file logs/mev_bot_opportunities.log: open logs/mev_bot_opportunities.log: no such file or directory, falling back to stdout 2025/10/08 05:28:26 Failed to create log file logs/mev_bot_errors.log: open logs/mev_bot_errors.log: no such file or directory, falling back to stdout 2025/10/08 05:28:26 Failed to create log file logs/mev_bot_performance.log: open logs/mev_bot_performance.log: no such file or directory, falling back to stdout 2025/10/08 05:28:26 Failed to create log file logs/mev_bot_transactions.log: open logs/mev_bot_transactions.log: no such file or directory, falling back to stdout --- PASS: TestCalculateUniswapV3Output (0.00s) === RUN TestEstimateHopGasCost 2025/10/08 05:28:26 Failed to create log file logs/mev_bot_opportunities.log: open logs/mev_bot_opportunities.log: no such file or directory, falling back to stdout 2025/10/08 05:28:26 Failed to create log file logs/mev_bot_errors.log: open logs/mev_bot_errors.log: no such file or directory, falling back to stdout 2025/10/08 05:28:26 Failed to create log file logs/mev_bot_performance.log: open logs/mev_bot_performance.log: no such file or directory, falling back to stdout 2025/10/08 05:28:26 Failed to create log file logs/mev_bot_transactions.log: open logs/mev_bot_transactions.log: no such file or directory, falling back to stdout --- PASS: TestEstimateHopGasCost (0.00s) === RUN TestIsProfitable 2025/10/08 05:28:26 Failed to create log file logs/mev_bot_opportunities.log: open logs/mev_bot_opportunities.log: no such file or directory, falling back to stdout 2025/10/08 05:28:26 Failed to create log file logs/mev_bot_errors.log: open logs/mev_bot_errors.log: no such file or directory, falling back to stdout 2025/10/08 05:28:26 Failed to create log file logs/mev_bot_performance.log: open logs/mev_bot_performance.log: no such file or directory, falling back to stdout 2025/10/08 05:28:26 Failed to create log file logs/mev_bot_transactions.log: open logs/mev_bot_transactions.log: no such file or directory, falling back to stdout --- PASS: TestIsProfitable (0.00s) === RUN TestCreateArbitragePath 2025/10/08 05:28:26 Failed to create log file logs/mev_bot_opportunities.log: open logs/mev_bot_opportunities.log: no such file or directory, falling back to stdout 2025/10/08 05:28:26 Failed to create log file logs/mev_bot_errors.log: open logs/mev_bot_errors.log: no such file or directory, falling back to stdout 2025/10/08 05:28:26 Failed to create log file logs/mev_bot_performance.log: open logs/mev_bot_performance.log: no such file or directory, falling back to stdout 2025/10/08 05:28:26 Failed to create log file logs/mev_bot_transactions.log: open logs/mev_bot_transactions.log: no such file or directory, falling back to stdout --- PASS: TestCreateArbitragePath (0.00s) === RUN TestScanForArbitrage 2025/10/08 05:28:26 Failed to create log file logs/mev_bot_opportunities.log: open logs/mev_bot_opportunities.log: no such file or directory, falling back to stdout 2025/10/08 05:28:26 Failed to create log file logs/mev_bot_errors.log: open logs/mev_bot_errors.log: no such file or directory, falling back to stdout 2025/10/08 05:28:26 Failed to create log file logs/mev_bot_performance.log: open logs/mev_bot_performance.log: no such file or directory, falling back to stdout 2025/10/08 05:28:26 Failed to create log file logs/mev_bot_transactions.log: open logs/mev_bot_transactions.log: no such file or directory, falling back to stdout 2025/10/08 05:28:26 [INFO] Multi-hop arbitrage scan completed in 8.664µs: found 0 profitable paths out of 0 total paths --- PASS: TestScanForArbitrage (0.00s) PASS ok github.com/fraktal/mev-beta/pkg/arbitrage 0.007s === RUN TestL2MessageParser_ParseL2Message 2025/10/07 19:31:47 Failed to create log file logs/mev_bot_opportunities.log: open logs/mev_bot_opportunities.log: no such file or directory, falling back to stdout 2025/10/07 19:31:47 Failed to create log file logs/mev_bot_errors.log: open logs/mev_bot_errors.log: no such file or directory, falling back to stdout 2025/10/07 19:31:47 Failed to create log file logs/mev_bot_performance.log: open logs/mev_bot_performance.log: no such file or directory, falling back to stdout 2025/10/07 19:31:47 Failed to create log file logs/mev_bot_transactions.log: open logs/mev_bot_transactions.log: no such file or directory, falling back to stdout === RUN TestL2MessageParser_ParseL2Message/Empty_message === RUN TestL2MessageParser_ParseL2Message/Short_message === RUN TestL2MessageParser_ParseL2Message/L2_Transaction_message 2025/10/07 19:31:47 [WARN] Suspicious timestamp: 1234567890 2025/10/07 19:31:47 [WARN] Suspicious timestamp: 1234567890 === RUN TestL2MessageParser_ParseL2Message/L2_Batch_message 2025/10/07 19:31:47 [WARN] Suspicious timestamp: 1234567890 2025/10/07 19:31:47 [WARN] Suspicious timestamp: 1234567890 2025/10/07 19:31:47 [WARN] Zero-length transaction in batch 2025/10/07 19:31:47 [WARN] Zero-length transaction in batch 2025/10/07 19:31:47 [WARN] Zero-length transaction in batch 2025/10/07 19:31:47 [WARN] Zero-length transaction in batch 2025/10/07 19:31:47 [WARN] Zero-length transaction in batch 2025/10/07 19:31:47 [WARN] Zero-length transaction in batch 2025/10/07 19:31:47 [WARN] Zero-length transaction in batch 2025/10/07 19:31:47 [WARN] Zero-length transaction in batch 2025/10/07 19:31:47 [WARN] Zero-length transaction in batch 2025/10/07 19:31:47 [WARN] Zero-length transaction in batch 2025/10/07 19:31:47 [WARN] Zero-length transaction in batch 2025/10/07 19:31:47 [WARN] Zero-length transaction in batch 2025/10/07 19:31:47 [WARN] Zero-length transaction in batch 2025/10/07 19:31:47 [WARN] Zero-length transaction in batch 2025/10/07 19:31:47 [WARN] Zero-length transaction in batch 2025/10/07 19:31:47 [WARN] Zero-length transaction in batch === RUN TestL2MessageParser_ParseL2Message/Unknown_message_type 2025/10/07 19:31:47 [WARN] Suspicious timestamp: 1234567890 2025/10/07 19:31:47 [WARN] Suspicious timestamp: 1234567890 --- PASS: TestL2MessageParser_ParseL2Message (0.00s) --- PASS: TestL2MessageParser_ParseL2Message/Empty_message (0.00s) --- PASS: TestL2MessageParser_ParseL2Message/Short_message (0.00s) --- PASS: TestL2MessageParser_ParseL2Message/L2_Transaction_message (0.00s) --- PASS: TestL2MessageParser_ParseL2Message/L2_Batch_message (0.00s) --- PASS: TestL2MessageParser_ParseL2Message/Unknown_message_type (0.00s) === RUN TestL2MessageParser_ParseDEXInteraction 2025/10/07 19:31:47 Failed to create log file logs/mev_bot_opportunities.log: open logs/mev_bot_opportunities.log: no such file or directory, falling back to stdout 2025/10/07 19:31:47 Failed to create log file logs/mev_bot_errors.log: open logs/mev_bot_errors.log: no such file or directory, falling back to stdout 2025/10/07 19:31:47 Failed to create log file logs/mev_bot_performance.log: open logs/mev_bot_performance.log: no such file or directory, falling back to stdout 2025/10/07 19:31:47 Failed to create log file logs/mev_bot_transactions.log: open logs/mev_bot_transactions.log: no such file or directory, falling back to stdout === RUN TestL2MessageParser_ParseDEXInteraction/Contract_creation_transaction === RUN TestL2MessageParser_ParseDEXInteraction/Unknown_router_address === RUN TestL2MessageParser_ParseDEXInteraction/Uniswap_V3_router_with_exactInputSingle === RUN TestL2MessageParser_ParseDEXInteraction/SushiSwap_router_-_expect_error_due_to_complex_ABI === RUN TestL2MessageParser_ParseDEXInteraction/Unknown_function_selector --- PASS: TestL2MessageParser_ParseDEXInteraction (0.00s) --- PASS: TestL2MessageParser_ParseDEXInteraction/Contract_creation_transaction (0.00s) --- PASS: TestL2MessageParser_ParseDEXInteraction/Unknown_router_address (0.00s) --- PASS: TestL2MessageParser_ParseDEXInteraction/Uniswap_V3_router_with_exactInputSingle (0.00s) --- PASS: TestL2MessageParser_ParseDEXInteraction/SushiSwap_router_-_expect_error_due_to_complex_ABI (0.00s) --- PASS: TestL2MessageParser_ParseDEXInteraction/Unknown_function_selector (0.00s) === RUN TestL2MessageParser_IsSignificantSwap 2025/10/07 19:31:47 Failed to create log file logs/mev_bot_opportunities.log: open logs/mev_bot_opportunities.log: no such file or directory, falling back to stdout 2025/10/07 19:31:47 Failed to create log file logs/mev_bot_errors.log: open logs/mev_bot_errors.log: no such file or directory, falling back to stdout 2025/10/07 19:31:47 Failed to create log file logs/mev_bot_performance.log: open logs/mev_bot_performance.log: no such file or directory, falling back to stdout 2025/10/07 19:31:47 Failed to create log file logs/mev_bot_transactions.log: open logs/mev_bot_transactions.log: no such file or directory, falling back to stdout === RUN TestL2MessageParser_IsSignificantSwap/Small_swap_-_not_significant === RUN TestL2MessageParser_IsSignificantSwap/Large_swap_-_significant === RUN TestL2MessageParser_IsSignificantSwap/Nil_amount_-_not_significant === RUN TestL2MessageParser_IsSignificantSwap/Zero_amount_-_not_significant --- PASS: TestL2MessageParser_IsSignificantSwap (0.00s) --- PASS: TestL2MessageParser_IsSignificantSwap/Small_swap_-_not_significant (0.00s) --- PASS: TestL2MessageParser_IsSignificantSwap/Large_swap_-_significant (0.00s) --- PASS: TestL2MessageParser_IsSignificantSwap/Nil_amount_-_not_significant (0.00s) --- PASS: TestL2MessageParser_IsSignificantSwap/Zero_amount_-_not_significant (0.00s) === RUN TestL2MessageParser_ParseExactInputSingle 2025/10/07 19:31:47 Failed to create log file logs/mev_bot_opportunities.log: open logs/mev_bot_opportunities.log: no such file or directory, falling back to stdout 2025/10/07 19:31:47 Failed to create log file logs/mev_bot_errors.log: open logs/mev_bot_errors.log: no such file or directory, falling back to stdout 2025/10/07 19:31:47 Failed to create log file logs/mev_bot_performance.log: open logs/mev_bot_performance.log: no such file or directory, falling back to stdout 2025/10/07 19:31:47 Failed to create log file logs/mev_bot_transactions.log: open logs/mev_bot_transactions.log: no such file or directory, falling back to stdout --- PASS: TestL2MessageParser_ParseExactInputSingle (0.00s) === RUN TestL2MessageParser_InitialSetup 2025/10/07 19:31:47 Failed to create log file logs/mev_bot_opportunities.log: open logs/mev_bot_opportunities.log: no such file or directory, falling back to stdout 2025/10/07 19:31:47 Failed to create log file logs/mev_bot_errors.log: open logs/mev_bot_errors.log: no such file or directory, falling back to stdout 2025/10/07 19:31:47 Failed to create log file logs/mev_bot_performance.log: open logs/mev_bot_performance.log: no such file or directory, falling back to stdout 2025/10/07 19:31:47 Failed to create log file logs/mev_bot_transactions.log: open logs/mev_bot_transactions.log: no such file or directory, falling back to stdout --- PASS: TestL2MessageParser_InitialSetup (0.00s) PASS ok github.com/fraktal/mev-beta/pkg/arbitrum (cached) ? github.com/fraktal/mev-beta/pkg/arbitrum/common [no test files] ? github.com/fraktal/mev-beta/pkg/arbitrum/discovery [no test files] ? github.com/fraktal/mev-beta/pkg/arbitrum/market [no test files] ? github.com/fraktal/mev-beta/pkg/arbitrum/parser [no test files] ? github.com/fraktal/mev-beta/pkg/bindings [no test files] ? github.com/fraktal/mev-beta/pkg/circuit [no test files] ? github.com/fraktal/mev-beta/pkg/contracts [no test files] === RUN TestDatabaseOperations 2025/10/07 19:31:48 Failed to create log file logs/mev_bot_opportunities.log: open logs/mev_bot_opportunities.log: no such file or directory, falling back to stdout 2025/10/07 19:31:48 Failed to create log file logs/mev_bot_errors.log: open logs/mev_bot_errors.log: no such file or directory, falling back to stdout 2025/10/07 19:31:48 Failed to create log file logs/mev_bot_performance.log: open logs/mev_bot_performance.log: no such file or directory, falling back to stdout 2025/10/07 19:31:48 Failed to create log file logs/mev_bot_transactions.log: open logs/mev_bot_transactions.log: no such file or directory, falling back to stdout 2025/10/07 19:31:48 [INFO] Database initialized successfully 2025/10/07 19:31:48 [DEBUG] Inserted swap event for pool 0x88e6A0c2dDD26FEEb64F039a2c41296FcB3f5640 (tx: 0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef) 2025/10/07 19:31:48 [DEBUG] Inserted add liquidity event for pool 0x88e6A0c2dDD26FEEb64F039a2c41296FcB3f5640 (tx: 0xabcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890) 2025/10/07 19:31:48 [DEBUG] Inserted/updated pool data for pool 0x88e6A0c2dDD26FEEb64F039a2c41296FcB3f5640 --- PASS: TestDatabaseOperations (0.00s) PASS ok github.com/fraktal/mev-beta/pkg/database (cached) === RUN TestEventTypeString --- PASS: TestEventTypeString (0.00s) === RUN TestNewEventParser --- PASS: TestNewEventParser (0.00s) === RUN TestIsDEXInteraction --- PASS: TestIsDEXInteraction (0.00s) === RUN TestIdentifyProtocol --- PASS: TestIdentifyProtocol (0.00s) === RUN TestAddKnownPoolAndGetKnownPools --- PASS: TestAddKnownPoolAndGetKnownPools (0.00s) === RUN TestParseTransaction --- PASS: TestParseTransaction (0.00s) === RUN TestParseTransactionNonDEX --- PASS: TestParseTransactionNonDEX (0.00s) PASS ok github.com/fraktal/mev-beta/pkg/events (cached) ? github.com/fraktal/mev-beta/pkg/exchanges [no test files] ? github.com/fraktal/mev-beta/pkg/execution [no test files] ? github.com/fraktal/mev-beta/pkg/lifecycle [no test files] === RUN TestNewMarketManager 2025/10/08 03:45:16 Failed to create log file logs/mev_bot_opportunities.log: open logs/mev_bot_opportunities.log: no such file or directory, falling back to stdout 2025/10/08 03:45:16 Failed to create log file logs/mev_bot_errors.log: open logs/mev_bot_errors.log: no such file or directory, falling back to stdout 2025/10/08 03:45:16 Failed to create log file logs/mev_bot_performance.log: open logs/mev_bot_performance.log: no such file or directory, falling back to stdout 2025/10/08 03:45:16 Failed to create log file logs/mev_bot_transactions.log: open logs/mev_bot_transactions.log: no such file or directory, falling back to stdout --- PASS: TestNewMarketManager (0.00s) === RUN TestGetPoolCacheHit 2025/10/08 03:45:16 Failed to create log file logs/mev_bot_opportunities.log: open logs/mev_bot_opportunities.log: no such file or directory, falling back to stdout 2025/10/08 03:45:16 Failed to create log file logs/mev_bot_errors.log: open logs/mev_bot_errors.log: no such file or directory, falling back to stdout 2025/10/08 03:45:16 Failed to create log file logs/mev_bot_performance.log: open logs/mev_bot_performance.log: no such file or directory, falling back to stdout 2025/10/08 03:45:16 Failed to create log file logs/mev_bot_transactions.log: open logs/mev_bot_transactions.log: no such file or directory, falling back to stdout --- PASS: TestGetPoolCacheHit (0.00s) === RUN TestGetPoolCacheMiss 2025/10/08 03:45:16 Failed to create log file logs/mev_bot_opportunities.log: open logs/mev_bot_opportunities.log: no such file or directory, falling back to stdout 2025/10/08 03:45:16 Failed to create log file logs/mev_bot_errors.log: open logs/mev_bot_errors.log: no such file or directory, falling back to stdout 2025/10/08 03:45:16 Failed to create log file logs/mev_bot_performance.log: open logs/mev_bot_performance.log: no such file or directory, falling back to stdout 2025/10/08 03:45:16 Failed to create log file logs/mev_bot_transactions.log: open logs/mev_bot_transactions.log: no such file or directory, falling back to stdout manager_test.go:86: requires live RPC --- SKIP: TestGetPoolCacheMiss (0.00s) === RUN TestGetPoolsByTokens 2025/10/08 03:45:16 Failed to create log file logs/mev_bot_opportunities.log: open logs/mev_bot_opportunities.log: no such file or directory, falling back to stdout 2025/10/08 03:45:16 Failed to create log file logs/mev_bot_errors.log: open logs/mev_bot_errors.log: no such file or directory, falling back to stdout 2025/10/08 03:45:16 Failed to create log file logs/mev_bot_performance.log: open logs/mev_bot_performance.log: no such file or directory, falling back to stdout 2025/10/08 03:45:16 Failed to create log file logs/mev_bot_transactions.log: open logs/mev_bot_transactions.log: no such file or directory, falling back to stdout --- PASS: TestGetPoolsByTokens (0.00s) === RUN TestGetAllPools 2025/10/08 03:45:16 Failed to create log file logs/mev_bot_opportunities.log: open logs/mev_bot_opportunities.log: no such file or directory, falling back to stdout 2025/10/08 03:45:16 Failed to create log file logs/mev_bot_errors.log: open logs/mev_bot_errors.log: no such file or directory, falling back to stdout 2025/10/08 03:45:16 Failed to create log file logs/mev_bot_performance.log: open logs/mev_bot_performance.log: no such file or directory, falling back to stdout 2025/10/08 03:45:16 Failed to create log file logs/mev_bot_transactions.log: open logs/mev_bot_transactions.log: no such file or directory, falling back to stdout --- PASS: TestGetAllPools (0.00s) === RUN TestUpdatePoolExisting 2025/10/08 03:45:16 Failed to create log file logs/mev_bot_opportunities.log: open logs/mev_bot_opportunities.log: no such file or directory, falling back to stdout 2025/10/08 03:45:16 Failed to create log file logs/mev_bot_errors.log: open logs/mev_bot_errors.log: no such file or directory, falling back to stdout 2025/10/08 03:45:16 Failed to create log file logs/mev_bot_performance.log: open logs/mev_bot_performance.log: no such file or directory, falling back to stdout 2025/10/08 03:45:16 Failed to create log file logs/mev_bot_transactions.log: open logs/mev_bot_transactions.log: no such file or directory, falling back to stdout --- PASS: TestUpdatePoolExisting (0.00s) === RUN TestUpdatePoolNew 2025/10/08 03:45:16 Failed to create log file logs/mev_bot_opportunities.log: open logs/mev_bot_opportunities.log: no such file or directory, falling back to stdout 2025/10/08 03:45:16 Failed to create log file logs/mev_bot_errors.log: open logs/mev_bot_errors.log: no such file or directory, falling back to stdout 2025/10/08 03:45:16 Failed to create log file logs/mev_bot_performance.log: open logs/mev_bot_performance.log: no such file or directory, falling back to stdout 2025/10/08 03:45:16 Failed to create log file logs/mev_bot_transactions.log: open logs/mev_bot_transactions.log: no such file or directory, falling back to stdout --- PASS: TestUpdatePoolNew (0.00s) === RUN TestGetCacheStats 2025/10/08 03:45:16 Failed to create log file logs/mev_bot_opportunities.log: open logs/mev_bot_opportunities.log: no such file or directory, falling back to stdout 2025/10/08 03:45:16 Failed to create log file logs/mev_bot_errors.log: open logs/mev_bot_errors.log: no such file or directory, falling back to stdout 2025/10/08 03:45:16 Failed to create log file logs/mev_bot_performance.log: open logs/mev_bot_performance.log: no such file or directory, falling back to stdout 2025/10/08 03:45:16 Failed to create log file logs/mev_bot_transactions.log: open logs/mev_bot_transactions.log: no such file or directory, falling back to stdout --- PASS: TestGetCacheStats (0.00s) === RUN TestNewPipeline 2025/10/08 03:45:16 Failed to create log file logs/mev_bot_opportunities.log: open logs/mev_bot_opportunities.log: no such file or directory, falling back to stdout 2025/10/08 03:45:16 Failed to create log file logs/mev_bot_errors.log: open logs/mev_bot_errors.log: no such file or directory, falling back to stdout 2025/10/08 03:45:16 Failed to create log file logs/mev_bot_performance.log: open logs/mev_bot_performance.log: no such file or directory, falling back to stdout 2025/10/08 03:45:16 Failed to create log file logs/mev_bot_transactions.log: open logs/mev_bot_transactions.log: no such file or directory, falling back to stdout --- PASS: TestNewPipeline (0.00s) === RUN TestAddStage 2025/10/08 03:45:16 Failed to create log file logs/mev_bot_opportunities.log: open logs/mev_bot_opportunities.log: no such file or directory, falling back to stdout 2025/10/08 03:45:16 Failed to create log file logs/mev_bot_errors.log: open logs/mev_bot_errors.log: no such file or directory, falling back to stdout 2025/10/08 03:45:16 Failed to create log file logs/mev_bot_performance.log: open logs/mev_bot_performance.log: no such file or directory, falling back to stdout 2025/10/08 03:45:16 Failed to create log file logs/mev_bot_transactions.log: open logs/mev_bot_transactions.log: no such file or directory, falling back to stdout --- PASS: TestAddStage (0.00s) === RUN TestAddDefaultStages 2025/10/08 03:45:16 Failed to create log file logs/mev_bot_opportunities.log: open logs/mev_bot_opportunities.log: no such file or directory, falling back to stdout 2025/10/08 03:45:16 Failed to create log file logs/mev_bot_errors.log: open logs/mev_bot_errors.log: no such file or directory, falling back to stdout 2025/10/08 03:45:16 Failed to create log file logs/mev_bot_performance.log: open logs/mev_bot_performance.log: no such file or directory, falling back to stdout 2025/10/08 03:45:16 Failed to create log file logs/mev_bot_transactions.log: open logs/mev_bot_transactions.log: no such file or directory, falling back to stdout --- PASS: TestAddDefaultStages (0.00s) === RUN TestTransactionDecoderStage 2025/10/08 03:45:16 Failed to create log file logs/mev_bot_opportunities.log: open logs/mev_bot_opportunities.log: no such file or directory, falling back to stdout 2025/10/08 03:45:16 Failed to create log file logs/mev_bot_errors.log: open logs/mev_bot_errors.log: no such file or directory, falling back to stdout 2025/10/08 03:45:16 Failed to create log file logs/mev_bot_performance.log: open logs/mev_bot_performance.log: no such file or directory, falling back to stdout 2025/10/08 03:45:16 Failed to create log file logs/mev_bot_transactions.log: open logs/mev_bot_transactions.log: no such file or directory, falling back to stdout --- PASS: TestTransactionDecoderStage (0.00s) === RUN TestCalculatePriceImpact --- PASS: TestCalculatePriceImpact (0.00s) === RUN TestCalculatePriceImpactNoAmount --- PASS: TestCalculatePriceImpactNoAmount (0.00s) === RUN TestCalculatePriceImpactNoLiquidity --- PASS: TestCalculatePriceImpactNoLiquidity (0.00s) PASS ok github.com/fraktal/mev-beta/pkg/market (cached) ? github.com/fraktal/mev-beta/pkg/marketdata [no test files] === RUN TestArbitrageDetectorCreation --- PASS: TestArbitrageDetectorCreation (0.00s) === RUN TestArbitrageDetectionNoOpportunity --- PASS: TestArbitrageDetectionNoOpportunity (0.00s) === RUN TestArbitrageDetectionWithOpportunity Found 0 opportunities --- PASS: TestArbitrageDetectionWithOpportunity (0.00s) === RUN TestArbitrageDetectionBelowThreshold --- PASS: TestArbitrageDetectionBelowThreshold (0.00s) === RUN TestCalculateOptimalTradeSize --- PASS: TestCalculateOptimalTradeSize (0.00s) === RUN TestCalculatePriceImpact --- PASS: TestCalculatePriceImpact (0.00s) === RUN TestEstimateGasCost --- PASS: TestEstimateGasCost (0.00s) === RUN TestMarketManagerCreation --- PASS: TestMarketManagerCreation (0.00s) === RUN TestMarketManagerAddAndGetMarket --- PASS: TestMarketManagerAddAndGetMarket (0.00s) === RUN TestMarketManagerGetMarketsByRawTicker --- PASS: TestMarketManagerGetMarketsByRawTicker (0.00s) === RUN TestMarketManagerUpdateMarket --- PASS: TestMarketManagerUpdateMarket (0.00s) === RUN TestMarketManagerRemoveMarket --- PASS: TestMarketManagerRemoveMarket (0.00s) === RUN TestMarketManagerGetCounts --- PASS: TestMarketManagerGetCounts (0.00s) === RUN TestMarketCreation --- PASS: TestMarketCreation (0.00s) === RUN TestMarketPriceData --- PASS: TestMarketPriceData (0.00s) === RUN TestMarketMetadata --- PASS: TestMarketMetadata (0.00s) === RUN TestMarketValidation --- PASS: TestMarketValidation (0.00s) === RUN TestGenerateRawTicker --- PASS: TestGenerateRawTicker (0.00s) === RUN TestMarketClone --- PASS: TestMarketClone (0.00s) PASS ok github.com/fraktal/mev-beta/pkg/marketmanager (cached) === RUN TestIsOpportunityProfitableRespectsThreshold --- PASS: TestIsOpportunityProfitableRespectsThreshold (0.00s) === RUN TestSortOpportunitiesByProfitabilityUsesDecimals --- PASS: TestSortOpportunitiesByProfitabilityUsesDecimals (0.00s) === RUN TestCalculateArbitrageOpportunitySetsQuantities --- PASS: TestCalculateArbitrageOpportunitySetsQuantities (0.00s) === RUN TestCalculateMinimumOutputAppliesSlippage --- PASS: TestCalculateMinimumOutputAppliesSlippage (0.00s) === RUN TestCalculateProfitsCapturesSpread --- PASS: TestCalculateProfitsCapturesSpread (0.00s) === RUN TestCachedFunctionAccuracy === RUN TestCachedFunctionAccuracy/SqrtPriceX96ToPrice === RUN TestCachedFunctionAccuracy/PriceToSqrtPriceX96 === RUN TestCachedFunctionAccuracy/SqrtPriceX96ToPriceOptimized === RUN TestCachedFunctionAccuracy/PriceToSqrtPriceX96Optimized --- PASS: TestCachedFunctionAccuracy (0.00s) --- PASS: TestCachedFunctionAccuracy/SqrtPriceX96ToPrice (0.00s) --- PASS: TestCachedFunctionAccuracy/PriceToSqrtPriceX96 (0.00s) --- PASS: TestCachedFunctionAccuracy/SqrtPriceX96ToPriceOptimized (0.00s) --- PASS: TestCachedFunctionAccuracy/PriceToSqrtPriceX96Optimized (0.00s) === RUN TestCachedConstants --- PASS: TestCachedConstants (0.00s) === RUN TestEdgeCases --- PASS: TestEdgeCases (0.00s) === RUN TestUniswapV2Calculations --- PASS: TestUniswapV2Calculations (0.00s) === RUN TestCurveCalculations --- PASS: TestCurveCalculations (0.00s) === RUN TestUniswapV3Calculations --- PASS: TestUniswapV3Calculations (0.00s) === RUN TestAlgebraV1Calculations --- PASS: TestAlgebraV1Calculations (0.00s) === RUN TestIntegralCalculations --- PASS: TestIntegralCalculations (0.00s) === RUN TestKyberCalculations --- PASS: TestKyberCalculations (0.00s) === RUN TestBalancerCalculations --- PASS: TestBalancerCalculations (0.00s) === RUN TestConstantSumCalculations --- PASS: TestConstantSumCalculations (0.00s) === RUN TestPriceMovementDetection --- PASS: TestPriceMovementDetection (0.00s) === RUN TestLiquidityMovementDetection --- PASS: TestLiquidityMovementDetection (0.00s) === RUN TestPriceImpactCalculator --- PASS: TestPriceImpactCalculator (0.00s) === RUN TestDecimalPrecisionPreservation === RUN TestDecimalPrecisionPreservation/ETH_precision === RUN TestDecimalPrecisionPreservation/USDC_precision === RUN TestDecimalPrecisionPreservation/WBTC_precision === RUN TestDecimalPrecisionPreservation/Small_amount === RUN TestDecimalPrecisionPreservation/Large_amount --- PASS: TestDecimalPrecisionPreservation (0.00s) --- PASS: TestDecimalPrecisionPreservation/ETH_precision (0.00s) --- PASS: TestDecimalPrecisionPreservation/USDC_precision (0.00s) --- PASS: TestDecimalPrecisionPreservation/WBTC_precision (0.00s) --- PASS: TestDecimalPrecisionPreservation/Small_amount (0.00s) --- PASS: TestDecimalPrecisionPreservation/Large_amount (0.00s) === RUN TestArithmeticOperations === RUN TestArithmeticOperations/ETH_addition === RUN TestArithmeticOperations/ETH_subtraction --- PASS: TestArithmeticOperations (0.00s) --- PASS: TestArithmeticOperations/ETH_addition (0.00s) --- PASS: TestArithmeticOperations/ETH_subtraction (0.00s) === RUN TestPercentageCalculations === RUN TestPercentageCalculations/1%_calculation precision_test.go:165: Calculated percentage: 1.000000% === RUN TestPercentageCalculations/50%_calculation precision_test.go:165: Calculated percentage: 50.000000% === RUN TestPercentageCalculations/Small_percentage precision_test.go:165: Calculated percentage: 0.100000% --- PASS: TestPercentageCalculations (0.00s) --- PASS: TestPercentageCalculations/1%_calculation (0.00s) --- PASS: TestPercentageCalculations/50%_calculation (0.00s) --- PASS: TestPercentageCalculations/Small_percentage (0.00s) === RUN TestMathematicalProperties --- PASS: TestMathematicalProperties (0.00s) === RUN FuzzDecimalOperations === RUN FuzzDecimalOperations/seed#0 === RUN FuzzDecimalOperations/seed#1 === RUN FuzzDecimalOperations/seed#2 --- PASS: FuzzDecimalOperations (0.00s) --- PASS: FuzzDecimalOperations/seed#0 (0.00s) --- PASS: FuzzDecimalOperations/seed#1 (0.00s) --- PASS: FuzzDecimalOperations/seed#2 (0.00s) PASS ok github.com/fraktal/mev-beta/pkg/math (cached) ? github.com/fraktal/mev-beta/pkg/metrics [no test files] ? github.com/fraktal/mev-beta/pkg/mev [no test files] ? github.com/fraktal/mev-beta/pkg/monitor [no test files] ? github.com/fraktal/mev-beta/pkg/monitoring [no test files] ? github.com/fraktal/mev-beta/pkg/oracle [no test files] ? github.com/fraktal/mev-beta/pkg/orchestrator [no test files] ? github.com/fraktal/mev-beta/pkg/patterns [no test files] ? github.com/fraktal/mev-beta/pkg/performance [no test files] ? github.com/fraktal/mev-beta/pkg/pools [no test files] ? github.com/fraktal/mev-beta/pkg/pricing [no test files] ? github.com/fraktal/mev-beta/pkg/profitcalc [no test files] === RUN TestAssessOpportunityProvidesDecimalSnapshots 2025/10/06 15:42:40 Failed to create log file logs/mev_bot_opportunities.log: open logs/mev_bot_opportunities.log: no such file or directory, falling back to stdout 2025/10/06 15:42:40 Failed to create log file logs/mev_bot_errors.log: open logs/mev_bot_errors.log: no such file or directory, falling back to stdout 2025/10/06 15:42:40 Failed to create log file logs/mev_bot_performance.log: open logs/mev_bot_performance.log: no such file or directory, falling back to stdout 2025/10/06 15:42:40 Failed to create log file logs/mev_bot_transactions.log: open logs/mev_bot_transactions.log: no such file or directory, falling back to stdout 2025/10/06 15:42:40 [DEBUG] Risk assessment for op-1: Risk=0.15, Confidence=0.50, Profitability=1.95%, Acceptable=false --- PASS: TestAssessOpportunityProvidesDecimalSnapshots (0.00s) === RUN TestAssessOpportunityRejectsBelowMinimumProfit 2025/10/06 15:42:40 Failed to create log file logs/mev_bot_opportunities.log: open logs/mev_bot_opportunities.log: no such file or directory, falling back to stdout 2025/10/06 15:42:40 Failed to create log file logs/mev_bot_errors.log: open logs/mev_bot_errors.log: no such file or directory, falling back to stdout 2025/10/06 15:42:40 Failed to create log file logs/mev_bot_performance.log: open logs/mev_bot_performance.log: no such file or directory, falling back to stdout 2025/10/06 15:42:40 Failed to create log file logs/mev_bot_transactions.log: open logs/mev_bot_transactions.log: no such file or directory, falling back to stdout --- PASS: TestAssessOpportunityRejectsBelowMinimumProfit (0.00s) === RUN TestRecordTradeTracksDecimalTotals 2025/10/06 15:42:40 Failed to create log file logs/mev_bot_opportunities.log: open logs/mev_bot_opportunities.log: no such file or directory, falling back to stdout 2025/10/06 15:42:40 Failed to create log file logs/mev_bot_errors.log: open logs/mev_bot_errors.log: no such file or directory, falling back to stdout 2025/10/06 15:42:40 Failed to create log file logs/mev_bot_performance.log: open logs/mev_bot_performance.log: no such file or directory, falling back to stdout 2025/10/06 15:42:40 Failed to create log file logs/mev_bot_transactions.log: open logs/mev_bot_transactions.log: no such file or directory, falling back to stdout 2025/10/06 15:42:40 [DEBUG] Trade recorded: Success=true, Profit=0.02, Gas=0.005, DailyLoss=0 2025/10/06 15:42:40 [DEBUG] Trade recorded: Success=false, Profit=0, Gas=0.005, DailyLoss=0.005 --- PASS: TestRecordTradeTracksDecimalTotals (0.00s) PASS ok github.com/fraktal/mev-beta/pkg/risk (cached) ? github.com/fraktal/mev-beta/pkg/scanner [no test files] ? github.com/fraktal/mev-beta/pkg/scanner/analysis [no test files] ? github.com/fraktal/mev-beta/pkg/scanner/market [no test files] ? github.com/fraktal/mev-beta/pkg/scanner/swap [no test files] === RUN TestNewKeyManager 2025/10/07 19:31:50 Failed to create log file logs/mev_bot_opportunities.log: open logs/mev_bot_opportunities.log: no such file or directory, falling back to stdout 2025/10/07 19:31:50 Failed to create log file logs/mev_bot_errors.log: open logs/mev_bot_errors.log: no such file or directory, falling back to stdout 2025/10/07 19:31:50 Failed to create log file logs/mev_bot_performance.log: open logs/mev_bot_performance.log: no such file or directory, falling back to stdout 2025/10/07 19:31:50 Failed to create log file logs/mev_bot_transactions.log: open logs/mev_bot_transactions.log: no such file or directory, falling back to stdout 2025/10/07 19:31:50 [INFO] Loading existing keys from keystore 2025/10/07 19:31:50 [INFO] Secure key manager initialized 2025/10/07 19:31:50 [INFO] Loading existing keys from keystore 2025/10/07 19:31:50 [INFO] Secure key manager initialized --- PASS: TestNewKeyManager (0.25s) === RUN TestNewKeyManagerInvalidConfig 2025/10/07 19:31:50 Failed to create log file logs/mev_bot_opportunities.log: open logs/mev_bot_opportunities.log: no such file or directory, falling back to stdout 2025/10/07 19:31:50 Failed to create log file logs/mev_bot_errors.log: open logs/mev_bot_errors.log: no such file or directory, falling back to stdout 2025/10/07 19:31:50 Failed to create log file logs/mev_bot_performance.log: open logs/mev_bot_performance.log: no such file or directory, falling back to stdout 2025/10/07 19:31:50 Failed to create log file logs/mev_bot_transactions.log: open logs/mev_bot_transactions.log: no such file or directory, falling back to stdout --- PASS: TestNewKeyManagerInvalidConfig (0.00s) === RUN TestGenerateKey 2025/10/07 19:31:50 Failed to create log file logs/mev_bot_opportunities.log: open logs/mev_bot_opportunities.log: no such file or directory, falling back to stdout 2025/10/07 19:31:50 Failed to create log file logs/mev_bot_errors.log: open logs/mev_bot_errors.log: no such file or directory, falling back to stdout 2025/10/07 19:31:50 Failed to create log file logs/mev_bot_performance.log: open logs/mev_bot_performance.log: no such file or directory, falling back to stdout 2025/10/07 19:31:50 Failed to create log file logs/mev_bot_transactions.log: open logs/mev_bot_transactions.log: no such file or directory, falling back to stdout 2025/10/07 19:31:50 [INFO] Loading existing keys from keystore 2025/10/07 19:31:50 [INFO] Secure key manager initialized 2025/10/07 19:31:50 [INFO] Generated new trading key: 0x7832652Ce701Fe456A86bcfA5414C3de375Be853 2025/10/07 19:31:50 [INFO] Generated new emergency key: 0x6A61731CCCCec9DCf7e340DCC3E779c036972e10 --- PASS: TestGenerateKey (0.11s) === RUN TestImportKey 2025/10/07 19:31:50 Failed to create log file logs/mev_bot_opportunities.log: open logs/mev_bot_opportunities.log: no such file or directory, falling back to stdout 2025/10/07 19:31:50 Failed to create log file logs/mev_bot_errors.log: open logs/mev_bot_errors.log: no such file or directory, falling back to stdout 2025/10/07 19:31:50 Failed to create log file logs/mev_bot_performance.log: open logs/mev_bot_performance.log: no such file or directory, falling back to stdout 2025/10/07 19:31:50 Failed to create log file logs/mev_bot_transactions.log: open logs/mev_bot_transactions.log: no such file or directory, falling back to stdout 2025/10/07 19:31:50 [INFO] Loading existing keys from keystore 2025/10/07 19:31:50 [INFO] Secure key manager initialized 2025/10/07 19:31:50 [INFO] Imported test key: 0xc2864EaEF2c0de793de059159c2688258b1c033C --- PASS: TestImportKey (0.11s) === RUN TestListKeys 2025/10/07 19:31:50 Failed to create log file logs/mev_bot_opportunities.log: open logs/mev_bot_opportunities.log: no such file or directory, falling back to stdout 2025/10/07 19:31:50 Failed to create log file logs/mev_bot_errors.log: open logs/mev_bot_errors.log: no such file or directory, falling back to stdout 2025/10/07 19:31:50 Failed to create log file logs/mev_bot_performance.log: open logs/mev_bot_performance.log: no such file or directory, falling back to stdout 2025/10/07 19:31:50 Failed to create log file logs/mev_bot_transactions.log: open logs/mev_bot_transactions.log: no such file or directory, falling back to stdout 2025/10/07 19:31:50 [INFO] Loading existing keys from keystore 2025/10/07 19:31:50 [INFO] Secure key manager initialized 2025/10/07 19:31:50 [INFO] Generated new test1 key: 0xe7a65d0BdA97A52594d6080a6E824CF3769dB76d 2025/10/07 19:31:50 [INFO] Generated new test2 key: 0x1466E432278075b28e274420118723b760820721 --- PASS: TestListKeys (0.10s) === RUN TestGetKeyInfo 2025/10/07 19:31:50 Failed to create log file logs/mev_bot_opportunities.log: open logs/mev_bot_opportunities.log: no such file or directory, falling back to stdout 2025/10/07 19:31:50 Failed to create log file logs/mev_bot_errors.log: open logs/mev_bot_errors.log: no such file or directory, falling back to stdout 2025/10/07 19:31:50 Failed to create log file logs/mev_bot_performance.log: open logs/mev_bot_performance.log: no such file or directory, falling back to stdout 2025/10/07 19:31:50 Failed to create log file logs/mev_bot_transactions.log: open logs/mev_bot_transactions.log: no such file or directory, falling back to stdout 2025/10/07 19:31:51 [INFO] Loading existing keys from keystore 2025/10/07 19:31:51 [INFO] Secure key manager initialized 2025/10/07 19:31:51 [INFO] Generated new test key: 0x14eB91f61A50a1C1e9EB5507ad1416C98830840B --- PASS: TestGetKeyInfo (0.10s) === RUN TestEncryptDecryptPrivateKey 2025/10/07 19:31:51 Failed to create log file logs/mev_bot_opportunities.log: open logs/mev_bot_opportunities.log: no such file or directory, falling back to stdout 2025/10/07 19:31:51 Failed to create log file logs/mev_bot_errors.log: open logs/mev_bot_errors.log: no such file or directory, falling back to stdout 2025/10/07 19:31:51 Failed to create log file logs/mev_bot_performance.log: open logs/mev_bot_performance.log: no such file or directory, falling back to stdout 2025/10/07 19:31:51 Failed to create log file logs/mev_bot_transactions.log: open logs/mev_bot_transactions.log: no such file or directory, falling back to stdout 2025/10/07 19:31:51 [INFO] Loading existing keys from keystore 2025/10/07 19:31:51 [INFO] Secure key manager initialized --- PASS: TestEncryptDecryptPrivateKey (0.10s) === RUN TestRotateKey 2025/10/07 19:31:51 Failed to create log file logs/mev_bot_opportunities.log: open logs/mev_bot_opportunities.log: no such file or directory, falling back to stdout 2025/10/07 19:31:51 Failed to create log file logs/mev_bot_errors.log: open logs/mev_bot_errors.log: no such file or directory, falling back to stdout 2025/10/07 19:31:51 Failed to create log file logs/mev_bot_performance.log: open logs/mev_bot_performance.log: no such file or directory, falling back to stdout 2025/10/07 19:31:51 Failed to create log file logs/mev_bot_transactions.log: open logs/mev_bot_transactions.log: no such file or directory, falling back to stdout 2025/10/07 19:31:51 [INFO] Loading existing keys from keystore 2025/10/07 19:31:51 [INFO] Secure key manager initialized 2025/10/07 19:31:51 [INFO] Generated new test key: 0xBa7A6D50501b93A297013aA53F44b2DB4E8dd570 2025/10/07 19:31:51 [INFO] Generated new test key: 0xC84F790fCa55b806B52f912b472d562FFa57EbeA 2025/10/07 19:31:51 [INFO] Rotated key 0xBa7A6D50501b93A297013aA53F44b2DB4E8dd570 to 0xC84F790fCa55b806B52f912b472d562FFa57EbeA --- PASS: TestRotateKey (0.10s) === RUN TestSignTransaction 2025/10/07 19:31:51 Failed to create log file logs/mev_bot_opportunities.log: open logs/mev_bot_opportunities.log: no such file or directory, falling back to stdout 2025/10/07 19:31:51 Failed to create log file logs/mev_bot_errors.log: open logs/mev_bot_errors.log: no such file or directory, falling back to stdout 2025/10/07 19:31:51 Failed to create log file logs/mev_bot_performance.log: open logs/mev_bot_performance.log: no such file or directory, falling back to stdout 2025/10/07 19:31:51 Failed to create log file logs/mev_bot_transactions.log: open logs/mev_bot_transactions.log: no such file or directory, falling back to stdout 2025/10/07 19:31:51 [INFO] Loading existing keys from keystore 2025/10/07 19:31:51 [INFO] Secure key manager initialized 2025/10/07 19:31:51 [INFO] Generated new signer key: 0xd20264D4De0CFEDaf0E388A1cA2530F1828ECc46 2025/10/07 19:31:51 [INFO] Loading existing keys from keystore 2025/10/07 19:31:51 [INFO] Secure key manager initialized 2025/10/07 19:31:51 [INFO] Generated new no_sign key: 0x6c7d4DC6F6668fC674A6204E6343BFcD4d116aD3 --- PASS: TestSignTransaction (0.21s) === RUN TestSignTransactionTransferLimits 2025/10/07 19:31:51 Failed to create log file logs/mev_bot_opportunities.log: open logs/mev_bot_opportunities.log: no such file or directory, falling back to stdout 2025/10/07 19:31:51 Failed to create log file logs/mev_bot_errors.log: open logs/mev_bot_errors.log: no such file or directory, falling back to stdout 2025/10/07 19:31:51 Failed to create log file logs/mev_bot_performance.log: open logs/mev_bot_performance.log: no such file or directory, falling back to stdout 2025/10/07 19:31:51 Failed to create log file logs/mev_bot_transactions.log: open logs/mev_bot_transactions.log: no such file or directory, falling back to stdout 2025/10/07 19:31:51 [INFO] Loading existing keys from keystore 2025/10/07 19:31:51 [INFO] Secure key manager initialized 2025/10/07 19:31:51 [INFO] Generated new limited_signer key: 0x1F692F9B7CA767249671570885fb0902ad42f5a1 --- PASS: TestSignTransactionTransferLimits (0.11s) === RUN TestDeriveEncryptionKey --- PASS: TestDeriveEncryptionKey (0.21s) === RUN TestValidateConfig --- PASS: TestValidateConfig (0.00s) === RUN TestClearPrivateKey --- PASS: TestClearPrivateKey (0.00s) === RUN TestGenerateAuditID --- PASS: TestGenerateAuditID (0.00s) === RUN TestCalculateRiskScore --- PASS: TestCalculateRiskScore (0.00s) === RUN TestKeyPermissions --- PASS: TestKeyPermissions (0.00s) === RUN TestConcurrentKeyAccess 2025/10/07 19:31:51 Failed to create log file logs/mev_bot_opportunities.log: open logs/mev_bot_opportunities.log: no such file or directory, falling back to stdout 2025/10/07 19:31:51 Failed to create log file logs/mev_bot_errors.log: open logs/mev_bot_errors.log: no such file or directory, falling back to stdout 2025/10/07 19:31:51 Failed to create log file logs/mev_bot_performance.log: open logs/mev_bot_performance.log: no such file or directory, falling back to stdout 2025/10/07 19:31:51 Failed to create log file logs/mev_bot_transactions.log: open logs/mev_bot_transactions.log: no such file or directory, falling back to stdout 2025/10/07 19:31:51 [INFO] Loading existing keys from keystore 2025/10/07 19:31:51 [INFO] Secure key manager initialized 2025/10/07 19:31:51 [INFO] Generated new concurrent_test key: 0x0390Eb90c910Fd623F430DF66eE6feeE65b00D15 --- PASS: TestConcurrentKeyAccess (0.16s) === RUN TestSecurityMetrics === RUN TestSecurityMetrics/valid_rpc_response === RUN TestSecurityMetrics/invalid_rpc_response === RUN TestSecurityMetrics/empty_rpc_response === RUN TestSecurityMetrics/oversized_rpc_response --- PASS: TestSecurityMetrics (0.00s) --- PASS: TestSecurityMetrics/valid_rpc_response (0.00s) --- PASS: TestSecurityMetrics/invalid_rpc_response (0.00s) --- PASS: TestSecurityMetrics/empty_rpc_response (0.00s) --- PASS: TestSecurityMetrics/oversized_rpc_response (0.00s) === RUN FuzzRPCResponseParser === RUN FuzzRPCResponseParser/seed#0 === RUN FuzzRPCResponseParser/seed#1 === RUN FuzzRPCResponseParser/seed#2 === RUN FuzzRPCResponseParser/seed#3 === RUN FuzzRPCResponseParser/seed#4 --- PASS: FuzzRPCResponseParser (0.00s) --- PASS: FuzzRPCResponseParser/seed#0 (0.00s) --- PASS: FuzzRPCResponseParser/seed#1 (0.00s) --- PASS: FuzzRPCResponseParser/seed#2 (0.00s) --- PASS: FuzzRPCResponseParser/seed#3 (0.00s) --- PASS: FuzzRPCResponseParser/seed#4 (0.00s) === RUN FuzzTransactionSigning 2025/10/07 19:31:51 Failed to create log file logs/mev_bot_opportunities.log: open logs/mev_bot_opportunities.log: no such file or directory, falling back to stdout 2025/10/07 19:31:51 Failed to create log file logs/mev_bot_errors.log: open logs/mev_bot_errors.log: no such file or directory, falling back to stdout 2025/10/07 19:31:51 Failed to create log file logs/mev_bot_performance.log: open logs/mev_bot_performance.log: no such file or directory, falling back to stdout 2025/10/07 19:31:51 Failed to create log file logs/mev_bot_transactions.log: open logs/mev_bot_transactions.log: no such file or directory, falling back to stdout 2025/10/07 19:31:52 [INFO] Loading existing keys from keystore 2025/10/07 19:31:52 [INFO] Secure key manager initialized 2025/10/07 19:31:52 [INFO] Generated new test key: 0xA89502E6fF82fb9102Fdb7332d8FC2812B2D59b2 === RUN FuzzTransactionSigning/seed#0 === RUN FuzzTransactionSigning/seed#1 === RUN FuzzTransactionSigning/seed#2 --- PASS: FuzzTransactionSigning (0.11s) --- PASS: FuzzTransactionSigning/seed#0 (0.00s) --- PASS: FuzzTransactionSigning/seed#1 (0.00s) --- PASS: FuzzTransactionSigning/seed#2 (0.00s) === RUN FuzzKeyValidation === RUN FuzzKeyValidation/seed#0 === RUN FuzzKeyValidation/seed#1 === RUN FuzzKeyValidation/seed#2 === RUN FuzzKeyValidation/seed#3 === RUN FuzzKeyValidation/seed#4 --- PASS: FuzzKeyValidation (0.00s) --- PASS: FuzzKeyValidation/seed#0 (0.00s) --- PASS: FuzzKeyValidation/seed#1 (0.00s) --- PASS: FuzzKeyValidation/seed#2 (0.00s) --- PASS: FuzzKeyValidation/seed#3 (0.00s) --- PASS: FuzzKeyValidation/seed#4 (0.00s) === RUN FuzzInputValidator === RUN FuzzInputValidator/seed#0 === RUN FuzzInputValidator/seed#1 === RUN FuzzInputValidator/seed#2 === RUN FuzzInputValidator/seed#3 === RUN FuzzInputValidator/seed#4 === RUN FuzzInputValidator/seed#5 --- PASS: FuzzInputValidator (0.00s) --- PASS: FuzzInputValidator/seed#0 (0.00s) --- PASS: FuzzInputValidator/seed#1 (0.00s) --- PASS: FuzzInputValidator/seed#2 (0.00s) --- PASS: FuzzInputValidator/seed#3 (0.00s) --- PASS: FuzzInputValidator/seed#4 (0.00s) --- PASS: FuzzInputValidator/seed#5 (0.00s) PASS ok github.com/fraktal/mev-beta/pkg/security (cached) ? github.com/fraktal/mev-beta/pkg/slippage [no test files] ? github.com/fraktal/mev-beta/pkg/trading [no test files] ? github.com/fraktal/mev-beta/pkg/transport [no test files] ? github.com/fraktal/mev-beta/pkg/types [no test files] === RUN TestSqrtPriceX96ToPriceAdvanced --- PASS: TestSqrtPriceX96ToPriceAdvanced (0.00s) === RUN TestPriceToSqrtPriceX96Advanced --- PASS: TestPriceToSqrtPriceX96Advanced (0.00s) === RUN TestTickToSqrtPriceX96Advanced --- PASS: TestTickToSqrtPriceX96Advanced (0.00s) === RUN TestSqrtPriceX96ToTickAdvanced --- PASS: TestSqrtPriceX96ToTickAdvanced (0.00s) === RUN TestAdvancedRoundTripConversions --- PASS: TestAdvancedRoundTripConversions (0.00s) === RUN TestCachedFunctionAccuracy --- PASS: TestCachedFunctionAccuracy (0.00s) === RUN TestUnifiedConstantsAccuracy --- PASS: TestUnifiedConstantsAccuracy (0.00s) === RUN TestUnifiedConstantsPerformance --- PASS: TestUnifiedConstantsPerformance (0.00s) === RUN TestSqrtPriceX96ToPriceOptimizedCached --- PASS: TestSqrtPriceX96ToPriceOptimizedCached (0.00s) === RUN TestPriceToSqrtPriceX96OptimizedCached --- PASS: TestPriceToSqrtPriceX96OptimizedCached (0.00s) === RUN TestTickToSqrtPriceX96OptimizedCached --- PASS: TestTickToSqrtPriceX96OptimizedCached (0.00s) === RUN TestSqrtPriceX96ToTickOptimizedCached --- PASS: TestSqrtPriceX96ToTickOptimizedCached (0.00s) === RUN TestOptimizedCachedRoundTripConversions --- PASS: TestOptimizedCachedRoundTripConversions (0.00s) === RUN TestOptimizedFunctionAccuracy --- PASS: TestOptimizedFunctionAccuracy (0.00s) === RUN TestPriceToSqrtPriceX96Accuracy --- PASS: TestPriceToSqrtPriceX96Accuracy (0.00s) === RUN TestTickToSqrtPriceX96Accuracy --- PASS: TestTickToSqrtPriceX96Accuracy (0.00s) === RUN TestPricePrecisionRoundTrip === RUN TestPricePrecisionRoundTrip/Price_1.0001_(tick_1) precision_test.go:57: Original sqrtPriceX96: 79232123823823952808969600 precision_test.go:58: Calculated tick: -138161 precision_test.go:59: Round-trip sqrtPriceX96: 79232176192453475102097408 precision_test.go:60: Precision loss: 0.0000660952% === RUN TestPricePrecisionRoundTrip/Price_1.0_(tick_0) precision_test.go:57: Original sqrtPriceX96: 79228162514264337593543950336 precision_test.go:58: Calculated tick: 0 precision_test.go:59: Round-trip sqrtPriceX96: 79228162514264337593543950336 precision_test.go:60: Precision loss: 0.0000000000% === RUN TestPricePrecisionRoundTrip/High_price_test precision_test.go:57: Original sqrtPriceX96: 1267650600228229401496703205376 precision_test.go:58: Calculated tick: 55454 precision_test.go:59: Round-trip sqrtPriceX96: 1267615932995625651871349211136 precision_test.go:60: Precision loss: 0.0027347624% --- PASS: TestPricePrecisionRoundTrip (0.00s) --- PASS: TestPricePrecisionRoundTrip/Price_1.0001_(tick_1) (0.00s) --- PASS: TestPricePrecisionRoundTrip/Price_1.0_(tick_0) (0.00s) --- PASS: TestPricePrecisionRoundTrip/High_price_test (0.00s) === RUN TestPriceConversionAccuracy === RUN TestPriceConversionAccuracy/Price_1.0 precision_test.go:112: Calculated price: 1.0000000000 precision_test.go:113: Expected price: 1.0000000000 precision_test.go:114: Difference: 0.0000000000 === RUN TestPriceConversionAccuracy/Price_4.0 precision_test.go:112: Calculated price: 4.0000000000 precision_test.go:113: Expected price: 4.0000000000 precision_test.go:114: Difference: 0.0000000000 --- PASS: TestPriceConversionAccuracy (0.00s) --- PASS: TestPriceConversionAccuracy/Price_1.0 (0.00s) --- PASS: TestPriceConversionAccuracy/Price_4.0 (0.00s) === RUN TestTickBoundaries === RUN TestTickBoundaries/Minimum_tick precision_test.go:150: Original tick: -887272 precision_test.go:151: Round-trip tick: -887272 precision_test.go:152: Tick difference: 0 === RUN TestTickBoundaries/Maximum_tick precision_test.go:150: Original tick: 887272 precision_test.go:151: Round-trip tick: 887272 precision_test.go:152: Tick difference: 0 === RUN TestTickBoundaries/Zero_tick precision_test.go:150: Original tick: 0 precision_test.go:151: Round-trip tick: 0 precision_test.go:152: Tick difference: 0 === RUN TestTickBoundaries/Positive_tick precision_test.go:150: Original tick: 100000 precision_test.go:151: Round-trip tick: 99999 precision_test.go:152: Tick difference: 1 === RUN TestTickBoundaries/Negative_tick precision_test.go:150: Original tick: -100000 precision_test.go:151: Round-trip tick: -99999 precision_test.go:152: Tick difference: 1 --- PASS: TestTickBoundaries (0.00s) --- PASS: TestTickBoundaries/Minimum_tick (0.00s) --- PASS: TestTickBoundaries/Maximum_tick (0.00s) --- PASS: TestTickBoundaries/Zero_tick (0.00s) --- PASS: TestTickBoundaries/Positive_tick (0.00s) --- PASS: TestTickBoundaries/Negative_tick (0.00s) === RUN TestSqrtPriceX96ToPrice --- PASS: TestSqrtPriceX96ToPrice (0.00s) === RUN TestPriceToSqrtPriceX96 pricing_test.go:51: Expected: 158556325028528675187087900672, Actual: 158456325028528675187087900672, Diff: 100000000000000000000000000 --- PASS: TestPriceToSqrtPriceX96 (0.00s) === RUN TestTickToSqrtPriceX96 --- PASS: TestTickToSqrtPriceX96 (0.00s) === RUN TestSqrtPriceX96ToTick --- PASS: TestSqrtPriceX96ToTick (0.00s) === RUN TestRoundTripConversions --- PASS: TestRoundTripConversions (0.00s) === RUN TestGetTickAtSqrtPriceWithUint256 --- PASS: TestGetTickAtSqrtPriceWithUint256 (0.00s) === RUN TestTickSpacingCalculations --- PASS: TestTickSpacingCalculations (0.00s) PASS ok github.com/fraktal/mev-beta/pkg/uniswap (cached) testing: warning: no tests to run PASS ok github.com/fraktal/mev-beta/pkg/uniswap/lookup (cached) [no tests to run] === RUN TestValidation --- PASS: TestValidation (0.00s) PASS ok github.com/fraktal/mev-beta/pkg/validation (cached) Running benchmarks... goos: linux goarch: amd64 pkg: github.com/fraktal/mev-beta/pkg/uniswap cpu: Intel(R) Core(TM) i5-5350U CPU @ 1.80GHz BenchmarkSqrtPriceX96ToPriceAdvanced-4 1000000 1268 ns/op 352 B/op 6 allocs/op BenchmarkPriceToSqrtPriceX96Advanced-4 1000000 1395 ns/op 336 B/op 10 allocs/op BenchmarkTickToSqrtPriceX96Advanced-4 2375092 551.6 ns/op 160 B/op 5 allocs/op BenchmarkSqrtPriceX96ToTickAdvanced-4 1000000 1157 ns/op 352 B/op 5 allocs/op BenchmarkSqrtPriceX96ToPriceCached-4 1028316 1102 ns/op 304 B/op 5 allocs/op BenchmarkPriceToSqrtPriceX96Cached-4 819410 1398 ns/op 328 B/op 9 allocs/op BenchmarkSqrtPriceX96ToPriceOptimized-4 673978 1970 ns/op 520 B/op 10 allocs/op BenchmarkPriceToSqrtPriceX96Optimized-4 557362 2147 ns/op 496 B/op 14 allocs/op BenchmarkTickToSqrtPriceX96Optimized-4 862706 1416 ns/op 320 B/op 9 allocs/op BenchmarkSqrtPriceX96ToPriceOptimizedCached-4 945399 1255 ns/op 352 B/op 6 allocs/op BenchmarkPriceToSqrtPriceX96OptimizedCached-4 1000000 1846 ns/op 336 B/op 10 allocs/op BenchmarkTickToSqrtPriceX96OptimizedCached-4 2167536 553.5 ns/op 160 B/op 5 allocs/op BenchmarkSqrtPriceX96ToTickOptimizedCached-4 944901 1229 ns/op 352 B/op 5 allocs/op BenchmarkSqrtPriceConversion-4 806312 1266 ns/op 416 B/op 6 allocs/op BenchmarkTickConversion-4 2409926 493.1 ns/op 152 B/op 4 allocs/op BenchmarkSqrtPriceX96ToPrice-4 922647 1270 ns/op 416 B/op 6 allocs/op BenchmarkPriceToSqrtPriceX96-4 450214 2373 ns/op 616 B/op 11 allocs/op BenchmarkTickToSqrtPriceX96-4 2906992 481.8 ns/op 152 B/op 4 allocs/op BenchmarkSqrtPriceX96ToTick-4 1000000 1294 ns/op 352 B/op 5 allocs/op BenchmarkGetTickAtSqrtPrice-4 797034 1496 ns/op 416 B/op 7 allocs/op BenchmarkGetNextTick-4 1000000000 0.5076 ns/op 0 B/op 0 allocs/op BenchmarkGetPreviousTick-4 1000000000 0.4811 ns/op 0 B/op 0 allocs/op PASS ok github.com/fraktal/mev-beta/pkg/uniswap 36.401s Checking for race conditions... ok github.com/fraktal/mev-beta/pkg/arbitrage 1.025s ok github.com/fraktal/mev-beta/pkg/arbitrum (cached) ? github.com/fraktal/mev-beta/pkg/arbitrum/common [no test files] ? github.com/fraktal/mev-beta/pkg/arbitrum/discovery [no test files] ? github.com/fraktal/mev-beta/pkg/arbitrum/market [no test files] ? github.com/fraktal/mev-beta/pkg/arbitrum/parser [no test files] ? github.com/fraktal/mev-beta/pkg/bindings [no test files] ? github.com/fraktal/mev-beta/pkg/circuit [no test files] ? github.com/fraktal/mev-beta/pkg/contracts [no test files] ok github.com/fraktal/mev-beta/pkg/database (cached) ok github.com/fraktal/mev-beta/pkg/events (cached) ? github.com/fraktal/mev-beta/pkg/exchanges [no test files] ? github.com/fraktal/mev-beta/pkg/execution [no test files] ? github.com/fraktal/mev-beta/pkg/lifecycle [no test files] ok github.com/fraktal/mev-beta/pkg/market (cached) ? github.com/fraktal/mev-beta/pkg/marketdata [no test files] ok github.com/fraktal/mev-beta/pkg/marketmanager (cached) ok github.com/fraktal/mev-beta/pkg/math (cached) ? github.com/fraktal/mev-beta/pkg/metrics [no test files] ? github.com/fraktal/mev-beta/pkg/mev [no test files] ? github.com/fraktal/mev-beta/pkg/monitor [no test files] ? github.com/fraktal/mev-beta/pkg/monitoring [no test files] ? github.com/fraktal/mev-beta/pkg/oracle [no test files] ? github.com/fraktal/mev-beta/pkg/orchestrator [no test files] ? github.com/fraktal/mev-beta/pkg/patterns [no test files] ? github.com/fraktal/mev-beta/pkg/performance [no test files] ? github.com/fraktal/mev-beta/pkg/pools [no test files] ? github.com/fraktal/mev-beta/pkg/pricing [no test files] ? github.com/fraktal/mev-beta/pkg/profitcalc [no test files] ok github.com/fraktal/mev-beta/pkg/risk (cached) ? github.com/fraktal/mev-beta/pkg/scanner [no test files] ? github.com/fraktal/mev-beta/pkg/scanner/analysis [no test files] ? github.com/fraktal/mev-beta/pkg/scanner/market [no test files] ? github.com/fraktal/mev-beta/pkg/scanner/swap [no test files] ok github.com/fraktal/mev-beta/pkg/security (cached) ? github.com/fraktal/mev-beta/pkg/slippage [no test files] ? github.com/fraktal/mev-beta/pkg/trading [no test files] ? github.com/fraktal/mev-beta/pkg/transport [no test files] ? github.com/fraktal/mev-beta/pkg/types [no test files] ok github.com/fraktal/mev-beta/pkg/uniswap (cached) ok github.com/fraktal/mev-beta/pkg/uniswap/lookup (cached) [no tests to run] ok github.com/fraktal/mev-beta/pkg/validation (cached) Checking code coverage... ok github.com/fraktal/mev-beta/pkg/arbitrage 0.014s coverage: 9.1% of statements ok github.com/fraktal/mev-beta/pkg/arbitrum 0.045s coverage: 4.2% of statements ? github.com/fraktal/mev-beta/pkg/arbitrum/common [no test files] github.com/fraktal/mev-beta/pkg/arbitrum/discovery coverage: 0.0% of statements github.com/fraktal/mev-beta/pkg/arbitrum/market coverage: 0.0% of statements github.com/fraktal/mev-beta/pkg/arbitrum/parser coverage: 0.0% of statements github.com/fraktal/mev-beta/pkg/bindings coverage: 0.0% of statements github.com/fraktal/mev-beta/pkg/circuit coverage: 0.0% of statements github.com/fraktal/mev-beta/pkg/contracts coverage: 0.0% of statements ok github.com/fraktal/mev-beta/pkg/database (cached) coverage: 81.8% of statements ok github.com/fraktal/mev-beta/pkg/events (cached) coverage: 33.0% of statements github.com/fraktal/mev-beta/pkg/exchanges coverage: 0.0% of statements github.com/fraktal/mev-beta/pkg/execution coverage: 0.0% of statements github.com/fraktal/mev-beta/pkg/lifecycle coverage: 0.0% of statements ok github.com/fraktal/mev-beta/pkg/market (cached) coverage: 9.1% of statements github.com/fraktal/mev-beta/pkg/marketdata coverage: 0.0% of statements ok github.com/fraktal/mev-beta/pkg/marketmanager (cached) coverage: 48.3% of statements ok github.com/fraktal/mev-beta/pkg/math (cached) coverage: 44.6% of statements github.com/fraktal/mev-beta/pkg/metrics coverage: 0.0% of statements github.com/fraktal/mev-beta/pkg/mev coverage: 0.0% of statements github.com/fraktal/mev-beta/pkg/monitor coverage: 0.0% of statements github.com/fraktal/mev-beta/pkg/monitoring coverage: 0.0% of statements github.com/fraktal/mev-beta/pkg/oracle coverage: 0.0% of statements github.com/fraktal/mev-beta/pkg/orchestrator coverage: 0.0% of statements github.com/fraktal/mev-beta/pkg/patterns coverage: 0.0% of statements github.com/fraktal/mev-beta/pkg/performance coverage: 0.0% of statements github.com/fraktal/mev-beta/pkg/pools coverage: 0.0% of statements github.com/fraktal/mev-beta/pkg/pricing coverage: 0.0% of statements github.com/fraktal/mev-beta/pkg/profitcalc coverage: 0.0% of statements ok github.com/fraktal/mev-beta/pkg/risk (cached) coverage: 38.2% of statements github.com/fraktal/mev-beta/pkg/scanner coverage: 0.0% of statements github.com/fraktal/mev-beta/pkg/scanner/analysis coverage: 0.0% of statements github.com/fraktal/mev-beta/pkg/scanner/market coverage: 0.0% of statements github.com/fraktal/mev-beta/pkg/scanner/swap coverage: 0.0% of statements ok github.com/fraktal/mev-beta/pkg/security (cached) coverage: 12.6% of statements github.com/fraktal/mev-beta/pkg/slippage coverage: 0.0% of statements github.com/fraktal/mev-beta/pkg/trading coverage: 0.0% of statements github.com/fraktal/mev-beta/pkg/transport coverage: 0.0% of statements ? github.com/fraktal/mev-beta/pkg/types [no test files] ok github.com/fraktal/mev-beta/pkg/uniswap (cached) coverage: 43.8% of statements ok github.com/fraktal/mev-beta/pkg/uniswap/lookup (cached) coverage: 0.0% of statements [no tests to run] ok github.com/fraktal/mev-beta/pkg/validation (cached) coverage: 0.0% of statements github.com/fraktal/mev-beta/pkg/arbitrage/database.go:24: NewSQLiteDatabase 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/database.go:43: createTables 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/database.go:135: SaveOpportunity 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/database.go:182: SaveExecution 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/database.go:228: GetExecutionHistory 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/database.go:289: SavePoolData 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/database.go:319: GetPoolData 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/database.go:365: GetOpportunityCount 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/database.go:372: GetExecutionCount 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/database.go:379: GetSuccessfulExecutionCount 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/database.go:386: GetTotalProfit 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/database.go:403: Close 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/database.go:410: parseBigInt 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/database.go:417: generateOpportunityIDFromPath 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/decimal_helpers.go:14: universalFromWei 50.0% github.com/fraktal/mev-beta/pkg/arbitrage/decimal_helpers.go:27: universalOrFromWei 55.6% github.com/fraktal/mev-beta/pkg/arbitrage/decimal_helpers.go:45: floatStringFromDecimal 58.3% github.com/fraktal/mev-beta/pkg/arbitrage/decimal_helpers.go:67: ethAmountString 100.0% github.com/fraktal/mev-beta/pkg/arbitrage/decimal_helpers.go:75: gweiAmountString 77.8% github.com/fraktal/mev-beta/pkg/arbitrage/decimal_helpers.go:90: formatEther 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/decimal_helpers.go:94: formatEtherFromWei 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/decimal_helpers.go:98: formatGweiFromWei 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/detection_engine.go:101: NewArbitrageDetectionEngine 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/detection_engine.go:129: setDefaultConfig 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/detection_engine.go:175: Start 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/detection_engine.go:207: Stop 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/detection_engine.go:237: initializeWorkerPools 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/detection_engine.go:250: detectionLoop 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/detection_engine.go:269: performScan 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/detection_engine.go:321: getTokenPairsToScan 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/detection_engine.go:351: getInputAmountsToTest 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/detection_engine.go:367: filterEnabledExchanges 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/detection_engine.go:385: processScanTasksBatch 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/detection_engine.go:407: processScanBatch 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/detection_engine.go:453: processScanTask 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/detection_engine.go:497: findArbitragePaths 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/detection_engine.go:527: findBestPool 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/detection_engine.go:553: isOpportunityBetter 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/detection_engine.go:589: processPathTask 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/detection_engine.go:595: decimalAmountToUniversal 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/detection_engine.go:607: opportunityProcessor 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/detection_engine.go:621: processOpportunity 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/detection_engine.go:676: SetOpportunityHandler 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/detection_engine.go:681: GetOpportunityChannel 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/detection_engine.go:686: GetStats 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/detection_engine.go:701: ScanOpportunities 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/detection_engine.go:718: scanForSingleParam 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/detection_engine.go:734: createTokenPair 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/detection_engine.go:758: processPathsForOpportunities 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/detection_engine.go:774: evaluatePath 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/detection_engine.go:826: NewWorkerPool 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/detection_engine.go:838: Start 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/detection_engine.go:856: Stop 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/executor.go:109: NewArbitrageExecutor 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/executor.go:409: SimulateArbitrage 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/executor.go:470: simulateFlashSwapArbitrage 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/executor.go:599: calculateRealProfit 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/executor.go:690: ExecuteArbitrage 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/executor.go:802: validateExecution 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/executor.go:842: validatePoolLiquidity 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/executor.go:876: prepareFlashSwapParams 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/executor.go:923: executeFlashSwapArbitrage 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/executor.go:956: buildFlashSwapExecution 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/executor.go:996: estimateGasForArbitrage 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/executor.go:1033: updateGasPrice 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/executor.go:1065: waitForConfirmation 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/executor.go:1088: calculateActualProfit 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/executor.go:1106: calculateProfitFromBalanceChange 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/executor.go:1148: GetArbitrageHistory 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/executor.go:1231: IsProfitableAfterGas 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/executor.go:1238: SetConfiguration 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/executor.go:1254: executeUniswapV3FlashSwap 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/executor.go:1284: encodeArbitrageData 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/executor.go:1316: StartLiveExecution 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/executor.go:1328: StopLiveExecution 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/executor.go:1339: GetLiveMetrics 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/executor.go:1348: ScanForOpportunities 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/executor.go:1370: ExecuteOpportunityWithFramework 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/executor.go:1404: GetSupportedExchanges 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/executor.go:1413: CalculateOptimalPath 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/executor.go:1461: addTrustedContractsToValidator 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/executor.go:1490: convertArbitragePathToPoolData 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/executor.go:1534: calculatePriority 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/flash_executor.go:109: NewFlashSwapExecutor 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/flash_executor.go:143: setDefaultConfig 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/flash_executor.go:182: ExecuteArbitrage 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/flash_executor.go:264: validateOpportunity 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/flash_executor.go:307: prepareFlashSwap 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/flash_executor.go:354: encodeArbitrageData 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/flash_executor.go:377: getTransactionOptions 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/flash_executor.go:441: applyPriorityFeeStrategy 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/flash_executor.go:468: executeWithTimeout 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/flash_executor.go:524: submitTransaction 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/flash_executor.go:570: waitForConfirmation 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/flash_executor.go:592: calculateActualProfit 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/flash_executor.go:623: createSuccessfulResult 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/flash_executor.go:663: createFailedResult 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/flash_executor.go:694: isRetryableError 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/flash_executor.go:716: updateGasPriceForRetry 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/flash_executor.go:752: updateExecutionStats 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/flash_executor.go:774: GetExecutionStats 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/flash_executor.go:810: GetPendingExecutions 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/flash_executor.go:815: GetExecutionHistory 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/flash_swap_utils.go:17: encodeFlashSwapCallback 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/live_execution_framework.go:150: NewLiveExecutionFramework 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/live_execution_framework.go:230: setDefaultConfig 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/live_execution_framework.go:269: Start 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/live_execution_framework.go:307: Stop 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/live_execution_framework.go:341: initializeWorkerPool 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/live_execution_framework.go:356: opportunityProcessor 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/live_execution_framework.go:372: convertArbitrageOpportunityToMEVOpportunity 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/live_execution_framework.go:397: processOpportunity 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/live_execution_framework.go:454: executionCoordinator 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/live_execution_framework.go:494: ExecuteOpportunity 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/live_execution_framework.go:511: executeOpportunity 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/live_execution_framework.go:556: performRiskChecks 71.4% github.com/fraktal/mev-beta/pkg/arbitrage/live_execution_framework.go:576: checkPositionSize 75.0% github.com/fraktal/mev-beta/pkg/arbitrage/live_execution_framework.go:591: checkDailyLossLimit 91.7% github.com/fraktal/mev-beta/pkg/arbitrage/live_execution_framework.go:613: checkDailyProfitTarget 57.1% github.com/fraktal/mev-beta/pkg/arbitrage/live_execution_framework.go:627: shouldExecuteBasedOnCompetition 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/live_execution_framework.go:642: calculatePriority 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/live_execution_framework.go:678: updateExecutionStats 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/live_execution_framework.go:713: updateDailyStats 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/live_execution_framework.go:746: healthMonitor 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/live_execution_framework.go:762: performHealthCheck 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/live_execution_framework.go:783: performanceTracker 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/live_execution_framework.go:799: logPerformanceMetrics 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/live_execution_framework.go:817: printFinalStats 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/live_execution_framework.go:838: GetStats 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/live_execution_framework.go:848: GetMetrics 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/live_execution_framework.go:863: SubmitExecutionTask 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/live_execution_framework.go:889: SetMonitoringMode 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/live_execution_framework.go:903: Start 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/live_execution_framework.go:910: Stop 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/live_execution_framework.go:915: worker 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/live_execution_framework.go:928: opportunityNetProfitDecimal 75.0% github.com/fraktal/mev-beta/pkg/arbitrage/live_execution_framework.go:945: opportunityAmountString 75.0% github.com/fraktal/mev-beta/pkg/arbitrage/live_execution_framework.go:954: executionProfitToString 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/live_execution_framework.go:967: EstimateSwapGas 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/live_execution_framework.go:983: EstimateFlashSwapGas 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/live_execution_framework.go:990: GetCurrentGasPrice 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/multihop.go:77: NewMultiHopScanner 100.0% github.com/fraktal/mev-beta/pkg/arbitrage/multihop.go:93: NewTokenGraph 100.0% github.com/fraktal/mev-beta/pkg/arbitrage/multihop.go:100: ScanForArbitrage 72.2% github.com/fraktal/mev-beta/pkg/arbitrage/multihop.go:145: findArbitragePaths 100.0% github.com/fraktal/mev-beta/pkg/arbitrage/multihop.go:159: dfsArbitragePaths 23.8% github.com/fraktal/mev-beta/pkg/arbitrage/multihop.go:222: createArbitragePath 94.4% github.com/fraktal/mev-beta/pkg/arbitrage/multihop.go:296: calculateSwapOutput 37.5% github.com/fraktal/mev-beta/pkg/arbitrage/multihop.go:321: calculateUniswapV3Output 91.7% github.com/fraktal/mev-beta/pkg/arbitrage/multihop.go:350: calculateSimpleAMMOutput 86.8% github.com/fraktal/mev-beta/pkg/arbitrage/multihop.go:434: updateTokenGraph 100.0% github.com/fraktal/mev-beta/pkg/arbitrage/multihop.go:451: addPoolToGraph 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/multihop.go:458: addEdge 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/multihop.go:466: GetAdjacentTokens 100.0% github.com/fraktal/mev-beta/pkg/arbitrage/multihop.go:477: filterProfitablePaths 60.0% github.com/fraktal/mev-beta/pkg/arbitrage/multihop.go:490: isProfitable 80.0% github.com/fraktal/mev-beta/pkg/arbitrage/multihop.go:505: isPoolUsable 100.0% github.com/fraktal/mev-beta/pkg/arbitrage/multihop.go:521: estimateHopGasCost 100.0% github.com/fraktal/mev-beta/pkg/arbitrage/multihop.go:535: getCachedPaths 66.7% github.com/fraktal/mev-beta/pkg/arbitrage/multihop.go:550: setCachedPaths 100.0% github.com/fraktal/mev-beta/pkg/arbitrage/multihop.go:558: calculateUniswapV3OutputAdvanced 100.0% github.com/fraktal/mev-beta/pkg/arbitrage/multihop.go:605: calculateUniswapV2OutputAdvanced 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/multihop.go:651: calculateCurveOutputAdvanced 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/multihop.go:692: calculateBalancerOutputAdvanced 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/multihop.go:729: calculateSophisticatedAMMOutput 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/service.go:140: NewArbitrageService 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/service.go:307: convertPoolDataToMarket 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/service.go:368: convertMarketToPoolData 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/service.go:396: marketDataSyncer 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/service.go:418: performAdvancedArbitrageDetection 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/service.go:437: Start 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/service.go:459: Stop 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/service.go:479: ProcessSwapEvent 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/service.go:493: isSignificantSwap 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/service.go:505: detectArbitrageOpportunities 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/service.go:607: handleDetectedOpportunity 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/service.go:614: executeOpportunity 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/service.go:674: isValidOpportunity 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/service.go:696: calculateScanAmount 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/service.go:720: calculateUrgency 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/service.go:743: storeOpportunityPath 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/service.go:753: getOpportunityPath 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/service.go:759: deleteOpportunityPath 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/service.go:769: decimalAmountToUniversal 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/service.go:780: fallbackPathFromOpportunity 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/service.go:822: rankOpportunities 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/service.go:839: calculateMinOutput 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/service.go:854: processExecutionResult 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/service.go:899: statsUpdater 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/service.go:915: logStats 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/service.go:950: generateOpportunityID 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/service.go:954: GetStats 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/service.go:980: IsRunning 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/service.go:987: blockchainMonitor 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/service.go:1038: fallbackBlockPolling 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/service.go:1077: processNewBlock 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/service.go:1119: processTransaction 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/service.go:1148: parseSwapLog 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/service.go:1202: getPoolTokens 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/service.go:1254: getSwapEventsFromBlock 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/service.go:1296: createArbitrumMonitor 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/service.go:1399: parseSwapEvent 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/service.go:1446: syncMarketData 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/service.go:1472: SubmitBridgeOpportunity 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/service.go:1488: StartLiveMode 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/service.go:1519: StartMonitoringMode 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/service.go:1551: ScanTokenPairs 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/service.go:1579: ExecuteOpportunityLive 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/service.go:1603: GetLiveMetrics 0.0% github.com/fraktal/mev-beta/pkg/arbitrage/service.go:1624: GetSupportedTokenPairs 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/abi_decoder.go:44: NewABIDecoder 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/abi_decoder.go:58: initializeFunctionSignatures 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/abi_decoder.go:111: DecodeSwapTransaction 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/abi_decoder.go:167: decodeUniswapV2Swap 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/abi_decoder.go:222: decodeUniswapV3Swap 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/abi_decoder.go:252: decode1inchSwap 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/abi_decoder.go:274: decodeBalancerSwap 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/abi_decoder.go:290: decodeGenericSwap 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/abi_decoder.go:392: isValidTokenAddress 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/abi_decoder.go:437: CalculatePoolAddress 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/abi_decoder.go:472: calculateUniswapV3PoolAddress 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/abi_decoder.go:508: calculateUniswapV2PoolAddress 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/abi_decoder.go:527: decodeCurveSwap 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/abi_decoder.go:548: decodeLendingSwap 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/abi_decoder.go:580: decodeGMXSwap 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/abi_decoder.go:602: decodeMulticall 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/abi_decoder.go:676: decodeIndividualCall 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/arbitrum_protocols.go:100: NewArbitrumProtocolRegistry 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/arbitrum_protocols.go:120: initializeEventLogging 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/arbitrum_protocols.go:151: loadArbitrumProtocols 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/arbitrum_protocols.go:407: LogSwapEvent 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/arbitrum_protocols.go:424: LogLiquidationEvent 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/arbitrum_protocols.go:441: LogLiquidityEvent 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/arbitrum_protocols.go:458: GetProtocol 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/arbitrum_protocols.go:467: GetActiveProtocols 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/arbitrum_protocols.go:491: GetFactoryAddresses 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/arbitrum_protocols.go:503: GetContractAddresses 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/arbitrum_protocols.go:515: IsKnownRouter 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/arbitrum_protocols.go:533: IsSwapFunction 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/arbitrum_protocols.go:549: LogArbitrageExecution 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/arbitrum_protocols.go:569: Close 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/capital_optimizer.go:100: NewCapitalOptimizer 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/capital_optimizer.go:151: CanExecuteTrade 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/capital_optimizer.go:197: AllocateCapital 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/capital_optimizer.go:245: CompleteTrade 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/capital_optimizer.go:318: calculateOptimalPositionSize 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/capital_optimizer.go:363: GetOptimalOpportunities 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/capital_optimizer.go:397: weiToUSD 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/capital_optimizer.go:405: getCapitalPercentage 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/capital_optimizer.go:411: checkProfitTargets 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/capital_optimizer.go:429: GetStatus 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/circuit_breaker.go:25: String 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/circuit_breaker.go:60: NewCircuitBreaker 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/circuit_breaker.go:92: Call 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/circuit_breaker.go:121: onFailure 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/circuit_breaker.go:135: onSuccess 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/circuit_breaker.go:158: GetState 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/circuit_breaker.go:165: Reset 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/circuit_breaker.go:178: SetLogger 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/client.go:25: NewArbitrumClient 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/client.go:53: SubscribeToL2Messages 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/client.go:109: processBlockForL2Messages 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/client.go:160: encodeBlockAsL2Message 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/client.go:180: encodeTransactionsAsL2Message 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/client.go:212: extractL2MessageFromTransaction 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/client.go:241: GetL2TransactionReceipt 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/client.go:262: enrichL2Receipt 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/client.go:287: isRetryableTicketLog 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/client.go:294: parseRetryableTicket 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/client.go:315: GetL2MessageByNumber 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/client.go:345: GetBatchByNumber 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/client.go:371: SubscribeToNewBatches 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/client.go:411: parseBatchFromLog 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/client.go:432: addL1BatchInfo 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/client.go:450: addGasBreakdown 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/client.go:470: Close 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/connection.go:32: NewRateLimitedClient 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/connection.go:54: CallWithRateLimit 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/connection.go:77: GetCircuitBreaker 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/connection.go:82: ResetCircuitBreaker 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/connection.go:97: NewConnectionManager 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/connection.go:105: GetClient 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/connection.go:147: getPrimaryEndpoint 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/connection.go:163: getFallbackEndpoints 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/connection.go:207: connectWithTimeout 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/connection.go:237: testConnection 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/connection.go:247: Close 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/connection.go:262: GetClientWithRetry 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/connection.go:289: GetHealthyClient 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/discovery/arbitrage.go:23: NewArbitrageCalculator 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/discovery/arbitrage.go:32: findArbitrageOpportunities 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/discovery/arbitrage.go:77: calculateArbitrage 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/discovery/arbitrage.go:220: abs 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/discovery/arbitrage.go:228: groupPoolsByTokenPairs 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/discovery/core.go:225: NewMarketDiscovery 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/discovery/core.go:256: LoadMarketConfig 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/discovery/core.go:271: loadInitialMarkets 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/discovery/core.go:358: buildComprehensiveMarkets 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/discovery/core.go:387: getTopTokens 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/discovery/core.go:416: buildFactoryMarkets 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/discovery/core.go:474: buildTokenPairMarkets 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/discovery/core.go:537: calculatePoolAddress 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/discovery/core.go:564: calculateUniswapV3PoolAddress 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/discovery/core.go:586: calculateUniswapV2PoolAddress 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/discovery/core.go:603: calculateBalancerPoolAddress 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/discovery/core.go:612: calculateCurvePoolAddress 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/discovery/core.go:620: calculateGenericPoolAddress 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/discovery/core.go:638: logAvailableMarkets 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/discovery/core.go:698: DiscoverPools 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/discovery/core.go:727: ScanForArbitrage 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/discovery/core.go:767: GetStatistics 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/discovery/core.go:784: BuildComprehensiveMarkets 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/discovery/core.go:789: getTopPoolsByLiquidity 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/discovery/core.go:817: findArbitrageOpportunities 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/discovery/core.go:832: updatePoolStates 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/discovery/core.go:847: discoverPoolsFromFactory 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/discovery/pool_state.go:22: NewPoolStateManager 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/discovery/pool_state.go:30: updatePoolStates 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/discovery/pool_state.go:87: updateUniswapV2PoolState 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/discovery/pool_state.go:123: updateUniswapV3PoolState 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/discovery/pool_state.go:174: updateBalancerPoolState 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/discovery/pool_state.go:214: updateCurvePoolState 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/enhanced_sequencer_parser.go:19: NewEnhancedSequencerParserManager 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/enhanced_sequencer_parser.go:34: ParseBlockForMEV 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/enhanced_sequencer_parser.go:39: GetStatistics 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/enhanced_sequencer_parser.go:44: Close 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/event_monitor.go:58: NewEventMonitor 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/event_monitor.go:89: initializeEventSignatures 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/event_monitor.go:147: Start 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/event_monitor.go:165: startProtocolMonitoring 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/event_monitor.go:200: monitorSwapEvents 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/event_monitor.go:244: monitorFactoryEvents 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/event_monitor.go:308: monitorLiquidationEvents 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/event_monitor.go:363: monitorEvents 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/event_monitor.go:430: processLog 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/event_monitor.go:446: processSwapLog 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/event_monitor.go:465: parseSwapEvent 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/event_monitor.go:495: processFactoryLog 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/event_monitor.go:582: processLiquidationLog 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/event_monitor.go:603: processSwapEvents 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/event_monitor.go:621: processLiquidationEvents 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/event_monitor.go:636: processLiquidityEvents 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/event_monitor.go:653: GetMetrics 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/event_monitor.go:663: Close 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/gas.go:39: NewL2GasEstimator 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/gas.go:51: EstimateL2Gas 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/gas.go:100: estimateGasLimit 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/gas.go:121: estimateL1DataFee 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/gas.go:185: calculateOptimalPriorityFee 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/gas.go:205: getSuggestedPriorityFee 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/gas.go:222: calculateConfidence 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/gas.go:240: getDefaultGasLimit 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/gas.go:263: OptimizeForSpeed 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/gas.go:293: OptimizeForCost 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/gas.go:319: IsL2TransactionViable 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/gas.go:325: getL1GasPrice 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/gas.go:353: getEstimatedL1GasPrice 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/gas.go:398: getL1PricePerUnit 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/gas.go:426: getBaseFeeScalar 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/gas.go:466: serializeTransactionForL1 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/gas.go:528: EstimateSwapGas 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/gas.go:551: EstimateFlashSwapGas 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/gas.go:584: GetCurrentGasPrice 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/l2_parser.go:97: NewArbitrumL2Parser 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/l2_parser.go:128: initializeDEXData 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/l2_parser.go:397: GetBlockByNumber 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/l2_parser.go:411: ParseDEXTransactions 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/l2_parser.go:456: parseDEXTransaction 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/l2_parser.go:531: decodeFunctionData 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/l2_parser.go:563: decodeSwapExactTokensForTokens 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/l2_parser.go:614: decodeSwapTokensForExactTokens 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/l2_parser.go:630: decodeSwapExactETHForTokens 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/l2_parser.go:642: decodeSwapExactTokensForETH 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/l2_parser.go:658: decodeExactInputSingle 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/l2_parser.go:671: decodeExactInput 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/l2_parser.go:683: decodeExactOutputSingle 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/l2_parser.go:695: decodeMulticall 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/l2_parser.go:706: decodeFunctionDataStructured 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/l2_parser.go:737: decodeSwapExactTokensForTokensStructured 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/l2_parser.go:788: decodeSwapExactTokensForETHStructured 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/l2_parser.go:804: decodeExactInputSingleStructured 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/l2_parser.go:846: decodeSwapTokensForExactTokensStructured 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/l2_parser.go:861: decodeSwapExactETHForTokensStructured 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/l2_parser.go:875: decodeExactInputStructured 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/l2_parser.go:913: decodeExactOutputSingleStructured 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/l2_parser.go:927: decodeMulticallStructured 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/l2_parser.go:997: calculateProfitWithOracle 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/l2_parser.go:1079: initializeABIs 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/l2_parser.go:1217: decodeWithABI 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/l2_parser.go:1262: GetDetailedSwapInfo 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/l2_parser.go:1303: resolveTokenSymbol 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/l2_parser.go:1345: Close 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/market/config.go:11: LoadMarketConfig 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/market/logging.go:10: initializeLogging 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/market/logging.go:34: logMarketScan 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/market/logging.go:48: logArbitrageOpportunity 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/market/logging.go:62: logPoolDiscovery 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/market/market_discovery.go:12: NewMarketDiscovery 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/market/market_discovery.go:48: loadInitialMarkets 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/market/market_discovery.go:136: abs 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/market/market_discovery.go:144: GetStatistics 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/market/market_discovery.go:160: Close 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/market_discovery.go:33: NewMarketDiscoveryManager 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/market_discovery.go:62: DiscoverPools 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/market_discovery.go:67: ScanForArbitrage 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/market_discovery.go:72: BuildComprehensiveMarkets 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/market_discovery.go:77: StartIncrementalScanning 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/market_discovery.go:104: runIncrementalScanning 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/market_discovery.go:129: performIncrementalScan 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/market_discovery.go:203: StopIncrementalScanning 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/market_discovery.go:217: SetMaxBlocksPerScan 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/market_discovery.go:224: SetScanInterval 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/market_discovery.go:231: GetLastScannedBlock 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/market_discovery.go:238: GetStatistics 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/market_discovery.go:243: GetPoolCache 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/market_discovery.go:255: StartFactoryEventMonitoring 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/market_discovery.go:268: monitorFactoryEvents 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/market_discovery.go:287: Close 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/mev_strategies.go:130: NewMEVStrategyEngine 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/mev_strategies.go:145: NewRealTimeProfitCalculator 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/mev_strategies.go:155: NewRiskManager 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/mev_strategies.go:167: AnalyzeArbitrageOpportunity 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/mev_strategies.go:234: AnalyzeSandwichOpportunity 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/mev_strategies.go:296: AnalyzeLiquidationOpportunity 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/mev_strategies.go:361: GetCrossExchangePrices 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/mev_strategies.go:379: findBestArbitragePath 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/mev_strategies.go:440: calculateOptimalSandwichAmounts 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/mev_strategies.go:452: calculateSandwichProfit 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/mev_strategies.go:466: calculateArbitrageGasCost 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/mev_strategies.go:472: calculateSandwichGasCost 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/mev_strategies.go:480: calculateLiquidationGasCost 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/mev_strategies.go:490: calculatePriority 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/mev_strategies.go:499: calculatePriceDifference 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/mev_strategies.go:525: WeiToUSD 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/mev_strategies.go:539: getTokenPairPrice 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/mev_strategies.go:546: CalculateRiskScore 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/mev_strategies.go:570: GetTopStrategies 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/mev_strategies.go:585: UpdatePerformanceMetrics 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/mev_strategies.go:594: GetPerformanceStats 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/parser.go:30: NewL2MessageParser 100.0% github.com/fraktal/mev-beta/pkg/arbitrum/parser.go:47: KnownPools 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/parser.go:52: initializeKnownAddresses 100.0% github.com/fraktal/mev-beta/pkg/arbitrum/parser.go:95: loadABIs 80.0% github.com/fraktal/mev-beta/pkg/arbitrum/parser.go:121: ParseL2Message 77.8% github.com/fraktal/mev-beta/pkg/arbitrum/parser.go:171: parseL2Transaction 66.7% github.com/fraktal/mev-beta/pkg/arbitrum/parser.go:216: parseL2Batch 50.0% github.com/fraktal/mev-beta/pkg/arbitrum/parser.go:301: ParseDEXInteraction 42.2% github.com/fraktal/mev-beta/pkg/arbitrum/parser.go:400: parseSwapExactTokensForTokens 15.8% github.com/fraktal/mev-beta/pkg/arbitrum/parser.go:481: parseSwapTokensForExactTokens 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/parser.go:549: parseSwapExactETHForTokens 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/parser.go:604: parseSwapExactTokensForETH 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/parser.go:670: parseExactOutputSingle 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/parser.go:753: parseExactOutput 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/parser.go:822: parseMulticall 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/parser.go:858: parseExactInputSingle 75.9% github.com/fraktal/mev-beta/pkg/arbitrum/parser.go:945: parseExactInput 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/parser.go:1014: IsSignificantSwap 50.0% github.com/fraktal/mev-beta/pkg/arbitrum/parser/core.go:134: NewEnhancedSequencerParser 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/parser/core.go:171: NewABIDecoder 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/parser/core.go:186: DecodeSwapTransaction 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/parser/core.go:215: decodeUniswapV3Swap 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/parser/core.go:236: decodeExactInputSingle 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/parser/core.go:264: decodeUniswapV2Swap 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/parser/core.go:280: CalculatePoolAddress 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/parser/core.go:304: calculateUniswapV3PoolAddress 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/parser/core.go:327: computeCREATE2Address 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/parser/core.go:339: ParseBlockForMEV 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/parser/core.go:393: GetStatistics 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/parser/core.go:410: Close 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/parser/core.go:417: calculateTotalProfit 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/parser/core.go:438: calculateROI 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/parser/core.go:458: decodeExactOutputSingle 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/parser/core.go:485: decodeExactInput 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/parser/core.go:519: decodeExactOutput 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/parser/core.go:524: decodeSushiSwap 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/parser/core.go:530: decodeCamelotSwap 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/parser/core.go:536: decodeBalancerSwap 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/parser/core.go:549: decodeCurveSwap 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/parser/core.go:562: decodeGenericSwap 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/parser/core.go:580: decodeSwapExactTokensForTokens 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/parser/core.go:611: decodeSwapTokensForExactTokens 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/parser/core.go:616: calculateUniswapV2PoolAddress 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/parser/core.go:635: calculateCamelotPoolAddress 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/parser/core.go:643: calculateBalancerPoolAddress 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/parser/core.go:649: decodeBalancerBatchSwap 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/parser/core.go:661: decodeBalancerSingleSwap 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/parser/core.go:666: decodeCurveExchange 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/parser/core.go:687: decodeCurveExchangeUnderlying 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/parser/core.go:693: analyzeTransaction 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/parser/core.go:720: analyzeTransactionData 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/parser/core.go:761: analyzeTransactionLogs 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/parser/core.go:786: identifyDEXProtocol 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/parser/core.go:804: parseSwapLog 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/parser/core.go:825: parseUniV2SwapLog 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/parser/core.go:872: parseUniV3SwapLog 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/parser/core.go:917: getToken0FromPool 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/parser/core.go:923: getToken1FromPool 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/parser/core.go:928: getSender 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/parser/core.go:935: calculatePriceImpact 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/parser/core.go:946: calculateMEVScore 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/parser/core.go:956: detectArbitrageOpportunities 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/parser/core.go:981: detectSandwichAttacks 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/parser/core.go:1002: detectLiquidationOpportunities 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/parser/core.go:1007: getPairKey 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/parser/core.go:1015: calculateArbitrage 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/parser/core.go:1046: calculateSandwichProfit 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/parser/core.go:1058: fetchBlockSafely 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/parser/core.go:1082: fetchBlockViaRPC 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/parser/core.go:1117: processTransactionReceipts 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/parser/core.go:1143: analyzeReceiptLogs 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/parser/executor.go:37: NewExecutor 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/parser/executor.go:50: ExecuteArbitrage 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/parser/executor.go:68: buildArbitrageBundle 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/parser/executor.go:100: createArbitrageTransaction 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/parser/executor.go:115: submitBundle 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/parser/executor.go:132: simulateTransaction 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/parser/executor.go:139: getOptimalGasPrice 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/parser/transaction_analyzer.go:31: NewTransactionAnalyzer 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/parser/transaction_analyzer.go:52: analyzeTransactionForMEV 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/parser/transaction_analyzer.go:97: handleSwapTransaction 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/parser/transaction_analyzer.go:153: handleLiquidationTransaction 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/parser/transaction_analyzer.go:194: handleLiquidityTransaction 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/parser/transaction_analyzer.go:227: isLiquidationFunction 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/parser/transaction_analyzer.go:237: isLiquidityFunction 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/parser/transaction_analyzer.go:288: parseSwapData 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/parser/transaction_analyzer.go:410: calculateRealPriceImpact 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/parser/transaction_analyzer.go:452: parseStringToBigInt 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/parser/transaction_analyzer.go:476: estimateUniswapV2PriceImpact 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/parser/transaction_analyzer.go:512: estimateFallbackV2PriceImpact 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/parser/transaction_analyzer.go:526: estimateUniswapV3PriceImpact 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/parser/transaction_analyzer.go:555: estimateFallbackPriceImpact 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/parser/transaction_analyzer.go:569: estimateCurvePriceImpact 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/parser/transaction_analyzer.go:626: estimateBalancerPriceImpact 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/parser/transaction_analyzer.go:695: estimateGenericPriceImpact 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/parser/transaction_analyzer.go:736: parseLiquidationData 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/parser/transaction_analyzer.go:746: parseLiquidityData 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/parser/transaction_analyzer.go:756: findArbitrageOpportunity 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/parser/transaction_analyzer.go:897: findSandwichOpportunity 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/parser/transaction_analyzer.go:903: findLiquidationOpportunity 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/parser/transaction_analyzer.go:917: calculateMEVScore 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/parser/transaction_analyzer.go:956: calculateSizeFactor 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/parser/transaction_analyzer.go:1001: calculatePriceImpactFactor 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/parser/transaction_analyzer.go:1020: calculateProtocolFactor 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/parser/transaction_analyzer.go:1044: calculateGasEfficiencyFactor 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/parser/transaction_analyzer.go:1071: formatEther 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/pool_cache.go:40: NewPoolCache 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/pool_cache.go:58: GetPool 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/pool_cache.go:78: GetPoolsByTokenPair 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/pool_cache.go:108: AddPool 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/pool_cache.go:134: UpdatePool 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/pool_cache.go:149: RemovePool 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/pool_cache.go:179: AddPoolIfNotExists 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/pool_cache.go:200: GetPoolsByProtocol 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/pool_cache.go:219: GetPoolAddressesByProtocol 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/pool_cache.go:238: GetTopPools 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/pool_cache.go:282: GetCacheStats 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/pool_cache.go:317: Flush 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/pool_cache.go:329: Close 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/pool_cache.go:339: evictLRU 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/pool_cache.go:376: cleanupExpired 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/pool_cache.go:415: cleanupLoop 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/pool_cache.go:427: createTokenPairKey 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/pool_cache.go:438: WarmUp 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/pool_cache.go:445: GetPoolCount 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/pool_cache.go:453: GetValidPoolCount 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/pool_cache.go:470: GetPoolAddresses 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/pool_cache.go:487: SetTTL 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/pool_cache.go:501: GetTTL 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/pool_cache.go:509: BulkUpdate 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/pool_cache.go:541: Contains 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/profitability_tracker.go:156: NewProfitabilityTracker 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/profitability_tracker.go:192: LogTrade 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/profitability_tracker.go:234: LogOpportunity 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/profitability_tracker.go:280: GetRealTimeStats 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/profitability_tracker.go:317: GetTopTokenPairs 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/profitability_tracker.go:346: updateHourlyStats 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/profitability_tracker.go:380: updateDailyStats 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/profitability_tracker.go:419: updateWeeklyStats 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/profitability_tracker.go:439: updateTokenPairStats 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/profitability_tracker.go:484: updateExchangeStats 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/profitability_tracker.go:510: logTradeToFile 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/profitability_tracker.go:523: logPerformanceMetrics 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/profitability_tracker.go:540: weiToUSD 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/profitability_tracker.go:549: Close 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/rate_limited_rpc.go:21: NewRateLimitedRPC 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/rate_limited_rpc.go:34: CallWithRetry 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/rate_limited_rpc.go:68: executeCall 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/rate_limited_rpc.go:78: isRateLimitError 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/rate_limited_rpc.go:107: containsIgnoreCase 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/swap_pipeline.go:49: NewSwapEventPipeline 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/swap_pipeline.go:76: Start 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/swap_pipeline.go:95: SubmitTransactionSwap 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/swap_pipeline.go:105: SubmitEventLogSwap 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/swap_pipeline.go:115: SubmitPoolDiscoverySwap 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/swap_pipeline.go:125: processTransactionSwaps 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/swap_pipeline.go:146: processEventLogSwaps 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/swap_pipeline.go:167: processPoolDiscoverySwaps 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/swap_pipeline.go:188: processUnifiedSwaps 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/swap_pipeline.go:200: processSwap 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/swap_pipeline.go:221: isDuplicateSwap 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/swap_pipeline.go:238: markSwapAsSeen 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/swap_pipeline.go:248: cleanupSeenSwaps 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/swap_pipeline.go:270: updateMarketDiscovery 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/swap_pipeline.go:304: syncPoolAcrossFactories 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/swap_pipeline.go:399: calculatePoolAddress 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/swap_pipeline.go:417: analyzeForArbitrage 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/swap_pipeline.go:518: scanAllPoolsForArbitrage 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/swap_pipeline.go:671: fetchPoolPrice 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/swap_pipeline.go:752: formatEther 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/swap_pipeline.go:764: GetMetrics 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/swap_pipeline.go:782: SubmitPoolStateUpdate 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/swap_pipeline.go:836: Close 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/token_metadata.go:67: NewTokenMetadataService 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/token_metadata.go:82: GetTokenMetadata 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/token_metadata.go:112: extractMetadataFromContract 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/token_metadata.go:168: enhanceMetadata 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/token_metadata.go:187: callStringMethod 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/token_metadata.go:218: callUint8Method 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/token_metadata.go:257: callBigIntMethod 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/token_metadata.go:288: categorizeToken 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/token_metadata.go:318: assessRisk 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/token_metadata.go:358: isStablecoin 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/token_metadata.go:373: isWrappedToken 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/token_metadata.go:378: isVerifiedToken 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/token_metadata.go:384: isContractVerified 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/token_metadata.go:397: getProxyImplementation 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/token_metadata.go:414: getCachedMetadata 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/token_metadata.go:432: cacheMetadata 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/token_metadata.go:443: getKnownArbitrumTokens 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/token_metadata.go:503: getERC20ABI 0.0% github.com/fraktal/mev-beta/pkg/arbitrum/token_metadata.go:537: getProxyABI 0.0% github.com/fraktal/mev-beta/pkg/bindings/bindings.go:16: NewMethod 0.0% github.com/fraktal/mev-beta/pkg/circuit/breaker.go:23: String 0.0% github.com/fraktal/mev-beta/pkg/circuit/breaker.go:68: NewCircuitBreaker 0.0% github.com/fraktal/mev-beta/pkg/circuit/breaker.go:95: Execute 0.0% github.com/fraktal/mev-beta/pkg/circuit/breaker.go:114: ExecuteContext 0.0% github.com/fraktal/mev-beta/pkg/circuit/breaker.go:141: beforeRequest 0.0% github.com/fraktal/mev-beta/pkg/circuit/breaker.go:159: afterRequest 0.0% github.com/fraktal/mev-beta/pkg/circuit/breaker.go:178: onFailure 0.0% github.com/fraktal/mev-beta/pkg/circuit/breaker.go:194: onSuccess 0.0% github.com/fraktal/mev-beta/pkg/circuit/breaker.go:208: currentState 0.0% github.com/fraktal/mev-beta/pkg/circuit/breaker.go:223: setState 0.0% github.com/fraktal/mev-beta/pkg/circuit/breaker.go:255: State 0.0% github.com/fraktal/mev-beta/pkg/circuit/breaker.go:260: Counts 0.0% github.com/fraktal/mev-beta/pkg/circuit/breaker.go:267: Name 0.0% github.com/fraktal/mev-beta/pkg/circuit/breaker.go:272: Reset 0.0% github.com/fraktal/mev-beta/pkg/circuit/breaker.go:292: NewTwoStepCircuitBreaker 0.0% github.com/fraktal/mev-beta/pkg/circuit/breaker.go:300: Allow 0.0% github.com/fraktal/mev-beta/pkg/circuit/breaker.go:306: ReportResult 0.0% github.com/fraktal/mev-beta/pkg/circuit/breaker.go:322: NewManager 0.0% github.com/fraktal/mev-beta/pkg/circuit/breaker.go:330: GetOrCreate 0.0% github.com/fraktal/mev-beta/pkg/circuit/breaker.go:355: Get 0.0% github.com/fraktal/mev-beta/pkg/circuit/breaker.go:364: Remove 0.0% github.com/fraktal/mev-beta/pkg/circuit/breaker.go:372: List 0.0% github.com/fraktal/mev-beta/pkg/circuit/breaker.go:385: Stats 0.0% github.com/fraktal/mev-beta/pkg/circuit/breaker.go:401: Reset 0.0% github.com/fraktal/mev-beta/pkg/contracts/executor.go:40: NewContractExecutor 0.0% github.com/fraktal/mev-beta/pkg/contracts/executor.go:96: ExecuteArbitrage 0.0% github.com/fraktal/mev-beta/pkg/contracts/executor.go:126: ExecuteTriangularArbitrage 0.0% github.com/fraktal/mev-beta/pkg/contracts/executor.go:162: convertToArbitrageParams 0.0% github.com/fraktal/mev-beta/pkg/contracts/executor.go:201: convertToTriangularArbitrageParams 0.0% github.com/fraktal/mev-beta/pkg/contracts/executor.go:271: generateSwapData 0.0% github.com/fraktal/mev-beta/pkg/contracts/executor.go:289: generateUniswapV3SwapData 0.0% github.com/fraktal/mev-beta/pkg/contracts/executor.go:316: generateUniswapV2SwapData 0.0% github.com/fraktal/mev-beta/pkg/contracts/executor.go:335: getUniswapV3Fee 0.0% github.com/fraktal/mev-beta/pkg/contracts/executor.go:342: checkUniswapV2Pool 0.0% github.com/fraktal/mev-beta/pkg/contracts/executor.go:349: prepareTransactionOpts 0.0% github.com/fraktal/mev-beta/pkg/contracts/executor.go:377: updateGasPrice 0.0% github.com/fraktal/mev-beta/pkg/contracts/executor.go:394: signTransaction 0.0% github.com/fraktal/mev-beta/pkg/contracts/executor.go:423: GetClient 0.0% github.com/fraktal/mev-beta/pkg/contracts/executor.go:428: Close 0.0% github.com/fraktal/mev-beta/pkg/contracts/key_manager.go:17: NewKeyManager 0.0% github.com/fraktal/mev-beta/pkg/contracts/key_manager.go:44: GetPrivateKey 0.0% github.com/fraktal/mev-beta/pkg/contracts/key_manager.go:52: GetAddress 0.0% github.com/fraktal/mev-beta/pkg/database/database.go:112: NewDatabase 80.0% github.com/fraktal/mev-beta/pkg/database/database.go:140: initSchema 64.3% github.com/fraktal/mev-beta/pkg/database/database.go:275: InsertSwapEvent 73.3% github.com/fraktal/mev-beta/pkg/database/database.go:335: InsertLiquidityEvent 75.0% github.com/fraktal/mev-beta/pkg/database/database.go:388: InsertPoolData 77.8% github.com/fraktal/mev-beta/pkg/database/database.go:419: GetRecentSwapEvents 94.1% github.com/fraktal/mev-beta/pkg/database/database.go:481: GetRecentLiquidityEvents 87.1% github.com/fraktal/mev-beta/pkg/database/database.go:543: GetPoolData 80.0% github.com/fraktal/mev-beta/pkg/database/database.go:585: Close 66.7% github.com/fraktal/mev-beta/pkg/events/parser.go:25: String 100.0% github.com/fraktal/mev-beta/pkg/events/parser.go:84: NewEventParser 100.0% github.com/fraktal/mev-beta/pkg/events/parser.go:123: ParseTransactionReceipt 0.0% github.com/fraktal/mev-beta/pkg/events/parser.go:168: IsDEXInteraction 100.0% github.com/fraktal/mev-beta/pkg/events/parser.go:199: identifyProtocol 50.0% github.com/fraktal/mev-beta/pkg/events/parser.go:274: parseUniswapV2Swap 0.0% github.com/fraktal/mev-beta/pkg/events/parser.go:314: parseUniswapV3Swap 0.0% github.com/fraktal/mev-beta/pkg/events/parser.go:352: parseUniswapV2Mint 0.0% github.com/fraktal/mev-beta/pkg/events/parser.go:376: parseUniswapV3Mint 0.0% github.com/fraktal/mev-beta/pkg/events/parser.go:400: parseUniswapV2Burn 0.0% github.com/fraktal/mev-beta/pkg/events/parser.go:424: parseUniswapV3Burn 0.0% github.com/fraktal/mev-beta/pkg/events/parser.go:448: ParseTransaction 41.2% github.com/fraktal/mev-beta/pkg/events/parser.go:534: parseSwapExactTokensForTokensFromTx 0.0% github.com/fraktal/mev-beta/pkg/events/parser.go:583: parseExactInputSingleFromTx 90.9% github.com/fraktal/mev-beta/pkg/events/parser.go:620: parseExactInputFromTx 0.0% github.com/fraktal/mev-beta/pkg/events/parser.go:670: parseSwapExactETHForTokensFromTx 0.0% github.com/fraktal/mev-beta/pkg/events/parser.go:716: AddKnownPool 100.0% github.com/fraktal/mev-beta/pkg/events/parser.go:721: GetKnownPools 100.0% github.com/fraktal/mev-beta/pkg/exchanges/exchanges.go:88: NewExchangeRegistry 0.0% github.com/fraktal/mev-beta/pkg/exchanges/exchanges.go:100: LoadArbitrumExchanges 0.0% github.com/fraktal/mev-beta/pkg/exchanges/exchanges.go:185: GetExchangeByType 0.0% github.com/fraktal/mev-beta/pkg/exchanges/exchanges.go:194: GetExchangesForPair 0.0% github.com/fraktal/mev-beta/pkg/exchanges/exchanges.go:207: GetAllExchanges 0.0% github.com/fraktal/mev-beta/pkg/exchanges/exchanges.go:216: GetAllExchangesMap 0.0% github.com/fraktal/mev-beta/pkg/exchanges/exchanges.go:221: GetHighPriorityTokens 0.0% github.com/fraktal/mev-beta/pkg/exchanges/exchanges.go:240: IsPairSupported 0.0% github.com/fraktal/mev-beta/pkg/exchanges/exchanges.go:254: GetPoolDetector 0.0% github.com/fraktal/mev-beta/pkg/exchanges/exchanges.go:259: GetLiquidityFetcher 0.0% github.com/fraktal/mev-beta/pkg/exchanges/exchanges.go:264: FindAllPaths 0.0% github.com/fraktal/mev-beta/pkg/execution/queue.go:73: Len 0.0% github.com/fraktal/mev-beta/pkg/execution/queue.go:75: Less 0.0% github.com/fraktal/mev-beta/pkg/execution/queue.go:83: Swap 0.0% github.com/fraktal/mev-beta/pkg/execution/queue.go:87: Push 0.0% github.com/fraktal/mev-beta/pkg/execution/queue.go:91: Pop 0.0% github.com/fraktal/mev-beta/pkg/execution/queue.go:109: NewExecutionQueue 0.0% github.com/fraktal/mev-beta/pkg/execution/queue.go:127: AddOpportunity 0.0% github.com/fraktal/mev-beta/pkg/execution/queue.go:173: calculatePriority 0.0% github.com/fraktal/mev-beta/pkg/execution/queue.go:204: Start 0.0% github.com/fraktal/mev-beta/pkg/execution/queue.go:222: processNext 0.0% github.com/fraktal/mev-beta/pkg/execution/queue.go:281: executeOpportunity 0.0% github.com/fraktal/mev-beta/pkg/execution/queue.go:316: IsOpen 0.0% github.com/fraktal/mev-beta/pkg/execution/queue.go:341: RecordFailure 0.0% github.com/fraktal/mev-beta/pkg/execution/queue.go:349: GetStats 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/dependency_injection.go:81: NewContainer 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/dependency_injection.go:103: Register 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/dependency_injection.go:132: RegisterInstance 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/dependency_injection.go:156: RegisterFactory 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/dependency_injection.go:180: Resolve 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/dependency_injection.go:193: ResolveNamed 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/dependency_injection.go:212: ResolveAll 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/dependency_injection.go:235: TryResolve 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/dependency_injection.go:244: IsRegistered 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/dependency_injection.go:261: CreateScope 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/dependency_injection.go:283: GetScope 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/dependency_injection.go:292: AddInterceptor 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/dependency_injection.go:299: GetRegistrations 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/dependency_injection.go:311: Validate 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/dependency_injection.go:329: Dispose 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/dependency_injection.go:352: resolveType 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/dependency_injection.go:393: createInstance 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/dependency_injection.go:431: createInstanceByReflection 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/dependency_injection.go:462: createStruct 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/dependency_injection.go:504: callConstructor 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/dependency_injection.go:536: applyInterceptors 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/dependency_injection.go:556: validateDescriptor 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/dependency_injection.go:580: AsSingleton 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/dependency_injection.go:586: AsTransient 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/dependency_injection.go:592: AsScoped 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/dependency_injection.go:598: WithName 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/dependency_injection.go:604: WithTag 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/dependency_injection.go:610: WithMetadata 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/dependency_injection.go:616: WithInterceptor 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/dependency_injection.go:622: Build 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/dependency_injection.go:654: NewDefaultInterceptor 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/dependency_injection.go:658: Intercept 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/health_monitor.go:216: NewHealthMonitor 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/health_monitor.go:259: Start 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/health_monitor.go:276: Stop 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/health_monitor.go:291: StartMonitoring 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/health_monitor.go:325: StopMonitoring 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/health_monitor.go:336: CheckHealth 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/health_monitor.go:354: GetHealthStatus 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/health_monitor.go:369: GetOverallHealth 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/health_monitor.go:384: AddHealthRule 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/health_monitor.go:391: SetHealthAggregator 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/health_monitor.go:398: SetHealthNotifier 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/health_monitor.go:405: GetMetrics 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/health_monitor.go:413: monitoringLoop 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/health_monitor.go:427: performAllHealthChecks 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/health_monitor.go:448: performHealthChecksSequential 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/health_monitor.go:456: performHealthChecksParallel 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/health_monitor.go:476: performHealthCheck 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/health_monitor.go:561: performCustomCheck 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/health_monitor.go:600: calculateHealthTrend 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/health_monitor.go:644: predictHealthStatus 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/health_monitor.go:654: applyHealthRules 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/health_monitor.go:664: updateMetrics 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/health_monitor.go:684: setupDefaultRules 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/health_monitor.go:733: NewDefaultHealthAggregator 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/health_monitor.go:737: AggregateHealth 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/health_monitor.go:774: CalculateSystemHealth 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/health_monitor.go:807: GetHealthScore 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/health_monitor.go:820: getHealthValues 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/health_monitor.go:831: NewDefaultHealthNotifier 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/health_monitor.go:835: NotifyHealthChange 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/health_monitor.go:840: NotifySystemHealth 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/health_monitor.go:845: NotifyAlert 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/interfaces.go:23: NewBaseModule 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/interfaces.go:41: Initialize 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/interfaces.go:48: Start 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/interfaces.go:61: Stop 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/interfaces.go:73: Pause 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/interfaces.go:82: Resume 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/interfaces.go:94: GetID 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/interfaces.go:98: GetName 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/interfaces.go:102: GetVersion 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/interfaces.go:106: GetDependencies 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/interfaces.go:112: GetHealth 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/interfaces.go:117: GetState 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/interfaces.go:121: GetMetrics 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/interfaces.go:127: SetHealth 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/interfaces.go:133: SetState 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/interfaces.go:137: UpdateMetrics 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/interfaces.go:144: IncrementMetric 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/interfaces.go:162: NewSimpleEventBus 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/interfaces.go:168: Publish 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/interfaces.go:188: Subscribe 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/interfaces.go:224: NewLifecycleManager 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/interfaces.go:260: Initialize 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/interfaces.go:294: Start 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/interfaces.go:299: Stop 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/interfaces.go:304: Shutdown 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/interfaces.go:312: RegisterModule 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/interfaces.go:317: GetModule 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/interfaces.go:322: GetRegistry 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/interfaces.go:329: GetHealthMonitor 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/interfaces.go:336: GetShutdownManager 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/interfaces.go:343: GetContainer 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/interfaces.go:350: GetEventBus 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/interfaces.go:357: GetOverallHealth 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/interfaces.go:365: CreateDefaultConfig 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/module_registry.go:199: NewModuleRegistry 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/module_registry.go:227: Register 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/module_registry.go:274: Unregister 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/module_registry.go:317: Get 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/module_registry.go:330: GetByType 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/module_registry.go:344: List 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/module_registry.go:357: GetState 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/module_registry.go:370: GetRegistryState 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/module_registry.go:377: Initialize 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/module_registry.go:414: StartAll 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/module_registry.go:432: StopAll 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/module_registry.go:450: Start 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/module_registry.go:463: Stop 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/module_registry.go:476: Pause 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/module_registry.go:489: Resume 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/module_registry.go:502: SetEventBus 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/module_registry.go:509: SetHealthMonitor 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/module_registry.go:516: GetHealth 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/module_registry.go:529: GetMetrics 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/module_registry.go:542: Shutdown 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/module_registry.go:556: calculateStartOrder 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/module_registry.go:598: initializeModule 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/module_registry.go:618: startModule 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/module_registry.go:659: stopModule 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/module_registry.go:704: pauseModule 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/module_registry.go:730: resumeModule 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/module_registry.go:756: startAllSequential 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/module_registry.go:771: startAllParallel 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/module_registry.go:803: stopAllSequential 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/module_registry.go:818: stopAllParallel 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/shutdown_manager.go:105: NewShutdownManager 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/shutdown_manager.go:148: Start 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/shutdown_manager.go:163: Shutdown 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/shutdown_manager.go:181: ForceShutdown 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/shutdown_manager.go:200: AddShutdownTask 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/shutdown_manager.go:209: AddShutdownHook 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/shutdown_manager.go:217: GetState 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/shutdown_manager.go:224: GetProgress 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/shutdown_manager.go:285: Wait 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/shutdown_manager.go:291: WaitWithTimeout 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/shutdown_manager.go:308: setupSignalHandling 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/shutdown_manager.go:317: setupDefaultTasks 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/shutdown_manager.go:376: signalHandler 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/shutdown_manager.go:410: performShutdown 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/shutdown_manager.go:466: executeShutdownTasks 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/shutdown_manager.go:474: executeTasksSequential 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/shutdown_manager.go:493: executeTasksParallel 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/shutdown_manager.go:540: executeTask 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/shutdown_manager.go:572: callHooks 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/shutdown_manager.go:599: sortTasksByPriority 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/shutdown_manager.go:610: groupTasksByPriority 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/shutdown_manager.go:642: saveApplicationState 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/shutdown_manager.go:648: closeExternalConnections 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/shutdown_manager.go:653: cleanupTempFiles 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/shutdown_manager.go:658: notifyExternalSystems 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/shutdown_manager.go:668: NewDefaultShutdownHook 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/shutdown_manager.go:672: OnShutdownStarted 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/shutdown_manager.go:676: OnModulesStopped 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/shutdown_manager.go:680: OnCleanupStarted 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/shutdown_manager.go:684: OnShutdownCompleted 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/shutdown_manager.go:688: OnShutdownFailed 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/state_machine.go:69: NewStateMachine 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/state_machine.go:106: GetCurrentState 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/state_machine.go:113: CanTransition 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/state_machine.go:132: Transition 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/state_machine.go:145: TransitionWithRetry 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/state_machine.go:175: Initialize 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/state_machine.go:180: Start 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/state_machine.go:185: Stop 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/state_machine.go:190: Pause 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/state_machine.go:195: Resume 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/state_machine.go:200: Fail 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/state_machine.go:205: SetStateHandler 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/state_machine.go:212: SetTransitionHook 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/state_machine.go:219: GetHistory 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/state_machine.go:229: GetMetrics 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/state_machine.go:241: AddCustomTransition 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/state_machine.go:260: RemoveTransition 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/state_machine.go:278: GetValidTransitions 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/state_machine.go:293: IsInState 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/state_machine.go:300: IsInAnyState 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/state_machine.go:313: WaitForState 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/state_machine.go:337: Reset 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/state_machine.go:357: performTransition 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/state_machine.go:430: executeStateTransition 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/state_machine.go:455: canTransitionUnsafe 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/state_machine.go:470: recordSuccessfulTransition 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/state_machine.go:484: recordFailedTransition 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/state_machine.go:503: addToHistory 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/state_machine.go:512: updateMetrics 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/state_machine.go:540: setupDefaultHandlers 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/state_machine.go:569: createDefaultTransitions 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/state_machine.go:593: NewStateMachineBuilder 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/state_machine.go:609: WithConfig 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/state_machine.go:615: WithStateHandler 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/state_machine.go:621: WithTransitionHook 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/state_machine.go:627: WithCustomTransition 0.0% github.com/fraktal/mev-beta/pkg/lifecycle/state_machine.go:636: Build 0.0% github.com/fraktal/mev-beta/pkg/market/fan.go:25: NewFanManager 0.0% github.com/fraktal/mev-beta/pkg/market/fan.go:36: FanOut 0.0% github.com/fraktal/mev-beta/pkg/market/fan.go:62: worker 0.0% github.com/fraktal/mev-beta/pkg/market/fan.go:91: FanIn 0.0% github.com/fraktal/mev-beta/pkg/market/fan.go:117: fanInWorker 0.0% github.com/fraktal/mev-beta/pkg/market/fan.go:139: Multiplex 0.0% github.com/fraktal/mev-beta/pkg/market/manager.go:44: NewMarketManager 100.0% github.com/fraktal/mev-beta/pkg/market/manager.go:55: GetPool 33.3% github.com/fraktal/mev-beta/pkg/market/manager.go:93: fetchPoolData 0.0% github.com/fraktal/mev-beta/pkg/market/manager.go:175: getTickSpacing 0.0% github.com/fraktal/mev-beta/pkg/market/manager.go:191: evictOldest 0.0% github.com/fraktal/mev-beta/pkg/market/manager.go:209: UpdatePool 100.0% github.com/fraktal/mev-beta/pkg/market/manager.go:234: GetPoolsByTokens 100.0% github.com/fraktal/mev-beta/pkg/market/manager.go:252: GetAllPools 100.0% github.com/fraktal/mev-beta/pkg/market/manager.go:265: ClearCache 0.0% github.com/fraktal/mev-beta/pkg/market/manager.go:274: GetCacheStats 100.0% github.com/fraktal/mev-beta/pkg/market/market_builder.go:114: NewMarketBuilder 0.0% github.com/fraktal/mev-beta/pkg/market/market_builder.go:136: Initialize 0.0% github.com/fraktal/mev-beta/pkg/market/market_builder.go:166: buildInitialMarkets 0.0% github.com/fraktal/mev-beta/pkg/market/market_builder.go:214: extractTokenPairs 0.0% github.com/fraktal/mev-beta/pkg/market/market_builder.go:248: buildMarketForPair 0.0% github.com/fraktal/mev-beta/pkg/market/market_builder.go:344: passesFilters 0.0% github.com/fraktal/mev-beta/pkg/market/market_builder.go:363: calculatePriceFromSqrt 0.0% github.com/fraktal/mev-beta/pkg/market/market_builder.go:377: calculateWeightedPrice 0.0% github.com/fraktal/mev-beta/pkg/market/market_builder.go:403: calculatePriceSpread 0.0% github.com/fraktal/mev-beta/pkg/market/market_builder.go:426: findBestPool 0.0% github.com/fraktal/mev-beta/pkg/market/market_builder.go:444: updatePoolMetrics 0.0% github.com/fraktal/mev-beta/pkg/market/market_builder.go:497: addMarket 0.0% github.com/fraktal/mev-beta/pkg/market/market_builder.go:509: makeTokenPairKey 0.0% github.com/fraktal/mev-beta/pkg/market/market_builder.go:518: validateConfig 0.0% github.com/fraktal/mev-beta/pkg/market/market_builder.go:532: autoRebuildLoop 0.0% github.com/fraktal/mev-beta/pkg/market/market_builder.go:549: GetMarket 0.0% github.com/fraktal/mev-beta/pkg/market/market_builder.go:559: GetAllMarkets 0.0% github.com/fraktal/mev-beta/pkg/market/market_builder.go:572: RebuildMarkets 0.0% github.com/fraktal/mev-beta/pkg/market/market_builder.go:593: GetStatistics 0.0% github.com/fraktal/mev-beta/pkg/market/market_builder.go:621: Stop 0.0% github.com/fraktal/mev-beta/pkg/market/pipeline.go:41: NewPipeline 100.0% github.com/fraktal/mev-beta/pkg/market/pipeline.go:67: AddDefaultStages 100.0% github.com/fraktal/mev-beta/pkg/market/pipeline.go:74: AddStage 100.0% github.com/fraktal/mev-beta/pkg/market/pipeline.go:79: ProcessTransactions 0.0% github.com/fraktal/mev-beta/pkg/market/pipeline.go:165: processSwapDetails 0.0% github.com/fraktal/mev-beta/pkg/market/pipeline.go:183: TransactionDecoderStage 4.0% github.com/fraktal/mev-beta/pkg/market/pipeline.go:250: MarketAnalysisStage 2.4% github.com/fraktal/mev-beta/pkg/market/pipeline.go:355: calculatePriceImpact 100.0% github.com/fraktal/mev-beta/pkg/market/pipeline.go:397: ArbitrageDetectionStage 2.6% github.com/fraktal/mev-beta/pkg/market/pipeline.go:492: findArbitrageOpportunities 0.0% github.com/fraktal/mev-beta/pkg/market/pipeline.go:584: isKnownProblematicTransaction 0.0% github.com/fraktal/mev-beta/pkg/market/pipeline.go:594: calculateSophisticatedArbitrageProfit 0.0% github.com/fraktal/mev-beta/pkg/market/pipeline.go:673: calculateOptimalTradeSize 0.0% github.com/fraktal/mev-beta/pkg/market/pipeline.go:719: calculateTradeImpact 0.0% github.com/fraktal/mev-beta/pkg/market/pipeline.go:755: calculateSophisticatedGasCost 0.0% github.com/fraktal/mev-beta/pkg/market/pipeline.go:786: calculateMEVCompetitionFactor 0.0% github.com/fraktal/mev-beta/pkg/marketdata/logger.go:59: NewMarketDataLogger 0.0% github.com/fraktal/mev-beta/pkg/marketdata/logger.go:76: Initialize 0.0% github.com/fraktal/mev-beta/pkg/marketdata/logger.go:116: LogSwapEvent 0.0% github.com/fraktal/mev-beta/pkg/marketdata/logger.go:193: LogLiquidityEvent 0.0% github.com/fraktal/mev-beta/pkg/marketdata/logger.go:275: GetTokenInfo 0.0% github.com/fraktal/mev-beta/pkg/marketdata/logger.go:284: GetTokensBySymbol 0.0% github.com/fraktal/mev-beta/pkg/marketdata/logger.go:298: GetPoolInfo 0.0% github.com/fraktal/mev-beta/pkg/marketdata/logger.go:307: GetPoolsForTokenPair 0.0% github.com/fraktal/mev-beta/pkg/marketdata/logger.go:322: GetFactoryInfo 0.0% github.com/fraktal/mev-beta/pkg/marketdata/logger.go:331: GetActiveFactories 0.0% github.com/fraktal/mev-beta/pkg/marketdata/logger.go:345: Stop 0.0% github.com/fraktal/mev-beta/pkg/marketdata/logger.go:365: initializeLogFiles 0.0% github.com/fraktal/mev-beta/pkg/marketdata/logger.go:389: ensureTokenCached 0.0% github.com/fraktal/mev-beta/pkg/marketdata/logger.go:416: ensurePoolCached 0.0% github.com/fraktal/mev-beta/pkg/marketdata/logger.go:438: createBasicPoolInfo 0.0% github.com/fraktal/mev-beta/pkg/marketdata/logger.go:455: updatePoolSwapStats 0.0% github.com/fraktal/mev-beta/pkg/marketdata/logger.go:487: updatePoolLiquidityStats 0.0% github.com/fraktal/mev-beta/pkg/marketdata/logger.go:507: initializeKnownTokens 0.0% github.com/fraktal/mev-beta/pkg/marketdata/logger.go:539: initializeKnownFactories 0.0% github.com/fraktal/mev-beta/pkg/marketdata/logger.go:585: loadFromDatabase 0.0% github.com/fraktal/mev-beta/pkg/marketdata/logger.go:603: resolveTokenSymbol 0.0% github.com/fraktal/mev-beta/pkg/marketdata/logger.go:620: GetStatistics 0.0% github.com/fraktal/mev-beta/pkg/marketdata/logger.go:649: swapEventDataToDBEvent 0.0% github.com/fraktal/mev-beta/pkg/marketdata/logger.go:679: liquidityEventDataToDBEvent 0.0% github.com/fraktal/mev-beta/pkg/marketmanager/arbitrage.go:18: NewArbitrageDetector 100.0% github.com/fraktal/mev-beta/pkg/marketmanager/arbitrage.go:33: DetectArbitrageOpportunities 93.3% github.com/fraktal/mev-beta/pkg/marketmanager/arbitrage.go:67: checkArbitrageOpportunity 68.0% github.com/fraktal/mev-beta/pkg/marketmanager/arbitrage.go:143: calculateOptimalTradeSize 85.7% github.com/fraktal/mev-beta/pkg/marketmanager/arbitrage.go:173: calculatePriceImpact 100.0% github.com/fraktal/mev-beta/pkg/marketmanager/arbitrage.go:193: estimateGasCost 100.0% github.com/fraktal/mev-beta/pkg/marketmanager/arbitrage.go:211: GetFeePercentage 0.0% github.com/fraktal/mev-beta/pkg/marketmanager/database.go:21: NewDatabaseAdapter 0.0% github.com/fraktal/mev-beta/pkg/marketmanager/database.go:39: InitializeSchema 0.0% github.com/fraktal/mev-beta/pkg/marketmanager/database.go:117: SaveMarket 0.0% github.com/fraktal/mev-beta/pkg/marketmanager/database.go:151: SaveMarketData 0.0% github.com/fraktal/mev-beta/pkg/marketmanager/database.go:193: GetMarket 0.0% github.com/fraktal/mev-beta/pkg/marketmanager/database.go:240: GetLatestMarketData 0.0% github.com/fraktal/mev-beta/pkg/marketmanager/database.go:295: SaveArbitrageOpportunity 0.0% github.com/fraktal/mev-beta/pkg/marketmanager/database.go:337: Close 0.0% github.com/fraktal/mev-beta/pkg/marketmanager/manager.go:34: NewMarketManager 100.0% github.com/fraktal/mev-beta/pkg/marketmanager/manager.go:52: AddMarket 87.5% github.com/fraktal/mev-beta/pkg/marketmanager/manager.go:73: GetMarket 100.0% github.com/fraktal/mev-beta/pkg/marketmanager/manager.go:87: GetMarketsByRawTicker 100.0% github.com/fraktal/mev-beta/pkg/marketmanager/manager.go:104: GetAllMarkets 0.0% github.com/fraktal/mev-beta/pkg/marketmanager/manager.go:121: UpdateMarket 87.5% github.com/fraktal/mev-beta/pkg/marketmanager/manager.go:140: RemoveMarket 90.0% github.com/fraktal/mev-beta/pkg/marketmanager/manager.go:163: VerifyMarket 0.0% github.com/fraktal/mev-beta/pkg/marketmanager/manager.go:179: ScheduleVerification 0.0% github.com/fraktal/mev-beta/pkg/marketmanager/manager.go:223: GetMarketCount 100.0% github.com/fraktal/mev-beta/pkg/marketmanager/manager.go:235: GetRawTickerCount 100.0% github.com/fraktal/mev-beta/pkg/marketmanager/manager.go:243: evictOldestMarkets 0.0% github.com/fraktal/mev-beta/pkg/marketmanager/manager.go:253: GetValidMarketsByRawTicker 0.0% github.com/fraktal/mev-beta/pkg/marketmanager/types.go:50: NewMarket 100.0% github.com/fraktal/mev-beta/pkg/marketmanager/types.go:80: generateMarketKey 100.0% github.com/fraktal/mev-beta/pkg/marketmanager/types.go:96: GenerateRawTicker 100.0% github.com/fraktal/mev-beta/pkg/marketmanager/types.go:102: GenerateTicker 0.0% github.com/fraktal/mev-beta/pkg/marketmanager/types.go:107: UpdatePriceData 100.0% github.com/fraktal/mev-beta/pkg/marketmanager/types.go:115: UpdateMetadata 100.0% github.com/fraktal/mev-beta/pkg/marketmanager/types.go:123: IsValid 100.0% github.com/fraktal/mev-beta/pkg/marketmanager/types.go:131: Clone 100.0% github.com/fraktal/mev-beta/pkg/marketmanager/types.go:146: GetFeePercentage 0.0% github.com/fraktal/mev-beta/pkg/math/arbitrage_calculator.go:73: NewArbitrageCalculator 100.0% github.com/fraktal/mev-beta/pkg/math/arbitrage_calculator.go:93: toDecimalAmount 66.7% github.com/fraktal/mev-beta/pkg/math/arbitrage_calculator.go:105: CalculateArbitrageOpportunity 82.4% github.com/fraktal/mev-beta/pkg/math/arbitrage_calculator.go:213: calculateExecutionRoute 78.9% github.com/fraktal/mev-beta/pkg/math/arbitrage_calculator.go:274: calculateTotalGasCost 66.7% github.com/fraktal/mev-beta/pkg/math/arbitrage_calculator.go:306: calculateProfits 75.0% github.com/fraktal/mev-beta/pkg/math/arbitrage_calculator.go:337: calculateTotalPriceImpact 72.2% github.com/fraktal/mev-beta/pkg/math/arbitrage_calculator.go:374: calculateMinimumOutput 75.0% github.com/fraktal/mev-beta/pkg/math/arbitrage_calculator.go:388: assessRisks 71.4% github.com/fraktal/mev-beta/pkg/math/arbitrage_calculator.go:427: assessLiquidityRisk 77.8% github.com/fraktal/mev-beta/pkg/math/arbitrage_calculator.go:447: assessPriceImpactRisk 71.4% github.com/fraktal/mev-beta/pkg/math/arbitrage_calculator.go:460: assessProfitabilityRisk 22.2% github.com/fraktal/mev-beta/pkg/math/arbitrage_calculator.go:477: assessGasPriceRisk 71.4% github.com/fraktal/mev-beta/pkg/math/arbitrage_calculator.go:492: calculateOverallRisk 88.9% github.com/fraktal/mev-beta/pkg/math/arbitrage_calculator.go:516: calculateConfidence 55.6% github.com/fraktal/mev-beta/pkg/math/arbitrage_calculator.go:556: estimateExecutionTime 77.8% github.com/fraktal/mev-beta/pkg/math/arbitrage_calculator.go:579: convertToETH 100.0% github.com/fraktal/mev-beta/pkg/math/arbitrage_calculator.go:588: IsOpportunityProfitable 63.6% github.com/fraktal/mev-beta/pkg/math/arbitrage_calculator.go:617: checkProfitThreshold 55.6% github.com/fraktal/mev-beta/pkg/math/arbitrage_calculator.go:635: checkPriceImpactThreshold 50.0% github.com/fraktal/mev-beta/pkg/math/arbitrage_calculator.go:652: checkRiskLevel 100.0% github.com/fraktal/mev-beta/pkg/math/arbitrage_calculator.go:657: checkConfidenceThreshold 100.0% github.com/fraktal/mev-beta/pkg/math/arbitrage_calculator.go:662: SortOpportunitiesByProfitability 87.5% github.com/fraktal/mev-beta/pkg/math/arbitrage_calculator.go:677: decimalAmountToUniversal 66.7% github.com/fraktal/mev-beta/pkg/math/arbitrage_calculator.go:689: CalculateArbitrage 0.0% github.com/fraktal/mev-beta/pkg/math/arbitrage_calculator.go:711: FindOptimalPath 0.0% github.com/fraktal/mev-beta/pkg/math/arbitrage_calculator.go:719: FilterProfitableOpportunities 0.0% github.com/fraktal/mev-beta/pkg/math/cached_functions.go:23: initCachedConstants 100.0% github.com/fraktal/mev-beta/pkg/math/cached_functions.go:42: GetCachedQ192 100.0% github.com/fraktal/mev-beta/pkg/math/cached_functions.go:48: GetCachedQ96 100.0% github.com/fraktal/mev-beta/pkg/math/cached_functions.go:54: GetCachedQ384 100.0% github.com/fraktal/mev-beta/pkg/math/cached_functions.go:61: SqrtPriceX96ToPriceCached 100.0% github.com/fraktal/mev-beta/pkg/math/cached_functions.go:78: PriceToSqrtPriceX96Cached 100.0% github.com/fraktal/mev-beta/pkg/math/cached_functions.go:96: SqrtPriceX96ToPriceOptimized 100.0% github.com/fraktal/mev-beta/pkg/math/cached_functions.go:108: PriceToSqrtPriceX96Optimized 100.0% github.com/fraktal/mev-beta/pkg/math/cached_functions.go:120: TickToSqrtPriceX96Optimized 0.0% github.com/fraktal/mev-beta/pkg/math/decimal_handler.go:23: NewDecimalConverter 100.0% github.com/fraktal/mev-beta/pkg/math/decimal_handler.go:37: NewUniversalDecimal 71.4% github.com/fraktal/mev-beta/pkg/math/decimal_handler.go:80: FromString 90.5% github.com/fraktal/mev-beta/pkg/math/decimal_handler.go:140: fromDecimalString 75.0% github.com/fraktal/mev-beta/pkg/math/decimal_handler.go:189: ToHumanReadable 36.8% github.com/fraktal/mev-beta/pkg/math/decimal_handler.go:240: ConvertTo 15.4% github.com/fraktal/mev-beta/pkg/math/decimal_handler.go:268: Multiply 94.1% github.com/fraktal/mev-beta/pkg/math/decimal_handler.go:302: Divide 0.0% github.com/fraktal/mev-beta/pkg/math/decimal_handler.go:318: Add 81.8% github.com/fraktal/mev-beta/pkg/math/decimal_handler.go:342: Subtract 85.7% github.com/fraktal/mev-beta/pkg/math/decimal_handler.go:358: Compare 33.3% github.com/fraktal/mev-beta/pkg/math/decimal_handler.go:372: IsZero 100.0% github.com/fraktal/mev-beta/pkg/math/decimal_handler.go:377: IsPositive 100.0% github.com/fraktal/mev-beta/pkg/math/decimal_handler.go:382: IsNegative 100.0% github.com/fraktal/mev-beta/pkg/math/decimal_handler.go:387: Copy 0.0% github.com/fraktal/mev-beta/pkg/math/decimal_handler.go:396: getScalingFactor 40.0% github.com/fraktal/mev-beta/pkg/math/decimal_handler.go:408: ToWei 0.0% github.com/fraktal/mev-beta/pkg/math/decimal_handler.go:414: FromWei 0.0% github.com/fraktal/mev-beta/pkg/math/decimal_handler.go:427: CalculatePercentage 54.5% github.com/fraktal/mev-beta/pkg/math/decimal_handler.go:455: String 0.0% github.com/fraktal/mev-beta/pkg/math/dex_math.go:29: NewUniswapV4Math 0.0% github.com/fraktal/mev-beta/pkg/math/dex_math.go:35: CalculateAmountOutV4 0.0% github.com/fraktal/mev-beta/pkg/math/dex_math.go:68: NewAlgebraV1Math 100.0% github.com/fraktal/mev-beta/pkg/math/dex_math.go:73: CalculateAmountOutAlgebra 76.9% github.com/fraktal/mev-beta/pkg/math/dex_math.go:102: CalculatePriceImpactAlgebra 84.6% github.com/fraktal/mev-beta/pkg/math/dex_math.go:131: NewIntegralMath 100.0% github.com/fraktal/mev-beta/pkg/math/dex_math.go:136: CalculateAmountOutIntegral 76.9% github.com/fraktal/mev-beta/pkg/math/dex_math.go:167: NewKyberMath 0.0% github.com/fraktal/mev-beta/pkg/math/dex_math.go:172: CalculateAmountOutKyber 0.0% github.com/fraktal/mev-beta/pkg/math/dex_math.go:206: CalculateAmountOutKyberClassic 0.0% github.com/fraktal/mev-beta/pkg/math/dex_math.go:237: NewOneInchMath 0.0% github.com/fraktal/mev-beta/pkg/math/dex_math.go:242: CalculateAmountOutOneInch 0.0% github.com/fraktal/mev-beta/pkg/math/dex_math.go:291: WillSwapMovePrice 86.7% github.com/fraktal/mev-beta/pkg/math/dex_math.go:324: WillLiquidityMovePrice 81.2% github.com/fraktal/mev-beta/pkg/math/dex_math.go:363: CalculateRequiredAmountForPriceMove 0.0% github.com/fraktal/mev-beta/pkg/math/exchange_math.go:36: NewUniswapV2Math 100.0% github.com/fraktal/mev-beta/pkg/math/exchange_math.go:41: CalculateAmountOut 76.9% github.com/fraktal/mev-beta/pkg/math/exchange_math.go:75: CalculateAmountIn 0.0% github.com/fraktal/mev-beta/pkg/math/exchange_math.go:115: CalculatePriceImpact 80.0% github.com/fraktal/mev-beta/pkg/math/exchange_math.go:150: GetSpotPrice 0.0% github.com/fraktal/mev-beta/pkg/math/exchange_math.go:159: CalculateSlippage 83.3% github.com/fraktal/mev-beta/pkg/math/exchange_math.go:175: NewUniswapV3Math 100.0% github.com/fraktal/mev-beta/pkg/math/exchange_math.go:180: CalculateAmountOut 86.7% github.com/fraktal/mev-beta/pkg/math/exchange_math.go:214: CalculateAmountIn 0.0% github.com/fraktal/mev-beta/pkg/math/exchange_math.go:243: CalculatePriceImpact 83.3% github.com/fraktal/mev-beta/pkg/math/exchange_math.go:293: GetSpotPrice 0.0% github.com/fraktal/mev-beta/pkg/math/exchange_math.go:307: CalculateSlippage 0.0% github.com/fraktal/mev-beta/pkg/math/exchange_math.go:322: NewCurveMath 100.0% github.com/fraktal/mev-beta/pkg/math/exchange_math.go:327: CalculateAmountOut 84.6% github.com/fraktal/mev-beta/pkg/math/exchange_math.go:361: calculateD 87.5% github.com/fraktal/mev-beta/pkg/math/exchange_math.go:397: getY 100.0% github.com/fraktal/mev-beta/pkg/math/exchange_math.go:413: CalculateAmountIn 0.0% github.com/fraktal/mev-beta/pkg/math/exchange_math.go:440: CalculatePriceImpact 80.0% github.com/fraktal/mev-beta/pkg/math/exchange_math.go:475: GetSpotPrice 0.0% github.com/fraktal/mev-beta/pkg/math/exchange_math.go:484: CalculateSlippage 0.0% github.com/fraktal/mev-beta/pkg/math/exchange_math.go:499: CalculateAmountOut 86.7% github.com/fraktal/mev-beta/pkg/math/exchange_math.go:533: CalculateAmountIn 0.0% github.com/fraktal/mev-beta/pkg/math/exchange_math.go:560: CalculatePriceImpact 86.4% github.com/fraktal/mev-beta/pkg/math/exchange_math.go:605: GetSpotPrice 0.0% github.com/fraktal/mev-beta/pkg/math/exchange_math.go:619: CalculateSlippage 0.0% github.com/fraktal/mev-beta/pkg/math/exchange_math.go:634: CalculateAmountOut 88.2% github.com/fraktal/mev-beta/pkg/math/exchange_math.go:677: CalculateAmountIn 0.0% github.com/fraktal/mev-beta/pkg/math/exchange_math.go:730: CalculatePriceImpact 80.0% github.com/fraktal/mev-beta/pkg/math/exchange_math.go:765: GetSpotPrice 0.0% github.com/fraktal/mev-beta/pkg/math/exchange_math.go:774: CalculateSlippage 0.0% github.com/fraktal/mev-beta/pkg/math/exchange_math.go:790: CalculateAmountOut 75.0% github.com/fraktal/mev-beta/pkg/math/exchange_math.go:809: CalculateAmountIn 0.0% github.com/fraktal/mev-beta/pkg/math/exchange_math.go:827: CalculatePriceImpact 66.7% github.com/fraktal/mev-beta/pkg/math/exchange_math.go:837: GetSpotPrice 0.0% github.com/fraktal/mev-beta/pkg/math/exchange_math.go:847: CalculateSlippage 0.0% github.com/fraktal/mev-beta/pkg/math/exchange_math.go:873: NewMathCalculator 100.0% github.com/fraktal/mev-beta/pkg/math/exchange_math.go:885: GetMathForExchange 0.0% github.com/fraktal/mev-beta/pkg/math/exchange_math.go:905: CalculateOptimalArbitrage 0.0% github.com/fraktal/mev-beta/pkg/math/exchange_math.go:964: findOptimalAmount 0.0% github.com/fraktal/mev-beta/pkg/math/exchange_pricing.go:69: NewExchangePricingEngine 100.0% github.com/fraktal/mev-beta/pkg/math/exchange_pricing.go:91: GetExchangePricer 0.0% github.com/fraktal/mev-beta/pkg/math/exchange_pricing.go:100: CalculateSpotPrice 0.0% github.com/fraktal/mev-beta/pkg/math/exchange_pricing.go:114: NewUniswapV3Pricer 100.0% github.com/fraktal/mev-beta/pkg/math/exchange_pricing.go:118: GetSpotPrice 0.0% github.com/fraktal/mev-beta/pkg/math/exchange_pricing.go:143: CalculateAmountOut 0.0% github.com/fraktal/mev-beta/pkg/math/exchange_pricing.go:177: CalculateAmountIn 0.0% github.com/fraktal/mev-beta/pkg/math/exchange_pricing.go:213: CalculatePriceImpact 0.0% github.com/fraktal/mev-beta/pkg/math/exchange_pricing.go:241: GetMinimumLiquidity 0.0% github.com/fraktal/mev-beta/pkg/math/exchange_pricing.go:249: ValidatePoolData 0.0% github.com/fraktal/mev-beta/pkg/math/exchange_pricing.go:267: NewUniswapV2Pricer 100.0% github.com/fraktal/mev-beta/pkg/math/exchange_pricing.go:271: GetSpotPrice 0.0% github.com/fraktal/mev-beta/pkg/math/exchange_pricing.go:279: CalculateAmountOut 0.0% github.com/fraktal/mev-beta/pkg/math/exchange_pricing.go:310: CalculateAmountIn 0.0% github.com/fraktal/mev-beta/pkg/math/exchange_pricing.go:338: CalculatePriceImpact 0.0% github.com/fraktal/mev-beta/pkg/math/exchange_pricing.go:363: GetMinimumLiquidity 0.0% github.com/fraktal/mev-beta/pkg/math/exchange_pricing.go:375: ValidatePoolData 0.0% github.com/fraktal/mev-beta/pkg/math/exchange_pricing.go:390: NewSushiSwapPricer 100.0% github.com/fraktal/mev-beta/pkg/math/exchange_pricing.go:399: NewCamelotPricer 100.0% github.com/fraktal/mev-beta/pkg/math/exchange_pricing.go:408: NewBalancerPricer 100.0% github.com/fraktal/mev-beta/pkg/math/exchange_pricing.go:412: GetSpotPrice 0.0% github.com/fraktal/mev-beta/pkg/math/exchange_pricing.go:431: CalculateAmountOut 0.0% github.com/fraktal/mev-beta/pkg/math/exchange_pricing.go:436: CalculateAmountIn 0.0% github.com/fraktal/mev-beta/pkg/math/exchange_pricing.go:445: CalculatePriceImpact 0.0% github.com/fraktal/mev-beta/pkg/math/exchange_pricing.go:450: GetMinimumLiquidity 0.0% github.com/fraktal/mev-beta/pkg/math/exchange_pricing.go:454: ValidatePoolData 0.0% github.com/fraktal/mev-beta/pkg/math/exchange_pricing.go:462: NewTraderJoePricer 100.0% github.com/fraktal/mev-beta/pkg/math/exchange_pricing.go:463: NewRamsesPricer 100.0% github.com/fraktal/mev-beta/pkg/math/exchange_pricing.go:470: NewCurvePricer 100.0% github.com/fraktal/mev-beta/pkg/math/exchange_pricing.go:474: GetSpotPrice 0.0% github.com/fraktal/mev-beta/pkg/math/exchange_pricing.go:484: CalculateAmountOut 0.0% github.com/fraktal/mev-beta/pkg/math/exchange_pricing.go:495: CalculateAmountIn 0.0% github.com/fraktal/mev-beta/pkg/math/exchange_pricing.go:506: CalculatePriceImpact 0.0% github.com/fraktal/mev-beta/pkg/math/exchange_pricing.go:511: GetMinimumLiquidity 0.0% github.com/fraktal/mev-beta/pkg/math/exchange_pricing.go:515: ValidatePoolData 0.0% github.com/fraktal/mev-beta/pkg/math/mock_gas_estimator.go:13: NewMockGasEstimator 0.0% github.com/fraktal/mev-beta/pkg/math/mock_gas_estimator.go:23: EstimateSwapGas 0.0% github.com/fraktal/mev-beta/pkg/math/mock_gas_estimator.go:42: EstimateFlashSwapGas 0.0% github.com/fraktal/mev-beta/pkg/math/mock_gas_estimator.go:53: GetCurrentGasPrice 0.0% github.com/fraktal/mev-beta/pkg/math/mock_gas_estimator.go:58: SetCurrentGasPrice 0.0% github.com/fraktal/mev-beta/pkg/math/price_impact.go:15: NewPriceImpactCalculator 100.0% github.com/fraktal/mev-beta/pkg/math/price_impact.go:22: CalculatePriceImpact 18.2% github.com/fraktal/mev-beta/pkg/math/price_impact.go:52: calculateAlgebraPriceImpact 0.0% github.com/fraktal/mev-beta/pkg/math/price_impact.go:79: calculateIntegralPriceImpact 0.0% github.com/fraktal/mev-beta/pkg/math/price_impact.go:106: calculateOneInchPriceImpact 0.0% github.com/fraktal/mev-beta/pkg/math/price_impact.go:147: CalculatePriceMovementThreshold 80.0% github.com/fraktal/mev-beta/pkg/math/price_impact.go:164: CalculatePriceImpactWithSlippage 0.0% github.com/fraktal/mev-beta/pkg/metrics/metrics.go:59: NewMetricsCollector 0.0% github.com/fraktal/mev-beta/pkg/metrics/metrics.go:69: RecordL2Message 0.0% github.com/fraktal/mev-beta/pkg/metrics/metrics.go:84: RecordL2MessageLag 0.0% github.com/fraktal/mev-beta/pkg/metrics/metrics.go:92: RecordBatchProcessed 0.0% github.com/fraktal/mev-beta/pkg/metrics/metrics.go:100: RecordDEXInteraction 0.0% github.com/fraktal/mev-beta/pkg/metrics/metrics.go:108: RecordSwapOpportunity 0.0% github.com/fraktal/mev-beta/pkg/metrics/metrics.go:116: RecordArbitrageOpportunity 0.0% github.com/fraktal/mev-beta/pkg/metrics/metrics.go:124: RecordDroppedOpportunity 0.0% github.com/fraktal/mev-beta/pkg/metrics/metrics.go:132: RecordSuccessfulTrade 0.0% github.com/fraktal/mev-beta/pkg/metrics/metrics.go:150: RecordFailedTrade 0.0% github.com/fraktal/mev-beta/pkg/metrics/metrics.go:167: updateProfitFactor 0.0% github.com/fraktal/mev-beta/pkg/metrics/metrics.go:176: RecordGasMetrics 0.0% github.com/fraktal/mev-beta/pkg/metrics/metrics.go:186: UpdateHealthCheck 0.0% github.com/fraktal/mev-beta/pkg/metrics/metrics.go:196: GetSnapshot 0.0% github.com/fraktal/mev-beta/pkg/metrics/metrics.go:261: NewMetricsServer 0.0% github.com/fraktal/mev-beta/pkg/metrics/metrics.go:294: Start 0.0% github.com/fraktal/mev-beta/pkg/metrics/metrics.go:300: Stop 0.0% github.com/fraktal/mev-beta/pkg/metrics/metrics.go:306: handleMetrics 0.0% github.com/fraktal/mev-beta/pkg/metrics/metrics.go:340: handleHealth 0.0% github.com/fraktal/mev-beta/pkg/metrics/metrics.go:349: handlePrometheus 0.0% github.com/fraktal/mev-beta/pkg/metrics/metrics.go:404: uintToString 0.0% github.com/fraktal/mev-beta/pkg/metrics/metrics.go:408: floatToString 0.0% github.com/fraktal/mev-beta/pkg/metrics/metrics.go:412: durationToString 0.0% github.com/fraktal/mev-beta/pkg/mev/competition.go:84: NewCompetitionAnalyzer 0.0% github.com/fraktal/mev-beta/pkg/mev/competition.go:112: AnalyzeCompetition 0.0% github.com/fraktal/mev-beta/pkg/mev/competition.go:165: CalculateOptimalBid 0.0% github.com/fraktal/mev-beta/pkg/mev/competition.go:225: calculateCompetitionFactor 0.0% github.com/fraktal/mev-beta/pkg/mev/competition.go:249: estimateSuccessProbability 0.0% github.com/fraktal/mev-beta/pkg/monitor/concurrent.go:52: NewArbitrumMonitor 0.0% github.com/fraktal/mev-beta/pkg/monitor/concurrent.go:146: Start 0.0% github.com/fraktal/mev-beta/pkg/monitor/concurrent.go:227: Stop 0.0% github.com/fraktal/mev-beta/pkg/monitor/concurrent.go:235: processBlock 0.0% github.com/fraktal/mev-beta/pkg/monitor/concurrent.go:321: checkConnectionHealth 0.0% github.com/fraktal/mev-beta/pkg/monitor/concurrent.go:344: performHealthCheck 0.0% github.com/fraktal/mev-beta/pkg/monitor/concurrent.go:377: processTransactionChannel 0.0% github.com/fraktal/mev-beta/pkg/monitor/concurrent.go:400: processChannelTransaction 0.0% github.com/fraktal/mev-beta/pkg/monitor/concurrent.go:419: processTransactionMap 0.0% github.com/fraktal/mev-beta/pkg/monitor/concurrent.go:448: getUint64 0.0% github.com/fraktal/mev-beta/pkg/monitor/concurrent.go:465: subscribeToDEXEvents 0.0% github.com/fraktal/mev-beta/pkg/monitor/concurrent.go:558: processDEXEvent 0.0% github.com/fraktal/mev-beta/pkg/monitor/concurrent.go:604: processTransactionReceipt 0.0% github.com/fraktal/mev-beta/pkg/monitor/concurrent.go:661: processTransaction 0.0% github.com/fraktal/mev-beta/pkg/monitor/concurrent.go:704: GetPendingTransactions 0.0% github.com/fraktal/mev-beta/pkg/monitor/concurrent.go:715: getTransactionReceiptWithRetry 0.0% github.com/fraktal/mev-beta/pkg/monitor/concurrent.go:752: convertToStandardFormat 0.0% github.com/fraktal/mev-beta/pkg/monitor/concurrent.go:785: isSwapTransaction 0.0% github.com/fraktal/mev-beta/pkg/monitor/concurrent.go:805: analyzeSwapTransaction 0.0% github.com/fraktal/mev-beta/pkg/monitor/concurrent.go:825: parseUniswapV2Swap 0.0% github.com/fraktal/mev-beta/pkg/monitor/concurrent.go:841: parseUniswapV3SingleSwap 0.0% github.com/fraktal/mev-beta/pkg/monitor/concurrent.go:857: parseGenericSwap 0.0% github.com/fraktal/mev-beta/pkg/monitor/concurrent.go:873: calculateArbitrageOpportunity 0.0% github.com/fraktal/mev-beta/pkg/monitoring/dashboard.go:91: NewDashboard 0.0% github.com/fraktal/mev-beta/pkg/monitoring/dashboard.go:119: Start 0.0% github.com/fraktal/mev-beta/pkg/monitoring/dashboard.go:145: Stop 0.0% github.com/fraktal/mev-beta/pkg/monitoring/dashboard.go:153: UpdateStats 0.0% github.com/fraktal/mev-beta/pkg/monitoring/dashboard.go:204: addOpportunity 0.0% github.com/fraktal/mev-beta/pkg/monitoring/dashboard.go:222: addActivity 0.0% github.com/fraktal/mev-beta/pkg/monitoring/dashboard.go:232: updateSystemHealth 0.0% github.com/fraktal/mev-beta/pkg/monitoring/dashboard.go:274: handleStats 0.0% github.com/fraktal/mev-beta/pkg/monitoring/dashboard.go:282: handleHealth 0.0% github.com/fraktal/mev-beta/pkg/monitoring/dashboard.go:290: handleOpportunities 0.0% github.com/fraktal/mev-beta/pkg/monitoring/dashboard.go:298: handleActivity 0.0% github.com/fraktal/mev-beta/pkg/monitoring/dashboard.go:306: handleDashboard 0.0% github.com/fraktal/mev-beta/pkg/oracle/price_oracle.go:60: NewPriceOracle 0.0% github.com/fraktal/mev-beta/pkg/oracle/price_oracle.go:79: GetPrice 0.0% github.com/fraktal/mev-beta/pkg/oracle/price_oracle.go:118: getChainlinkPrice 0.0% github.com/fraktal/mev-beta/pkg/oracle/price_oracle.go:188: getUniswapV3Price 0.0% github.com/fraktal/mev-beta/pkg/oracle/price_oracle.go:240: getUniswapV2Price 0.0% github.com/fraktal/mev-beta/pkg/oracle/price_oracle.go:294: findUniswapV2Pool 0.0% github.com/fraktal/mev-beta/pkg/oracle/price_oracle.go:332: getUniswapV2Reserves 0.0% github.com/fraktal/mev-beta/pkg/oracle/price_oracle.go:401: calculateV2PriceImpact 0.0% github.com/fraktal/mev-beta/pkg/oracle/price_oracle.go:442: getPoolState 0.0% github.com/fraktal/mev-beta/pkg/oracle/price_oracle.go:568: calculateSlippage 0.0% github.com/fraktal/mev-beta/pkg/oracle/price_oracle.go:596: cachePrice 0.0% github.com/fraktal/mev-beta/pkg/oracle/price_oracle.go:611: getCachedPrice 0.0% github.com/fraktal/mev-beta/pkg/oracle/price_oracle.go:641: backgroundUpdater 0.0% github.com/fraktal/mev-beta/pkg/oracle/price_oracle.go:653: updatePriceCache 0.0% github.com/fraktal/mev-beta/pkg/oracle/price_oracle.go:679: Stop 0.0% github.com/fraktal/mev-beta/pkg/oracle/price_oracle.go:687: getChainlinkFeeds 0.0% github.com/fraktal/mev-beta/pkg/oracle/price_oracle.go:698: getUniswapPools 0.0% github.com/fraktal/mev-beta/pkg/orchestrator/coordinator.go:89: NewMEVCoordinator 0.0% github.com/fraktal/mev-beta/pkg/orchestrator/coordinator.go:123: Start 0.0% github.com/fraktal/mev-beta/pkg/orchestrator/coordinator.go:139: Stop 0.0% github.com/fraktal/mev-beta/pkg/orchestrator/coordinator.go:158: ProcessTransaction 0.0% github.com/fraktal/mev-beta/pkg/orchestrator/coordinator.go:175: startTransactionProcessor 0.0% github.com/fraktal/mev-beta/pkg/orchestrator/coordinator.go:197: processRawTransaction 0.0% github.com/fraktal/mev-beta/pkg/orchestrator/coordinator.go:233: startEventProcessor 0.0% github.com/fraktal/mev-beta/pkg/orchestrator/coordinator.go:254: processEvent 0.0% github.com/fraktal/mev-beta/pkg/orchestrator/coordinator.go:276: submitToPoolDiscovery 0.0% github.com/fraktal/mev-beta/pkg/orchestrator/coordinator.go:293: updatePoolState 0.0% github.com/fraktal/mev-beta/pkg/orchestrator/coordinator.go:319: isSignificantSwap 0.0% github.com/fraktal/mev-beta/pkg/orchestrator/coordinator.go:334: triggerArbitrageScan 0.0% github.com/fraktal/mev-beta/pkg/orchestrator/coordinator.go:388: startPoolUpdateProcessor 0.0% github.com/fraktal/mev-beta/pkg/orchestrator/coordinator.go:409: startArbitrageProcessor 0.0% github.com/fraktal/mev-beta/pkg/orchestrator/coordinator.go:424: startOpportunityHandler 0.0% github.com/fraktal/mev-beta/pkg/orchestrator/coordinator.go:442: handleArbitrageOpportunity 0.0% github.com/fraktal/mev-beta/pkg/orchestrator/coordinator.go:467: startMetricsReporter 0.0% github.com/fraktal/mev-beta/pkg/orchestrator/coordinator.go:488: reportMetrics 0.0% github.com/fraktal/mev-beta/pkg/orchestrator/coordinator.go:501: updateMetrics 0.0% github.com/fraktal/mev-beta/pkg/patterns/pipeline.go:64: NewAdvancedPipeline 0.0% github.com/fraktal/mev-beta/pkg/patterns/pipeline.go:82: AddStage 0.0% github.com/fraktal/mev-beta/pkg/patterns/pipeline.go:88: Start 0.0% github.com/fraktal/mev-beta/pkg/patterns/pipeline.go:150: collectMetrics 0.0% github.com/fraktal/mev-beta/pkg/patterns/pipeline.go:165: updateMetrics 0.0% github.com/fraktal/mev-beta/pkg/patterns/pipeline.go:176: Stop 0.0% github.com/fraktal/mev-beta/pkg/patterns/pipeline.go:183: GetErrors 0.0% github.com/fraktal/mev-beta/pkg/patterns/pipeline.go:189: GetMetrics 0.0% github.com/fraktal/mev-beta/pkg/patterns/pipeline.go:194: NewWorkerPoolStage 0.0% github.com/fraktal/mev-beta/pkg/patterns/pipeline.go:207: Process 0.0% github.com/fraktal/mev-beta/pkg/patterns/pipeline.go:251: updateMetrics 0.0% github.com/fraktal/mev-beta/pkg/patterns/pipeline.go:269: Name 0.0% github.com/fraktal/mev-beta/pkg/patterns/pipeline.go:274: GetMetrics 0.0% github.com/fraktal/mev-beta/pkg/patterns/pipeline.go:288: NewFanOutFanIn 0.0% github.com/fraktal/mev-beta/pkg/patterns/pipeline.go:297: Process 0.0% github.com/fraktal/mev-beta/pkg/patterns/pipeline.go:432: NewBackpressureHandler 0.0% github.com/fraktal/mev-beta/pkg/patterns/pipeline.go:442: HandleBackpressure 0.0% github.com/fraktal/mev-beta/pkg/patterns/pipeline.go:539: GetMetrics 0.0% github.com/fraktal/mev-beta/pkg/performance/optimizer.go:102: NewPerformanceOptimizer 0.0% github.com/fraktal/mev-beta/pkg/performance/optimizer.go:113: NewConnectionPool 0.0% github.com/fraktal/mev-beta/pkg/performance/optimizer.go:123: Get 0.0% github.com/fraktal/mev-beta/pkg/performance/optimizer.go:147: Put 0.0% github.com/fraktal/mev-beta/pkg/performance/optimizer.go:163: NewAdaptiveWorkerManager 0.0% github.com/fraktal/mev-beta/pkg/performance/optimizer.go:177: AdjustWorkerCount 0.0% github.com/fraktal/mev-beta/pkg/performance/optimizer.go:218: NewSmartCacheManager 0.0% github.com/fraktal/mev-beta/pkg/performance/optimizer.go:225: GetCache 0.0% github.com/fraktal/mev-beta/pkg/performance/optimizer.go:255: Get 0.0% github.com/fraktal/mev-beta/pkg/performance/optimizer.go:285: Set 0.0% github.com/fraktal/mev-beta/pkg/performance/optimizer.go:290: SetWithTTL 0.0% github.com/fraktal/mev-beta/pkg/performance/optimizer.go:308: evictLRU 0.0% github.com/fraktal/mev-beta/pkg/performance/optimizer.go:325: startCleanup 0.0% github.com/fraktal/mev-beta/pkg/performance/optimizer.go:335: cleanupExpired 0.0% github.com/fraktal/mev-beta/pkg/performance/optimizer.go:348: GetHitRatio 0.0% github.com/fraktal/mev-beta/pkg/performance/optimizer.go:360: OptimizeForRealTime 0.0% github.com/fraktal/mev-beta/pkg/performance/optimizer.go:377: createRPCConnectionPools 0.0% github.com/fraktal/mev-beta/pkg/performance/optimizer.go:400: manageWorkerAdaptation 0.0% github.com/fraktal/mev-beta/pkg/performance/optimizer.go:424: warmCaches 0.0% github.com/fraktal/mev-beta/pkg/performance/optimizer.go:446: collectMetrics 0.0% github.com/fraktal/mev-beta/pkg/performance/optimizer.go:461: reportMetrics 0.0% github.com/fraktal/mev-beta/pkg/performance/optimizer.go:493: GetConnectionPool 0.0% github.com/fraktal/mev-beta/pkg/performance/optimizer.go:500: GetCache 0.0% github.com/fraktal/mev-beta/pkg/performance/pools.go:22: NewObjectPool 0.0% github.com/fraktal/mev-beta/pkg/performance/pools.go:53: GetBigInt 0.0% github.com/fraktal/mev-beta/pkg/performance/pools.go:60: PutBigInt 0.0% github.com/fraktal/mev-beta/pkg/performance/pools.go:67: GetUint256 0.0% github.com/fraktal/mev-beta/pkg/performance/pools.go:74: PutUint256 0.0% github.com/fraktal/mev-beta/pkg/performance/pools.go:81: GetEvent 0.0% github.com/fraktal/mev-beta/pkg/performance/pools.go:89: PutEvent 0.0% github.com/fraktal/mev-beta/pkg/performance/pools.go:96: GetAddressSlice 0.0% github.com/fraktal/mev-beta/pkg/performance/pools.go:102: PutAddressSlice 0.0% github.com/fraktal/mev-beta/pkg/performance/pools.go:109: GetByteSlice 0.0% github.com/fraktal/mev-beta/pkg/performance/pools.go:115: PutByteSlice 0.0% github.com/fraktal/mev-beta/pkg/performance/pools.go:133: NewLockFreeRingBuffer 0.0% github.com/fraktal/mev-beta/pkg/performance/pools.go:147: countLeadingZeros 0.0% github.com/fraktal/mev-beta/pkg/performance/pools.go:200: NewFastCache 0.0% github.com/fraktal/mev-beta/pkg/performance/pools.go:221: countLeadingZeros32 0.0% github.com/fraktal/mev-beta/pkg/performance/pools.go:249: hash 0.0% github.com/fraktal/mev-beta/pkg/performance/pools.go:258: getShard 0.0% github.com/fraktal/mev-beta/pkg/performance/pools.go:263: Get 0.0% github.com/fraktal/mev-beta/pkg/performance/pools.go:276: Set 0.0% github.com/fraktal/mev-beta/pkg/performance/pools.go:295: evictOldest 0.0% github.com/fraktal/mev-beta/pkg/performance/pools.go:322: NewBatchProcessor 0.0% github.com/fraktal/mev-beta/pkg/performance/pools.go:332: Add 0.0% github.com/fraktal/mev-beta/pkg/performance/pools.go:346: Flush 0.0% github.com/fraktal/mev-beta/pkg/performance/pools.go:354: flushLocked 0.0% github.com/fraktal/mev-beta/pkg/performance/pools.go:372: NewMemoryOptimizer 0.0% github.com/fraktal/mev-beta/pkg/performance/pools.go:379: ProcessWithPools 0.0% github.com/fraktal/mev-beta/pkg/pools/create2.go:53: NewCREATE2Calculator 0.0% github.com/fraktal/mev-beta/pkg/pools/create2.go:68: initializeFactories 0.0% github.com/fraktal/mev-beta/pkg/pools/create2.go:131: CalculatePoolAddress 0.0% github.com/fraktal/mev-beta/pkg/pools/create2.go:179: calculateSalt 0.0% github.com/fraktal/mev-beta/pkg/pools/create2.go:197: calculateUniswapV3Salt 0.0% github.com/fraktal/mev-beta/pkg/pools/create2.go:223: calculateUniswapV2Salt 0.0% github.com/fraktal/mev-beta/pkg/pools/create2.go:234: calculateGenericSalt 0.0% github.com/fraktal/mev-beta/pkg/pools/create2.go:240: calculateCurvePoolAddress 0.0% github.com/fraktal/mev-beta/pkg/pools/create2.go:288: FindPoolsForTokenPair 0.0% github.com/fraktal/mev-beta/pkg/pools/create2.go:325: ValidatePoolAddress 0.0% github.com/fraktal/mev-beta/pkg/pools/create2.go:340: GetFactoryConfig 0.0% github.com/fraktal/mev-beta/pkg/pools/create2.go:352: AddCustomFactory 0.0% github.com/fraktal/mev-beta/pkg/pools/create2.go:368: ListFactories 0.0% github.com/fraktal/mev-beta/pkg/pools/create2.go:380: CalculateInitCodeHash 0.0% github.com/fraktal/mev-beta/pkg/pools/create2.go:385: VerifyFactorySupport 0.0% github.com/fraktal/mev-beta/pkg/pools/create2.go:408: queryCurveRegistry 0.0% github.com/fraktal/mev-beta/pkg/pools/create2.go:425: queryMainCurveRegistry 0.0% github.com/fraktal/mev-beta/pkg/pools/create2.go:488: queryFactoryCurveRegistry 0.0% github.com/fraktal/mev-beta/pkg/pools/create2.go:498: queryCryptoCurveRegistry 0.0% github.com/fraktal/mev-beta/pkg/pools/create2.go:508: queryMetapoolCurveRegistry 0.0% github.com/fraktal/mev-beta/pkg/pools/create2.go:518: calculateCurveDeterministicAddress 0.0% github.com/fraktal/mev-beta/pkg/pools/discovery.go:106: NewPoolDiscovery 0.0% github.com/fraktal/mev-beta/pkg/pools/discovery.go:132: initializeEventSignatures 0.0% github.com/fraktal/mev-beta/pkg/pools/discovery.go:145: initializeKnownFactories 0.0% github.com/fraktal/mev-beta/pkg/pools/discovery.go:161: DiscoverFromTransaction 0.0% github.com/fraktal/mev-beta/pkg/pools/discovery.go:177: isUnknownContract 0.0% github.com/fraktal/mev-beta/pkg/pools/discovery.go:183: analyzeUnknownContract 0.0% github.com/fraktal/mev-beta/pkg/pools/discovery.go:226: analyzeLogEntry 0.0% github.com/fraktal/mev-beta/pkg/pools/discovery.go:266: handlePoolCreation 0.0% github.com/fraktal/mev-beta/pkg/pools/discovery.go:306: handleSwapEvent 0.0% github.com/fraktal/mev-beta/pkg/pools/discovery.go:379: parseSwapData 0.0% github.com/fraktal/mev-beta/pkg/pools/discovery.go:431: calculatePriceImpact 0.0% github.com/fraktal/mev-beta/pkg/pools/discovery.go:464: addressFromTopic 0.0% github.com/fraktal/mev-beta/pkg/pools/discovery.go:473: handleLiquidityEvent 0.0% github.com/fraktal/mev-beta/pkg/pools/discovery.go:528: handleSyncEvent 0.0% github.com/fraktal/mev-beta/pkg/pools/discovery.go:557: discoverPoolFromSwap 0.0% github.com/fraktal/mev-beta/pkg/pools/discovery.go:663: parseLiquidityData 0.0% github.com/fraktal/mev-beta/pkg/pools/discovery.go:693: parseSyncData 0.0% github.com/fraktal/mev-beta/pkg/pools/discovery.go:717: persistData 0.0% github.com/fraktal/mev-beta/pkg/pools/discovery.go:731: loadPersistedData 0.0% github.com/fraktal/mev-beta/pkg/pools/discovery.go:746: GetPoolCount 0.0% github.com/fraktal/mev-beta/pkg/pools/discovery.go:753: GetExchangeCount 0.0% github.com/fraktal/mev-beta/pkg/pools/discovery.go:760: GetPool 0.0% github.com/fraktal/mev-beta/pkg/pools/discovery.go:768: GetAllPools 0.0% github.com/fraktal/mev-beta/pkg/pools/discovery.go:780: DiscoverPoolsForTokenPair 0.0% github.com/fraktal/mev-beta/pkg/pools/discovery.go:831: verifyPoolExists 0.0% github.com/fraktal/mev-beta/pkg/pools/discovery.go:848: enrichPoolData 0.0% github.com/fraktal/mev-beta/pkg/pools/discovery.go:865: enrichUniswapV3PoolData 0.0% github.com/fraktal/mev-beta/pkg/pools/discovery.go:905: enrichUniswapV2PoolData 0.0% github.com/fraktal/mev-beta/pkg/pools/discovery.go:947: ValidatePoolAddress 0.0% github.com/fraktal/mev-beta/pkg/pools/discovery.go:952: ProcessDetailedSwap 0.0% github.com/fraktal/mev-beta/pkg/pools/discovery.go:999: addPool 0.0% github.com/fraktal/mev-beta/pkg/pricing/engine.go:57: NewExchangePricer 0.0% github.com/fraktal/mev-beta/pkg/pricing/engine.go:67: AddExchangeOracle 0.0% github.com/fraktal/mev-beta/pkg/pricing/engine.go:73: GetCrossExchangePrices 0.0% github.com/fraktal/mev-beta/pkg/pricing/engine.go:114: FindArbitrageOpportunities 0.0% github.com/fraktal/mev-beta/pkg/pricing/engine.go:218: sortOpportunitiesByProfit 0.0% github.com/fraktal/mev-beta/pkg/pricing/engine.go:234: ValidateOpportunity 0.0% github.com/fraktal/mev-beta/pkg/pricing/engine.go:268: GetPriceCacheStats 0.0% github.com/fraktal/mev-beta/pkg/profitcalc/opportunity_ranker.go:57: NewOpportunityRanker 0.0% github.com/fraktal/mev-beta/pkg/profitcalc/opportunity_ranker.go:69: AddOpportunity 0.0% github.com/fraktal/mev-beta/pkg/profitcalc/opportunity_ranker.go:111: GetTopOpportunities 0.0% github.com/fraktal/mev-beta/pkg/profitcalc/opportunity_ranker.go:125: GetExecutableOpportunities 0.0% github.com/fraktal/mev-beta/pkg/profitcalc/opportunity_ranker.go:142: passesFilters 0.0% github.com/fraktal/mev-beta/pkg/profitcalc/opportunity_ranker.go:162: findSimilarOpportunity 0.0% github.com/fraktal/mev-beta/pkg/profitcalc/opportunity_ranker.go:179: findRankedOpportunity 0.0% github.com/fraktal/mev-beta/pkg/profitcalc/opportunity_ranker.go:189: estimateCompetitionRisk 0.0% github.com/fraktal/mev-beta/pkg/profitcalc/opportunity_ranker.go:222: rankOpportunities 0.0% github.com/fraktal/mev-beta/pkg/profitcalc/opportunity_ranker.go:241: calculateOpportunityScore 0.0% github.com/fraktal/mev-beta/pkg/profitcalc/opportunity_ranker.go:288: cleanupStaleOpportunities 0.0% github.com/fraktal/mev-beta/pkg/profitcalc/opportunity_ranker.go:315: GetStats 0.0% github.com/fraktal/mev-beta/pkg/profitcalc/price_feed.go:58: NewPriceFeed 0.0% github.com/fraktal/mev-beta/pkg/profitcalc/price_feed.go:75: Start 0.0% github.com/fraktal/mev-beta/pkg/profitcalc/price_feed.go:82: Stop 0.0% github.com/fraktal/mev-beta/pkg/profitcalc/price_feed.go:91: GetMultiDEXPrice 0.0% github.com/fraktal/mev-beta/pkg/profitcalc/price_feed.go:148: GetBestArbitrageOpportunity 0.0% github.com/fraktal/mev-beta/pkg/profitcalc/price_feed.go:211: priceUpdateLoop 0.0% github.com/fraktal/mev-beta/pkg/profitcalc/price_feed.go:251: updatePricesForPairs 0.0% github.com/fraktal/mev-beta/pkg/profitcalc/price_feed.go:265: updatePriceFromDEX 0.0% github.com/fraktal/mev-beta/pkg/profitcalc/price_feed.go:308: GetPriceStats 0.0% github.com/fraktal/mev-beta/pkg/profitcalc/profit_calc.go:55: NewProfitCalculator 0.0% github.com/fraktal/mev-beta/pkg/profitcalc/profit_calc.go:68: NewProfitCalculatorWithClient 0.0% github.com/fraktal/mev-beta/pkg/profitcalc/profit_calc.go:83: AnalyzeSwapOpportunity 0.0% github.com/fraktal/mev-beta/pkg/profitcalc/profit_calc.go:249: calculateGasCost 0.0% github.com/fraktal/mev-beta/pkg/profitcalc/profit_calc.go:267: calculateConfidence 0.0% github.com/fraktal/mev-beta/pkg/profitcalc/profit_calc.go:303: FormatEther 0.0% github.com/fraktal/mev-beta/pkg/profitcalc/profit_calc.go:311: UpdateGasPrice 0.0% github.com/fraktal/mev-beta/pkg/profitcalc/profit_calc.go:322: GetCurrentGasPrice 0.0% github.com/fraktal/mev-beta/pkg/profitcalc/profit_calc.go:329: startGasPriceUpdater 0.0% github.com/fraktal/mev-beta/pkg/profitcalc/profit_calc.go:344: updateGasPriceFromNetwork 0.0% github.com/fraktal/mev-beta/pkg/profitcalc/profit_calc.go:366: SetMinProfitThreshold 0.0% github.com/fraktal/mev-beta/pkg/profitcalc/profit_calc.go:373: GetPriceFeedStats 0.0% github.com/fraktal/mev-beta/pkg/profitcalc/profit_calc.go:383: HasPriceFeed 0.0% github.com/fraktal/mev-beta/pkg/profitcalc/profit_calc.go:388: Stop 0.0% github.com/fraktal/mev-beta/pkg/profitcalc/slippage_protection.go:32: NewSlippageProtector 0.0% github.com/fraktal/mev-beta/pkg/profitcalc/slippage_protection.go:41: AnalyzeSlippage 0.0% github.com/fraktal/mev-beta/pkg/profitcalc/slippage_protection.go:105: calculatePriceImpact 0.0% github.com/fraktal/mev-beta/pkg/profitcalc/slippage_protection.go:119: assessRiskLevel 0.0% github.com/fraktal/mev-beta/pkg/profitcalc/slippage_protection.go:151: generateRecommendation 0.0% github.com/fraktal/mev-beta/pkg/profitcalc/slippage_protection.go:173: CalculateOptimalTradeSize 0.0% github.com/fraktal/mev-beta/pkg/profitcalc/slippage_protection.go:201: EstimateGasForSlippage 0.0% github.com/fraktal/mev-beta/pkg/profitcalc/slippage_protection.go:220: SetMaxSlippage 0.0% github.com/fraktal/mev-beta/pkg/profitcalc/slippage_protection.go:226: GetMaxSlippage 0.0% github.com/fraktal/mev-beta/pkg/profitcalc/slippage_protection.go:231: ValidateTradeParameters 0.0% github.com/fraktal/mev-beta/pkg/profitcalc/slippage_protection.go:262: CalculateSlippageAdjustedProfit 0.0% github.com/fraktal/mev-beta/pkg/risk/manager.go:51: fromWei 100.0% github.com/fraktal/mev-beta/pkg/risk/manager.go:89: NewRiskManager 100.0% github.com/fraktal/mev-beta/pkg/risk/manager.go:129: AssessOpportunity 75.6% github.com/fraktal/mev-beta/pkg/risk/manager.go:237: RecordTrade 100.0% github.com/fraktal/mev-beta/pkg/risk/manager.go:274: UpdatePositionCount 0.0% github.com/fraktal/mev-beta/pkg/risk/manager.go:287: GetStatistics 0.0% github.com/fraktal/mev-beta/pkg/risk/manager.go:310: dailyReset 0.0% github.com/fraktal/mev-beta/pkg/risk/manager.go:325: calculateRiskScore 82.6% github.com/fraktal/mev-beta/pkg/risk/manager.go:369: calculateConfidence 22.2% github.com/fraktal/mev-beta/pkg/risk/manager.go:389: calculateProfitability 80.0% github.com/fraktal/mev-beta/pkg/risk/manager.go:411: calculateMaxPositionSize 100.0% github.com/fraktal/mev-beta/pkg/risk/manager.go:426: calculateRecommendedGas 87.5% github.com/fraktal/mev-beta/pkg/risk/manager.go:444: calculateSlippageLimit 100.0% github.com/fraktal/mev-beta/pkg/risk/manager.go:452: isAcceptable 62.5% github.com/fraktal/mev-beta/pkg/risk/manager.go:472: max 0.0% github.com/fraktal/mev-beta/pkg/risk/manager.go:480: min 0.0% github.com/fraktal/mev-beta/pkg/risk/manager.go:488: formatEther 0.0% github.com/fraktal/mev-beta/pkg/risk/manager.go:499: formatGwei 0.0% github.com/fraktal/mev-beta/pkg/risk/manager.go:510: IsOpen 100.0% github.com/fraktal/mev-beta/pkg/risk/manager.go:517: RecordFailure 83.3% github.com/fraktal/mev-beta/pkg/risk/manager.go:530: RecordSuccess 100.0% github.com/fraktal/mev-beta/pkg/risk/profit_validator.go:78: NewProfitValidator 0.0% github.com/fraktal/mev-beta/pkg/risk/profit_validator.go:101: ValidateProfit 0.0% github.com/fraktal/mev-beta/pkg/risk/profit_validator.go:191: performValidationChecks 0.0% github.com/fraktal/mev-beta/pkg/risk/profit_validator.go:237: isAcceptable 0.0% github.com/fraktal/mev-beta/pkg/risk/profit_validator.go:272: calculateConfidence 0.0% github.com/fraktal/mev-beta/pkg/risk/profit_validator.go:305: calculateRiskScore 0.0% github.com/fraktal/mev-beta/pkg/risk/profit_validator.go:336: updateValidationMetrics 0.0% github.com/fraktal/mev-beta/pkg/risk/profit_validator.go:350: convertETHToUSD 0.0% github.com/fraktal/mev-beta/pkg/risk/profit_validator.go:373: getTokenPriceUSD 0.0% github.com/fraktal/mev-beta/pkg/risk/profit_validator.go:407: UpdateTokenPrice 0.0% github.com/fraktal/mev-beta/pkg/risk/profit_validator.go:422: GetStatistics 0.0% github.com/fraktal/mev-beta/pkg/risk/profit_validator.go:441: SetStrictValidation 0.0% github.com/fraktal/mev-beta/pkg/risk/profit_validator.go:448: SetMinProfitUSD 0.0% github.com/fraktal/mev-beta/pkg/risk/profit_validator.go:455: SetMinProfitETH 0.0% github.com/fraktal/mev-beta/pkg/risk/profit_validator.go:462: SetMinProfitMargin 0.0% github.com/fraktal/mev-beta/pkg/risk/profit_validator.go:469: SetMaxSlippage 0.0% github.com/fraktal/mev-beta/pkg/risk/profit_validator.go:476: SetMaxGasPrice 0.0% github.com/fraktal/mev-beta/pkg/scanner/analysis/pool_analyzer.go:23: NewLiquidityAnalyzer 0.0% github.com/fraktal/mev-beta/pkg/scanner/analysis/pool_analyzer.go:31: AnalyzeLiquidityEvent 0.0% github.com/fraktal/mev-beta/pkg/scanner/analysis/pool_analyzer.go:89: AnalyzeNewPoolEvent 0.0% github.com/fraktal/mev-beta/pkg/scanner/analysis/pool_analyzer.go:116: calculateLiquidityUSDValues 0.0% github.com/fraktal/mev-beta/pkg/scanner/analysis/pool_analyzer.go:144: getTokenPriceUSD 0.0% github.com/fraktal/mev-beta/pkg/scanner/analysis/pool_analyzer.go:168: getTokenDecimals 0.0% github.com/fraktal/mev-beta/pkg/scanner/analysis/pool_analyzer.go:192: bigIntToFloat 0.0% github.com/fraktal/mev-beta/pkg/scanner/concurrent.go:42: NewScanner 0.0% github.com/fraktal/mev-beta/pkg/scanner/concurrent.go:81: NewEventWorker 0.0% github.com/fraktal/mev-beta/pkg/scanner/concurrent.go:92: Start 0.0% github.com/fraktal/mev-beta/pkg/scanner/concurrent.go:111: Stop 0.0% github.com/fraktal/mev-beta/pkg/scanner/concurrent.go:118: Process 0.0% github.com/fraktal/mev-beta/pkg/scanner/concurrent.go:144: SubmitEvent 0.0% github.com/fraktal/mev-beta/pkg/scanner/concurrent.go:155: GetTopOpportunities 0.0% github.com/fraktal/mev-beta/pkg/scanner/concurrent.go:160: GetExecutableOpportunities 0.0% github.com/fraktal/mev-beta/pkg/scanner/concurrent.go:165: GetOpportunityStats 0.0% github.com/fraktal/mev-beta/pkg/scanner/concurrent.go:170: GetMarketDataStats 0.0% github.com/fraktal/mev-beta/pkg/scanner/concurrent.go:175: GetCachedTokenInfo 0.0% github.com/fraktal/mev-beta/pkg/scanner/concurrent.go:180: GetCachedPoolInfo 0.0% github.com/fraktal/mev-beta/pkg/scanner/concurrent.go:185: GetPoolsForTokenPair 0.0% github.com/fraktal/mev-beta/pkg/scanner/concurrent.go:190: GetActiveFactories 0.0% github.com/fraktal/mev-beta/pkg/scanner/concurrent.go:195: WaitGroup 0.0% github.com/fraktal/mev-beta/pkg/scanner/market/scanner.go:63: NewMarketScanner 0.0% github.com/fraktal/mev-beta/pkg/scanner/market/scanner.go:137: NewEventWorker 0.0% github.com/fraktal/mev-beta/pkg/scanner/market/scanner.go:148: Start 0.0% github.com/fraktal/mev-beta/pkg/scanner/market/scanner.go:167: Stop 0.0% github.com/fraktal/mev-beta/pkg/scanner/market/scanner.go:174: Process 0.0% github.com/fraktal/mev-beta/pkg/scanner/market/scanner.go:200: SubmitEvent 0.0% github.com/fraktal/mev-beta/pkg/scanner/market/scanner.go:211: GetTopOpportunities 0.0% github.com/fraktal/mev-beta/pkg/scanner/market/scanner.go:216: GetExecutableOpportunities 0.0% github.com/fraktal/mev-beta/pkg/scanner/market/scanner.go:221: GetOpportunityStats 0.0% github.com/fraktal/mev-beta/pkg/scanner/market/scanner.go:226: GetMarketDataStats 0.0% github.com/fraktal/mev-beta/pkg/scanner/market/scanner.go:236: GetCachedTokenInfo 0.0% github.com/fraktal/mev-beta/pkg/scanner/market/scanner.go:244: GetCachedPoolInfo 0.0% github.com/fraktal/mev-beta/pkg/scanner/market/scanner.go:252: GetPoolsForTokenPair 0.0% github.com/fraktal/mev-beta/pkg/scanner/market/scanner.go:260: GetActiveFactories 0.0% github.com/fraktal/mev-beta/pkg/scanner/market/scanner.go:268: isSignificantMovement 0.0% github.com/fraktal/mev-beta/pkg/scanner/market/scanner.go:288: findRelatedPools 0.0% github.com/fraktal/mev-beta/pkg/scanner/market/scanner.go:317: discoverPoolsForPair 0.0% github.com/fraktal/mev-beta/pkg/scanner/market/scanner.go:342: estimateProfit 0.0% github.com/fraktal/mev-beta/pkg/scanner/market/scanner.go:353: calculateProfitWithSlippageProtection 0.0% github.com/fraktal/mev-beta/pkg/scanner/market/scanner.go:414: calculateSophisticatedProfit 0.0% github.com/fraktal/mev-beta/pkg/scanner/market/scanner.go:466: findTriangularArbitrageOpportunities 0.0% github.com/fraktal/mev-beta/pkg/scanner/market/scanner.go:543: calculateTriangularProfit 0.0% github.com/fraktal/mev-beta/pkg/scanner/market/scanner.go:592: calculateSwapOutput 0.0% github.com/fraktal/mev-beta/pkg/scanner/market/scanner.go:644: executeArbitrageOpportunity 0.0% github.com/fraktal/mev-beta/pkg/scanner/market/scanner.go:686: logSwapEvent 0.0% github.com/fraktal/mev-beta/pkg/scanner/market/scanner.go:717: logLiquidityEvent 0.0% github.com/fraktal/mev-beta/pkg/scanner/market/scanner.go:757: logPoolData 0.0% github.com/fraktal/mev-beta/pkg/scanner/market/scanner.go:814: getPoolData 0.0% github.com/fraktal/mev-beta/pkg/scanner/market/scanner.go:847: fetchPoolData 0.0% github.com/fraktal/mev-beta/pkg/scanner/market/scanner.go:924: updatePoolData 0.0% github.com/fraktal/mev-beta/pkg/scanner/market/scanner.go:977: cleanupCache 0.0% github.com/fraktal/mev-beta/pkg/scanner/market/scanner.go:997: isTestEnvironment 0.0% github.com/fraktal/mev-beta/pkg/scanner/market/scanner.go:1026: getMockPoolData 0.0% github.com/fraktal/mev-beta/pkg/scanner/market/scanner.go:1065: getTickSpacing 0.0% github.com/fraktal/mev-beta/pkg/scanner/market/scanner.go:1081: calculateUniswapV3Output 0.0% github.com/fraktal/mev-beta/pkg/scanner/market/scanner.go:1122: calculateFallbackOutput 0.0% github.com/fraktal/mev-beta/pkg/scanner/market/scanner.go:1136: calculateMarketImpact 0.0% github.com/fraktal/mev-beta/pkg/scanner/market/scanner.go:1165: calculateDynamicGasCost 0.0% github.com/fraktal/mev-beta/pkg/scanner/market/scanner.go:1193: calculateMEVPremium 0.0% github.com/fraktal/mev-beta/pkg/scanner/market/scanner.go:1220: calculateSlippageTolerance 0.0% github.com/fraktal/mev-beta/pkg/scanner/market/scanner.go:1250: getFactoryForProtocol 0.0% github.com/fraktal/mev-beta/pkg/scanner/market/scanner.go:1271: GetMarketDataLogger 0.0% github.com/fraktal/mev-beta/pkg/scanner/market/scanner.go:1276: GetProfitCalculator 0.0% github.com/fraktal/mev-beta/pkg/scanner/market/scanner.go:1281: GetOpportunityRanker 0.0% github.com/fraktal/mev-beta/pkg/scanner/market/scanner.go:1286: GetPoolData 0.0% github.com/fraktal/mev-beta/pkg/scanner/market/scanner.go:1291: UpdatePoolData 0.0% github.com/fraktal/mev-beta/pkg/scanner/market/scanner.go:1296: IsSignificantMovement 0.0% github.com/fraktal/mev-beta/pkg/scanner/market/scanner.go:1301: FindRelatedPools 0.0% github.com/fraktal/mev-beta/pkg/scanner/market/scanner.go:1306: EstimateProfit 0.0% github.com/fraktal/mev-beta/pkg/scanner/market/scanner.go:1311: FindTriangularArbitrageOpportunities 0.0% github.com/fraktal/mev-beta/pkg/scanner/market/scanner.go:1316: ExecuteArbitrageOpportunity 0.0% github.com/fraktal/mev-beta/pkg/scanner/market/scanner.go:1321: LogSwapEvent 0.0% github.com/fraktal/mev-beta/pkg/scanner/market/scanner.go:1326: LogLiquidityEvent 0.0% github.com/fraktal/mev-beta/pkg/scanner/market/scanner.go:1331: LogPoolData 0.0% github.com/fraktal/mev-beta/pkg/scanner/market/scanner.go:1336: GetFactoryForProtocol 0.0% github.com/fraktal/mev-beta/pkg/scanner/market/scanner.go:1341: Config 0.0% github.com/fraktal/mev-beta/pkg/scanner/public.go:15: NewMarketScanner 0.0% github.com/fraktal/mev-beta/pkg/scanner/swap/analyzer.go:30: NewSwapAnalyzer 0.0% github.com/fraktal/mev-beta/pkg/scanner/swap/analyzer.go:45: AnalyzeSwapEvent 0.0% github.com/fraktal/mev-beta/pkg/scanner/swap/analyzer.go:158: logSwapOpportunity 0.0% github.com/fraktal/mev-beta/pkg/scanner/swap/analyzer.go:271: resolveTokenSymbol 0.0% github.com/fraktal/mev-beta/pkg/scanner/swap/analyzer.go:308: calculatePriceMovement 0.0% github.com/fraktal/mev-beta/pkg/scanner/swap/analyzer.go:353: findArbitrageOpportunities 0.0% github.com/fraktal/mev-beta/pkg/scanner/swap/analyzer.go:431: calculateSwapUSDValues 0.0% github.com/fraktal/mev-beta/pkg/scanner/swap/analyzer.go:470: calculateSwapPriceImpact 0.0% github.com/fraktal/mev-beta/pkg/scanner/swap/analyzer.go:511: getTokenPriceUSD 0.0% github.com/fraktal/mev-beta/pkg/scanner/swap/analyzer.go:535: getTokenDecimals 0.0% github.com/fraktal/mev-beta/pkg/scanner/swap/analyzer.go:559: bigIntToFloat 0.0% github.com/fraktal/mev-beta/pkg/scanner/swap/analyzer.go:575: sqrtPriceX96ToPrice 0.0% github.com/fraktal/mev-beta/pkg/security/config.go:66: NewSecureConfig 0.0% github.com/fraktal/mev-beta/pkg/security/config.go:110: loadRPCEndpoints 0.0% github.com/fraktal/mev-beta/pkg/security/config.go:153: loadSecurityLimits 0.0% github.com/fraktal/mev-beta/pkg/security/config.go:186: loadRateLimits 0.0% github.com/fraktal/mev-beta/pkg/security/config.go:207: loadTimeouts 0.0% github.com/fraktal/mev-beta/pkg/security/config.go:236: GetPrimaryRPCEndpoint 0.0% github.com/fraktal/mev-beta/pkg/security/config.go:244: GetAllRPCEndpoints 0.0% github.com/fraktal/mev-beta/pkg/security/config.go:249: Encrypt 0.0% github.com/fraktal/mev-beta/pkg/security/config.go:274: Decrypt 0.0% github.com/fraktal/mev-beta/pkg/security/config.go:309: GenerateEncryptionKey 0.0% github.com/fraktal/mev-beta/pkg/security/config.go:318: validateEndpoint 0.0% github.com/fraktal/mev-beta/pkg/security/config.go:348: validateWebSocketEndpoint 0.0% github.com/fraktal/mev-beta/pkg/security/config.go:356: validateETHAmount 0.0% github.com/fraktal/mev-beta/pkg/security/config.go:371: getEnvWithDefault 0.0% github.com/fraktal/mev-beta/pkg/security/config.go:379: CreateConfigHash 0.0% github.com/fraktal/mev-beta/pkg/security/config.go:389: SecurityProfile 0.0% github.com/fraktal/mev-beta/pkg/security/contract_validator.go:55: String 0.0% github.com/fraktal/mev-beta/pkg/security/contract_validator.go:121: NewContractValidator 0.0% github.com/fraktal/mev-beta/pkg/security/contract_validator.go:139: AddTrustedContract 0.0% github.com/fraktal/mev-beta/pkg/security/contract_validator.go:167: ValidateContract 0.0% github.com/fraktal/mev-beta/pkg/security/contract_validator.go:244: validateContractOnChain 0.0% github.com/fraktal/mev-beta/pkg/security/contract_validator.go:322: getDeploymentInfo 0.0% github.com/fraktal/mev-beta/pkg/security/contract_validator.go:329: assessRiskLevel 0.0% github.com/fraktal/mev-beta/pkg/security/contract_validator.go:371: verifyBytecodeSignature 0.0% github.com/fraktal/mev-beta/pkg/security/contract_validator.go:396: calculateRiskScore 0.0% github.com/fraktal/mev-beta/pkg/security/contract_validator.go:430: getDefaultPermissions 0.0% github.com/fraktal/mev-beta/pkg/security/contract_validator.go:442: ValidateTransaction 0.0% github.com/fraktal/mev-beta/pkg/security/contract_validator.go:481: checkDailyLimit 0.0% github.com/fraktal/mev-beta/pkg/security/contract_validator.go:527: getDefaultValidatorConfig 0.0% github.com/fraktal/mev-beta/pkg/security/contract_validator.go:542: GetContractInfo 0.0% github.com/fraktal/mev-beta/pkg/security/contract_validator.go:553: ListTrustedContracts 0.0% github.com/fraktal/mev-beta/pkg/security/error_handler.go:76: NewErrorHandler 0.0% github.com/fraktal/mev-beta/pkg/security/error_handler.go:98: WrapError 0.0% github.com/fraktal/mev-beta/pkg/security/error_handler.go:131: WrapErrorWithContext 0.0% github.com/fraktal/mev-beta/pkg/security/error_handler.go:164: Error 0.0% github.com/fraktal/mev-beta/pkg/security/error_handler.go:172: Unwrap 0.0% github.com/fraktal/mev-beta/pkg/security/error_handler.go:177: SafeString 0.0% github.com/fraktal/mev-beta/pkg/security/error_handler.go:185: DetailedString 0.0% github.com/fraktal/mev-beta/pkg/security/error_handler.go:205: captureStackTrace 0.0% github.com/fraktal/mev-beta/pkg/security/error_handler.go:231: containsSensitiveData 0.0% github.com/fraktal/mev-beta/pkg/security/error_handler.go:257: isSensitiveField 0.0% github.com/fraktal/mev-beta/pkg/security/error_handler.go:262: updateMetrics 0.0% github.com/fraktal/mev-beta/pkg/security/error_handler.go:273: logError 0.0% github.com/fraktal/mev-beta/pkg/security/error_handler.go:309: GetMetrics 0.0% github.com/fraktal/mev-beta/pkg/security/error_handler.go:316: NewAuthenticationError 0.0% github.com/fraktal/mev-beta/pkg/security/error_handler.go:321: NewAuthorizationError 0.0% github.com/fraktal/mev-beta/pkg/security/error_handler.go:326: NewValidationError 0.0% github.com/fraktal/mev-beta/pkg/security/error_handler.go:331: NewRateLimitError 0.0% github.com/fraktal/mev-beta/pkg/security/error_handler.go:336: NewEncryptionError 0.0% github.com/fraktal/mev-beta/pkg/security/error_handler.go:341: NewTransactionError 0.0% github.com/fraktal/mev-beta/pkg/security/error_handler.go:346: NewInternalError 0.0% github.com/fraktal/mev-beta/pkg/security/input_validator.go:63: NewInputValidator 100.0% github.com/fraktal/mev-beta/pkg/security/input_validator.go:73: ValidateAddress 0.0% github.com/fraktal/mev-beta/pkg/security/input_validator.go:108: ValidateTransaction 0.0% github.com/fraktal/mev-beta/pkg/security/input_validator.go:169: ValidateSwapParams 0.0% github.com/fraktal/mev-beta/pkg/security/input_validator.go:223: ValidateArbitrageParams 0.0% github.com/fraktal/mev-beta/pkg/security/input_validator.go:280: validateTransactionData 0.0% github.com/fraktal/mev-beta/pkg/security/input_validator.go:334: ValidateString 0.0% github.com/fraktal/mev-beta/pkg/security/input_validator.go:374: ValidateNumericString 0.0% github.com/fraktal/mev-beta/pkg/security/input_validator.go:402: ValidateBatchSize 0.0% github.com/fraktal/mev-beta/pkg/security/input_validator.go:435: SanitizeInput 0.0% github.com/fraktal/mev-beta/pkg/security/keymanager.go:89: GetLastUsed 75.0% github.com/fraktal/mev-beta/pkg/security/keymanager.go:98: GetUsageCount 100.0% github.com/fraktal/mev-beta/pkg/security/keymanager.go:103: SetLastUsed 0.0% github.com/fraktal/mev-beta/pkg/security/keymanager.go:108: IncrementUsageCount 0.0% github.com/fraktal/mev-beta/pkg/security/keymanager.go:240: NewKeyManager 0.0% github.com/fraktal/mev-beta/pkg/security/keymanager.go:245: newKeyManagerForTesting 100.0% github.com/fraktal/mev-beta/pkg/security/keymanager.go:249: newKeyManagerInternal 60.0% github.com/fraktal/mev-beta/pkg/security/keymanager.go:323: GenerateKey 84.2% github.com/fraktal/mev-beta/pkg/security/keymanager.go:374: ImportKey 90.5% github.com/fraktal/mev-beta/pkg/security/keymanager.go:428: SignTransactionWithAuth 0.0% github.com/fraktal/mev-beta/pkg/security/keymanager.go:454: SignTransaction 67.6% github.com/fraktal/mev-beta/pkg/security/keymanager.go:591: GetKeyInfo 100.0% github.com/fraktal/mev-beta/pkg/security/keymanager.go:608: ListKeys 100.0% github.com/fraktal/mev-beta/pkg/security/keymanager.go:621: RotateKey 93.3% github.com/fraktal/mev-beta/pkg/security/keymanager.go:651: encryptPrivateKey 78.6% github.com/fraktal/mev-beta/pkg/security/keymanager.go:685: decryptPrivateKey 80.0% github.com/fraktal/mev-beta/pkg/security/keymanager.go:728: createKeyBackup 18.2% github.com/fraktal/mev-beta/pkg/security/keymanager.go:767: checkRateLimit 83.3% github.com/fraktal/mev-beta/pkg/security/keymanager.go:812: auditLog 66.7% github.com/fraktal/mev-beta/pkg/security/keymanager.go:831: loadExistingKeys 100.0% github.com/fraktal/mev-beta/pkg/security/keymanager.go:839: backgroundTasks 80.0% github.com/fraktal/mev-beta/pkg/security/keymanager.go:852: performMaintenance 0.0% github.com/fraktal/mev-beta/pkg/security/keymanager.go:876: AuthenticateUser 0.0% github.com/fraktal/mev-beta/pkg/security/keymanager.go:969: ValidateSession 0.0% github.com/fraktal/mev-beta/pkg/security/keymanager.go:1002: GetActivePrivateKeyWithAuth 0.0% github.com/fraktal/mev-beta/pkg/security/keymanager.go:1024: GetActivePrivateKey 0.0% github.com/fraktal/mev-beta/pkg/security/keymanager.go:1087: getDefaultConfig 0.0% github.com/fraktal/mev-beta/pkg/security/keymanager.go:1112: validateConfig 100.0% github.com/fraktal/mev-beta/pkg/security/keymanager.go:1125: deriveEncryptionKey 77.8% github.com/fraktal/mev-beta/pkg/security/keymanager.go:1143: clearPrivateKey 100.0% github.com/fraktal/mev-beta/pkg/security/keymanager.go:1149: generateAuditID 75.0% github.com/fraktal/mev-beta/pkg/security/keymanager.go:1158: calculateRiskScore 100.0% github.com/fraktal/mev-beta/pkg/security/keymanager.go:1176: Logout 0.0% github.com/fraktal/mev-beta/pkg/security/keymanager.go:1193: validateCredentials 0.0% github.com/fraktal/mev-beta/pkg/security/keymanager.go:1203: getStoredPasswordHash 0.0% github.com/fraktal/mev-beta/pkg/security/keymanager.go:1213: hashPassword 0.0% github.com/fraktal/mev-beta/pkg/security/keymanager.go:1219: generateSessionID 0.0% github.com/fraktal/mev-beta/pkg/security/keymanager.go:1228: calculateAuthRiskScore 0.0% github.com/fraktal/mev-beta/pkg/security/keymanager.go:1245: contains 0.0% github.com/fraktal/mev-beta/pkg/security/keymanager.go:1255: auditLogWithAuth 0.0% github.com/fraktal/mev-beta/pkg/security/keymanager.go:1278: encryptBackupData 0.0% github.com/fraktal/mev-beta/pkg/security/keymanager.go:1310: validateProductionConfig 77.8% github.com/fraktal/mev-beta/pkg/security/monitor.go:175: NewSecurityMonitor 0.0% github.com/fraktal/mev-beta/pkg/security/monitor.go:213: RecordEvent 0.0% github.com/fraktal/mev-beta/pkg/security/monitor.go:255: TriggerAlert 0.0% github.com/fraktal/mev-beta/pkg/security/monitor.go:282: checkForAlerts 0.0% github.com/fraktal/mev-beta/pkg/security/monitor.go:329: checkAttackPatterns 0.0% github.com/fraktal/mev-beta/pkg/security/monitor.go:396: updateMetricsForEvent 0.0% github.com/fraktal/mev-beta/pkg/security/monitor.go:426: alertProcessor 0.0% github.com/fraktal/mev-beta/pkg/security/monitor.go:456: metricsCollector 0.0% github.com/fraktal/mev-beta/pkg/security/monitor.go:472: collectMetrics 0.0% github.com/fraktal/mev-beta/pkg/security/monitor.go:482: cleanupRoutine 0.0% github.com/fraktal/mev-beta/pkg/security/monitor.go:498: cleanup 0.0% github.com/fraktal/mev-beta/pkg/security/monitor.go:536: AddAlertHandler 0.0% github.com/fraktal/mev-beta/pkg/security/monitor.go:541: GetEvents 0.0% github.com/fraktal/mev-beta/pkg/security/monitor.go:556: GetMetrics 0.0% github.com/fraktal/mev-beta/pkg/security/monitor.go:576: GetDashboardData 0.0% github.com/fraktal/mev-beta/pkg/security/monitor.go:600: getSystemStatus 0.0% github.com/fraktal/mev-beta/pkg/security/monitor.go:621: getAlertSummary 0.0% github.com/fraktal/mev-beta/pkg/security/monitor.go:633: Stop 0.0% github.com/fraktal/mev-beta/pkg/security/monitor.go:638: ExportEvents 0.0% github.com/fraktal/mev-beta/pkg/security/monitor.go:646: ExportMetrics 0.0% github.com/fraktal/mev-beta/pkg/security/rate_limiter.go:130: NewRateLimiter 0.0% github.com/fraktal/mev-beta/pkg/security/rate_limiter.go:178: CheckRateLimit 0.0% github.com/fraktal/mev-beta/pkg/security/rate_limiter.go:217: checkDDoS 0.0% github.com/fraktal/mev-beta/pkg/security/rate_limiter.go:288: calculateSuspiciousScore 0.0% github.com/fraktal/mev-beta/pkg/security/rate_limiter.go:335: checkGlobalLimit 0.0% github.com/fraktal/mev-beta/pkg/security/rate_limiter.go:348: checkIPLimit 0.0% github.com/fraktal/mev-beta/pkg/security/rate_limiter.go:400: checkUserLimit 0.0% github.com/fraktal/mev-beta/pkg/security/rate_limiter.go:422: updateRequestPattern 0.0% github.com/fraktal/mev-beta/pkg/security/rate_limiter.go:431: newTokenBucket 0.0% github.com/fraktal/mev-beta/pkg/security/rate_limiter.go:442: consume 0.0% github.com/fraktal/mev-beta/pkg/security/rate_limiter.go:468: isWhitelisted 0.0% github.com/fraktal/mev-beta/pkg/security/rate_limiter.go:493: getCountryFromIP 0.0% github.com/fraktal/mev-beta/pkg/security/rate_limiter.go:544: isPrivateIP 0.0% github.com/fraktal/mev-beta/pkg/security/rate_limiter.go:562: isInIPRange 0.0% github.com/fraktal/mev-beta/pkg/security/rate_limiter.go:571: classifyUnknownIP 0.0% github.com/fraktal/mev-beta/pkg/security/rate_limiter.go:597: containsIgnoreCase 0.0% github.com/fraktal/mev-beta/pkg/security/rate_limiter.go:607: findSubstring 0.0% github.com/fraktal/mev-beta/pkg/security/rate_limiter.go:617: cleanupRoutine 0.0% github.com/fraktal/mev-beta/pkg/security/rate_limiter.go:629: cleanup 0.0% github.com/fraktal/mev-beta/pkg/security/rate_limiter.go:662: Stop 0.0% github.com/fraktal/mev-beta/pkg/security/rate_limiter.go:670: GetMetrics 0.0% github.com/fraktal/mev-beta/pkg/security/safemath.go:30: NewSafeMath 100.0% github.com/fraktal/mev-beta/pkg/security/safemath.go:43: SafeUint8 0.0% github.com/fraktal/mev-beta/pkg/security/safemath.go:51: SafeUint32 0.0% github.com/fraktal/mev-beta/pkg/security/safemath.go:59: SafeUint64FromBigInt 0.0% github.com/fraktal/mev-beta/pkg/security/safemath.go:73: SafeAdd 0.0% github.com/fraktal/mev-beta/pkg/security/safemath.go:89: SafeSubtract 0.0% github.com/fraktal/mev-beta/pkg/security/safemath.go:105: SafeMultiply 0.0% github.com/fraktal/mev-beta/pkg/security/safemath.go:126: SafeDivide 0.0% github.com/fraktal/mev-beta/pkg/security/safemath.go:139: SafePercent 0.0% github.com/fraktal/mev-beta/pkg/security/safemath.go:158: ValidateGasPrice 0.0% github.com/fraktal/mev-beta/pkg/security/safemath.go:175: ValidateTransactionValue 0.0% github.com/fraktal/mev-beta/pkg/security/safemath.go:192: CalculateMinimumProfit 0.0% github.com/fraktal/mev-beta/pkg/security/safemath.go:213: SafeSlippage 0.0% github.com/fraktal/mev-beta/pkg/security/security_manager.go:107: NewSecurityManager 0.0% github.com/fraktal/mev-beta/pkg/security/security_manager.go:214: ValidateTransaction 0.0% github.com/fraktal/mev-beta/pkg/security/security_manager.go:247: SecureRPCCall 0.0% github.com/fraktal/mev-beta/pkg/security/security_manager.go:279: TriggerEmergencyStop 0.0% github.com/fraktal/mev-beta/pkg/security/security_manager.go:304: RecordFailure 0.0% github.com/fraktal/mev-beta/pkg/security/security_manager.go:348: RecordSuccess 0.0% github.com/fraktal/mev-beta/pkg/security/security_manager.go:371: addSecurityAlert 0.0% github.com/fraktal/mev-beta/pkg/security/security_manager.go:388: startSecurityMonitoring 0.0% github.com/fraktal/mev-beta/pkg/security/security_manager.go:401: performSecurityChecks 0.0% github.com/fraktal/mev-beta/pkg/security/security_manager.go:415: checkCircuitBreakerRecovery 0.0% github.com/fraktal/mev-beta/pkg/security/security_manager.go:427: GetManagerMetrics 0.0% github.com/fraktal/mev-beta/pkg/security/security_manager.go:432: GetSecurityMetrics 0.0% github.com/fraktal/mev-beta/pkg/security/security_manager.go:440: GetSecurityAlerts 0.0% github.com/fraktal/mev-beta/pkg/security/security_manager.go:460: Shutdown 0.0% github.com/fraktal/mev-beta/pkg/security/transaction_security.go:59: NewTransactionSecurity 0.0% github.com/fraktal/mev-beta/pkg/security/transaction_security.go:76: AnalyzeMEVTransaction 0.0% github.com/fraktal/mev-beta/pkg/security/transaction_security.go:123: basicTransactionChecks 0.0% github.com/fraktal/mev-beta/pkg/security/transaction_security.go:159: mevSpecificChecks 0.0% github.com/fraktal/mev-beta/pkg/security/transaction_security.go:196: gasValidation 0.0% github.com/fraktal/mev-beta/pkg/security/transaction_security.go:238: profitValidation 0.0% github.com/fraktal/mev-beta/pkg/security/transaction_security.go:274: frontRunningProtection 0.0% github.com/fraktal/mev-beta/pkg/security/transaction_security.go:308: rateLimitingChecks 0.0% github.com/fraktal/mev-beta/pkg/security/transaction_security.go:348: validatePriorityVsGasPrice 0.0% github.com/fraktal/mev-beta/pkg/security/transaction_security.go:376: calculateRiskLevel 0.0% github.com/fraktal/mev-beta/pkg/security/transaction_security.go:403: AddBlacklistedAddress 0.0% github.com/fraktal/mev-beta/pkg/security/transaction_security.go:408: RemoveBlacklistedAddress 0.0% github.com/fraktal/mev-beta/pkg/security/transaction_security.go:413: GetSecurityMetrics 0.0% github.com/fraktal/mev-beta/pkg/slippage/protection.go:56: NewSlippageProtection 0.0% github.com/fraktal/mev-beta/pkg/slippage/protection.go:76: AnalyzeSlippage 0.0% github.com/fraktal/mev-beta/pkg/slippage/protection.go:130: calculatePriceImpact 0.0% github.com/fraktal/mev-beta/pkg/slippage/protection.go:167: calculateMinAmountOut 0.0% github.com/fraktal/mev-beta/pkg/slippage/protection.go:181: evaluateTradeSafety 0.0% github.com/fraktal/mev-beta/pkg/slippage/protection.go:221: shouldEmergencyStop 0.0% github.com/fraktal/mev-beta/pkg/slippage/protection.go:243: recommendGasPrice 0.0% github.com/fraktal/mev-beta/pkg/slippage/protection.go:272: ValidateSlippageTolerance 0.0% github.com/fraktal/mev-beta/pkg/slippage/protection.go:290: CalculateOptimalSlippage 0.0% github.com/fraktal/mev-beta/pkg/slippage/protection.go:331: getDefaultImpactThresholds 0.0% github.com/fraktal/mev-beta/pkg/slippage/protection.go:340: MonitorSlippage 0.0% github.com/fraktal/mev-beta/pkg/slippage/protection.go:374: getPoolLiquidity 0.0% github.com/fraktal/mev-beta/pkg/slippage/protection.go:389: calculateLiquidityFactor 0.0% github.com/fraktal/mev-beta/pkg/slippage/protection.go:407: getNetworkCongestionFactor 0.0% github.com/fraktal/mev-beta/pkg/trading/slippage_protection.go:53: NewSlippageProtection 0.0% github.com/fraktal/mev-beta/pkg/trading/slippage_protection.go:66: ValidateTradeParameters 0.0% github.com/fraktal/mev-beta/pkg/trading/slippage_protection.go:137: validateInputParameters 0.0% github.com/fraktal/mev-beta/pkg/trading/slippage_protection.go:187: calculateSlippage 0.0% github.com/fraktal/mev-beta/pkg/trading/slippage_protection.go:213: calculatePriceImpact 0.0% github.com/fraktal/mev-beta/pkg/trading/slippage_protection.go:261: checkLiquidity 0.0% github.com/fraktal/mev-beta/pkg/trading/slippage_protection.go:287: checkSandwichAttackRisk 0.0% github.com/fraktal/mev-beta/pkg/trading/slippage_protection.go:310: AdjustForMarketConditions 0.0% github.com/fraktal/mev-beta/pkg/trading/slippage_protection.go:331: CreateSafeTradeParameters 0.0% github.com/fraktal/mev-beta/pkg/trading/slippage_protection.go:364: GetEmergencyStopLoss 0.0% github.com/fraktal/mev-beta/pkg/trading/slippage_protection.go:369: SetMaxSlippage 0.0% github.com/fraktal/mev-beta/pkg/trading/slippage_protection.go:380: calculateLiquidityConcentration 0.0% github.com/fraktal/mev-beta/pkg/trading/slippage_protection.go:448: getMarketVolatilityAdjustment 0.0% github.com/fraktal/mev-beta/pkg/trading/slippage_protection.go:486: detectPoolType 0.0% github.com/fraktal/mev-beta/pkg/trading/slippage_protection.go:514: isUniswapV3Pool 0.0% github.com/fraktal/mev-beta/pkg/trading/slippage_protection.go:527: isVolatilePair 0.0% github.com/fraktal/mev-beta/pkg/trading/slippage_protection.go:533: calculatePairVolatilityFactor 0.0% github.com/fraktal/mev-beta/pkg/trading/slippage_protection.go:585: isStablePair 0.0% github.com/fraktal/mev-beta/pkg/trading/slippage_protection.go:611: analyzeV3LiquidityDistribution 0.0% github.com/fraktal/mev-beta/pkg/trading/slippage_protection.go:626: analyzeContractBytecode 0.0% github.com/fraktal/mev-beta/pkg/trading/slippage_protection.go:695: countPatternMatches 0.0% github.com/fraktal/mev-beta/pkg/trading/slippage_protection.go:706: checkFactoryDeployment 0.0% github.com/fraktal/mev-beta/pkg/trading/slippage_protection.go:727: testPoolInterfaces 0.0% github.com/fraktal/mev-beta/pkg/trading/slippage_protection.go:747: testUniswapV3Interface 0.0% github.com/fraktal/mev-beta/pkg/trading/slippage_protection.go:760: testUniswapV2Interface 0.0% github.com/fraktal/mev-beta/pkg/trading/slippage_protection.go:773: testCurveInterface 0.0% github.com/fraktal/mev-beta/pkg/trading/slippage_protection.go:786: assessMarketConditions 0.0% github.com/fraktal/mev-beta/pkg/trading/slippage_protection.go:813: calculateRecentVolatility 0.0% github.com/fraktal/mev-beta/pkg/trading/slippage_protection.go:828: getTokenVolatilityFactor 0.0% github.com/fraktal/mev-beta/pkg/trading/slippage_protection.go:845: calculateTokenCorrelation 0.0% github.com/fraktal/mev-beta/pkg/trading/slippage_protection.go:873: getTimeBasedVolatilityMultiplier 0.0% github.com/fraktal/mev-beta/pkg/transport/benchmarks.go:77: NewBenchmarkSuite 0.0% github.com/fraktal/mev-beta/pkg/transport/benchmarks.go:96: SetConfig 0.0% github.com/fraktal/mev-beta/pkg/transport/benchmarks.go:103: RunAll 0.0% github.com/fraktal/mev-beta/pkg/transport/benchmarks.go:137: RunThroughputBenchmark 0.0% github.com/fraktal/mev-beta/pkg/transport/benchmarks.go:142: RunLatencyBenchmark 0.0% github.com/fraktal/mev-beta/pkg/transport/benchmarks.go:147: RunScalabilityBenchmark 0.0% github.com/fraktal/mev-beta/pkg/transport/benchmarks.go:162: GetResults 0.0% github.com/fraktal/mev-beta/pkg/transport/benchmarks.go:172: GetMetrics 0.0% github.com/fraktal/mev-beta/pkg/transport/benchmarks.go:179: GetBestPerformingTransport 0.0% github.com/fraktal/mev-beta/pkg/transport/benchmarks.go:187: runSingleBenchmark 0.0% github.com/fraktal/mev-beta/pkg/transport/benchmarks.go:284: warmup 0.0% github.com/fraktal/mev-beta/pkg/transport/benchmarks.go:300: senderWorker 0.0% github.com/fraktal/mev-beta/pkg/transport/benchmarks.go:323: monitorSystemResources 0.0% github.com/fraktal/mev-beta/pkg/transport/benchmarks.go:359: updateBestMetrics 0.0% github.com/fraktal/mev-beta/pkg/transport/benchmarks.go:372: AddLatency 0.0% github.com/fraktal/mev-beta/pkg/transport/benchmarks.go:378: GetPercentile 0.0% github.com/fraktal/mev-beta/pkg/transport/benchmarks.go:409: GenerateReport 0.0% github.com/fraktal/mev-beta/pkg/transport/benchmarks.go:485: generateSummary 0.0% github.com/fraktal/mev-beta/pkg/transport/benchmarks.go:498: calculateTransportRankings 0.0% github.com/fraktal/mev-beta/pkg/transport/benchmarks.go:546: generateAnalysis 0.0% github.com/fraktal/mev-beta/pkg/transport/benchmarks.go:554: analyzeScalability 0.0% github.com/fraktal/mev-beta/pkg/transport/benchmarks.go:611: identifyBottlenecks 0.0% github.com/fraktal/mev-beta/pkg/transport/benchmarks.go:638: generateRecommendations 0.0% github.com/fraktal/mev-beta/pkg/transport/dlq.go:94: NewDeadLetterQueue 0.0% github.com/fraktal/mev-beta/pkg/transport/dlq.go:146: AddMessage 0.0% github.com/fraktal/mev-beta/pkg/transport/dlq.go:151: AddMessageWithReason 0.0% github.com/fraktal/mev-beta/pkg/transport/dlq.go:201: GetMessages 0.0% github.com/fraktal/mev-beta/pkg/transport/dlq.go:217: GetAllMessages 0.0% github.com/fraktal/mev-beta/pkg/transport/dlq.go:230: ReprocessMessage 0.0% github.com/fraktal/mev-beta/pkg/transport/dlq.go:289: PurgeMessages 0.0% github.com/fraktal/mev-beta/pkg/transport/dlq.go:304: PurgeAllMessages 0.0% github.com/fraktal/mev-beta/pkg/transport/dlq.go:316: GetMessageCount 0.0% github.com/fraktal/mev-beta/pkg/transport/dlq.go:323: GetMetrics 0.0% github.com/fraktal/mev-beta/pkg/transport/dlq.go:330: SetReprocessor 0.0% github.com/fraktal/mev-beta/pkg/transport/dlq.go:337: Cleanup 0.0% github.com/fraktal/mev-beta/pkg/transport/dlq.go:369: Stop 0.0% github.com/fraktal/mev-beta/pkg/transport/dlq.go:381: getTotalMessageCount 0.0% github.com/fraktal/mev-beta/pkg/transport/dlq.go:389: removeOldestMessage 0.0% github.com/fraktal/mev-beta/pkg/transport/dlq.go:410: removeMessageByIndex 0.0% github.com/fraktal/mev-beta/pkg/transport/dlq.go:419: isPermanentFailure 0.0% github.com/fraktal/mev-beta/pkg/transport/dlq.go:435: calculateRetryDelay 0.0% github.com/fraktal/mev-beta/pkg/transport/dlq.go:460: attemptReprocess 0.0% github.com/fraktal/mev-beta/pkg/transport/dlq.go:472: updateOldestMessage 0.0% github.com/fraktal/mev-beta/pkg/transport/dlq.go:486: startCleanupRoutine 0.0% github.com/fraktal/mev-beta/pkg/transport/dlq.go:501: startReprocessRoutine 0.0% github.com/fraktal/mev-beta/pkg/transport/dlq.go:518: processRetryableMessages 0.0% github.com/fraktal/mev-beta/pkg/transport/dlq.go:542: getRetryableMessages 0.0% github.com/fraktal/mev-beta/pkg/transport/dlq.go:558: NewDefaultMessageReprocessor 0.0% github.com/fraktal/mev-beta/pkg/transport/dlq.go:564: Reprocess 0.0% github.com/fraktal/mev-beta/pkg/transport/dlq.go:572: CanReprocess 0.0% github.com/fraktal/mev-beta/pkg/transport/dlq.go:576: ShouldRetry 0.0% github.com/fraktal/mev-beta/pkg/transport/dlq.go:582: pow 0.0% github.com/fraktal/mev-beta/pkg/transport/failover.go:103: NewFailoverManager 0.0% github.com/fraktal/mev-beta/pkg/transport/failover.go:128: RegisterTransport 0.0% github.com/fraktal/mev-beta/pkg/transport/failover.go:155: UnregisterTransport 0.0% github.com/fraktal/mev-beta/pkg/transport/failover.go:182: GetActiveTransport 0.0% github.com/fraktal/mev-beta/pkg/transport/failover.go:210: Send 0.0% github.com/fraktal/mev-beta/pkg/transport/failover.go:223: Receive 0.0% github.com/fraktal/mev-beta/pkg/transport/failover.go:233: ForceFailover 0.0% github.com/fraktal/mev-beta/pkg/transport/failover.go:250: GetTransportStatus 0.0% github.com/fraktal/mev-beta/pkg/transport/failover.go:262: GetMetrics 0.0% github.com/fraktal/mev-beta/pkg/transport/failover.go:269: GetNotifications 0.0% github.com/fraktal/mev-beta/pkg/transport/failover.go:274: SetHealthChecker 0.0% github.com/fraktal/mev-beta/pkg/transport/failover.go:281: Stop 0.0% github.com/fraktal/mev-beta/pkg/transport/failover.go:289: healthCheckLoop 0.0% github.com/fraktal/mev-beta/pkg/transport/failover.go:303: failoverMonitorLoop 0.0% github.com/fraktal/mev-beta/pkg/transport/failover.go:326: performHealthChecks 0.0% github.com/fraktal/mev-beta/pkg/transport/failover.go:364: shouldPerformFailover 0.0% github.com/fraktal/mev-beta/pkg/transport/failover.go:376: shouldPerformFailback 0.0% github.com/fraktal/mev-beta/pkg/transport/failover.go:399: performFailover 0.0% github.com/fraktal/mev-beta/pkg/transport/failover.go:422: performFailback 0.0% github.com/fraktal/mev-beta/pkg/transport/failover.go:449: switchPrimary 0.0% github.com/fraktal/mev-beta/pkg/transport/failover.go:497: selectNewPrimary 0.0% github.com/fraktal/mev-beta/pkg/transport/failover.go:511: notifyEvent 0.0% github.com/fraktal/mev-beta/pkg/transport/failover.go:522: NewDefaultHealthChecker 0.0% github.com/fraktal/mev-beta/pkg/transport/failover.go:526: CheckHealth 0.0% github.com/fraktal/mev-beta/pkg/transport/failover.go:531: GetHealthScore 0.0% github.com/fraktal/mev-beta/pkg/transport/failover.go:566: NewCircuitBreaker 0.0% github.com/fraktal/mev-beta/pkg/transport/failover.go:573: Execute 0.0% github.com/fraktal/mev-beta/pkg/transport/failover.go:594: onFailure 0.0% github.com/fraktal/mev-beta/pkg/transport/failover.go:603: onSuccess 0.0% github.com/fraktal/mev-beta/pkg/transport/failover.go:608: GetState 0.0% github.com/fraktal/mev-beta/pkg/transport/memory_transport.go:19: NewMemoryTransport 0.0% github.com/fraktal/mev-beta/pkg/transport/memory_transport.go:27: Connect 0.0% github.com/fraktal/mev-beta/pkg/transport/memory_transport.go:41: Disconnect 0.0% github.com/fraktal/mev-beta/pkg/transport/memory_transport.go:61: Send 0.0% github.com/fraktal/mev-beta/pkg/transport/memory_transport.go:101: Receive 0.0% github.com/fraktal/mev-beta/pkg/transport/memory_transport.go:150: Health 0.0% github.com/fraktal/mev-beta/pkg/transport/memory_transport.go:168: GetMetrics 0.0% github.com/fraktal/mev-beta/pkg/transport/memory_transport.go:186: updateSendMetrics 0.0% github.com/fraktal/mev-beta/pkg/transport/memory_transport.go:201: updateReceiveMetrics 0.0% github.com/fraktal/mev-beta/pkg/transport/memory_transport.go:216: GetChannelForTopic 0.0% github.com/fraktal/mev-beta/pkg/transport/memory_transport.go:225: GetTopicCount 0.0% github.com/fraktal/mev-beta/pkg/transport/message_bus.go:331: WithQueueSize 0.0% github.com/fraktal/mev-beta/pkg/transport/message_bus.go:337: WithBatchProcessing 0.0% github.com/fraktal/mev-beta/pkg/transport/message_bus.go:344: WithDLQ 0.0% github.com/fraktal/mev-beta/pkg/transport/message_bus.go:350: WithRetry 0.0% github.com/fraktal/mev-beta/pkg/transport/message_bus.go:356: WithPersistence 0.0% github.com/fraktal/mev-beta/pkg/transport/message_bus.go:363: NewUniversalMessageBus 0.0% github.com/fraktal/mev-beta/pkg/transport/message_bus.go:380: NewMessageRouter 0.0% github.com/fraktal/mev-beta/pkg/transport/message_bus.go:391: GenerateMessageID 0.0% github.com/fraktal/mev-beta/pkg/transport/message_bus.go:396: NewMessage 0.0% github.com/fraktal/mev-beta/pkg/transport/message_bus_impl.go:10: Publish 0.0% github.com/fraktal/mev-beta/pkg/transport/message_bus_impl.go:68: Subscribe 0.0% github.com/fraktal/mev-beta/pkg/transport/message_bus_impl.go:111: Unsubscribe 0.0% github.com/fraktal/mev-beta/pkg/transport/message_bus_impl.go:137: Request 0.0% github.com/fraktal/mev-beta/pkg/transport/message_bus_impl.go:183: Reply 0.0% github.com/fraktal/mev-beta/pkg/transport/message_bus_impl.go:198: CreateTopic 0.0% github.com/fraktal/mev-beta/pkg/transport/message_bus_impl.go:222: DeleteTopic 0.0% github.com/fraktal/mev-beta/pkg/transport/message_bus_impl.go:243: ListTopics 0.0% github.com/fraktal/mev-beta/pkg/transport/message_bus_impl.go:256: GetTopicInfo 0.0% github.com/fraktal/mev-beta/pkg/transport/message_bus_impl.go:286: QueueMessage 0.0% github.com/fraktal/mev-beta/pkg/transport/message_bus_impl.go:291: DequeueMessage 0.0% github.com/fraktal/mev-beta/pkg/transport/message_bus_impl.go:324: PeekMessage 0.0% github.com/fraktal/mev-beta/pkg/transport/message_bus_impl.go:346: Start 0.0% github.com/fraktal/mev-beta/pkg/transport/message_bus_impl.go:375: Stop 0.0% github.com/fraktal/mev-beta/pkg/transport/message_bus_impl.go:400: Health 0.0% github.com/fraktal/mev-beta/pkg/transport/message_bus_impl.go:434: GetMetrics 0.0% github.com/fraktal/mev-beta/pkg/transport/message_bus_impl.go:453: GetSubscriptions 0.0% github.com/fraktal/mev-beta/pkg/transport/message_bus_impl.go:466: GetActiveConnections 0.0% github.com/fraktal/mev-beta/pkg/transport/message_bus_impl.go:477: validateMessage 0.0% github.com/fraktal/mev-beta/pkg/transport/message_bus_impl.go:493: addMessageToTopic 0.0% github.com/fraktal/mev-beta/pkg/transport/message_bus_impl.go:528: addSubscriberToTopic 0.0% github.com/fraktal/mev-beta/pkg/transport/message_bus_impl.go:545: removeSubscriberFromTopic 0.0% github.com/fraktal/mev-beta/pkg/transport/message_bus_impl.go:565: deliverToSubscribers 0.0% github.com/fraktal/mev-beta/pkg/transport/message_bus_impl.go:615: applyRetentionPolicy 0.0% github.com/fraktal/mev-beta/pkg/transport/message_bus_impl.go:636: healthCheckLoop 0.0% github.com/fraktal/mev-beta/pkg/transport/message_bus_impl.go:650: cleanupLoop 0.0% github.com/fraktal/mev-beta/pkg/transport/message_bus_impl.go:664: metricsLoop 0.0% github.com/fraktal/mev-beta/pkg/transport/message_bus_impl.go:678: performHealthCheck 0.0% github.com/fraktal/mev-beta/pkg/transport/message_bus_impl.go:687: performCleanup 0.0% github.com/fraktal/mev-beta/pkg/transport/message_bus_impl.go:706: updateMetrics 0.0% github.com/fraktal/mev-beta/pkg/transport/message_bus_impl.go:723: getMetricInt64 0.0% github.com/fraktal/mev-beta/pkg/transport/message_bus_impl.go:730: getMetricFloat64 0.0% github.com/fraktal/mev-beta/pkg/transport/message_bus_impl.go:737: getMetricDuration 0.0% github.com/fraktal/mev-beta/pkg/transport/persistence.go:59: NewFilePersistenceLayer 0.0% github.com/fraktal/mev-beta/pkg/transport/persistence.go:69: SetMaxFileSize 0.0% github.com/fraktal/mev-beta/pkg/transport/persistence.go:76: SetMaxFiles 0.0% github.com/fraktal/mev-beta/pkg/transport/persistence.go:83: EnableCompression 0.0% github.com/fraktal/mev-beta/pkg/transport/persistence.go:90: SetEncryption 0.0% github.com/fraktal/mev-beta/pkg/transport/persistence.go:97: Store 0.0% github.com/fraktal/mev-beta/pkg/transport/persistence.go:167: Retrieve 0.0% github.com/fraktal/mev-beta/pkg/transport/persistence.go:198: Delete 0.0% github.com/fraktal/mev-beta/pkg/transport/persistence.go:225: List 0.0% github.com/fraktal/mev-beta/pkg/transport/persistence.go:272: Cleanup 0.0% github.com/fraktal/mev-beta/pkg/transport/persistence.go:311: GetMetrics 0.0% github.com/fraktal/mev-beta/pkg/transport/persistence.go:334: getWritableFile 0.0% github.com/fraktal/mev-beta/pkg/transport/persistence.go:358: getTopicDirectories 0.0% github.com/fraktal/mev-beta/pkg/transport/persistence.go:374: getTopicFiles 0.0% github.com/fraktal/mev-beta/pkg/transport/persistence.go:390: findMessageInFile 0.0% github.com/fraktal/mev-beta/pkg/transport/persistence.go:417: readMessagesFromFile 0.0% github.com/fraktal/mev-beta/pkg/transport/persistence.go:432: parseFileData 0.0% github.com/fraktal/mev-beta/pkg/transport/persistence.go:499: isDirectoryEmpty 0.0% github.com/fraktal/mev-beta/pkg/transport/persistence.go:507: encrypt 0.0% github.com/fraktal/mev-beta/pkg/transport/persistence.go:541: decrypt 0.0% github.com/fraktal/mev-beta/pkg/transport/persistence.go:575: compress 0.0% github.com/fraktal/mev-beta/pkg/transport/persistence.go:591: decompress 0.0% github.com/fraktal/mev-beta/pkg/transport/persistence.go:608: deleteMessageFromFile 0.0% github.com/fraktal/mev-beta/pkg/transport/persistence.go:640: rewriteFileWithMessages 0.0% github.com/fraktal/mev-beta/pkg/transport/persistence.go:715: NewInMemoryPersistenceLayer 0.0% github.com/fraktal/mev-beta/pkg/transport/persistence.go:723: Store 0.0% github.com/fraktal/mev-beta/pkg/transport/persistence.go:738: Retrieve 0.0% github.com/fraktal/mev-beta/pkg/transport/persistence.go:751: Delete 0.0% github.com/fraktal/mev-beta/pkg/transport/persistence.go:776: List 0.0% github.com/fraktal/mev-beta/pkg/transport/persistence.go:803: Cleanup 0.0% github.com/fraktal/mev-beta/pkg/transport/provider_manager.go:128: NewProviderManager 0.0% github.com/fraktal/mev-beta/pkg/transport/provider_manager.go:152: LoadProvidersConfig 0.0% github.com/fraktal/mev-beta/pkg/transport/provider_manager.go:175: validateConfig 0.0% github.com/fraktal/mev-beta/pkg/transport/provider_manager.go:196: initializeProviders 0.0% github.com/fraktal/mev-beta/pkg/transport/provider_manager.go:216: createProvider 0.0% github.com/fraktal/mev-beta/pkg/transport/provider_manager.go:260: GetHealthyProvider 0.0% github.com/fraktal/mev-beta/pkg/transport/provider_manager.go:281: getNextRoundRobin 0.0% github.com/fraktal/mev-beta/pkg/transport/provider_manager.go:298: getPriorityProvider 0.0% github.com/fraktal/mev-beta/pkg/transport/provider_manager.go:317: getWeightedProvider 0.0% github.com/fraktal/mev-beta/pkg/transport/provider_manager.go:324: isProviderUsable 0.0% github.com/fraktal/mev-beta/pkg/transport/provider_manager.go:342: GetHTTPClient 0.0% github.com/fraktal/mev-beta/pkg/transport/provider_manager.go:356: GetWSClient 0.0% github.com/fraktal/mev-beta/pkg/transport/provider_manager.go:370: GetRPCClient 0.0% github.com/fraktal/mev-beta/pkg/transport/provider_manager.go:388: startBackgroundTasks 0.0% github.com/fraktal/mev-beta/pkg/transport/provider_manager.go:400: healthCheckLoop 0.0% github.com/fraktal/mev-beta/pkg/transport/provider_manager.go:412: metricsLoop 0.0% github.com/fraktal/mev-beta/pkg/transport/provider_manager.go:424: performHealthChecks 0.0% github.com/fraktal/mev-beta/pkg/transport/provider_manager.go:431: checkProviderHealth 0.0% github.com/fraktal/mev-beta/pkg/transport/provider_manager.go:446: collectMetrics 0.0% github.com/fraktal/mev-beta/pkg/transport/provider_manager.go:452: Close 0.0% github.com/fraktal/mev-beta/pkg/transport/provider_manager.go:476: GetProviderStats 0.0% github.com/fraktal/mev-beta/pkg/transport/provider_pools.go:20: performProviderHealthCheckWithMetrics 0.0% github.com/fraktal/mev-beta/pkg/transport/provider_pools.go:48: performProviderHealthCheck 0.0% github.com/fraktal/mev-beta/pkg/transport/provider_pools.go:92: NewReadOnlyProviderPool 0.0% github.com/fraktal/mev-beta/pkg/transport/provider_pools.go:108: initializeProviders 0.0% github.com/fraktal/mev-beta/pkg/transport/provider_pools.go:133: createReadOnlyProvider 0.0% github.com/fraktal/mev-beta/pkg/transport/provider_pools.go:156: GetHTTPClient 0.0% github.com/fraktal/mev-beta/pkg/transport/provider_pools.go:173: GetWSClient 0.0% github.com/fraktal/mev-beta/pkg/transport/provider_pools.go:200: GetRPCClient 0.0% github.com/fraktal/mev-beta/pkg/transport/provider_pools.go:222: getHealthyProvider 0.0% github.com/fraktal/mev-beta/pkg/transport/provider_pools.go:240: getWebSocketPreferredProvider 0.0% github.com/fraktal/mev-beta/pkg/transport/provider_pools.go:259: getRoundRobinProvider 0.0% github.com/fraktal/mev-beta/pkg/transport/provider_pools.go:276: getPriorityProvider 0.0% github.com/fraktal/mev-beta/pkg/transport/provider_pools.go:295: isProviderUsable 0.0% github.com/fraktal/mev-beta/pkg/transport/provider_pools.go:313: startHealthChecks 0.0% github.com/fraktal/mev-beta/pkg/transport/provider_pools.go:324: healthCheckLoop 0.0% github.com/fraktal/mev-beta/pkg/transport/provider_pools.go:336: performHealthChecks 0.0% github.com/fraktal/mev-beta/pkg/transport/provider_pools.go:343: checkProviderHealth 0.0% github.com/fraktal/mev-beta/pkg/transport/provider_pools.go:358: GetStats 0.0% github.com/fraktal/mev-beta/pkg/transport/provider_pools.go:402: Close 0.0% github.com/fraktal/mev-beta/pkg/transport/provider_pools.go:434: NewExecutionProviderPool 0.0% github.com/fraktal/mev-beta/pkg/transport/provider_pools.go:450: initializeProviders 0.0% github.com/fraktal/mev-beta/pkg/transport/provider_pools.go:475: createExecutionProvider 0.0% github.com/fraktal/mev-beta/pkg/transport/provider_pools.go:490: GetHTTPClient 0.0% github.com/fraktal/mev-beta/pkg/transport/provider_pools.go:507: GetWSClient 0.0% github.com/fraktal/mev-beta/pkg/transport/provider_pools.go:524: GetRPCClient 0.0% github.com/fraktal/mev-beta/pkg/transport/provider_pools.go:546: getHealthyProvider 0.0% github.com/fraktal/mev-beta/pkg/transport/provider_pools.go:564: getReliabilityFirstProvider 0.0% github.com/fraktal/mev-beta/pkg/transport/provider_pools.go:589: calculateReliabilityScore 0.0% github.com/fraktal/mev-beta/pkg/transport/provider_pools.go:620: getRoundRobinProvider 0.0% github.com/fraktal/mev-beta/pkg/transport/provider_pools.go:637: getPriorityProvider 0.0% github.com/fraktal/mev-beta/pkg/transport/provider_pools.go:656: isProviderUsable 0.0% github.com/fraktal/mev-beta/pkg/transport/provider_pools.go:674: startHealthChecks 0.0% github.com/fraktal/mev-beta/pkg/transport/provider_pools.go:685: healthCheckLoop 0.0% github.com/fraktal/mev-beta/pkg/transport/provider_pools.go:697: performHealthChecks 0.0% github.com/fraktal/mev-beta/pkg/transport/provider_pools.go:704: checkProviderHealth 0.0% github.com/fraktal/mev-beta/pkg/transport/provider_pools.go:716: GetStats 0.0% github.com/fraktal/mev-beta/pkg/transport/provider_pools.go:765: Close 0.0% github.com/fraktal/mev-beta/pkg/transport/provider_pools.go:801: NewTestingProviderPool 0.0% github.com/fraktal/mev-beta/pkg/transport/provider_pools.go:818: initializeProviders 0.0% github.com/fraktal/mev-beta/pkg/transport/provider_pools.go:843: createTestingProvider 0.0% github.com/fraktal/mev-beta/pkg/transport/provider_pools.go:867: startAnvilInstance 0.0% github.com/fraktal/mev-beta/pkg/transport/provider_pools.go:917: stopAnvilInstance 0.0% github.com/fraktal/mev-beta/pkg/transport/provider_pools.go:941: monitorAnvilProcess 0.0% github.com/fraktal/mev-beta/pkg/transport/provider_pools.go:958: GetHTTPClient 0.0% github.com/fraktal/mev-beta/pkg/transport/provider_pools.go:975: GetWSClient 0.0% github.com/fraktal/mev-beta/pkg/transport/provider_pools.go:992: GetRPCClient 0.0% github.com/fraktal/mev-beta/pkg/transport/provider_pools.go:1014: getHealthyProvider 0.0% github.com/fraktal/mev-beta/pkg/transport/provider_pools.go:1032: getAnvilPreferredProvider 0.0% github.com/fraktal/mev-beta/pkg/transport/provider_pools.go:1051: getRoundRobinProvider 0.0% github.com/fraktal/mev-beta/pkg/transport/provider_pools.go:1068: getPriorityProvider 0.0% github.com/fraktal/mev-beta/pkg/transport/provider_pools.go:1087: isProviderUsable 0.0% github.com/fraktal/mev-beta/pkg/transport/provider_pools.go:1112: startHealthChecks 0.0% github.com/fraktal/mev-beta/pkg/transport/provider_pools.go:1123: healthCheckLoop 0.0% github.com/fraktal/mev-beta/pkg/transport/provider_pools.go:1135: performHealthChecks 0.0% github.com/fraktal/mev-beta/pkg/transport/provider_pools.go:1142: checkProviderHealth 0.0% github.com/fraktal/mev-beta/pkg/transport/provider_pools.go:1157: GetStats 0.0% github.com/fraktal/mev-beta/pkg/transport/provider_pools.go:1221: CreateSnapshot 0.0% github.com/fraktal/mev-beta/pkg/transport/provider_pools.go:1237: RevertToSnapshot 0.0% github.com/fraktal/mev-beta/pkg/transport/provider_pools.go:1257: Close 0.0% github.com/fraktal/mev-beta/pkg/transport/router.go:13: cryptoRandInt 0.0% github.com/fraktal/mev-beta/pkg/transport/router.go:26: cryptoRandFloat 0.0% github.com/fraktal/mev-beta/pkg/transport/router.go:58: RouteMessage 0.0% github.com/fraktal/mev-beta/pkg/transport/router.go:98: AddRule 0.0% github.com/fraktal/mev-beta/pkg/transport/router.go:113: RemoveRule 0.0% github.com/fraktal/mev-beta/pkg/transport/router.go:127: UpdateRule 0.0% github.com/fraktal/mev-beta/pkg/transport/router.go:142: GetRules 0.0% github.com/fraktal/mev-beta/pkg/transport/router.go:152: EnableRule 0.0% github.com/fraktal/mev-beta/pkg/transport/router.go:159: DisableRule 0.0% github.com/fraktal/mev-beta/pkg/transport/router.go:166: SetFallbackTransport 0.0% github.com/fraktal/mev-beta/pkg/transport/router.go:173: SetLoadBalancer 0.0% github.com/fraktal/mev-beta/pkg/transport/router.go:181: findMatchingRules 0.0% github.com/fraktal/mev-beta/pkg/transport/router.go:193: sortRulesByPriority 0.0% github.com/fraktal/mev-beta/pkg/transport/router.go:199: updateRuleUsage 0.0% github.com/fraktal/mev-beta/pkg/transport/router.go:209: getHealthyTransports 0.0% github.com/fraktal/mev-beta/pkg/transport/router.go:229: NewRoundRobinLoadBalancer 0.0% github.com/fraktal/mev-beta/pkg/transport/router.go:233: SelectTransport 0.0% github.com/fraktal/mev-beta/pkg/transport/router.go:246: UpdateStats 0.0% github.com/fraktal/mev-beta/pkg/transport/router.go:264: NewWeightedLoadBalancer 0.0% github.com/fraktal/mev-beta/pkg/transport/router.go:270: SelectTransport 0.0% github.com/fraktal/mev-beta/pkg/transport/router.go:318: UpdateStats 0.0% github.com/fraktal/mev-beta/pkg/transport/router.go:342: calculateWeight 0.0% github.com/fraktal/mev-beta/pkg/transport/router.go:387: NewLeastLatencyLoadBalancer 0.0% github.com/fraktal/mev-beta/pkg/transport/router.go:393: SelectTransport 0.0% github.com/fraktal/mev-beta/pkg/transport/router.go:415: UpdateStats 0.0% github.com/fraktal/mev-beta/pkg/transport/router.go:443: getAverageLatency 0.0% github.com/fraktal/mev-beta/pkg/transport/router.go:460: CreateTopicRule 0.0% github.com/fraktal/mev-beta/pkg/transport/router.go:470: CreateTopicPatternRule 0.0% github.com/fraktal/mev-beta/pkg/transport/router.go:486: CreatePriorityRule 0.0% github.com/fraktal/mev-beta/pkg/transport/router.go:496: CreateTypeRule 0.0% github.com/fraktal/mev-beta/pkg/transport/router.go:506: CreateSourceRule 0.0% github.com/fraktal/mev-beta/pkg/transport/serialization.go:92: NewSerializationLayer 0.0% github.com/fraktal/mev-beta/pkg/transport/serialization.go:107: RegisterSerializer 0.0% github.com/fraktal/mev-beta/pkg/transport/serialization.go:114: SetDefaultFormat 0.0% github.com/fraktal/mev-beta/pkg/transport/serialization.go:121: SetCompressor 0.0% github.com/fraktal/mev-beta/pkg/transport/serialization.go:128: SetEncryptor 0.0% github.com/fraktal/mev-beta/pkg/transport/serialization.go:135: SetValidator 0.0% github.com/fraktal/mev-beta/pkg/transport/serialization.go:142: Serialize 0.0% github.com/fraktal/mev-beta/pkg/transport/serialization.go:205: Deserialize 0.0% github.com/fraktal/mev-beta/pkg/transport/serialization.go:265: GetSupportedFormats 0.0% github.com/fraktal/mev-beta/pkg/transport/serialization.go:282: NewJSONSerializer 0.0% github.com/fraktal/mev-beta/pkg/transport/serialization.go:294: SetConfig 0.0% github.com/fraktal/mev-beta/pkg/transport/serialization.go:300: Serialize 0.0% github.com/fraktal/mev-beta/pkg/transport/serialization.go:316: Deserialize 0.0% github.com/fraktal/mev-beta/pkg/transport/serialization.go:325: GetFormat 0.0% github.com/fraktal/mev-beta/pkg/transport/serialization.go:330: GetConfig 0.0% github.com/fraktal/mev-beta/pkg/transport/serialization.go:340: NewDefaultCompressor 0.0% github.com/fraktal/mev-beta/pkg/transport/serialization.go:350: Compress 0.0% github.com/fraktal/mev-beta/pkg/transport/serialization.go:375: Decompress 0.0% github.com/fraktal/mev-beta/pkg/transport/serialization.go:400: GetSupportedAlgorithms 0.0% github.com/fraktal/mev-beta/pkg/transport/serialization.go:410: NewDefaultValidator 0.0% github.com/fraktal/mev-beta/pkg/transport/serialization.go:417: SetStrictMode 0.0% github.com/fraktal/mev-beta/pkg/transport/serialization.go:422: Validate 0.0% github.com/fraktal/mev-beta/pkg/transport/serialization.go:457: GenerateChecksum 0.0% github.com/fraktal/mev-beta/pkg/transport/serialization.go:468: VerifyChecksum 0.0% github.com/fraktal/mev-beta/pkg/transport/serialization.go:478: NewNoOpEncryptor 0.0% github.com/fraktal/mev-beta/pkg/transport/serialization.go:483: SetEnabled 0.0% github.com/fraktal/mev-beta/pkg/transport/serialization.go:488: Encrypt 0.0% github.com/fraktal/mev-beta/pkg/transport/serialization.go:493: Decrypt 0.0% github.com/fraktal/mev-beta/pkg/transport/serialization.go:498: IsEnabled 0.0% github.com/fraktal/mev-beta/pkg/transport/serialization.go:519: NewMetricsCollector 0.0% github.com/fraktal/mev-beta/pkg/transport/serialization.go:524: RecordSerialization 0.0% github.com/fraktal/mev-beta/pkg/transport/serialization.go:542: RecordDeserialization 0.0% github.com/fraktal/mev-beta/pkg/transport/serialization.go:549: RecordError 0.0% github.com/fraktal/mev-beta/pkg/transport/serialization.go:556: IncrementCounter 0.0% github.com/fraktal/mev-beta/pkg/transport/serialization.go:564: RecordLatency 0.0% github.com/fraktal/mev-beta/pkg/transport/serialization.go:572: RecordEvent 0.0% github.com/fraktal/mev-beta/pkg/transport/serialization.go:579: RecordGauge 0.0% github.com/fraktal/mev-beta/pkg/transport/serialization.go:586: GetAll 0.0% github.com/fraktal/mev-beta/pkg/transport/serialization.go:600: Get 0.0% github.com/fraktal/mev-beta/pkg/transport/serialization.go:618: GetMetrics 0.0% github.com/fraktal/mev-beta/pkg/transport/serialization.go:625: Reset 0.0% github.com/fraktal/mev-beta/pkg/transport/tcp_transport.go:31: NewTCPTransport 0.0% github.com/fraktal/mev-beta/pkg/transport/tcp_transport.go:54: SetTLSConfig 0.0% github.com/fraktal/mev-beta/pkg/transport/tcp_transport.go:59: SetRetryConfig 0.0% github.com/fraktal/mev-beta/pkg/transport/tcp_transport.go:64: Connect 0.0% github.com/fraktal/mev-beta/pkg/transport/tcp_transport.go:80: Disconnect 0.0% github.com/fraktal/mev-beta/pkg/transport/tcp_transport.go:108: Send 0.0% github.com/fraktal/mev-beta/pkg/transport/tcp_transport.go:160: Receive 0.0% github.com/fraktal/mev-beta/pkg/transport/tcp_transport.go:172: Health 0.0% github.com/fraktal/mev-beta/pkg/transport/tcp_transport.go:197: GetMetrics 0.0% github.com/fraktal/mev-beta/pkg/transport/tcp_transport.go:214: startServer 0.0% github.com/fraktal/mev-beta/pkg/transport/tcp_transport.go:239: connectToServer 0.0% github.com/fraktal/mev-beta/pkg/transport/tcp_transport.go:291: acceptConnections 0.0% github.com/fraktal/mev-beta/pkg/transport/tcp_transport.go:318: handleConnection 0.0% github.com/fraktal/mev-beta/pkg/transport/tcp_transport.go:367: sendWithRetry 0.0% github.com/fraktal/mev-beta/pkg/transport/tcp_transport.go:396: removeConnection 0.0% github.com/fraktal/mev-beta/pkg/transport/tcp_transport.go:407: updateSendMetrics 0.0% github.com/fraktal/mev-beta/pkg/transport/tcp_transport.go:422: updateReceiveMetrics 0.0% github.com/fraktal/mev-beta/pkg/transport/tcp_transport.go:437: GetAddress 0.0% github.com/fraktal/mev-beta/pkg/transport/tcp_transport.go:442: GetConnectionCount 0.0% github.com/fraktal/mev-beta/pkg/transport/tcp_transport.go:449: IsSecure 0.0% github.com/fraktal/mev-beta/pkg/transport/unified_provider_manager.go:30: NewUnifiedProviderManager 0.0% github.com/fraktal/mev-beta/pkg/transport/unified_provider_manager.go:57: initializePools 0.0% github.com/fraktal/mev-beta/pkg/transport/unified_provider_manager.go:88: GetPoolForMode 0.0% github.com/fraktal/mev-beta/pkg/transport/unified_provider_manager.go:111: GetReadOnlyHTTPClient 0.0% github.com/fraktal/mev-beta/pkg/transport/unified_provider_manager.go:119: GetReadOnlyWSClient 0.0% github.com/fraktal/mev-beta/pkg/transport/unified_provider_manager.go:127: GetExecutionHTTPClient 0.0% github.com/fraktal/mev-beta/pkg/transport/unified_provider_manager.go:135: GetTestingHTTPClient 0.0% github.com/fraktal/mev-beta/pkg/transport/unified_provider_manager.go:143: GetAllStats 0.0% github.com/fraktal/mev-beta/pkg/transport/unified_provider_manager.go:174: CreateTestingSnapshot 0.0% github.com/fraktal/mev-beta/pkg/transport/unified_provider_manager.go:182: RevertTestingSnapshot 0.0% github.com/fraktal/mev-beta/pkg/transport/unified_provider_manager.go:190: Close 0.0% github.com/fraktal/mev-beta/pkg/transport/unified_provider_manager.go:219: LoadProvidersConfigFromFile 0.0% github.com/fraktal/mev-beta/pkg/transport/unified_provider_manager.go:242: validateProvidersConfig 0.0% github.com/fraktal/mev-beta/pkg/transport/unified_provider_manager.go:288: GetProviderByName 0.0% github.com/fraktal/mev-beta/pkg/transport/unified_provider_manager.go:294: GetProvidersByType 0.0% github.com/fraktal/mev-beta/pkg/transport/unified_provider_manager.go:305: GetProvidersByFeature 0.0% github.com/fraktal/mev-beta/pkg/transport/unix_transport.go:28: NewUnixSocketTransport 0.0% github.com/fraktal/mev-beta/pkg/transport/unix_transport.go:43: Connect 0.0% github.com/fraktal/mev-beta/pkg/transport/unix_transport.go:59: Disconnect 0.0% github.com/fraktal/mev-beta/pkg/transport/unix_transport.go:89: Send 0.0% github.com/fraktal/mev-beta/pkg/transport/unix_transport.go:141: Receive 0.0% github.com/fraktal/mev-beta/pkg/transport/unix_transport.go:153: Health 0.0% github.com/fraktal/mev-beta/pkg/transport/unix_transport.go:175: GetMetrics 0.0% github.com/fraktal/mev-beta/pkg/transport/unix_transport.go:192: startServer 0.0% github.com/fraktal/mev-beta/pkg/transport/unix_transport.go:210: connectToServer 0.0% github.com/fraktal/mev-beta/pkg/transport/unix_transport.go:227: acceptConnections 0.0% github.com/fraktal/mev-beta/pkg/transport/unix_transport.go:254: handleConnection 0.0% github.com/fraktal/mev-beta/pkg/transport/unix_transport.go:303: sendToConnection 0.0% github.com/fraktal/mev-beta/pkg/transport/unix_transport.go:309: removeConnection 0.0% github.com/fraktal/mev-beta/pkg/transport/unix_transport.go:320: updateSendMetrics 0.0% github.com/fraktal/mev-beta/pkg/transport/unix_transport.go:335: updateReceiveMetrics 0.0% github.com/fraktal/mev-beta/pkg/transport/unix_transport.go:350: GetSocketPath 0.0% github.com/fraktal/mev-beta/pkg/transport/unix_transport.go:355: GetConnectionCount 0.0% github.com/fraktal/mev-beta/pkg/transport/utils.go:10: ExtractMessage 0.0% github.com/fraktal/mev-beta/pkg/transport/websocket_transport.go:34: NewWebSocketTransport 0.0% github.com/fraktal/mev-beta/pkg/transport/websocket_transport.go:60: SetPingPongSettings 0.0% github.com/fraktal/mev-beta/pkg/transport/websocket_transport.go:66: Connect 0.0% github.com/fraktal/mev-beta/pkg/transport/websocket_transport.go:82: Disconnect 0.0% github.com/fraktal/mev-beta/pkg/transport/websocket_transport.go:112: Send 0.0% github.com/fraktal/mev-beta/pkg/transport/websocket_transport.go:160: Receive 0.0% github.com/fraktal/mev-beta/pkg/transport/websocket_transport.go:172: Health 0.0% github.com/fraktal/mev-beta/pkg/transport/websocket_transport.go:194: GetMetrics 0.0% github.com/fraktal/mev-beta/pkg/transport/websocket_transport.go:211: startServer 0.0% github.com/fraktal/mev-beta/pkg/transport/websocket_transport.go:251: connectToServer 0.0% github.com/fraktal/mev-beta/pkg/transport/websocket_transport.go:270: handleWebSocket 0.0% github.com/fraktal/mev-beta/pkg/transport/websocket_transport.go:287: handleConnection 0.0% github.com/fraktal/mev-beta/pkg/transport/websocket_transport.go:328: pingRoutine 0.0% github.com/fraktal/mev-beta/pkg/transport/websocket_transport.go:344: sendToConnection 0.0% github.com/fraktal/mev-beta/pkg/transport/websocket_transport.go:349: removeConnection 0.0% github.com/fraktal/mev-beta/pkg/transport/websocket_transport.go:360: updateSendMetrics 0.0% github.com/fraktal/mev-beta/pkg/transport/websocket_transport.go:375: updateReceiveMetrics 0.0% github.com/fraktal/mev-beta/pkg/transport/websocket_transport.go:390: Broadcast 0.0% github.com/fraktal/mev-beta/pkg/transport/websocket_transport.go:399: GetURL 0.0% github.com/fraktal/mev-beta/pkg/transport/websocket_transport.go:404: GetConnectionCount 0.0% github.com/fraktal/mev-beta/pkg/transport/websocket_transport.go:411: SetAllowedOrigins 0.0% github.com/fraktal/mev-beta/pkg/uniswap/advanced_cached.go:10: SqrtPriceX96ToPriceAdvanced 80.0% github.com/fraktal/mev-beta/pkg/uniswap/advanced_cached.go:42: PriceToSqrtPriceX96Advanced 88.9% github.com/fraktal/mev-beta/pkg/uniswap/advanced_cached.go:68: TickToSqrtPriceX96Advanced 90.9% github.com/fraktal/mev-beta/pkg/uniswap/advanced_cached.go:97: SqrtPriceX96ToTickAdvanced 83.3% github.com/fraktal/mev-beta/pkg/uniswap/cached.go:7: SqrtPriceX96ToPriceCached 100.0% github.com/fraktal/mev-beta/pkg/uniswap/cached.go:27: PriceToSqrtPriceX96Cached 100.0% github.com/fraktal/mev-beta/pkg/uniswap/constants.go:22: InitConstants 100.0% github.com/fraktal/mev-beta/pkg/uniswap/constants.go:34: initConstants 100.0% github.com/fraktal/mev-beta/pkg/uniswap/constants.go:39: GetQ96 100.0% github.com/fraktal/mev-beta/pkg/uniswap/constants.go:45: GetQ192 100.0% github.com/fraktal/mev-beta/pkg/uniswap/constants.go:51: GetLnBase 100.0% github.com/fraktal/mev-beta/pkg/uniswap/constants.go:57: GetInvLnBase 100.0% github.com/fraktal/mev-beta/pkg/uniswap/constants.go:63: GetQ96Float 100.0% github.com/fraktal/mev-beta/pkg/uniswap/constants.go:69: GetQ192Float 100.0% github.com/fraktal/mev-beta/pkg/uniswap/contracts.go:82: NewUniswapV3Pool 0.0% github.com/fraktal/mev-beta/pkg/uniswap/contracts.go:98: GetPoolState 0.0% github.com/fraktal/mev-beta/pkg/uniswap/contracts.go:155: callSlot0 0.0% github.com/fraktal/mev-beta/pkg/uniswap/contracts.go:233: callLiquidity 0.0% github.com/fraktal/mev-beta/pkg/uniswap/contracts.go:262: callToken0 0.0% github.com/fraktal/mev-beta/pkg/uniswap/contracts.go:267: callToken1 0.0% github.com/fraktal/mev-beta/pkg/uniswap/contracts.go:272: callToken 0.0% github.com/fraktal/mev-beta/pkg/uniswap/contracts.go:301: callFee 0.0% github.com/fraktal/mev-beta/pkg/uniswap/contracts.go:330: CalculatePoolAddress 0.0% github.com/fraktal/mev-beta/pkg/uniswap/contracts.go:353: IsValidPool 0.0% github.com/fraktal/mev-beta/pkg/uniswap/contracts.go:370: ParseABI 0.0% github.com/fraktal/mev-beta/pkg/uniswap/contracts.go:380: NewUniswapV3Pricing 0.0% github.com/fraktal/mev-beta/pkg/uniswap/contracts.go:387: GetPrice 0.0% github.com/fraktal/mev-beta/pkg/uniswap/contracts.go:451: SqrtPriceX96ToPrice 0.0% github.com/fraktal/mev-beta/pkg/uniswap/contracts.go:470: CalculateAmountOut 0.0% github.com/fraktal/mev-beta/pkg/uniswap/lookup/optimized.go:9: SqrtPriceX96ToPriceWithLookup 0.0% github.com/fraktal/mev-beta/pkg/uniswap/lookup/optimized.go:28: PriceToSqrtPriceX96WithLookup 0.0% github.com/fraktal/mev-beta/pkg/uniswap/lookup/optimized.go:47: TickToSqrtPriceX96WithLookup 0.0% github.com/fraktal/mev-beta/pkg/uniswap/lookup/tables.go:21: initSqrt10001Table 0.0% github.com/fraktal/mev-beta/pkg/uniswap/lookup/tables.go:43: initQTables 0.0% github.com/fraktal/mev-beta/pkg/uniswap/lookup/tables.go:54: GetSqrt10001 0.0% github.com/fraktal/mev-beta/pkg/uniswap/lookup/tables.go:78: GetQ96 0.0% github.com/fraktal/mev-beta/pkg/uniswap/lookup/tables.go:84: GetQ192 0.0% github.com/fraktal/mev-beta/pkg/uniswap/lookup/tables.go:90: pow 0.0% github.com/fraktal/mev-beta/pkg/uniswap/lookup/tables.go:106: powInt 0.0% github.com/fraktal/mev-beta/pkg/uniswap/optimized.go:13: SqrtPriceX96ToPriceOptimized 100.0% github.com/fraktal/mev-beta/pkg/uniswap/optimized.go:32: PriceToSqrtPriceX96Optimized 100.0% github.com/fraktal/mev-beta/pkg/uniswap/optimized.go:52: sqrtPriceX96Big 100.0% github.com/fraktal/mev-beta/pkg/uniswap/optimized.go:58: TickToSqrtPriceX96Optimized 100.0% github.com/fraktal/mev-beta/pkg/uniswap/optimized_cached.go:8: SqrtPriceX96ToPriceOptimizedCached 100.0% github.com/fraktal/mev-beta/pkg/uniswap/optimized_cached.go:14: PriceToSqrtPriceX96OptimizedCached 100.0% github.com/fraktal/mev-beta/pkg/uniswap/optimized_cached.go:20: TickToSqrtPriceX96OptimizedCached 100.0% github.com/fraktal/mev-beta/pkg/uniswap/optimized_cached.go:26: SqrtPriceX96ToTickOptimizedCached 100.0% github.com/fraktal/mev-beta/pkg/uniswap/pricing.go:22: SqrtPriceX96ToPrice 88.9% github.com/fraktal/mev-beta/pkg/uniswap/pricing.go:49: PriceToSqrtPriceX96 100.0% github.com/fraktal/mev-beta/pkg/uniswap/pricing.go:71: TickToSqrtPriceX96 100.0% github.com/fraktal/mev-beta/pkg/uniswap/pricing.go:98: SqrtPriceX96ToTick 90.0% github.com/fraktal/mev-beta/pkg/uniswap/pricing.go:129: GetTickAtSqrtPrice 100.0% github.com/fraktal/mev-beta/pkg/uniswap/pricing.go:139: GetNextTick 100.0% github.com/fraktal/mev-beta/pkg/uniswap/pricing.go:146: GetPreviousTick 100.0% github.com/fraktal/mev-beta/pkg/validation/input_validator.go:88: NewInputValidator 0.0% github.com/fraktal/mev-beta/pkg/validation/input_validator.go:114: ValidateTransaction 0.0% github.com/fraktal/mev-beta/pkg/validation/input_validator.go:168: ValidateSwapParams 0.0% github.com/fraktal/mev-beta/pkg/validation/input_validator.go:227: ValidateArbitrageParams 0.0% github.com/fraktal/mev-beta/pkg/validation/input_validator.go:297: ValidateAddress 0.0% github.com/fraktal/mev-beta/pkg/validation/input_validator.go:316: ValidateAmount 0.0% github.com/fraktal/mev-beta/pkg/validation/input_validator.go:339: ValidateSlippage 0.0% github.com/fraktal/mev-beta/pkg/validation/input_validator.go:358: validateBasicTransaction 0.0% github.com/fraktal/mev-beta/pkg/validation/input_validator.go:372: validateGas 0.0% github.com/fraktal/mev-beta/pkg/validation/input_validator.go:423: validateValue 0.0% github.com/fraktal/mev-beta/pkg/validation/input_validator.go:445: validateRecipient 0.0% github.com/fraktal/mev-beta/pkg/validation/input_validator.go:465: validateData 0.0% github.com/fraktal/mev-beta/pkg/validation/input_validator.go:492: validateFeeTier 0.0% github.com/fraktal/mev-beta/pkg/validation/input_validator.go:503: validateDeadline 0.0% github.com/fraktal/mev-beta/pkg/validation/input_validator.go:523: performSwapSecurityChecks 0.0% github.com/fraktal/mev-beta/pkg/validation/input_validator.go:547: calculateEstimatedCost 0.0% github.com/fraktal/mev-beta/pkg/validation/input_validator.go:569: finalizeValidation 0.0% github.com/fraktal/mev-beta/pkg/validation/input_validator.go:588: isKnownInvalidAddress 0.0% github.com/fraktal/mev-beta/pkg/validation/input_validator.go:598: isKnownProblematicTransaction 0.0% github.com/fraktal/mev-beta/pkg/validation/input_validator.go:608: hasSuspiciousPatterns 0.0% github.com/fraktal/mev-beta/pkg/validation/input_validator.go:626: getDefaultValidationConfig 0.0% github.com/fraktal/mev-beta/pkg/validation/input_validator.go:640: ValidateEthereumAddress 0.0% github.com/fraktal/mev-beta/pkg/validation/input_validator.go:648: ValidateTransactionHash 0.0% github.com/fraktal/mev-beta/pkg/validation/input_validator.go:656: ValidateBlockHash 0.0% github.com/fraktal/mev-beta/pkg/validation/input_validator.go:664: ValidateEvent 0.0% github.com/fraktal/mev-beta/pkg/validation/input_validator.go:684: validateEventMap 0.0% github.com/fraktal/mev-beta/pkg/validation/input_validator.go:727: validateEventStructure 0.0% github.com/fraktal/mev-beta/pkg/validation/input_validator.go:759: validateTimestamp 0.0% github.com/fraktal/mev-beta/pkg/validation/input_validator.go:787: validateAmount 0.0% github.com/fraktal/mev-beta/pkg/validation/input_validator.go:825: min 0.0% github.com/fraktal/mev-beta/pkg/validation/input_validator.go:833: ValidateHexData 0.0% github.com/fraktal/mev-beta/pkg/validation/input_validator.go:841: SanitizeInput 0.0% github.com/fraktal/mev-beta/pkg/validation/input_validator.go:855: ValidateHexString 0.0% github.com/fraktal/mev-beta/pkg/validation/input_validator.go:879: ValidateCommonAddress 0.0% github.com/fraktal/mev-beta/pkg/validation/input_validator.go:884: ValidateBigInt 0.0% github.com/fraktal/mev-beta/pkg/validation/input_validator.go:907: ValidateSlippageTolerance 0.0% github.com/fraktal/mev-beta/pkg/validation/input_validator.go:925: ValidateDeadline 0.0% github.com/fraktal/mev-beta/pkg/validation/pool_validator.go:59: NewPoolValidator 0.0% github.com/fraktal/mev-beta/pkg/validation/pool_validator.go:77: ValidatePool 0.0% github.com/fraktal/mev-beta/pkg/validation/pool_validator.go:177: validateBasicExistence 0.0% github.com/fraktal/mev-beta/pkg/validation/pool_validator.go:198: checkBannedAddresses 0.0% github.com/fraktal/mev-beta/pkg/validation/pool_validator.go:206: validatePoolInterface 0.0% github.com/fraktal/mev-beta/pkg/validation/pool_validator.go:228: isUniswapV3Pool 0.0% github.com/fraktal/mev-beta/pkg/validation/pool_validator.go:251: isUniswapV2Pool 0.0% github.com/fraktal/mev-beta/pkg/validation/pool_validator.go:274: validateUniswapV3Interface 0.0% github.com/fraktal/mev-beta/pkg/validation/pool_validator.go:307: validateUniswapV2Interface 0.0% github.com/fraktal/mev-beta/pkg/validation/pool_validator.go:327: validateFactoryDeployment 0.0% github.com/fraktal/mev-beta/pkg/validation/pool_validator.go:340: verifyFactoryDeployment 0.0% github.com/fraktal/mev-beta/pkg/validation/pool_validator.go:350: validateTokenContracts 0.0% github.com/fraktal/mev-beta/pkg/validation/pool_validator.go:369: validateTokenContract 0.0% github.com/fraktal/mev-beta/pkg/validation/pool_validator.go:385: validateERC20Interface 0.0% github.com/fraktal/mev-beta/pkg/validation/pool_validator.go:412: performAdditionalSecurityChecks 0.0% github.com/fraktal/mev-beta/pkg/validation/pool_validator.go:430: getContractCreationBlock 0.0% github.com/fraktal/mev-beta/pkg/validation/pool_validator.go:464: binarySearchCreationBlock 0.0% github.com/fraktal/mev-beta/pkg/validation/pool_validator.go:520: checkForAttackPatterns 0.0% github.com/fraktal/mev-beta/pkg/validation/pool_validator.go:535: isProxyContract 0.0% github.com/fraktal/mev-beta/pkg/validation/pool_validator.go:547: hasUnusualBytecode 0.0% github.com/fraktal/mev-beta/pkg/validation/pool_validator.go:564: calculateEntropy 0.0% github.com/fraktal/mev-beta/pkg/validation/pool_validator.go:589: getUniswapV3PoolInfo 0.0% github.com/fraktal/mev-beta/pkg/validation/pool_validator.go:665: getUniswapV2PoolInfo 0.0% github.com/fraktal/mev-beta/pkg/validation/pool_validator.go:719: getDefaultConfig 0.0% github.com/fraktal/mev-beta/pkg/validation/pool_validator.go:729: getCachedResult 0.0% github.com/fraktal/mev-beta/pkg/validation/pool_validator.go:739: cacheResult 0.0% github.com/fraktal/mev-beta/pkg/validation/pool_validator.go:745: initializeTrustedFactories 0.0% github.com/fraktal/mev-beta/pkg/validation/pool_validator.go:756: initializeBannedAddresses 0.0% github.com/fraktal/mev-beta/pkg/validation/pool_validator.go:762: AddTrustedFactory 0.0% github.com/fraktal/mev-beta/pkg/validation/pool_validator.go:768: BanAddress 0.0% total: (statements) 8.4% Running static analysis... tools/math-audit/internal/loader/loader.go:83:15: G304: Potential file inclusion via variable (gosec) data, err := os.ReadFile(path) ^ tools/math-audit/internal/loader/loader.go:43:4: continue with no blank line before (nlreturn) continue ^ tools/math-audit/internal/loader/loader.go:113:3: return with no blank line before (nlreturn) return fn(path, vec) ^ tools/math-audit/internal/loader/loader.go:1:1: ST1000: at least one file in a package should have a package comment (stylecheck) package loader ^ internal/auth/middleware.go:15:1: Comment should end in a period (godot) // AuthConfig holds authentication configuration ^ internal/auth/middleware.go:26:1: Comment should end in a period (godot) // Middleware provides authentication middleware for HTTP endpoints ^ internal/auth/middleware.go:33:1: Comment should end in a period (godot) // RateLimiter tracks request rates per IP ^ internal/auth/middleware.go:71:4: return with no blank line before (nlreturn) return ^ internal/auth/middleware.go:78:4: return with no blank line before (nlreturn) return ^ internal/auth/middleware.go:254:4: continue with no blank line before (nlreturn) continue ^ internal/auth/middleware.go:1:1: ST1000: at least one file in a package should have a package comment (stylecheck) package auth ^ tools/main.go:39:17: Error return value of `applyCmd.Parse` is not checked (errcheck) applyCmd.Parse(os.Args[2:]) ^ tools/main.go:51:18: Error return value of `revertCmd.Parse` is not checked (errcheck) revertCmd.Parse(os.Args[2:]) ^ tools/main.go:59:15: Error return value of `runCmd.Parse` is not checked (errcheck) runCmd.Parse(os.Args[2:]) ^ tools/main.go:68:21: Error return value of `summarizeCmd.Parse` is not checked (errcheck) summarizeCmd.Parse(os.Args[2:]) ^ tools/main.go:11:1: cognitive complexity 22 of func `main` is high (> 20) (gocognit) func main() { ^ internal/ratelimit/adaptive.go:143:14: do not define dynamic errors, use wrapped static errors instead: "fmt.Errorf(\"no healthy endpoints available\")" (err113) return "", fmt.Errorf("no healthy endpoints available") ^ internal/ratelimit/adaptive.go:152:14: do not define dynamic errors, use wrapped static errors instead: "fmt.Errorf(\"endpoint not found: %s\", bestEndpoint)" (err113) return "", fmt.Errorf("endpoint not found: %s", bestEndpoint) ^ internal/ratelimit/adaptive.go:157:14: do not define dynamic errors, use wrapped static errors instead: "fmt.Errorf(\"circuit breaker open for endpoint: %s\", bestEndpoint)" (err113) return "", fmt.Errorf("circuit breaker open for endpoint: %s", bestEndpoint) ^ internal/ratelimit/manager.go:76:10: do not define dynamic errors, use wrapped static errors instead: "fmt.Errorf(\"no rate limiter found for endpoint: %s\", endpointURL)" (err113) return fmt.Errorf("no rate limiter found for endpoint: %s", endpointURL) ^ internal/ratelimit/manager.go:90:10: do not define dynamic errors, use wrapped static errors instead: "fmt.Errorf(\"no rate limiter found for endpoint: %s\", endpointURL)" (err113) return fmt.Errorf("no rate limiter found for endpoint: %s", endpointURL) ^ internal/ratelimit/manager.go:95:10: do not define dynamic errors, use wrapped static errors instead: "fmt.Errorf(\"rate limit exceeded for endpoint: %s\", endpointURL)" (err113) return fmt.Errorf("rate limit exceeded for endpoint: %s", endpointURL) ^ internal/ratelimit/manager.go:108:15: do not define dynamic errors, use wrapped static errors instead: "fmt.Errorf(\"no rate limiter found for endpoint: %s\", endpointURL)" (err113) return nil, fmt.Errorf("no rate limiter found for endpoint: %s", endpointURL) ^ internal/ratelimit/adaptive.go:9:1: File is not properly formatted (gci) ^ internal/ratelimit/manager.go:8:1: File is not properly formatted (gci) "github.com/fraktal/mev-beta/internal/config" ^ internal/ratelimit/manager_test.go:8:1: File is not properly formatted (gci) "github.com/fraktal/mev-beta/internal/config" ^ internal/ratelimit/adaptive.go:1:1: ST1000: at least one file in a package should have a package comment (stylecheck) package ratelimit ^ internal/ratelimit/adaptive.go:338:15: ST1023: should omit type float64 from declaration; it will be inferred from the right-hand side (stylecheck) var newLimit float64 = currentLimit ^ internal/ratelimit/manager_test.go:234:2: compares: use assert.Less (testifylint) assert.True(t, duration < time.Millisecond*100, "First request should be fast") ^ internal/ratelimit/manager_test.go:241:2: compares: use assert.GreaterOrEqual (testifylint) assert.True(t, duration >= time.Second, "Second request should be delayed by rate limiter") ^ internal/ratelimit/manager_test.go:153:2: require-error: for error assertions use require (testifylint) assert.NoError(t, err) ^ internal/ratelimit/manager_test.go:165:2: require-error: for error assertions use require (testifylint) assert.NoError(t, err) ^ internal/ratelimit/manager_test.go:232:2: require-error: for error assertions use require (testifylint) assert.NoError(t, err) ^ pkg/marketdata/logger.go:176:31: Error return value of `mdl.swapLogFile.WriteString` is not checked (errcheck) mdl.swapLogFile.WriteString(string(logBytes) + "\n") ^ pkg/marketdata/logger.go:258:36: Error return value of `mdl.liquidityLogFile.WriteString` is not checked (errcheck) mdl.liquidityLogFile.WriteString(string(logBytes) + "\n") ^ pkg/marketdata/logger.go:353:24: Error return value of `mdl.swapLogFile.Close` is not checked (errcheck) mdl.swapLogFile.Close() ^ pkg/marketdata/logger.go:357:29: Error return value of `mdl.liquidityLogFile.Close` is not checked (errcheck) mdl.liquidityLogFile.Close() ^ pkg/marketdata/logger.go:370:19: G304: Potential file inclusion via variable (gosec) swapFile, err := os.OpenFile(swapLogPath, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0600) ^ pkg/marketdata/logger.go:378:24: G304: Potential file inclusion via variable (gosec) liquidityFile, err := os.OpenFile(liquidityLogPath, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0600) ^ pkg/marketdata/logger.go:121:10: do not define dynamic errors, use wrapped static errors instead: "fmt.Errorf(\"market data logger not initialized\")" (err113) return fmt.Errorf("market data logger not initialized") ^ pkg/marketdata/logger.go:198:10: do not define dynamic errors, use wrapped static errors instead: "fmt.Errorf(\"market data logger not initialized\")" (err113) return fmt.Errorf("market data logger not initialized") ^ pkg/marketdata/logger.go:587:10: do not define dynamic errors, use wrapped static errors instead: "fmt.Errorf(\"database not available\")" (err113) return fmt.Errorf("database not available") ^ pkg/marketdata/types.go:68:2: ST1003: struct field TokenId should be TokenID (stylecheck) TokenId *big.Int `json:"tokenId,omitempty"` ^ pkg/marketdata/logger.go:438:104: (*MarketDataLogger).createBasicPoolInfo - result 1 (error) is always nil (unparam) func (mdl *MarketDataLogger) createBasicPoolInfo(poolAddr common.Address, protocol string) (*PoolInfo, error) { ^ pkg/marketdata/logger.go:507:54: (*MarketDataLogger).initializeKnownTokens - result 0 (error) is always nil (unparam) func (mdl *MarketDataLogger) initializeKnownTokens() error { ^ pkg/marketdata/logger.go:585:47: `(*MarketDataLogger).loadFromDatabase` - `ctx` is unused (unparam) func (mdl *MarketDataLogger) loadFromDatabase(ctx context.Context) error { ^ pkg/performance/optimizer.go:154:14: Error return value is not checked (errcheck) cp.cleanup(conn) ^ pkg/performance/pools.go:203:53: G115: integer overflow conversion int -> uint32 (gosec) shardCount = 1 << (32 - countLeadingZeros32(uint32(shardCount-1))) ^ pkg/performance/pools.go:216:17: G115: integer overflow conversion int -> uint64 (gosec) mask: uint64(shardCount - 1), ^ pkg/performance/optimizer.go:98:2: field `mutex` is unused (unused) mutex sync.RWMutex ^ pkg/performance/pools.go:125:2: field `head` is unused (unused) head uint64 // Padding to prevent false sharing ^ pkg/performance/pools.go:127:2: field `tail` is unused (unused) tail uint64 // Padding to prevent false sharing ^ pkg/performance/optimizer.go:483:17: S1039: unnecessary use of fmt.Sprintf (gosimple) po.logger.Info(fmt.Sprintf("🚀 PERFORMANCE METRICS:")) ^ pkg/performance/pools.go:104:21: SA6002: argument should be pointer-like to avoid allocations (staticcheck) p.addressPool.Put(slice) ^ pkg/performance/pools.go:117:19: SA6002: argument should be pointer-like to avoid allocations (staticcheck) p.slicePool.Put(slice) ^ pkg/performance/optimizer.go:424:44: `(*PerformanceOptimizer).warmCaches` - `ctx` is unused (unparam) func (po *PerformanceOptimizer) warmCaches(ctx context.Context) { ^ tools/bridge/ci_agent_bridge.go:91:21: Error return value of `zipFile.Close` is not checked (errcheck) defer zipFile.Close() ^ tools/bridge/ci_agent_bridge.go:94:21: Error return value of `archive.Close` is not checked (errcheck) defer archive.Close() ^ tools/bridge/ci_agent_bridge.go:118:19: Error return value of `file.Close` is not checked (errcheck) defer file.Close() ^ tools/bridge/ci_agent_bridge.go:39:9: G204: Subprocess launched with a potential tainted input or cmd arguments (gosec) cmd := exec.Command("git", "checkout", "-b", op.BranchName) ^ tools/bridge/ci_agent_bridge.go:45:8: G204: Subprocess launched with a potential tainted input or cmd arguments (gosec) cmd = exec.Command("git", "apply", op.PatchFile) ^ tools/bridge/ci_agent_bridge.go:149:12: G306: Expect WriteFile permissions to be 0600 or less (gosec) if err := ioutil.WriteFile(cfg.OutputFile, data, 0644); err != nil { ^ tools/bridge/ci_agent_bridge.go:170:6: func `generateSecureBranchName` is unused (unused) func generateSecureBranchName() (string, error) { ^ tools/bridge/ci_agent_bridge.go:35:10: do not define dynamic errors, use wrapped static errors instead: "fmt.Errorf(\"both --patch and --branch are required\")" (err113) return fmt.Errorf("both --patch and --branch are required") ^ tools/bridge/ci_agent_bridge.go:57:10: do not define dynamic errors, use wrapped static errors instead: "fmt.Errorf(\"--branch is required\")" (err113) return fmt.Errorf("--branch is required") ^ tools/bridge/ci_agent_bridge.go:9:2: SA1019: "io/ioutil" has been deprecated since Go 1.19: As of Go 1.16, the same functionality is now provided by package [io] or package [os], and those implementations should be preferred in new code. See the specific function documentation for details. (staticcheck) "io/ioutil" ^ internal/logger/logger.go:78:12: G302: Expect file permissions to be 0600 or less (gosec) f, err := os.OpenFile(filename, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666) ^ internal/logger/logger.go:375:12: G301: Expect directory permissions to be 0750 or less (gosec) if err := os.MkdirAll(archiveDir, 0755); err != nil { ^ internal/logger/logger.go:23:5: logLevelNames is a global variable (gochecknoglobals) var logLevelNames = map[LogLevel]string{ ^ internal/logger/secure_filter_test.go:434:5: break with no blank line before (nlreturn) break ^ internal/logger/secure_filter_test.go:208:4: useless-assert: meaningless assertion (testifylint) assert.True(t, true, "categorizeAmount is private - testing would need public wrapper") ^ internal/logger/secure_filter_test.go:405:2: expected-actual: need to reverse actual and expected values (testifylint) assert.Equal(t, SecurityLevel(0), SecurityLevelDebug) ^ internal/logger/secure_filter_test.go:406:2: expected-actual: need to reverse actual and expected values (testifylint) assert.Equal(t, SecurityLevel(1), SecurityLevelInfo) ^ internal/logger/secure_filter_test.go:407:2: expected-actual: need to reverse actual and expected values (testifylint) assert.Equal(t, SecurityLevel(2), SecurityLevelProduction) ^ internal/logger/secure_filter_test.go:414:2: negative-positive: use assert.Positive (testifylint) assert.True(t, len(filter.amountPatterns) > 0, "Should have amount patterns") ^ internal/logger/secure_filter_test.go:415:2: negative-positive: use assert.Positive (testifylint) assert.True(t, len(filter.addressPatterns) > 0, "Should have address patterns") ^ internal/logger/secure_filter_test.go:416:2: negative-positive: use assert.Positive (testifylint) assert.True(t, len(filter.valuePatterns) > 0, "Should have value patterns") ^ pkg/lifecycle/health_monitor.go:686: 686-705 lines are duplicate of `pkg/lifecycle/health_monitor.go:708-727` (dupl) hm.rules = append(hm.rules, HealthRule{ Name: "critical_module_unhealthy", Description: "Alert when a critical module becomes unhealthy", Condition: func(health ModuleHealth) bool { return health.Status == HealthUnhealthy }, Action: func(moduleID string, health ModuleHealth) error { alert := HealthAlert{ ID: fmt.Sprintf("critical_%s_%d", moduleID, time.Now().Unix()), ModuleID: moduleID, Severity: SeverityCritical, Type: AlertHealthChange, Message: fmt.Sprintf("Critical module %s is unhealthy: %s", moduleID, health.Message), Timestamp: time.Now(), } return hm.notifier.NotifyAlert(alert) }, Severity: SeverityCritical, Enabled: true, }) pkg/lifecycle/health_monitor.go:708: 708-727 lines are duplicate of `pkg/lifecycle/health_monitor.go:686-705` (dupl) hm.rules = append(hm.rules, HealthRule{ Name: "degraded_performance", Description: "Alert when module performance is degraded", Condition: func(health ModuleHealth) bool { return health.Status == HealthDegraded }, Action: func(moduleID string, health ModuleHealth) error { alert := HealthAlert{ ID: fmt.Sprintf("degraded_%s_%d", moduleID, time.Now().Unix()), ModuleID: moduleID, Severity: SeverityWarning, Type: AlertHealthChange, Message: fmt.Sprintf("Module %s performance is degraded: %s", moduleID, health.Message), Timestamp: time.Now(), } return hm.notifier.NotifyAlert(alert) }, Severity: SeverityWarning, Enabled: true, }) pkg/lifecycle/module_registry.go:704: 704-728 lines are duplicate of `pkg/lifecycle/module_registry.go:730-754` (dupl) func (mr *ModuleRegistry) pauseModule(ctx context.Context, registered *RegisteredModule) error { if registered.State != StateRunning { return fmt.Errorf("invalid state for pause: %s", registered.State) } registered.State = StatePausing if err := registered.Instance.Pause(ctx); err != nil { registered.State = StateFailed return err } registered.State = StatePaused // Publish event if mr.eventBus != nil { mr.eventBus.Publish(ModuleEvent{ Type: EventModulePaused, ModuleID: registered.ID, Timestamp: time.Now(), }) } return nil } pkg/lifecycle/module_registry.go:730: 730-754 lines are duplicate of `pkg/lifecycle/module_registry.go:704-728` (dupl) func (mr *ModuleRegistry) resumeModule(ctx context.Context, registered *RegisteredModule) error { if registered.State != StatePaused { return fmt.Errorf("invalid state for resume: %s", registered.State) } registered.State = StateResuming if err := registered.Instance.Resume(ctx); err != nil { registered.State = StateFailed return err } registered.State = StateRunning // Publish event if mr.eventBus != nil { mr.eventBus.Publish(ModuleEvent{ Type: EventModuleResumed, ModuleID: registered.ID, Timestamp: time.Now(), }) } return nil } pkg/lifecycle/dependency_injection.go:335:16: Error return value of `scope.Dispose` is not checked (errcheck) scope.Dispose() ^ pkg/lifecycle/health_monitor.go:444:33: Error return value of `hm.notifier.NotifySystemHealth` is not checked (errcheck) hm.notifier.NotifySystemHealth(overallHealth) ^ pkg/lifecycle/health_monitor.go:550:33: Error return value of `hm.notifier.NotifyHealthChange` is not checked (errcheck) hm.notifier.NotifyHealthChange(monitor.moduleID, oldHealth, monitor.currentHealth) ^ pkg/lifecycle/module_registry.go:306:22: Error return value of `mr.eventBus.Publish` is not checked (errcheck) mr.eventBus.Publish(ModuleEvent{ ^ pkg/lifecycle/module_registry.go:608:22: Error return value of `mr.eventBus.Publish` is not checked (errcheck) mr.eventBus.Publish(ModuleEvent{ ^ pkg/lifecycle/module_registry.go:641:35: Error return value of `mr.healthMonitor.StartMonitoring` is not checked (errcheck) mr.healthMonitor.StartMonitoring(registered) ^ pkg/lifecycle/module_registry.go:646:22: Error return value of `mr.eventBus.Publish` is not checked (errcheck) mr.eventBus.Publish(ModuleEvent{ ^ pkg/lifecycle/shutdown_manager.go:192:22: Error return value of `sm.registry.StopAll` is not checked (errcheck) sm.registry.StopAll(forceCtx) ^ pkg/lifecycle/shutdown_manager.go:388:22: Error return value of `sm.ForceShutdown` is not checked (errcheck) sm.ForceShutdown(forceCtx) ^ pkg/lifecycle/shutdown_manager.go:396:21: Error return value of `sm.ForceShutdown` is not checked (errcheck) sm.ForceShutdown(ctx) ^ pkg/lifecycle/shutdown_manager.go:457:15: Error return value of `sm.callHooks` is not checked (errcheck) sm.callHooks(shutdownCtx, "OnShutdownFailed") ^ pkg/lifecycle/shutdown_manager.go:460:15: Error return value of `sm.callHooks` is not checked (errcheck) sm.callHooks(shutdownCtx, "OnShutdownCompleted") ^ pkg/lifecycle/state_machine.go:357:1: cognitive complexity 23 of func `(*StateMachine).performTransition` is high (> 20) (gocognit) func (sm *StateMachine) performTransition(ctx context.Context, to ModuleState, trigger string) error { ^ pkg/lifecycle/health_monitor.go:533:42: unnecessary conversion (unconvert) monitor.currentHealth.RestartCount = int(monitor.module.HealthStatus.RestartCount) ^ pkg/lifecycle/module_registry.go:45:2: field `mu` is unused (unused) mu sync.RWMutex ^ pkg/lifecycle/dependency_injection.go:205:15: do not define dynamic errors, use wrapped static errors instead: "fmt.Errorf(\"named service not found: %s\", name)" (err113) return nil, fmt.Errorf("named service not found: %s", name) ^ pkg/lifecycle/dependency_injection.go:354:15: do not define dynamic errors, use wrapped static errors instead: "fmt.Errorf(\"maximum resolution depth exceeded for type %s\", serviceType.String())" (err113) return nil, fmt.Errorf("maximum resolution depth exceeded for type %s", serviceType.String()) ^ pkg/lifecycle/dependency_injection.go:359:15: do not define dynamic errors, use wrapped static errors instead: "fmt.Errorf(\"circular dependency detected for type %s\", serviceType.String())" (err113) return nil, fmt.Errorf("circular dependency detected for type %s", serviceType.String()) ^ pkg/lifecycle/dependency_injection.go:384:15: do not define dynamic errors, use wrapped static errors instead: "fmt.Errorf(\"service not registered: %s\", serviceType.String())" (err113) return nil, fmt.Errorf("service not registered: %s", serviceType.String()) ^ pkg/lifecycle/dependency_injection.go:415:15: do not define dynamic errors, use wrapped static errors instead: "fmt.Errorf(\"no implementation or factory provided for %s\", descriptor.ServiceType.String())" (err113) return nil, fmt.Errorf("no implementation or factory provided for %s", descriptor.ServiceType.String()) ^ pkg/lifecycle/dependency_injection.go:433:15: do not define dynamic errors, use wrapped static errors instead: "fmt.Errorf(\"reflection is disabled\")" (err113) return nil, fmt.Errorf("reflection is disabled") ^ pkg/lifecycle/dependency_injection.go:521:15: do not define dynamic errors, use wrapped static errors instead: "fmt.Errorf(\"constructor returned no values\")" (err113) return nil, fmt.Errorf("constructor returned no values") ^ pkg/lifecycle/dependency_injection.go:561:12: do not define dynamic errors, use wrapped static errors instead: "fmt.Errorf(\"implementation %s does not implement interface %s\",\n\tdescriptor.Implementation.String(), serviceType.String())" (err113) return fmt.Errorf("implementation %s does not implement interface %s", ^ pkg/lifecycle/dependency_injection.go:570:11: do not define dynamic errors, use wrapped static errors instead: "fmt.Errorf(\"dependency %s is not registered\", depType.String())" (err113) return fmt.Errorf("dependency %s is not registered", depType.String()) ^ pkg/lifecycle/health_monitor.go:264:10: do not define dynamic errors, use wrapped static errors instead: "fmt.Errorf(\"health monitor already running\")" (err113) return fmt.Errorf("health monitor already running") ^ pkg/lifecycle/interfaces.go:50:10: do not define dynamic errors, use wrapped static errors instead: "fmt.Errorf(\"invalid state for start: %s\", bm.state)" (err113) return fmt.Errorf("invalid state for start: %s", bm.state) ^ pkg/lifecycle/interfaces.go:63:10: do not define dynamic errors, use wrapped static errors instead: "fmt.Errorf(\"invalid state for stop: %s\", bm.state)" (err113) return fmt.Errorf("invalid state for stop: %s", bm.state) ^ pkg/lifecycle/interfaces.go:75:10: do not define dynamic errors, use wrapped static errors instead: "fmt.Errorf(\"invalid state for pause: %s\", bm.state)" (err113) return fmt.Errorf("invalid state for pause: %s", bm.state) ^ pkg/lifecycle/interfaces.go:84:10: do not define dynamic errors, use wrapped static errors instead: "fmt.Errorf(\"invalid state for resume: %s\", bm.state)" (err113) return fmt.Errorf("invalid state for resume: %s", bm.state) ^ pkg/lifecycle/interfaces.go:359:27: do not define dynamic errors, use wrapped static errors instead: "fmt.Errorf(\"health monitor not enabled\")" (err113) return OverallHealth{}, fmt.Errorf("health monitor not enabled") ^ pkg/lifecycle/module_registry.go:233:10: do not define dynamic errors, use wrapped static errors instead: "fmt.Errorf(\"module already registered: %s\", id)" (err113) return fmt.Errorf("module already registered: %s", id) ^ pkg/lifecycle/module_registry.go:280:10: do not define dynamic errors, use wrapped static errors instead: "fmt.Errorf(\"module not found: %s\", moduleID)" (err113) return fmt.Errorf("module not found: %s", moduleID) ^ pkg/lifecycle/module_registry.go:323:15: do not define dynamic errors, use wrapped static errors instead: "fmt.Errorf(\"module not found: %s\", moduleID)" (err113) return nil, fmt.Errorf("module not found: %s", moduleID) ^ pkg/lifecycle/module_registry.go:363:14: do not define dynamic errors, use wrapped static errors instead: "fmt.Errorf(\"module not found: %s\", moduleID)" (err113) return "", fmt.Errorf("module not found: %s", moduleID) ^ pkg/lifecycle/module_registry.go:382:10: do not define dynamic errors, use wrapped static errors instead: "fmt.Errorf(\"registry already initialized\")" (err113) return fmt.Errorf("registry already initialized") ^ pkg/lifecycle/module_registry.go:419:10: do not define dynamic errors, use wrapped static errors instead: "fmt.Errorf(\"invalid registry state for start: %s\", mr.state)" (err113) return fmt.Errorf("invalid registry state for start: %s", mr.state) ^ pkg/lifecycle/module_registry.go:437:10: do not define dynamic errors, use wrapped static errors instead: "fmt.Errorf(\"invalid registry state for stop: %s\", mr.state)" (err113) return fmt.Errorf("invalid registry state for stop: %s", mr.state) ^ pkg/lifecycle/module_registry.go:565:11: do not define dynamic errors, use wrapped static errors instead: "fmt.Errorf(\"circular dependency detected involving module: %s\", moduleID)" (err113) return fmt.Errorf("circular dependency detected involving module: %s", moduleID) ^ pkg/lifecycle/module_registry.go:574:12: do not define dynamic errors, use wrapped static errors instead: "fmt.Errorf(\"dependency not found: %s (required by %s)\", depID, moduleID)" (err113) return fmt.Errorf("dependency not found: %s (required by %s)", depID, moduleID) ^ pkg/lifecycle/module_registry.go:620:10: do not define dynamic errors, use wrapped static errors instead: "fmt.Errorf(\"invalid state for start: %s\", registered.State)" (err113) return fmt.Errorf("invalid state for start: %s", registered.State) ^ pkg/lifecycle/module_registry.go:661:10: do not define dynamic errors, use wrapped static errors instead: "fmt.Errorf(\"invalid state for stop: %s\", registered.State)" (err113) return fmt.Errorf("invalid state for stop: %s", registered.State) ^ pkg/lifecycle/module_registry.go:706:10: do not define dynamic errors, use wrapped static errors instead: "fmt.Errorf(\"invalid state for pause: %s\", registered.State)" (err113) return fmt.Errorf("invalid state for pause: %s", registered.State) ^ pkg/lifecycle/module_registry.go:732:10: do not define dynamic errors, use wrapped static errors instead: "fmt.Errorf(\"invalid state for resume: %s\", registered.State)" (err113) return fmt.Errorf("invalid state for resume: %s", registered.State) ^ pkg/lifecycle/shutdown_manager.go:153:10: do not define dynamic errors, use wrapped static errors instead: "fmt.Errorf(\"shutdown manager not in running state: %s\", sm.state)" (err113) return fmt.Errorf("shutdown manager not in running state: %s", sm.state) ^ pkg/lifecycle/shutdown_manager.go:168:10: do not define dynamic errors, use wrapped static errors instead: "fmt.Errorf(\"shutdown already initiated: %s\", sm.state)" (err113) return fmt.Errorf("shutdown already initiated: %s", sm.state) ^ pkg/lifecycle/shutdown_manager.go:302:10: do not define dynamic errors, use wrapped static errors instead: "fmt.Errorf(\"shutdown timeout after %v\", timeout)" (err113) return fmt.Errorf("shutdown timeout after %v", timeout) ^ pkg/lifecycle/state_machine.go:327:11: do not define dynamic errors, use wrapped static errors instead: "fmt.Errorf(\"timeout waiting for state %s\", state)" (err113) return fmt.Errorf("timeout waiting for state %s", state) ^ pkg/lifecycle/state_machine.go:363:10: do not define dynamic errors, use wrapped static errors instead: "fmt.Errorf(\"invalid transition from %s to %s\", from, to)" (err113) return fmt.Errorf("invalid transition from %s to %s", from, to) ^ pkg/lifecycle/state_machine.go:451:10: do not define dynamic errors, use wrapped static errors instead: "fmt.Errorf(\"unknown target state: %s\", to)" (err113) return fmt.Errorf("unknown target state: %s", to) ^ pkg/lifecycle/health_monitor.go:624:2: ifElseChain: rewrite if-else to switch statement (gocritic) if healthRatio > 0.8 { ^ pkg/lifecycle/health_monitor.go:645:2: ifElseChain: rewrite if-else to switch statement (gocritic) if healthRatio > 0.7 { ^ pkg/lifecycle/health_monitor.go:798:2: ifElseChain: rewrite if-else to switch statement (gocritic) if unhealthyRatio > 0.3 { ^ pkg/lifecycle/shutdown_manager.go:195:2: exitAfterDefer: os.Exit will exit, and `defer cancel()` will not run (gocritic) os.Exit(1) ^ pkg/lifecycle/state_machine.go:418:4: dupBranchBody: both branches in if statement have same body (gocritic) if err := handler(handlerCtx, sm); err != nil { ^ pkg/lifecycle/state_machine.go:375:6: lostcancel: the cancel function is not used on all paths (possible context leak) (govet) if hookCtx, cancel := context.WithTimeout(ctx, sm.config.TransitionTimeout); hookCtx != nil { ^ pkg/lifecycle/state_machine.go:388:3: lostcancel: this return statement may be reached without using the cancel var defined on line 375 (govet) return fmt.Errorf("state transition failed: %w", err) ^ pkg/lifecycle/state_machine.go:405:6: lostcancel: the cancel function is not used on all paths (possible context leak) (govet) if hookCtx, cancel := context.WithTimeout(ctx, sm.config.TransitionTimeout); hookCtx != nil { ^ pkg/lifecycle/state_machine.go:427:2: lostcancel: this return statement may be reached without using the cancel var defined on line 405 (govet) return nil ^ pkg/lifecycle/state_machine.go:417:6: lostcancel: the cancel function is not used on all paths (possible context leak) (govet) if handlerCtx, cancel := context.WithTimeout(ctx, sm.config.TransitionTimeout); handlerCtx != nil { ^ pkg/lifecycle/dependency_injection.go:473:1: `if tag != ""` has complex nested blocks (complexity: 6) (nestif) if tag := fieldType.Tag.Get("inject"); tag != "" { ^ pkg/lifecycle/dependency_injection.go:226:5: break with no blank line before (nlreturn) break ^ pkg/lifecycle/module_registry.go:296:4: break with no blank line before (nlreturn) break ^ pkg/lifecycle/state_machine.go:409:5: continue with no blank line before (nlreturn) continue ^ pkg/lifecycle/dependency_injection.go:446:2: SA9003: empty branch (staticcheck) if implType.PkgPath() != "" { ^ pkg/lifecycle/health_monitor.go:657:4: SA9003: empty branch (staticcheck) if err := rule.Action(moduleID, health); err != nil { ^ pkg/lifecycle/interfaces.go:179:4: SA9003: empty branch (staticcheck) if err := h(event); err != nil { ^ pkg/lifecycle/module_registry.go:803:45: `(*ModuleRegistry).stopAllSequential` - `ctx` is unused (unparam) func (mr *ModuleRegistry) stopAllSequential(ctx context.Context) error { ^ pkg/lifecycle/module_registry.go:818:43: `(*ModuleRegistry).stopAllParallel` - `ctx` is unused (unparam) func (mr *ModuleRegistry) stopAllParallel(ctx context.Context) error { ^ pkg/execution/queue.go:243:1: `if success` has complex nested blocks (complexity: 6) (nestif) if success { ^ internal/config/config.go:545: 545-575 lines are duplicate of `internal/config/config.go:578-608` (dupl) for _, endpoint := range c.Arbitrum.ReadingEndpoints { provider := map[string]interface{}{ "name": endpoint.Name, "type": "standard", "http_endpoint": "", "ws_endpoint": "", "priority": endpoint.Priority, "rate_limit": map[string]interface{}{ "requests_per_second": endpoint.RateLimit.RequestsPerSecond, "burst": endpoint.RateLimit.Burst, "timeout": fmt.Sprintf("%ds", endpoint.TimeoutSeconds), "retry_delay": "1s", "max_retries": 3, }, "features": []string{"reading", "real_time"}, "health_check": map[string]interface{}{ "enabled": true, "interval": fmt.Sprintf("%ds", endpoint.HealthCheckInterval), "timeout": fmt.Sprintf("%ds", endpoint.TimeoutSeconds), }, } // Determine endpoint type and assign to appropriate field if strings.HasPrefix(endpoint.URL, "ws") { provider["ws_endpoint"] = endpoint.URL } else { provider["http_endpoint"] = endpoint.URL } providerConfigs = append(providerConfigs, provider) } internal/config/config.go:578: 578-608 lines are duplicate of `internal/config/config.go:545-575` (dupl) for _, endpoint := range c.Arbitrum.ExecutionEndpoints { provider := map[string]interface{}{ "name": endpoint.Name, "type": "standard", "http_endpoint": "", "ws_endpoint": "", "priority": endpoint.Priority, "rate_limit": map[string]interface{}{ "requests_per_second": endpoint.RateLimit.RequestsPerSecond, "burst": endpoint.RateLimit.Burst, "timeout": fmt.Sprintf("%ds", endpoint.TimeoutSeconds), "retry_delay": "1s", "max_retries": 3, }, "features": []string{"execution", "transaction_submission"}, "health_check": map[string]interface{}{ "enabled": true, "interval": fmt.Sprintf("%ds", endpoint.HealthCheckInterval), "timeout": fmt.Sprintf("%ds", endpoint.TimeoutSeconds), }, } // Determine endpoint type and assign to appropriate field if strings.HasPrefix(endpoint.URL, "ws") { provider["ws_endpoint"] = endpoint.URL } else { provider["http_endpoint"] = endpoint.URL } providerConfigs = append(providerConfigs, provider) } internal/config/config.go:407:1: cognitive complexity 46 of func `(*Config).ConvertToProviderConfig` is high (> 20) (gocognit) func (c *Config) ConvertToProviderConfig() map[string]interface{} { ^ internal/config/config.go:212:1: cognitive complexity 35 of func `(*Config).OverrideWithEnv` is high (> 20) (gocognit) func (c *Config) OverrideWithEnv() { ^ internal/config/config.go:399:12: G306: Expect WriteFile permissions to be 0600 or less (gosec) if err := os.WriteFile(tempPath, yamlData, 0644); err != nil { ^ internal/config/config.go:674:10: do not define dynamic errors, use wrapped static errors instead: "fmt.Errorf(\"ARBITRUM_RPC_ENDPOINT environment variable is required\")" (err113) return fmt.Errorf("ARBITRUM_RPC_ENDPOINT environment variable is required") ^ internal/config/config.go:690:10: do not define dynamic errors, use wrapped static errors instead: "fmt.Errorf(\"ETHEREUM_PRIVATE_KEY environment variable is required\")" (err113) return fmt.Errorf("ETHEREUM_PRIVATE_KEY environment variable is required") ^ internal/config/config.go:695:10: do not define dynamic errors, use wrapped static errors instead: "fmt.Errorf(\"ETHEREUM_ACCOUNT_ADDRESS environment variable is required\")" (err113) return fmt.Errorf("ETHEREUM_ACCOUNT_ADDRESS environment variable is required") ^ internal/config/config.go:700:10: do not define dynamic errors, use wrapped static errors instead: "fmt.Errorf(\"CONTRACT_ARBITRAGE_EXECUTOR environment variable is required\")" (err113) return fmt.Errorf("CONTRACT_ARBITRAGE_EXECUTOR environment variable is required") ^ internal/config/config.go:411:1: `if len(c.Arbitrum.ReadingEndpoints) == 0 && len(c.Arbitrum.ExecutionEndpoints) == 0` has complex nested blocks (complexity: 18) (nestif) if len(c.Arbitrum.ReadingEndpoints) == 0 && len(c.Arbitrum.ExecutionEndpoints) == 0 { ^ internal/config/config_test.go:83:2: float-compare: use assert.InEpsilon (or InDelta) (testifylint) assert.Equal(t, 10.0, cfg.Bot.MinProfitThreshold) ^ internal/config/config_test.go:86:2: bool-compare: use assert.True (testifylint) assert.Equal(t, true, cfg.Uniswap.Cache.Enabled) ^ pkg/security/security_manager.go:409:27: Error return value of `sm.TriggerEmergencyStop` is not checked (errcheck) sm.TriggerEmergencyStop("emergency stop file detected") ^ pkg/security/keymanager.go:454:1: cognitive complexity 33 of func `(*KeyManager).SignTransaction` is high (> 20) (gocognit) func (km *KeyManager) SignTransaction(request *SigningRequest) (*SigningResult, error) { ^ pkg/security/transaction_security.go:288:45: string `HIGH` has 3 occurrences, but such constant `SeverityHigh` already exists (goconst) result.Metadata["front_running_risk"] = "HIGH" ^ pkg/security/transaction_security.go:290:45: string `LOW` has 3 occurrences, but such constant `SeverityLow` already exists (goconst) result.Metadata["front_running_risk"] = "LOW" ^ pkg/security/rate_limiter.go:493:1: cyclomatic complexity 19 of func `(*RateLimiter).getCountryFromIP` is high (> 15) (gocyclo) func (rl *RateLimiter) getCountryFromIP(ip string) string { ^ pkg/security/security_manager.go:154:16: G402: TLS MinVersion too low. (gosec) tlsConfig := &tls.Config{ MinVersion: config.TLSMinVersion, CipherSuites: config.TLSCipherSuites, InsecureSkipVerify: false, PreferServerCipherSuites: true, } pkg/security/transaction_security.go:248:75: G115: integer overflow conversion uint64 -> int64 (gosec) gasCost := new(big.Int).Mul(req.Transaction.GasPrice(), big.NewInt(int64(req.Transaction.Gas()))) ^ pkg/security/keymanager.go:85:2: field `mu` is unused (unused) mu sync.RWMutex `json:"-"` ^ pkg/security/keymanager.go:164:2: field `mu` is unused (unused) mu sync.RWMutex ^ pkg/security/keymanager.go:165:2: field `activeKeyRotation` is unused (unused) activeKeyRotation bool ^ pkg/security/keymanager.go:166:2: field `lastKeyRotation` is unused (unused) lastKeyRotation time.Time ^ pkg/security/keymanager.go:167:2: field `keyRotationInterval` is unused (unused) keyRotationInterval time.Duration ^ pkg/security/keymanager.go:168:2: field `maxKeyAge` is unused (unused) maxKeyAge time.Duration ^ pkg/security/keymanager.go:184:2: field `accessLog` is unused (unused) accessLog []KeyAccessEvent ^ pkg/security/keymanager.go:185:2: field `maxLogEntries` is unused (unused) maxLogEntries int ^ pkg/security/keymanager.go:188:2: field `scryptN` is unused (unused) scryptN int ^ pkg/security/keymanager.go:189:2: field `scryptR` is unused (unused) scryptR int ^ pkg/security/keymanager.go:190:2: field `scryptP` is unused (unused) scryptP int ^ pkg/security/keymanager.go:191:2: field `scryptKeyLen` is unused (unused) scryptKeyLen int ^ pkg/security/rate_limiter.go:53:2: field `baselineRPS` is unused (unused) baselineRPS float64 ^ pkg/security/rate_limiter.go:54:2: field `currentRPS` is unused (unused) currentRPS float64 ^ pkg/security/rate_limiter.go:59:2: field `mitigationStart` is unused (unused) mitigationStart time.Time ^ pkg/security/keymanager.go:843:2: S1000: should use for range instead of for { select {} } (gosimple) for { ^ pkg/security/security_manager.go:392:2: S1000: should use for range instead of for { select {} } (gosimple) for { ^ pkg/security/rate_limiter.go:363:23: S1024: should use time.Until instead of t.Sub(time.Now()) (gosimple) result.RetryAfter = bucket.BlockedUntil.Sub(time.Now()) ^ pkg/security/keymanager.go:601:10: copylocks: assignment copies lock value to info: github.com/fraktal/mev-beta/pkg/security.SecureKey contains sync.RWMutex (govet) info := *secureKey ^ pkg/security/keymanager.go:502:1: `if request.Transaction.To() != nil` has complex nested blocks (complexity: 5) (nestif) if request.Transaction.To() != nil { ^ pkg/security/transaction_security.go:276:1: `if req.Transaction.GasPrice() != nil` has complex nested blocks (complexity: 5) (nestif) if req.Transaction.GasPrice() != nil { ^ pkg/security/contract_validator.go:322:48: `(*ContractValidator).getDeploymentInfo` - `ctx` is unused (unparam) func (cv *ContractValidator) getDeploymentInfo(ctx context.Context, address common.Address) (*big.Int, common.Address, error) { ^ pkg/security/contract_validator.go:371:54: `(*ContractValidator).verifyBytecodeSignature` - `bytecode` is unused (unparam) func (cv *ContractValidator) verifyBytecodeSignature(bytecode []byte, info *ContractInfo, result *ContractValidationResult) { ^ pkg/security/keymanager.go:831:42: (*KeyManager).loadExistingKeys - result 0 (error) is always nil (unparam) func (km *KeyManager) loadExistingKeys() error { ^ pkg/security/monitor.go:329:48: `(*SecurityMonitor).checkAttackPatterns` - `event` is unused (unparam) func (sm *SecurityMonitor) checkAttackPatterns(event SecurityEvent) { ^ pkg/security/rate_limiter.go:422:49: `(*RateLimiter).updateRequestPattern` - `userAgent` is unused (unparam) func (rl *RateLimiter) updateRequestPattern(ip, userAgent, endpoint string) { ^ pkg/security/transaction_security.go:159:50: `(*TransactionSecurity).mevSpecificChecks` - `ctx` is unused (unparam) func (ts *TransactionSecurity) mevSpecificChecks(ctx context.Context, req *MEVTransactionRequest, result *TransactionSecurityResult) error { ^ pkg/security/transaction_security.go:274:139: (*TransactionSecurity).frontRunningProtection - result 0 (error) is always nil (unparam) func (ts *TransactionSecurity) frontRunningProtection(ctx context.Context, req *MEVTransactionRequest, result *TransactionSecurityResult) error { ^ pkg/events/parser.go:352: 352-421 lines are duplicate of `pkg/events/parser.go:376-445` (dupl) func (ep *EventParser) parseUniswapV2Mint(log *types.Log, blockNumber uint64, timestamp uint64, txHash common.Hash) (*Event, error) { if len(log.Topics) != 2 || len(log.Data) != 32*2 { return nil, fmt.Errorf("invalid Uniswap V2 Mint event log") } // Parse the data fields amount0 := new(big.Int).SetBytes(log.Data[0:32]) amount1 := new(big.Int).SetBytes(log.Data[32:64]) event := &Event{ Type: AddLiquidity, Protocol: "UniswapV2", PoolAddress: log.Address, Amount0: amount0, Amount1: amount1, Timestamp: timestamp, TransactionHash: txHash, BlockNumber: blockNumber, } return event, nil } // parseUniswapV3Mint parses a Uniswap V3 Mint event func (ep *EventParser) parseUniswapV3Mint(log *types.Log, blockNumber uint64, timestamp uint64, txHash common.Hash) (*Event, error) { if len(log.Topics) != 3 || len(log.Data) != 32*4 { return nil, fmt.Errorf("invalid Uniswap V3 Mint event log") } // Parse the data fields amount0 := new(big.Int).SetBytes(log.Data[0:32]) amount1 := new(big.Int).SetBytes(log.Data[32:64]) event := &Event{ Type: AddLiquidity, Protocol: "UniswapV3", PoolAddress: log.Address, Amount0: amount0, Amount1: amount1, Timestamp: timestamp, TransactionHash: txHash, BlockNumber: blockNumber, } return event, nil } // parseUniswapV2Burn parses a Uniswap V2 Burn event func (ep *EventParser) parseUniswapV2Burn(log *types.Log, blockNumber uint64, timestamp uint64, txHash common.Hash) (*Event, error) { if len(log.Topics) != 2 || len(log.Data) != 32*2 { return nil, fmt.Errorf("invalid Uniswap V2 Burn event log") } // Parse the data fields amount0 := new(big.Int).SetBytes(log.Data[0:32]) amount1 := new(big.Int).SetBytes(log.Data[32:64]) event := &Event{ Type: RemoveLiquidity, Protocol: "UniswapV2", PoolAddress: log.Address, Amount0: amount0, Amount1: amount1, Timestamp: timestamp, TransactionHash: txHash, BlockNumber: blockNumber, } return event, nil } pkg/events/parser.go:376: 376-445 lines are duplicate of `pkg/events/parser.go:352-421` (dupl) func (ep *EventParser) parseUniswapV3Mint(log *types.Log, blockNumber uint64, timestamp uint64, txHash common.Hash) (*Event, error) { if len(log.Topics) != 3 || len(log.Data) != 32*4 { return nil, fmt.Errorf("invalid Uniswap V3 Mint event log") } // Parse the data fields amount0 := new(big.Int).SetBytes(log.Data[0:32]) amount1 := new(big.Int).SetBytes(log.Data[32:64]) event := &Event{ Type: AddLiquidity, Protocol: "UniswapV3", PoolAddress: log.Address, Amount0: amount0, Amount1: amount1, Timestamp: timestamp, TransactionHash: txHash, BlockNumber: blockNumber, } return event, nil } // parseUniswapV2Burn parses a Uniswap V2 Burn event func (ep *EventParser) parseUniswapV2Burn(log *types.Log, blockNumber uint64, timestamp uint64, txHash common.Hash) (*Event, error) { if len(log.Topics) != 2 || len(log.Data) != 32*2 { return nil, fmt.Errorf("invalid Uniswap V2 Burn event log") } // Parse the data fields amount0 := new(big.Int).SetBytes(log.Data[0:32]) amount1 := new(big.Int).SetBytes(log.Data[32:64]) event := &Event{ Type: RemoveLiquidity, Protocol: "UniswapV2", PoolAddress: log.Address, Amount0: amount0, Amount1: amount1, Timestamp: timestamp, TransactionHash: txHash, BlockNumber: blockNumber, } return event, nil } // parseUniswapV3Burn parses a Uniswap V3 Burn event func (ep *EventParser) parseUniswapV3Burn(log *types.Log, blockNumber uint64, timestamp uint64, txHash common.Hash) (*Event, error) { if len(log.Topics) != 3 || len(log.Data) != 32*4 { return nil, fmt.Errorf("invalid Uniswap V3 Burn event log") } // Parse the data fields amount0 := new(big.Int).SetBytes(log.Data[0:32]) amount1 := new(big.Int).SetBytes(log.Data[32:64]) event := &Event{ Type: RemoveLiquidity, Protocol: "UniswapV3", PoolAddress: log.Address, Amount0: amount0, Amount1: amount1, Timestamp: timestamp, TransactionHash: txHash, BlockNumber: blockNumber, } return event, nil } pkg/events/parser.go:400: 400-421 lines are duplicate of `pkg/events/parser.go:424-445` (dupl) func (ep *EventParser) parseUniswapV2Burn(log *types.Log, blockNumber uint64, timestamp uint64, txHash common.Hash) (*Event, error) { if len(log.Topics) != 2 || len(log.Data) != 32*2 { return nil, fmt.Errorf("invalid Uniswap V2 Burn event log") } // Parse the data fields amount0 := new(big.Int).SetBytes(log.Data[0:32]) amount1 := new(big.Int).SetBytes(log.Data[32:64]) event := &Event{ Type: RemoveLiquidity, Protocol: "UniswapV2", PoolAddress: log.Address, Amount0: amount0, Amount1: amount1, Timestamp: timestamp, TransactionHash: txHash, BlockNumber: blockNumber, } return event, nil } pkg/events/parser.go:424: 424-445 lines are duplicate of `pkg/events/parser.go:352-373` (dupl) func (ep *EventParser) parseUniswapV3Burn(log *types.Log, blockNumber uint64, timestamp uint64, txHash common.Hash) (*Event, error) { if len(log.Topics) != 3 || len(log.Data) != 32*4 { return nil, fmt.Errorf("invalid Uniswap V3 Burn event log") } // Parse the data fields amount0 := new(big.Int).SetBytes(log.Data[0:32]) amount1 := new(big.Int).SetBytes(log.Data[32:64]) event := &Event{ Type: RemoveLiquidity, Protocol: "UniswapV3", PoolAddress: log.Address, Amount0: amount0, Amount1: amount1, Timestamp: timestamp, TransactionHash: txHash, BlockNumber: blockNumber, } return event, nil } pkg/events/parser.go:534: 534-580 lines are duplicate of `pkg/events/parser.go:620-667` (dupl) func (ep *EventParser) parseSwapExactTokensForTokensFromTx(tx *types.Transaction, protocol string, blockNumber uint64, timestamp uint64) (*Event, error) { data := tx.Data()[4:] // Skip function selector if len(data) < 160 { // 5 parameters * 32 bytes return nil, fmt.Errorf("insufficient data for swapExactTokensForTokens") } // Parse ABI-encoded parameters amountIn := new(big.Int).SetBytes(data[0:32]) amountOutMin := new(big.Int).SetBytes(data[32:64]) // Extract path array from ABI-encoded data // Path is at offset 96 (64 + 32), and its length is at that position var token0, token1 common.Address if len(data) >= 128 { // Ensure we have enough data pathOffset := new(big.Int).SetBytes(data[64:96]).Uint64() if pathOffset < uint64(len(data)) && pathOffset+32 < uint64(len(data)) { pathLength := new(big.Int).SetBytes(data[pathOffset : pathOffset+32]).Uint64() if pathLength >= 40 { // At least 2 addresses (20 bytes each) // First token (token0) token0 = common.BytesToAddress(data[pathOffset+32 : pathOffset+52]) // Last token (token1) - assuming simple path with 2 tokens if pathLength >= 40 { token1 = common.BytesToAddress(data[pathOffset+52 : pathOffset+72]) } } } } event := &Event{ Type: Swap, Protocol: protocol, PoolAddress: *tx.To(), Token0: token0, Token1: token1, Amount0: amountIn, Amount1: amountOutMin, SqrtPriceX96: uint256.NewInt(0), Liquidity: uint256.NewInt(0), Tick: 0, Timestamp: timestamp, TransactionHash: tx.Hash(), BlockNumber: blockNumber, } return event, nil } pkg/events/parser.go:620: 620-667 lines are duplicate of `pkg/events/parser.go:534-580` (dupl) func (ep *EventParser) parseExactInputFromTx(tx *types.Transaction, protocol string, blockNumber uint64, timestamp uint64) (*Event, error) { data := tx.Data()[4:] // Skip function selector if len(data) < 160 { // 5 parameters * 32 bytes return nil, fmt.Errorf("insufficient data for exactInput") } // Parse ExactInputParams struct amountIn := new(big.Int).SetBytes(data[96:128]) amountOutMin := new(big.Int).SetBytes(data[128:160]) // Extract path from encoded path bytes (first parameter) // Path is encoded at offset 0, and its length is at offset 32 var token0, token1 common.Address if len(data) >= 96 { pathOffset := new(big.Int).SetBytes(data[0:32]).Uint64() if pathOffset < uint64(len(data)) && pathOffset+32 < uint64(len(data)) { pathLength := new(big.Int).SetBytes(data[pathOffset : pathOffset+32]).Uint64() if pathLength >= 23 { // At least tokenA(20) + fee(3) for Uniswap V3 encoded path // First token (20 bytes) token0 = common.BytesToAddress(data[pathOffset+32 : pathOffset+52]) // For multi-hop paths, find the last token // Simple approximation: skip to last token position if pathLength >= 43 { // tokenA(20) + fee(3) + tokenB(20) token1 = common.BytesToAddress(data[pathOffset+55 : pathOffset+75]) } } } } event := &Event{ Type: Swap, Protocol: protocol, PoolAddress: *tx.To(), Token0: token0, Token1: token1, Amount0: amountIn, Amount1: amountOutMin, SqrtPriceX96: uint256.NewInt(0), Liquidity: uint256.NewInt(0), Tick: 0, Timestamp: timestamp, TransactionHash: tx.Hash(), BlockNumber: blockNumber, } return event, nil } pkg/events/parser.go:28:10: string `Unknown` has 4 occurrences, make it a constant (goconst) return "Unknown" ^ pkg/events/parser.go:114:89: string `SushiSwap` has 4 occurrences, make it a constant (goconst) parser.knownPools[common.HexToAddress("0x905dfCD5649217c42684f23958568e533C711Aa3")] = "SushiSwap" // Test SushiSwap pool ^ pkg/events/parser.go:108:89: string `UniswapV3` has 12 occurrences, make it a constant (goconst) parser.knownPools[common.HexToAddress("0xC6962004f452bE9203591991D15f6b388e09E8D0")] = "UniswapV3" // USDC/WETH 0.05% ^ pkg/events/parser.go:208:10: string `UniswapV2` has 10 occurrences, make it a constant (goconst) return "UniswapV2" ^ pkg/events/parser.go:199:1: cyclomatic complexity 26 of func `(*EventParser).identifyProtocol` is high (> 15) (gocyclo) func (ep *EventParser) identifyProtocol(tx *types.Transaction) string { ^ pkg/events/parser.go:448:1: cyclomatic complexity 16 of func `(*EventParser).ParseTransaction` is high (> 15) (gocyclo) func (ep *EventParser) ParseTransaction(tx *types.Transaction, blockNumber uint64, timestamp uint64) ([]*Event, error) { ^ pkg/events/parser.go:548:1: `if len(data) >= 128` has complex nested blocks (complexity: 6) (nestif) if len(data) >= 128 { // Ensure we have enough data ^ pkg/events/parser.go:634:1: `if len(data) >= 96` has complex nested blocks (complexity: 6) (nestif) if len(data) >= 96 { ^ pkg/events/parser.go:682:1: `if len(data) >= 96` has complex nested blocks (complexity: 6) (nestif) if len(data) >= 96 { ^ pkg/events/parser.go:327:5: SA4003: no value of type int is greater than math.MaxInt64 (staticcheck) if amount0.Cmp(big.NewInt(0)) > 0x7fffffffffffffff { ^ pkg/events/parser.go:330:5: SA4003: no value of type int is greater than math.MaxInt64 (staticcheck) if amount1.Cmp(big.NewInt(0)) > 0x7fffffffffffffff { ^ pkg/events/parser_test.go:108:2: len: use assert.Len (testifylint) assert.Equal(t, initialCount+1, len(pools)) ^ pkg/events/parser_test.go:117:2: len: use assert.Len (testifylint) assert.Equal(t, initialCount+2, len(pools)) ^ pkg/events/parser_test.go:196:2: empty: use assert.Empty (testifylint) assert.Len(t, events, 0) ^ pkg/contracts/executor.go:364:29: G115: integer overflow conversion uint64 -> int64 (gosec) Nonce: big.NewInt(int64(nonce)), ^ pkg/contracts/executor.go:36:2: field `lastNonceUpdate` is unused (unused) lastNonceUpdate time.Time ^ internal/utils/utils.go:17:24: G115: integer overflow conversion uint64 -> int64 (gosec) return time.Unix(int64(timestamp), 0).Format("2006-01-02 15:04:05") ^ pkg/database/database.go:287:18: Error return value of `stmt.Close` is not checked (errcheck) defer stmt.Close() ^ pkg/database/database.go:347:18: Error return value of `stmt.Close` is not checked (errcheck) defer stmt.Close() ^ pkg/database/database.go:397:18: Error return value of `stmt.Close` is not checked (errcheck) defer stmt.Close() ^ pkg/database/database.go:432:18: Error return value of `rows.Close` is not checked (errcheck) defer rows.Close() ^ pkg/database/database.go:494:18: Error return value of `rows.Close` is not checked (errcheck) defer rows.Close() ^ pkg/database/database.go:140:20: Function 'initSchema' is too long (125 > 100) (funlen) func (d *Database) initSchema() error { ^ pkg/database/database.go:420:25: rows.Err must be checked (rowserrcheck) rows, err := d.db.Query(` ^ pkg/database/database.go:482:25: rows.Err must be checked (rowserrcheck) rows, err := d.db.Query(` ^ pkg/database/database.go:83:2: ST1003: struct field TokenId should be TokenID (stylecheck) TokenId *big.Int `json:"token_id"` ^ pkg/database/database.go:350:2: ST1003: var tokenId should be tokenID (stylecheck) tokenId := "" ^ pkg/database/database.go:499:76: ST1003: var tokenId should be tokenID (stylecheck) var txHash, poolAddr, factory, router, token0, token1, owner, recipient, tokenId string ^ cmd/swap-cli/main.go:446:7: string `uniswap-v3` has 4 occurrences, make it a constant (goconst) case "uniswap-v3": ^ cmd/swap-cli/main.go:448:7: string `uniswap-v2` has 3 occurrences, make it a constant (goconst) case "uniswap-v2": ^ cmd/swap-cli/main.go:310:20: G115: integer overflow conversion int64 -> uint64 (gosec) deadline := uint64(time.Now().Unix()) + c.Uint64("deadline") ^ cmd/swap-cli/main.go:41:6: Function 'main' is too long (142 > 100) (funlen) func main() { ^ cmd/swap-cli/main.go:126:13: unlambda: replace `func(c *cli.Context) error { return estimateGas(c) }` with `estimateGas` (gocritic) Action: func(c *cli.Context) error { ^ cmd/swap-cli/main.go:149:13: unlambda: replace `func(c *cli.Context) error { return checkAllowance(c) }` with `checkAllowance` (gocritic) Action: func(c *cli.Context) error { ^ cmd/swap-cli/main.go:173:13: unlambda: replace `func(c *cli.Context) error { return approveToken(c) }` with `approveToken` (gocritic) Action: func(c *cli.Context) error { ^ cmd/swap-cli/main.go:341:1: `if privateKeyHex != ""` has complex nested blocks (complexity: 6) (nestif) if privateKeyHex := c.String("private-key"); privateKeyHex != "" { ^ cmd/swap-cli/main.go:483:46: `(*SwapExecutor).executeUniswapV3Swap` - `ctx` is unused (unparam) func (se *SwapExecutor) executeUniswapV3Swap(ctx context.Context, params *SwapParams, router common.Address) error { ^ cmd/swap-cli/main.go:489:46: `(*SwapExecutor).executeUniswapV2Swap` - `ctx` is unused (unparam) func (se *SwapExecutor) executeUniswapV2Swap(ctx context.Context, params *SwapParams, router common.Address) error { ^ cmd/swap-cli/main.go:495:42: `(*SwapExecutor).executeSushiSwap` - `ctx` is unused (unparam) func (se *SwapExecutor) executeSushiSwap(ctx context.Context, params *SwapParams, router common.Address) error { ^ cmd/swap-cli/main.go:501:46: `(*SwapExecutor).executeCamelotV3Swap` - `ctx` is unused (unparam) func (se *SwapExecutor) executeCamelotV3Swap(ctx context.Context, params *SwapParams, router common.Address) error { ^ cmd/swap-cli/main.go:507:48: `(*SwapExecutor).executeTraderJoeV2Swap` - `ctx` is unused (unparam) func (se *SwapExecutor) executeTraderJoeV2Swap(ctx context.Context, params *SwapParams, router common.Address) error { ^ cmd/swap-cli/main.go:513:49: `(*SwapExecutor).executeKyberElasticSwap` - `ctx` is unused (unparam) func (se *SwapExecutor) executeKyberElasticSwap(ctx context.Context, params *SwapParams, router common.Address) error { ^ cmd/swap-cli/main.go:526:41: `(*SwapExecutor).estimateSwapGas` - `params` is unused (unparam) func (se *SwapExecutor) estimateSwapGas(params *SwapParams, protocol string) (uint64, error) { ^ pkg/monitoring/dashboard.go:279:27: Error return value of `(*encoding/json.Encoder).Encode` is not checked (errcheck) json.NewEncoder(w).Encode(d.stats) ^ pkg/monitoring/dashboard.go:287:27: Error return value of `(*encoding/json.Encoder).Encode` is not checked (errcheck) json.NewEncoder(w).Encode(d.stats.SystemHealth) ^ pkg/monitoring/dashboard.go:295:27: Error return value of `(*encoding/json.Encoder).Encode` is not checked (errcheck) json.NewEncoder(w).Encode(d.stats.TopOpportunities) ^ pkg/monitoring/dashboard.go:403:9: Error return value of `w.Write` is not checked (errcheck) w.Write([]byte(html)) ^ pkg/monitoring/dashboard.go:110:62: string `healthy` has 5 occurrences, make it a constant (goconst) dashboard.stats.SystemHealth.Components["rpc_connection"] = "healthy" ^ pkg/profitcalc/profit_calc.go:83:1: cognitive complexity 52 of func `(*ProfitCalculator).AnalyzeSwapOpportunity` is high (> 20) (gocognit) func (spc *ProfitCalculator) AnalyzeSwapOpportunity( ^ pkg/profitcalc/price_feed.go:91:1: cognitive complexity 23 of func `(*PriceFeed).GetMultiDEXPrice` is high (> 20) (gocognit) func (pf *PriceFeed) GetMultiDEXPrice(tokenA, tokenB common.Address) *MultiDEXPriceData { ^ pkg/profitcalc/profit_calc.go:209:36: string `Extreme` has 5 occurrences, make it a constant (goconst) if opportunity.SlippageRisk == "Extreme" { ^ pkg/profitcalc/slippage_protection.go:125:15: string `Low` has 4 occurrences, make it a constant (goconst) riskLevel = "Low" ^ pkg/profitcalc/profit_calc.go:170:31: string `Medium` has 6 occurrences, make it a constant (goconst) opportunity.SlippageRisk = "Medium" // Default to medium risk ^ pkg/profitcalc/slippage_protection.go:129:15: string `High` has 4 occurrences, make it a constant (goconst) riskLevel = "High" ^ pkg/profitcalc/opportunity_ranker.go:46:5: DefaultRankingWeights is a global variable (gochecknoglobals) var DefaultRankingWeights = RankingWeights{ ^ pkg/profitcalc/slippage_protection.go:66:3: assignOp: replace `estimatedSlippage = estimatedSlippage * (1 + tradeSizeFloat)` with `estimatedSlippage *= (1 + tradeSizeFloat)` (gocritic) estimatedSlippage = estimatedSlippage * (1 + tradeSizeFloat) ^ pkg/profitcalc/price_feed.go:100:1: `if (price.TokenA == tokenA && price.TokenB == tokenB) || (price.TokenA == tokenB && price.TokenB == tokenA)` has complex nested blocks (complexity: 5) (nestif) if (price.TokenA == tokenA && price.TokenB == tokenB) || ^ pkg/profitcalc/profit_calc.go:102:1: `if amountIn.Sign() > 0 && amountOut.Sign() > 0` has complex nested blocks (complexity: 30) (nestif) if amountIn.Sign() > 0 && amountOut.Sign() > 0 { ^ pkg/profitcalc/profit_calc.go:134:22: ST1023: should omit type *big.Float from declaration; it will be inferred from the right-hand side (stylecheck) var adjustedProfit *big.Float = grossProfit ^ pkg/profitcalc/price_feed.go:265:41: `(*PriceFeed).updatePriceFromDEX` - `ctx` is unused (unparam) func (pf *PriceFeed) updatePriceFromDEX(ctx context.Context, tokenA, tokenB common.Address, dexName string, factory common.Address) { ^ pkg/profitcalc/slippage_protection.go:151:53: `(*SlippageProtector).generateRecommendation` - `slippageBps` is unused (unparam) func (sp *SlippageProtector) generateRecommendation(slippageBps int64, tradeSizeRatio float64, riskLevel string) string { ^ pkg/profitcalc/profit_calc.go:88:23: unnecessary leading newline (whitespace) ) *SimpleOpportunity { ^ pkg/profitcalc/slippage_protection.go:45:22: unnecessary leading newline (whitespace) ) *SlippageAnalysis { ^ pkg/profitcalc/slippage_protection.go:176:15: unnecessary leading newline (whitespace) ) *big.Float { ^ pkg/marketmanager/manager_test.go:75:15: string `0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48_0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2` has 3 occurrences, make it a constant (goconst) rawTicker := "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48_0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2" ^ pkg/marketmanager/database.go:327:9: unnecessary conversion (unconvert) string(opportunity.Status), ^ pkg/marketmanager/manager.go:196:1: `if confirmed` has complex nested blocks (complexity: 7) (nestif) if confirmed { ^ pkg/marketmanager/manager_test.go:23:13: SA5011: possible nil pointer dereference (staticcheck) if manager.verificationWindow != 500*time.Millisecond { ^ pkg/marketmanager/manager_test.go:19:5: SA5011(related information): this check suggests that the pointer can be nil (staticcheck) if manager == nil { ^ pkg/marketmanager/arbitrage.go:193:46: `(*ArbitrageDetector).estimateGasCost` - `market1` is unused (unparam) func (ad *ArbitrageDetector) estimateGasCost(market1, market2 *Market) *big.Int { ^ pkg/uniswap/lookup/tables.go:11:2: sqrt10001Table is a global variable (gochecknoglobals) sqrt10001Table map[int]*big.Float ^ pkg/uniswap/lookup/tables.go:12:2: q96Table is a global variable (gochecknoglobals) q96Table *big.Int ^ pkg/uniswap/lookup/tables.go:13:2: q192Table is a global variable (gochecknoglobals) q192Table *big.Int ^ pkg/uniswap/lookup/tables.go:16:2: sqrt10001Once is a global variable (gochecknoglobals) sqrt10001Once sync.Once ^ pkg/uniswap/lookup/tables.go:17:2: q96Once is a global variable (gochecknoglobals) q96Once sync.Once ^ internal/secure/config_manager.go:85:9: ST1003: should not use underscores in Go names; var ciphertext_bytes should be ciphertextBytes (stylecheck) nonce, ciphertext_bytes := data[:nonceSize], data[nonceSize:] ^ pkg/patterns/pipeline.go:297:1: cognitive complexity 63 of func `(*FanOutFanIn).Process` is high (> 20) (gocognit) func (fofi *FanOutFanIn) Process(ctx context.Context, input <-chan interface{}, processor func(interface{}) (interface{}, error)) <-chan interface{} { ^ pkg/patterns/pipeline.go:442:1: cognitive complexity 56 of func `(*BackpressureHandler).HandleBackpressure` is high (> 20) (gocognit) func (bh *BackpressureHandler) HandleBackpressure(ctx context.Context, input <-chan interface{}, output chan interface{}) { ^ pkg/patterns/pipeline.go:88:1: cognitive complexity 23 of func `(*AdvancedPipeline).Start` is high (> 20) (gocognit) func (p *AdvancedPipeline) Start(input <-chan interface{}) <-chan interface{} { ^ pkg/patterns/pipeline.go:207:1: cognitive complexity 23 of func `(*WorkerPoolStage).Process` is high (> 20) (gocognit) func (wps *WorkerPoolStage) Process(ctx context.Context, input <-chan interface{}, output chan<- interface{}) error { ^ pkg/patterns/pipeline.go:465:1: `if len(buffer) >= bh.threshold` has complex nested blocks (complexity: 7) (nestif) if len(buffer) >= bh.threshold { ^ pkg/patterns/pipeline.go:531:5: SA4011: ineffective break statement. Did you mean to break out of the outer loop? (staticcheck) break ^ pkg/patterns/pipeline.go:213:11: `(*WorkerPoolStage).Process$1` - `workerID` is unused (unparam) go func(workerID int) { ^ pkg/circuit/breaker.go:199:2: singleCaseSwitch: should rewrite switch statement to if statement (gocritic) switch state { ^ pkg/metrics/metrics.go:336:9: Error return value of `w.Write` is not checked (errcheck) w.Write([]byte(response)) ^ pkg/metrics/metrics.go:345:9: Error return value of `w.Write` is not checked (errcheck) w.Write([]byte(`{"status": "healthy", "timestamp": "` + time.Now().Format(time.RFC3339) + `"}`)) ^ tools/tests/ci_agent_bridge_test.go:13:2: SA1019: "io/ioutil" has been deprecated since Go 1.19: As of Go 1.16, the same functionality is now provided by package [io] or package [os], and those implementations should be preferred in new code. See the specific function documentation for details. (staticcheck) "io/ioutil" ^ tools/simulation/main.go:130:1: cognitive complexity 26 of func `computeSummary` is high (> 20) (gocognit) func computeSummary(vectorPath string, dataset simulationVectors) (simulationSummary, error) { ^ tools/simulation/main.go:303:12: G301: Expect directory permissions to be 0750 or less (gosec) if err := os.MkdirAll(reportDir, 0o755); err != nil { ^ tools/simulation/main.go:312:12: G306: Expect WriteFile permissions to be 0600 or less (gosec) if err := os.WriteFile(jsonPath, jsonBytes, 0o644); err != nil { ^ tools/simulation/main.go:77:5: weiToEthScale is a global variable (gochecknoglobals) var weiToEthScale = big.NewRat(1, 1_000_000_000_000_000_000) ^ pkg/arbitrum/common/types.go:142:2: ST1003: struct field PositionId should be PositionID (stylecheck) PositionId *big.Int `json:"position_id,omitempty"` ^ pkg/arbitrum/market/logging.go:12:12: G301: Expect directory permissions to be 0750 or less (gosec) if err := os.MkdirAll("logs", 0755); err != nil { ^ pkg/arbitrum/market/logging.go:17:25: G302: Expect file permissions to be 0600 or less (gosec) marketScanFile, err := os.OpenFile(md.config.Logging.Files["market_scans"], os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0644) ^ pkg/arbitrum/market/logging.go:24:18: G302: Expect file permissions to be 0600 or less (gosec) arbFile, err := os.OpenFile(md.config.Logging.Files["arbitrage"], os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0644) ^ pkg/arbitrum/market/market_discovery.go:58:19: G115: integer overflow conversion int -> uint8 (gosec) Decimals: uint8(token.Decimals), ^ pkg/arbitrum/market/logging.go:34:28: func `(*MarketDiscovery).logMarketScan` is unused (unused) func (md *MarketDiscovery) logMarketScan(result *MarketScanResult) error { ^ pkg/arbitrum/market/logging.go:48:28: func `(*MarketDiscovery).logArbitrageOpportunity` is unused (unused) func (md *MarketDiscovery) logArbitrageOpportunity(opp *ArbitrageOpportunityDetailed) error { ^ pkg/arbitrum/market/logging.go:62:28: func `(*MarketDiscovery).logPoolDiscovery` is unused (unused) func (md *MarketDiscovery) logPoolDiscovery(result *PoolDiscoveryResult) error { ^ pkg/arbitrum/market/market_discovery.go:136:6: func `abs` is unused (unused) func abs(x float64) float64 { ^ pkg/arbitrum/market/types.go:18:2: field `mathCalc` is unused (unused) mathCalc interface{} // exchangeMath.MathCalculator ^ pkg/transport/tcp_transport.go:291: 291-316 lines are duplicate of `pkg/transport/unix_transport.go:227-252` (dupl) func (tt *TCPTransport) acceptConnections() { for { select { case <-tt.ctx.Done(): return default: conn, err := tt.listener.Accept() if err != nil { if tt.ctx.Err() != nil { return // Context cancelled } tt.metrics.Errors++ continue } connID := fmt.Sprintf("server_%d", time.Now().UnixNano()) tt.mu.Lock() tt.connections[connID] = conn tt.metrics.Connections = len(tt.connections) tt.mu.Unlock() go tt.handleConnection(connID, conn) } } } pkg/transport/unix_transport.go:227: 227-252 lines are duplicate of `pkg/transport/tcp_transport.go:291-316` (dupl) func (ut *UnixSocketTransport) acceptConnections() { for { select { case <-ut.ctx.Done(): return default: conn, err := ut.listener.Accept() if err != nil { if ut.ctx.Err() != nil { return // Context cancelled } ut.metrics.Errors++ continue } connID := fmt.Sprintf("server_%d", time.Now().UnixNano()) ut.mu.Lock() ut.connections[connID] = conn ut.metrics.Connections = len(ut.connections) ut.mu.Unlock() go ut.handleConnection(connID, conn) } } } pkg/math/dex_math.go:172: 172-203 lines are duplicate of `pkg/math/exchange_math.go:180-211` (dupl) func (k *KyberMath) CalculateAmountOutKyber(amountIn, sqrtPriceX96, liquidity *big.Int, fee uint32) (*big.Int, error) { if amountIn.Sign() <= 0 || sqrtPriceX96.Sign() <= 0 || liquidity.Sign() <= 0 { return nil, fmt.Errorf("invalid parameters") } // Kyber Elastic uses concentrated liquidity similar to Uniswap V3 // but with different fee structures and mechanisms if fee == 0 { fee = 1000 // Default 0.1% for Kyber } // Apply fee: amountInWithFee = amountIn * (1000000 - fee) / 1000000 feeFactor := big.NewInt(int64(1000000 - fee)) amountInWithFee := new(big.Int).Mul(amountIn, feeFactor) amountInWithFee.Div(amountInWithFee, big.NewInt(1000000)) // Calculate price change using liquidity and amountIn Q96 := new(big.Int).Lsh(big.NewInt(1), 96) priceChange := new(big.Int).Mul(amountInWithFee, Q96) priceChange.Div(priceChange, liquidity) // Calculate new sqrt price after swap newSqrtPriceX96 := new(big.Int).Add(sqrtPriceX96, priceChange) // Calculate amount out based on price difference and liquidity priceDiff := new(big.Int).Sub(newSqrtPriceX96, sqrtPriceX96) amountOut := new(big.Int).Mul(liquidity, priceDiff) amountOut.Div(amountOut, sqrtPriceX96) return amountOut, nil } pkg/math/exchange_math.go:180: 180-211 lines are duplicate of `pkg/math/exchange_math.go:499-530` (dupl) func (u *UniswapV3Math) CalculateAmountOut(amountIn, sqrtPriceX96, liquidity *big.Int, fee uint32) (*big.Int, error) { if amountIn.Sign() <= 0 || sqrtPriceX96.Sign() <= 0 || liquidity.Sign() <= 0 { return nil, fmt.Errorf("invalid parameters") } if fee == 0 { fee = 3000 // Default 0.3% } // Apply fee: amountInWithFee = amountIn * (1000000 - fee) / 1000000 feeFactor := big.NewInt(int64(1000000 - fee)) amountInWithFee := new(big.Int).Mul(amountIn, feeFactor) amountInWithFee.Div(amountInWithFee, big.NewInt(1000000)) // Simplified V3 calculation (for exact implementation, need tick math) // This approximates the swap for small amounts // Calculate price change Q96 := new(big.Int).Lsh(big.NewInt(1), 96) priceChange := new(big.Int).Mul(amountInWithFee, Q96) priceChange.Div(priceChange, liquidity) // New sqrt price newSqrtPriceX96 := new(big.Int).Add(sqrtPriceX96, priceChange) // Calculate amount out using price difference priceDiff := new(big.Int).Sub(newSqrtPriceX96, sqrtPriceX96) amountOut := new(big.Int).Mul(liquidity, priceDiff) amountOut.Div(amountOut, sqrtPriceX96) return amountOut, nil } pkg/math/exchange_math.go:499: 499-530 lines are duplicate of `pkg/math/dex_math.go:172-203` (dupl) func (k *KyberMath) CalculateAmountOut(amountIn, sqrtPriceX96, liquidity *big.Int, fee uint32) (*big.Int, error) { if amountIn.Sign() <= 0 || sqrtPriceX96.Sign() <= 0 || liquidity.Sign() <= 0 { return nil, fmt.Errorf("invalid parameters") } // Kyber Elastic uses concentrated liquidity similar to Uniswap V3 // but with different fee structures and mechanisms if fee == 0 { fee = 1000 // Default 0.1% for Kyber } // Apply fee: amountInWithFee = amountIn * (1000000 - fee) / 1000000 feeFactor := big.NewInt(int64(1000000 - fee)) amountInWithFee := new(big.Int).Mul(amountIn, feeFactor) amountInWithFee.Div(amountInWithFee, big.NewInt(1000000)) // Calculate price change using liquidity and amountIn Q96 := new(big.Int).Lsh(big.NewInt(1), 96) priceChange := new(big.Int).Mul(amountInWithFee, Q96) priceChange.Div(priceChange, liquidity) // Calculate new sqrt price after swap newSqrtPriceX96 := new(big.Int).Add(sqrtPriceX96, priceChange) // Calculate amount out based on price difference and liquidity priceDiff := new(big.Int).Sub(newSqrtPriceX96, sqrtPriceX96) amountOut := new(big.Int).Mul(liquidity, priceDiff) amountOut.Div(amountOut, sqrtPriceX96) return amountOut, nil } pkg/math/price_impact.go:52: 52-76 lines are duplicate of `pkg/math/price_impact.go:79-103` (dupl) func (pic *PriceImpactCalculator) calculateAlgebraPriceImpact(amountIn, reserveIn, reserveOut *big.Int) (float64, error) { if amountIn.Sign() <= 0 || reserveIn.Sign() <= 0 || reserveOut.Sign() <= 0 { return 0, fmt.Errorf("invalid amounts") } // Calculate new reserves after swap amountOut, err := NewAlgebraV1Math().CalculateAmountOutAlgebra(amountIn, reserveIn, reserveOut, 500) if err != nil { return 0, err } newReserveIn := new(big.Int).Add(reserveIn, amountIn) newReserveOut := new(big.Int).Sub(reserveOut, amountOut) // Calculate price before and after swap priceBefore := new(big.Float).Quo(new(big.Float).SetInt(reserveOut), new(big.Float).SetInt(reserveIn)) priceAfter := new(big.Float).Quo(new(big.Float).SetInt(newReserveOut), new(big.Float).SetInt(newReserveIn)) // Calculate price impact impact := new(big.Float).Sub(priceBefore, priceAfter) impact.Quo(impact, priceBefore) impactFloat, _ := impact.Float64() return math.Abs(impactFloat), nil } pkg/math/price_impact.go:79: 79-103 lines are duplicate of `pkg/math/price_impact.go:52-76` (dupl) func (pic *PriceImpactCalculator) calculateIntegralPriceImpact(amountIn, reserveIn, reserveOut *big.Int) (float64, error) { if amountIn.Sign() <= 0 || reserveIn.Sign() <= 0 || reserveOut.Sign() <= 0 { return 0, fmt.Errorf("invalid amounts") } // Calculate new reserves after swap amountOut, err := NewIntegralMath().CalculateAmountOutIntegral(amountIn, reserveIn, reserveOut, 100) if err != nil { return 0, err } newReserveIn := new(big.Int).Add(reserveIn, amountIn) newReserveOut := new(big.Int).Sub(reserveOut, amountOut) // Calculate price before and after swap priceBefore := new(big.Float).Quo(new(big.Float).SetInt(reserveOut), new(big.Float).SetInt(reserveIn)) priceAfter := new(big.Float).Quo(new(big.Float).SetInt(newReserveOut), new(big.Float).SetInt(newReserveIn)) // Calculate price impact impact := new(big.Float).Sub(priceBefore, priceAfter) impact.Quo(impact, priceBefore) impactFloat, _ := impact.Float64() return math.Abs(impactFloat), nil } pkg/math/dex_math.go:73: 73-99 lines are duplicate of `pkg/math/dex_math.go:136-162` (dupl) func (a *AlgebraV1Math) CalculateAmountOutAlgebra(amountIn, reserveIn, reserveOut *big.Int, fee uint32) (*big.Int, error) { if amountIn.Sign() <= 0 || reserveIn.Sign() <= 0 || reserveOut.Sign() <= 0 { return nil, fmt.Errorf("invalid amounts") } // Algebra uses a dynamic fee model based on volatility if fee == 0 { fee = 500 // Default 0.05% for Algebra } // Calculate fee amount (10000 = 100%) feeFactor := big.NewInt(int64(10000 - fee)) amountInWithFee := new(big.Int).Mul(amountIn, feeFactor) // For Algebra, we also consider dynamic fees and volatility // This is a simplified implementation based on Uniswap V2 with dynamic fee consideration numerator := new(big.Int).Mul(amountInWithFee, reserveOut) denominator := new(big.Int).Mul(reserveIn, big.NewInt(10000)) denominator.Add(denominator, amountInWithFee) if denominator.Sign() == 0 { return nil, fmt.Errorf("division by zero in amountOut calculation") } amountOut := new(big.Int).Div(numerator, denominator) return amountOut, nil } pkg/math/dex_math.go:136: 136-162 lines are duplicate of `pkg/math/dex_math.go:206-232` (dupl) func (i *IntegralMath) CalculateAmountOutIntegral(amountIn, reserveIn, reserveOut *big.Int, baseFee uint32) (*big.Int, error) { if amountIn.Sign() <= 0 || reserveIn.Sign() <= 0 || reserveOut.Sign() <= 0 { return nil, fmt.Errorf("invalid amounts") } // Integral uses a base fee model for more efficient gas usage // Calculate effective fee based on base fee and market conditions if baseFee == 0 { baseFee = 100 // Default base fee of 0.01% } // For Integral, we implement the base fee model feeFactor := big.NewInt(int64(10000 - baseFee)) amountInWithFee := new(big.Int).Mul(amountIn, feeFactor) // Calculate amount out with base fee numerator := new(big.Int).Mul(amountInWithFee, reserveOut) denominator := new(big.Int).Mul(reserveIn, big.NewInt(10000)) denominator.Add(denominator, amountInWithFee) if denominator.Sign() == 0 { return nil, fmt.Errorf("division by zero in amountOut calculation") } amountOut := new(big.Int).Div(numerator, denominator) return amountOut, nil } pkg/math/dex_math.go:206: 206-232 lines are duplicate of `pkg/math/dex_math.go:73-99` (dupl) func (k *KyberMath) CalculateAmountOutKyberClassic(amountIn, reserveIn, reserveOut *big.Int, fee uint32) (*big.Int, error) { if amountIn.Sign() <= 0 || reserveIn.Sign() <= 0 || reserveOut.Sign() <= 0 { return nil, fmt.Errorf("invalid amounts") } // Kyber Classic has a different mechanism than Elastic // This is a simplified implementation based on Kyber Classic formula if fee == 0 { fee = 2500 // Default 0.25% for Kyber Classic } // Calculate fee amount feeFactor := big.NewInt(int64(10000 - fee)) amountInWithFee := new(big.Int).Mul(amountIn, feeFactor) // Calculate amount out with consideration for Kyber's amplification factor numerator := new(big.Int).Mul(amountInWithFee, reserveOut) denominator := new(big.Int).Mul(reserveIn, big.NewInt(10000)) denominator.Add(denominator, amountInWithFee) if denominator.Sign() == 0 { return nil, fmt.Errorf("division by zero in amountOut calculation") } amountOut := new(big.Int).Div(numerator, denominator) return amountOut, nil } pkg/math/exchange_math.go:159: 159-170 lines are duplicate of `pkg/math/exchange_math.go:307-317` (dupl) func (u *UniswapV2Math) CalculateSlippage(expectedOut, actualOut *big.Int) (float64, error) { if expectedOut.Sign() <= 0 || actualOut.Sign() <= 0 { return 0, fmt.Errorf("invalid amounts") } // Slippage = (expectedOut - actualOut) / expectedOut diff := new(big.Float).Sub(new(big.Float).SetInt(expectedOut), new(big.Float).SetInt(actualOut)) slippage := new(big.Float).Quo(diff, new(big.Float).SetInt(expectedOut)) slippageFloat, _ := slippage.Float64() return math.Abs(slippageFloat), nil } pkg/math/exchange_math.go:307: 307-317 lines are duplicate of `pkg/math/exchange_math.go:484-494` (dupl) func (u *UniswapV3Math) CalculateSlippage(expectedOut, actualOut *big.Int) (float64, error) { if expectedOut.Sign() <= 0 || actualOut.Sign() <= 0 { return 0, fmt.Errorf("invalid amounts") } diff := new(big.Float).Sub(new(big.Float).SetInt(expectedOut), new(big.Float).SetInt(actualOut)) slippage := new(big.Float).Quo(diff, new(big.Float).SetInt(expectedOut)) slippageFloat, _ := slippage.Float64() return math.Abs(slippageFloat), nil } pkg/math/exchange_math.go:484: 484-494 lines are duplicate of `pkg/math/exchange_math.go:619-629` (dupl) func (c *CurveMath) CalculateSlippage(expectedOut, actualOut *big.Int) (float64, error) { if expectedOut.Sign() <= 0 || actualOut.Sign() <= 0 { return 0, fmt.Errorf("invalid amounts") } diff := new(big.Float).Sub(new(big.Float).SetInt(expectedOut), new(big.Float).SetInt(actualOut)) slippage := new(big.Float).Quo(diff, new(big.Float).SetInt(expectedOut)) slippageFloat, _ := slippage.Float64() return math.Abs(slippageFloat), nil } pkg/math/exchange_math.go:619: 619-629 lines are duplicate of `pkg/math/exchange_math.go:774-785` (dupl) func (k *KyberMath) CalculateSlippage(expectedOut, actualOut *big.Int) (float64, error) { if expectedOut.Sign() <= 0 || actualOut.Sign() <= 0 { return 0, fmt.Errorf("invalid amounts") } diff := new(big.Float).Sub(new(big.Float).SetInt(expectedOut), new(big.Float).SetInt(actualOut)) slippage := new(big.Float).Quo(diff, new(big.Float).SetInt(expectedOut)) slippageFloat, _ := slippage.Float64() return math.Abs(slippageFloat), nil } pkg/math/exchange_math.go:774: 774-785 lines are duplicate of `pkg/math/exchange_math.go:847-858` (dupl) func (b *BalancerMath) CalculateSlippage(expectedOut, actualOut *big.Int) (float64, error) { if expectedOut.Sign() <= 0 || actualOut.Sign() <= 0 { return 0, fmt.Errorf("invalid amounts") } // Slippage = (expectedOut - actualOut) / expectedOut diff := new(big.Float).Sub(new(big.Float).SetInt(expectedOut), new(big.Float).SetInt(actualOut)) slippage := new(big.Float).Quo(diff, new(big.Float).SetInt(expectedOut)) slippageFloat, _ := slippage.Float64() return math.Abs(slippageFloat), nil } pkg/math/exchange_math.go:847: 847-858 lines are duplicate of `pkg/math/exchange_math.go:159-170` (dupl) func (c *ConstantSumMath) CalculateSlippage(expectedOut, actualOut *big.Int) (float64, error) { if expectedOut.Sign() <= 0 || actualOut.Sign() <= 0 { return 0, fmt.Errorf("invalid amounts") } // Slippage = (expectedOut - actualOut) / expectedOut diff := new(big.Float).Sub(new(big.Float).SetInt(expectedOut), new(big.Float).SetInt(actualOut)) slippage := new(big.Float).Quo(diff, new(big.Float).SetInt(expectedOut)) slippageFloat, _ := slippage.Float64() return math.Abs(slippageFloat), nil } pkg/scanner/analysis/pool_analyzer.go:144: 144-165 lines are duplicate of `pkg/scanner/analysis/pool_analyzer.go:168-189` (dupl) func (l *LiquidityAnalyzer) getTokenPriceUSD(tokenAddr common.Address) float64 { // Known token prices (in a production system, this would query price oracles) knownPrices := map[common.Address]float64{ common.HexToAddress("0x82af49447d8a07e3bd95bd0d56f35241523fbab1"): 2000.0, // WETH common.HexToAddress("0xaf88d065e77c8cc2239327c5edb3a432268e5831"): 1.0, // USDC common.HexToAddress("0xff970a61a04b1ca14834a43f5de4533ebddb5cc8"): 1.0, // USDC.e common.HexToAddress("0xfd086bc7cd5c481dcc9c85ebe478a1c0b69fcbb9"): 1.0, // USDT common.HexToAddress("0x2f2a2543b76a4166549f7aab2e75bef0aefc5b0f"): 43000.0, // WBTC common.HexToAddress("0x912ce59144191c1204e64559fe8253a0e49e6548"): 0.75, // ARB common.HexToAddress("0xfc5a1a6eb076a2c7ad06ed22c90d7e710e35ad0a"): 45.0, // GMX common.HexToAddress("0xf97f4df75117a78c1a5a0dbb814af92458539fb4"): 12.0, // LINK common.HexToAddress("0xfa7f8980b0f1e64a2062791cc3b0871572f1f7f0"): 8.0, // UNI common.HexToAddress("0xba5ddd1f9d7f570dc94a51479a000e3bce967196"): 85.0, // AAVE } if price, exists := knownPrices[tokenAddr]; exists { return price } // For unknown tokens, return 0 (in production, would query price oracle or DEX) return 0.0 } pkg/scanner/analysis/pool_analyzer.go:168: 168-189 lines are duplicate of `pkg/scanner/analysis/pool_analyzer.go:144-165` (dupl) func (l *LiquidityAnalyzer) getTokenDecimals(tokenAddr common.Address) uint8 { // Known token decimals knownDecimals := map[common.Address]uint8{ common.HexToAddress("0x82af49447d8a07e3bd95bd0d56f35241523fbab1"): 18, // WETH common.HexToAddress("0xaf88d065e77c8cc2239327c5edb3a432268e5831"): 6, // USDC common.HexToAddress("0xff970a61a04b1ca14834a43f5de4533ebddb5cc8"): 6, // USDC.e common.HexToAddress("0xfd086bc7cd5c481dcc9c85ebe478a1c0b69fcbb9"): 6, // USDT common.HexToAddress("0x2f2a2543b76a4166549f7aab2e75bef0aefc5b0f"): 8, // WBTC common.HexToAddress("0x912ce59144191c1204e64559fe8253a0e49e6548"): 18, // ARB common.HexToAddress("0xfc5a1a6eb076a2c7ad06ed22c90d7e710e35ad0a"): 18, // GMX common.HexToAddress("0xf97f4df75117a78c1a5a0dbb814af92458539fb4"): 18, // LINK common.HexToAddress("0xfa7f8980b0f1e64a2062791cc3b0871572f1f7f0"): 18, // UNI common.HexToAddress("0xba5ddd1f9d7f570dc94a51479a000e3bce967196"): 18, // AAVE } if decimals, exists := knownDecimals[tokenAddr]; exists { return decimals } // Default to 18 for unknown tokens return 18 } pkg/scanner/swap/analyzer.go:511: 511-532 lines are duplicate of `pkg/scanner/swap/analyzer.go:535-556` (dupl) func (s *SwapAnalyzer) getTokenPriceUSD(tokenAddr common.Address) float64 { // Known token prices (in a production system, this would query price oracles) knownPrices := map[common.Address]float64{ common.HexToAddress("0x82af49447d8a07e3bd95bd0d56f35241523fbab1"): 2000.0, // WETH common.HexToAddress("0xaf88d065e77c8cc2239327c5edb3a432268e5831"): 1.0, // USDC common.HexToAddress("0xff970a61a04b1ca14834a43f5de4533ebddb5cc8"): 1.0, // USDC.e common.HexToAddress("0xfd086bc7cd5c481dcc9c85ebe478a1c0b69fcbb9"): 1.0, // USDT common.HexToAddress("0x2f2a2543b76a4166549f7aab2e75bef0aefc5b0f"): 43000.0, // WBTC common.HexToAddress("0x912ce59144191c1204e64559fe8253a0e49e6548"): 0.75, // ARB common.HexToAddress("0xfc5a1a6eb076a2c7ad06ed22c90d7e710e35ad0a"): 45.0, // GMX common.HexToAddress("0xf97f4df75117a78c1a5a0dbb814af92458539fb4"): 12.0, // LINK common.HexToAddress("0xfa7f8980b0f1e64a2062791cc3b0871572f1f7f0"): 8.0, // UNI common.HexToAddress("0xba5ddd1f9d7f570dc94a51479a000e3bce967196"): 85.0, // AAVE } if price, exists := knownPrices[tokenAddr]; exists { return price } // For unknown tokens, return 0 (in production, would query price oracle or DEX) return 0.0 } pkg/scanner/swap/analyzer.go:535: 535-556 lines are duplicate of `pkg/scanner/swap/analyzer.go:511-532` (dupl) func (s *SwapAnalyzer) getTokenDecimals(tokenAddr common.Address) uint8 { // Known token decimals knownDecimals := map[common.Address]uint8{ common.HexToAddress("0x82af49447d8a07e3bd95bd0d56f35241523fbab1"): 18, // WETH common.HexToAddress("0xaf88d065e77c8cc2239327c5edb3a432268e5831"): 6, // USDC common.HexToAddress("0xff970a61a04b1ca14834a43f5de4533ebddb5cc8"): 6, // USDC.e common.HexToAddress("0xfd086bc7cd5c481dcc9c85ebe478a1c0b69fcbb9"): 6, // USDT common.HexToAddress("0x2f2a2543b76a4166549f7aab2e75bef0aefc5b0f"): 8, // WBTC common.HexToAddress("0x912ce59144191c1204e64559fe8253a0e49e6548"): 18, // ARB common.HexToAddress("0xfc5a1a6eb076a2c7ad06ed22c90d7e710e35ad0a"): 18, // GMX common.HexToAddress("0xf97f4df75117a78c1a5a0dbb814af92458539fb4"): 18, // LINK common.HexToAddress("0xfa7f8980b0f1e64a2062791cc3b0871572f1f7f0"): 18, // UNI common.HexToAddress("0xba5ddd1f9d7f570dc94a51479a000e3bce967196"): 18, // AAVE } if decimals, exists := knownDecimals[tokenAddr]; exists { return decimals } // Default to 18 for unknown tokens return 18 } pkg/arbitrum/parser/core.go:236: 236-261 lines are duplicate of `pkg/arbitrum/parser/core.go:458-482` (dupl) func (p *sophisticatedABIDecoder) decodeExactInputSingle(data []byte) (*SwapEvent, error) { if len(data) < 224 { // 7 * 32 bytes for the struct return nil, fmt.Errorf("data too short for exactInputSingle") } // Parse ExactInputSingleParams struct tokenIn := common.BytesToAddress(data[12:32]) tokenOut := common.BytesToAddress(data[44:64]) fee := new(big.Int).SetBytes(data[64:96]) recipient := common.BytesToAddress(data[108:128]) deadline := new(big.Int).SetBytes(data[128:160]) amountIn := new(big.Int).SetBytes(data[160:192]) amountOutMinimum := new(big.Int).SetBytes(data[192:224]) return &SwapEvent{ Timestamp: time.Now(), Protocol: "uniswap_v3", TokenIn: tokenIn, TokenOut: tokenOut, AmountIn: amountIn, AmountOut: amountOutMinimum, Recipient: recipient, Fee: fee.Uint64(), Deadline: deadline.Uint64(), }, nil } pkg/arbitrum/parser/core.go:458: 458-482 lines are duplicate of `pkg/arbitrum/parser/core.go:236-261` (dupl) func (p *sophisticatedABIDecoder) decodeExactOutputSingle(data []byte) (*SwapEvent, error) { if len(data) < 224 { return nil, fmt.Errorf("data too short for exactOutputSingle") } tokenIn := common.BytesToAddress(data[12:32]) tokenOut := common.BytesToAddress(data[44:64]) fee := new(big.Int).SetBytes(data[64:96]) recipient := common.BytesToAddress(data[108:128]) deadline := new(big.Int).SetBytes(data[128:160]) amountOut := new(big.Int).SetBytes(data[160:192]) amountInMaximum := new(big.Int).SetBytes(data[192:224]) return &SwapEvent{ Timestamp: time.Now(), Protocol: "uniswap_v3", TokenIn: tokenIn, TokenOut: tokenOut, AmountIn: amountInMaximum, AmountOut: amountOut, Recipient: recipient, Fee: fee.Uint64(), Deadline: deadline.Uint64(), }, nil } pkg/arbitrum/parser.go:670: 670-819 lines are duplicate of `pkg/arbitrum/parser.go:858-1011` (dupl) func (p *L2MessageParser) parseExactOutputSingle(interaction *DEXInteraction, data []byte) (*DEXInteraction, error) { // Validate inputs if interaction == nil { return nil, fmt.Errorf("interaction is nil") } if data == nil { return nil, fmt.Errorf("data is nil") } // Uniswap V3 exactOutputSingle structure: // struct ExactOutputSingleParams { // address tokenIn; // address tokenOut; // uint24 fee; // address recipient; // uint256 deadline; // uint256 amountOut; // uint256 amountInMaximum; // uint160 sqrtPriceLimitX96; // } // Validate minimum data length (at least 8 parameters * 32 bytes each) if len(data) < 256 { return nil, fmt.Errorf("insufficient data for exactOutputSingle: %d bytes", len(data)) } // Parse parameters with bounds checking // tokenIn (first parameter) - bytes 0-31, address is in last 20 bytes (12-31) if len(data) >= 32 { interaction.TokenIn = common.BytesToAddress(data[12:32]) } // tokenOut (second parameter) - bytes 32-63, address is in last 20 bytes (44-63) if len(data) >= 64 { interaction.TokenOut = common.BytesToAddress(data[44:64]) } // recipient (fourth parameter) - bytes 96-127, address is in last 20 bytes (108-127) if len(data) >= 128 { interaction.Recipient = common.BytesToAddress(data[108:128]) } // deadline (fifth parameter) - bytes 128-159, uint64 is in last 8 bytes (152-159) if len(data) >= 160 { interaction.Deadline = binary.BigEndian.Uint64(data[152:160]) } // amountOut (sixth parameter) - bytes 160-191 if len(data) >= 192 { amountOut := new(big.Int).SetBytes(data[160:192]) // Validate amount is reasonable (not negative) if amountOut.Sign() < 0 { return nil, fmt.Errorf("negative amountOut") } interaction.AmountOut = amountOut } // amountInMaximum (seventh parameter) - bytes 192-223 if len(data) >= 224 { amountInMax := new(big.Int).SetBytes(data[192:224]) // Validate amount is reasonable (not negative) if amountInMax.Sign() < 0 { return nil, fmt.Errorf("negative amountInMaximum") } interaction.AmountIn = amountInMax } // Set default values for fields that might not be parsed if interaction.AmountOut == nil { interaction.AmountOut = big.NewInt(0) } // Validate that we have required fields if interaction.TokenIn == (common.Address{}) && interaction.TokenOut == (common.Address{}) { // If both are zero, we likely don't have valid data return nil, fmt.Errorf("unable to parse token addresses from data") } return interaction, nil } // parseExactOutput parses Uniswap V3 exact output multi-hop swap func (p *L2MessageParser) parseExactOutput(interaction *DEXInteraction, data []byte) (*DEXInteraction, error) { // Validate inputs if interaction == nil { return nil, fmt.Errorf("interaction is nil") } if data == nil { return nil, fmt.Errorf("data is nil") } // Uniswap V3 exactOutput structure: // function exactOutput(ExactOutputParams calldata params) // struct ExactOutputParams { // bytes path; // address recipient; // uint256 deadline; // uint256 amountOut; // uint256 amountInMaximum; // } // Validate minimum data length (at least 5 parameters * 32 bytes each) if len(data) < 160 { return nil, fmt.Errorf("insufficient data for exactOutput: %d bytes", len(data)) } // Parse parameters with bounds checking // path offset (first parameter) - bytes 0-31 // For now, we'll extract tokens from path if possible // In a full implementation, we'd parse the entire path bytes // recipient (second parameter) - bytes 32-63, address is in last 20 bytes (44-63) if len(data) >= 64 { interaction.Recipient = common.BytesToAddress(data[44:64]) } // deadline (third parameter) - bytes 64-95, uint64 is in last 8 bytes (88-95) if len(data) >= 96 { interaction.Deadline = binary.BigEndian.Uint64(data[88:96]) } // amountOut (fourth parameter) - bytes 96-127 if len(data) >= 128 { amountOut := new(big.Int).SetBytes(data[96:128]) // Validate amount is reasonable (not negative) if amountOut.Sign() < 0 { return nil, fmt.Errorf("negative amountOut") } interaction.AmountOut = amountOut } // amountInMaximum (fifth parameter) - bytes 128-159 if len(data) >= 160 { amountInMax := new(big.Int).SetBytes(data[128:160]) // Validate amount is reasonable (not negative) if amountInMax.Sign() < 0 { return nil, fmt.Errorf("negative amountInMaximum") } interaction.AmountIn = amountInMax } // Set default values for fields that might not be parsed if interaction.AmountOut == nil { interaction.AmountOut = big.NewInt(0) } return interaction, nil } pkg/arbitrum/parser.go:858: 858-1011 lines are duplicate of `pkg/arbitrum/parser.go:670-819` (dupl) func (p *L2MessageParser) parseExactInputSingle(interaction *DEXInteraction, data []byte) (*DEXInteraction, error) { // Validate inputs if interaction == nil { return nil, fmt.Errorf("interaction is nil") } if data == nil { return nil, fmt.Errorf("data is nil") } // Uniswap V3 exactInputSingle structure: // struct ExactInputSingleParams { // address tokenIn; // address tokenOut; // uint24 fee; // address recipient; // uint256 deadline; // uint256 amountIn; // uint256 amountOutMinimum; // uint160 sqrtPriceLimitX96; // } // Validate minimum data length (at least 8 parameters * 32 bytes each) if len(data) < 256 { return nil, fmt.Errorf("insufficient data for exactInputSingle: %d bytes", len(data)) } // Parse parameters with bounds checking // tokenIn (first parameter) - bytes 0-31, address is in last 20 bytes (12-31) if len(data) >= 32 { interaction.TokenIn = common.BytesToAddress(data[12:32]) } // tokenOut (second parameter) - bytes 32-63, address is in last 20 bytes (44-63) if len(data) >= 64 { interaction.TokenOut = common.BytesToAddress(data[44:64]) } // recipient (fourth parameter) - bytes 96-127, address is in last 20 bytes (108-127) if len(data) >= 128 { interaction.Recipient = common.BytesToAddress(data[108:128]) } // deadline (fifth parameter) - bytes 128-159, uint64 is in last 8 bytes (152-159) if len(data) >= 160 { interaction.Deadline = binary.BigEndian.Uint64(data[152:160]) } // amountIn (sixth parameter) - bytes 160-191 if len(data) >= 192 { amountIn := new(big.Int).SetBytes(data[160:192]) // Validate amount is reasonable (not negative) if amountIn.Sign() < 0 { return nil, fmt.Errorf("negative amountIn") } interaction.AmountIn = amountIn } // amountOutMinimum (seventh parameter) - bytes 192-223 if len(data) >= 224 { amountOutMin := new(big.Int).SetBytes(data[192:224]) // Validate amount is reasonable (not negative) if amountOutMin.Sign() < 0 { return nil, fmt.Errorf("negative amountOutMinimum") } interaction.AmountOut = amountOutMin } // Set default values for fields that might not be parsed if interaction.AmountOut == nil { interaction.AmountOut = big.NewInt(0) } // Validate that we have required fields if interaction.TokenIn == (common.Address{}) && interaction.TokenOut == (common.Address{}) { // If both are zero, we likely don't have valid data return nil, fmt.Errorf("unable to parse token addresses from data") } // Note: We're not strictly validating that addresses are non-zero since some // transactions might legitimately use zero addresses in certain contexts // The calling code should validate addresses as appropriate for their use case return interaction, nil } // parseExactInput parses Uniswap V3 multi-hop swap func (p *L2MessageParser) parseExactInput(interaction *DEXInteraction, data []byte) (*DEXInteraction, error) { // Validate inputs if interaction == nil { return nil, fmt.Errorf("interaction is nil") } if data == nil { return nil, fmt.Errorf("data is nil") } // Uniswap V3 exactInput structure: // function exactInput(ExactInputParams calldata params) // struct ExactInputParams { // bytes path; // address recipient; // uint256 deadline; // uint256 amountIn; // uint256 amountOutMinimum; // } // Validate minimum data length (at least 5 parameters * 32 bytes each) if len(data) < 160 { return nil, fmt.Errorf("insufficient data for exactInput: %d bytes", len(data)) } // Parse parameters with bounds checking // path offset (first parameter) - bytes 0-31 // For now, we'll extract tokens from path if possible // In a full implementation, we'd parse the entire path bytes // recipient (second parameter) - bytes 32-63, address is in last 20 bytes (44-63) if len(data) >= 64 { interaction.Recipient = common.BytesToAddress(data[44:64]) } // deadline (third parameter) - bytes 64-95, uint64 is in last 8 bytes (88-95) if len(data) >= 96 { interaction.Deadline = binary.BigEndian.Uint64(data[88:96]) } // amountIn (fourth parameter) - bytes 96-127 if len(data) >= 128 { amountIn := new(big.Int).SetBytes(data[96:128]) // Validate amount is reasonable (not negative) if amountIn.Sign() < 0 { return nil, fmt.Errorf("negative amountIn") } interaction.AmountIn = amountIn } // amountOutMinimum (fifth parameter) - bytes 128-159 if len(data) >= 160 { amountOutMin := new(big.Int).SetBytes(data[128:160]) // Validate amount is reasonable (not negative) if amountOutMin.Sign() < 0 { return nil, fmt.Errorf("negative amountOutMinimum") } interaction.AmountOut = amountOutMin } // Set default values for fields that might not be parsed if interaction.AmountIn == nil { interaction.AmountIn = big.NewInt(0) } return interaction, nil } pkg/arbitrum/arbitrum_protocols.go:569: 569-595 lines are duplicate of `pkg/arbitrum/profitability_tracker.go:549-575` (dupl) func (r *ArbitrumProtocolRegistry) Close() error { var errors []error if r.swapLogger != nil { if err := r.swapLogger.Close(); err != nil { errors = append(errors, err) } } if r.liquidationLogger != nil { if err := r.liquidationLogger.Close(); err != nil { errors = append(errors, err) } } if r.liquidityLogger != nil { if err := r.liquidityLogger.Close(); err != nil { errors = append(errors, err) } } if len(errors) > 0 { return fmt.Errorf("errors closing log files: %v", errors) } return nil } pkg/arbitrum/profitability_tracker.go:549: 549-575 lines are duplicate of `pkg/arbitrum/arbitrum_protocols.go:569-595` (dupl) func (pt *ProfitabilityTracker) Close() error { var errors []error if pt.profitLogFile != nil { if err := pt.profitLogFile.Close(); err != nil { errors = append(errors, err) } } if pt.opportunityLogFile != nil { if err := pt.opportunityLogFile.Close(); err != nil { errors = append(errors, err) } } if pt.performanceLogFile != nil { if err := pt.performanceLogFile.Close(); err != nil { errors = append(errors, err) } } if len(errors) > 0 { return fmt.Errorf("errors closing profitability tracker: %v", errors) } return nil } pkg/arbitrum/gas.go:325: 325-350 lines are duplicate of `pkg/arbitrum/gas.go:398-423` (dupl) func (g *L2GasEstimator) getL1GasPrice(ctx context.Context) (*big.Int, error) { // ArbGasInfo precompile address on Arbitrum arbGasInfoAddr := common.HexToAddress("0x000000000000000000000000000000000000006C") // Call getL1BaseFeeEstimate() function (function selector: 0xf5d6ded7) data := common.Hex2Bytes("f5d6ded7") msg := ethereum.CallMsg{ To: &arbGasInfoAddr, Data: data, } result, err := g.client.CallContract(ctx, msg, nil) if err != nil { return nil, fmt.Errorf("failed to call ArbGasInfo.getL1BaseFeeEstimate: %w", err) } if len(result) < 32 { return nil, fmt.Errorf("invalid response length from ArbGasInfo") } l1GasPrice := new(big.Int).SetBytes(result[:32]) g.logger.Debug(fmt.Sprintf("Retrieved L1 gas price from ArbGasInfo: %s wei", l1GasPrice.String())) return l1GasPrice, nil } pkg/arbitrum/gas.go:398: 398-423 lines are duplicate of `pkg/arbitrum/gas.go:325-350` (dupl) func (g *L2GasEstimator) getL1PricePerUnit(ctx context.Context) (*big.Int, error) { // ArbGasInfo precompile address arbGasInfoAddr := common.HexToAddress("0x000000000000000000000000000000000000006C") // Call getPerBatchGasCharge() function (function selector: 0x6eca253a) data := common.Hex2Bytes("6eca253a") msg := ethereum.CallMsg{ To: &arbGasInfoAddr, Data: data, } result, err := g.client.CallContract(ctx, msg, nil) if err != nil { return nil, fmt.Errorf("failed to call ArbGasInfo.getPerBatchGasCharge: %w", err) } if len(result) < 32 { return nil, fmt.Errorf("invalid response length from ArbGasInfo") } pricePerUnit := new(big.Int).SetBytes(result[:32]) g.logger.Debug(fmt.Sprintf("Retrieved L1 price per unit: %s", pricePerUnit.String())) return pricePerUnit, nil } pkg/arbitrum/arbitrum_protocols.go:182: 182-209 lines are duplicate of `pkg/arbitrum/arbitrum_protocols.go:212-239` (dupl) r.protocols["uniswap_v2"] = &DEXProtocol{ Name: "Uniswap V2", Type: "uniswap_v2", Routers: []common.Address{ common.HexToAddress("0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D"), // Router02 }, Factories: []common.Address{ common.HexToAddress("0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f"), // Factory }, SwapFunctions: map[string]string{ "0x38ed1739": "swapExactTokensForTokens", "0x8803dbee": "swapTokensForExactTokens", "0x7ff36ab5": "swapExactETHForTokens", "0x4a25d94a": "swapTokensForExactETH", "0x791ac947": "swapExactTokensForETH", "0xfb3bdb41": "swapETHForExactTokens", }, EventSignatures: map[string]common.Hash{ "Swap": crypto.Keccak256Hash([]byte("Swap(address,uint256,uint256,uint256,uint256,address)")), "Mint": crypto.Keccak256Hash([]byte("Mint(address,uint256,uint256)")), "Burn": crypto.Keccak256Hash([]byte("Burn(address,uint256,uint256,address)")), "Sync": crypto.Keccak256Hash([]byte("Sync(uint112,uint112)")), }, PoolTypes: []string{"constant_product"}, FeeStructure: map[string]interface{}{"type": "fixed", "fee": 3000}, Active: true, Priority: 90, } pkg/arbitrum/arbitrum_protocols.go:212: 212-239 lines are duplicate of `pkg/arbitrum/arbitrum_protocols.go:182-209` (dupl) r.protocols["sushiswap"] = &DEXProtocol{ Name: "SushiSwap", Type: "uniswap_v2", Routers: []common.Address{ common.HexToAddress("0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506"), // SushiRouter }, Factories: []common.Address{ common.HexToAddress("0xc35DADB65012eC5796536bD9864eD8773aBc74C4"), // Factory }, SwapFunctions: map[string]string{ "0x38ed1739": "swapExactTokensForTokens", "0x8803dbee": "swapTokensForExactTokens", "0x7ff36ab5": "swapExactETHForTokens", "0x4a25d94a": "swapTokensForExactETH", "0x791ac947": "swapExactTokensForETH", "0xfb3bdb41": "swapETHForExactTokens", }, EventSignatures: map[string]common.Hash{ "Swap": crypto.Keccak256Hash([]byte("Swap(address,uint256,uint256,uint256,uint256,address)")), "Mint": crypto.Keccak256Hash([]byte("Mint(address,uint256,uint256)")), "Burn": crypto.Keccak256Hash([]byte("Burn(address,uint256,uint256,address)")), "Sync": crypto.Keccak256Hash([]byte("Sync(uint112,uint112)")), }, PoolTypes: []string{"constant_product"}, FeeStructure: map[string]interface{}{"type": "fixed", "fee": 3000}, Active: true, Priority: 85, } pkg/arbitrum/l2_parser.go:614: 614-627 lines are duplicate of `pkg/arbitrum/l2_parser.go:642-655` (dupl) func (p *ArbitrumL2Parser) decodeSwapTokensForExactTokens(params []byte) string { if len(params) < 160 { return ", Invalid parameters" } amountOut := new(big.Int).SetBytes(params[0:32]) amountInMax := new(big.Int).SetBytes(params[32:64]) amountOutEth := new(big.Float).Quo(new(big.Float).SetInt(amountOut), big.NewFloat(1e18)) amountInMaxEth := new(big.Float).Quo(new(big.Float).SetInt(amountInMax), big.NewFloat(1e18)) return fmt.Sprintf(", AmountOut: %s tokens, MaxIn: %s tokens", amountOutEth.Text('f', 6), amountInMaxEth.Text('f', 6)) } pkg/arbitrum/l2_parser.go:642: 642-655 lines are duplicate of `pkg/arbitrum/l2_parser.go:614-627` (dupl) func (p *ArbitrumL2Parser) decodeSwapExactTokensForETH(params []byte) string { if len(params) < 64 { return ", Invalid parameters" } amountIn := new(big.Int).SetBytes(params[0:32]) amountOutMin := new(big.Int).SetBytes(params[32:64]) amountInEth := new(big.Float).Quo(new(big.Float).SetInt(amountIn), big.NewFloat(1e18)) amountOutMinEth := new(big.Float).Quo(new(big.Float).SetInt(amountOutMin), big.NewFloat(1e18)) return fmt.Sprintf(", AmountIn: %s tokens, MinETH: %s", amountInEth.Text('f', 6), amountOutMinEth.Text('f', 6)) } pkg/pools/discovery.go:719:13: Error return value of `os.MkdirAll` is not checked (errcheck) os.MkdirAll("data", 0750) ^ pkg/pools/discovery.go:723:14: Error return value of `os.WriteFile` is not checked (errcheck) os.WriteFile(pd.poolsFile, poolsData, 0644) ^ pkg/pools/discovery.go:727:14: Error return value of `os.WriteFile` is not checked (errcheck) os.WriteFile(pd.exchangesFile, exchangesData, 0644) ^ pkg/pools/discovery.go:734:17: Error return value of `json.Unmarshal` is not checked (errcheck) json.Unmarshal(data, &pd.pools) ^ pkg/pools/discovery.go:740:17: Error return value of `json.Unmarshal` is not checked (errcheck) json.Unmarshal(data, &pd.exchanges) ^ pkg/transport/benchmarks.go:221:33: Error return value of `bs.messageBus.Unsubscribe` is not checked (errcheck) defer bs.messageBus.Unsubscribe(subscription.ID) ^ pkg/transport/dlq.go:493:16: Error return value of `dlq.Cleanup` is not checked (errcheck) dlq.Cleanup(dlq.config.RetentionTime) ^ pkg/transport/dlq.go:537:24: Error return value of `dlq.ReprocessMessage` is not checked (errcheck) dlq.ReprocessMessage(msg.ID) ^ pkg/transport/message_bus_impl.go:164:22: Error return value of `mb.Unsubscribe` is not checked (errcheck) defer mb.Unsubscribe(subscription.ID) ^ pkg/transport/message_bus_impl.go:233:17: Error return value of `mb.Unsubscribe` is not checked (errcheck) mb.Unsubscribe(sub.ID) ^ pkg/transport/message_bus_impl.go:536:17: Error return value of `mb.CreateTopic` is not checked (errcheck) mb.CreateTopic(topicName, config) ^ pkg/transport/message_bus_impl.go:606:23: Error return value of `mb.dlq.AddMessage` is not checked (errcheck) mb.dlq.AddMessage(message.Topic, message) ^ pkg/transport/message_bus_impl.go:703:16: Error return value of `mb.dlq.Cleanup` is not checked (errcheck) mb.dlq.Cleanup(time.Hour * 24) // Clean messages older than 24 hours ^ pkg/transport/persistence.go:152:18: Error return value of `file.Close` is not checked (errcheck) defer file.Close() ^ pkg/transport/tcp_transport.go:318:1: cognitive complexity 26 of func `(*TCPTransport).handleConnection` is high (> 20) (gocognit) func (tt *TCPTransport) handleConnection(connID string, conn net.Conn) { ^ pkg/transport/unix_transport.go:254:1: cognitive complexity 26 of func `(*UnixSocketTransport).handleConnection` is high (> 20) (gocognit) func (ut *UnixSocketTransport) handleConnection(connID string, conn net.Conn) { ^ pkg/transport/memory_transport.go:101:1: cognitive complexity 24 of func `(*MemoryTransport).Receive` is high (> 20) (gocognit) func (mt *MemoryTransport) Receive(ctx context.Context) (<-chan *Message, error) { ^ pkg/transport/persistence.go:432:1: cognitive complexity 24 of func `(*FilePersistenceLayer).parseFileData` is high (> 20) (gocognit) func (fpl *FilePersistenceLayer) parseFileData(data []byte) ([]*Message, error) { ^ pkg/transport/unified_provider_manager.go:242:1: cognitive complexity 22 of func `validateProvidersConfig` is high (> 20) (gocognit) func validateProvidersConfig(config *ProvidersConfig) error { ^ pkg/arbitrum/discovery/core.go:638:1: cognitive complexity 27 of func `(*MarketDiscovery).logAvailableMarkets` is high (> 20) (gocognit) func (md *MarketDiscovery) logAvailableMarkets() { ^ pkg/arbitrum/discovery/arbitrage.go:32:1: cognitive complexity 23 of func `(*ArbitrageCalculator).findArbitrageOpportunities` is high (> 20) (gocognit) func (ac *ArbitrageCalculator) findArbitrageOpportunities(ctx context.Context, gasPrice *big.Int, pools map[common.Address]*PoolInfoDetailed, logger *logger.Logger, config *ArbitrageConfig, mathCalc *exchangeMath.MathCalculator) []*ArbitrageOpportunityDetailed { ^ pkg/arbitrum/discovery/arbitrage.go:77:1: cognitive complexity 23 of func `(*ArbitrageCalculator).calculateArbitrage` is high (> 20) (gocognit) func (ac *ArbitrageCalculator) calculateArbitrage(poolA, poolB *PoolInfoDetailed, gasPrice *big.Int, tokenPair string, mathCalc *exchangeMath.MathCalculator) *ArbitrageOpportunityDetailed { ^ tools/math-audit/internal/audit/runner.go:271:1: cognitive complexity 23 of func `(*Runner).buildPool` is high (> 20) (gocognit) func (r *Runner) buildPool(pool models.Pool) (*mmath.PoolData, error) { ^ pkg/validation/input_validator.go:684:1: cognitive complexity 22 of func `(*InputValidator).validateEventMap` is high (> 20) (gocognit) func (iv *InputValidator) validateEventMap(eventMap map[string]interface{}) error { ^ pkg/validation/pool_validator.go:77:1: cognitive complexity 21 of func `(*PoolValidator).ValidatePool` is high (> 20) (gocognit) func (pv *PoolValidator) ValidatePool(ctx context.Context, poolAddr common.Address, config *PoolValidationConfig) (*ValidationResult, error) { ^ pkg/pricing/engine.go:114:1: cognitive complexity 26 of func `(*ExchangePricer).FindArbitrageOpportunities` is high (> 20) (gocognit) func (ep *ExchangePricer) FindArbitrageOpportunities(ctx context.Context, tokenIn, tokenOut common.Address) ([]*types.ArbitrageOpportunity, error) { ^ tools/math-audit/internal/report/report.go:43:1: cognitive complexity 29 of func `GenerateMarkdown` is high (> 20) (gocognit) func GenerateMarkdown(res audit.Result) string { ^ pkg/scanner/market/scanner.go:466:1: cognitive complexity 24 of func `(*MarketScanner).findTriangularArbitrageOpportunities` is high (> 20) (gocognit) func (s *MarketScanner) findTriangularArbitrageOpportunities(event events.Event) []stypes.ArbitrageOpportunity { ^ pkg/scanner/swap/analyzer.go:353:1: cognitive complexity 24 of func `(*SwapAnalyzer).findArbitrageOpportunities` is high (> 20) (gocognit) func (s *SwapAnalyzer) findArbitrageOpportunities(event events.Event, movement *market.PriceMovement, marketScanner *market.MarketScanner) []stypes.ArbitrageOpportunity { ^ pkg/scanner/swap/analyzer.go:158:1: cognitive complexity 22 of func `(*SwapAnalyzer).logSwapOpportunity` is high (> 20) (gocognit) func (s *SwapAnalyzer) logSwapOpportunity(event events.Event, poolData *market.CachedData, priceMovement *market.PriceMovement, marketScanner *market.MarketScanner) { ^ pkg/market/pipeline.go:250:1: cognitive complexity 75 of func `MarketAnalysisStage` is high (> 20) (gocognit) func MarketAnalysisStage( ^ pkg/market/pipeline.go:397:1: cognitive complexity 75 of func `ArbitrageDetectionStage` is high (> 20) (gocognit) func ArbitrageDetectionStage( ^ pkg/market/pipeline.go:183:1: cognitive complexity 44 of func `TransactionDecoderStage` is high (> 20) (gocognit) func TransactionDecoderStage( ^ pkg/market/pipeline.go:79:1: cognitive complexity 37 of func `(*Pipeline).ProcessTransactions` is high (> 20) (gocognit) func (p *Pipeline) ProcessTransactions(ctx context.Context, transactions []*types.Transaction, blockNumber uint64, timestamp uint64) error { ^ pkg/market/fan.go:139:1: cognitive complexity 23 of func `(*FanManager).Multiplex` is high (> 20) (gocognit) func (fm *FanManager) Multiplex(ctx context.Context, transactions <-chan *types.Transaction) []<-chan *types.Transaction { ^ pkg/arbitrum/parser/transaction_analyzer.go:288:1: cognitive complexity 56 of func `(*TransactionAnalyzer).parseSwapData` is high (> 20) (gocognit) func (ta *TransactionAnalyzer) parseSwapData(protocol, functionName string, input []byte) (*SwapData, error) { ^ pkg/arbitrum/parser/transaction_analyzer.go:626:1: cognitive complexity 22 of func `(*TransactionAnalyzer).estimateBalancerPriceImpact` is high (> 20) (gocognit) func (ta *TransactionAnalyzer) estimateBalancerPriceImpact(ctx context.Context, swapParams *SwapParams) float64 { ^ pkg/arbitrum/parser/transaction_analyzer.go:756:1: cognitive complexity 22 of func `(*TransactionAnalyzer).findArbitrageOpportunity` is high (> 20) (gocognit) func (ta *TransactionAnalyzer) findArbitrageOpportunity(ctx context.Context, swapData *SwapData) *pkgtypes.ArbitrageOpportunity { ^ pkg/arbitrum/abi_decoder.go:290:1: cognitive complexity 79 of func `(*ABIDecoder).decodeGenericSwap` is high (> 20) (gocognit) func (d *ABIDecoder) decodeGenericSwap(data []byte, protocol string) (*SwapParams, error) { ^ pkg/arbitrum/client.go:53:1: cognitive complexity 27 of func `(*ArbitrumClient).SubscribeToL2Messages` is high (> 20) (gocognit) func (c *ArbitrumClient) SubscribeToL2Messages(ctx context.Context, ch chan<- *L2Message) (ethereum.Subscription, error) { ^ pkg/arbitrum/event_monitor.go:363:1: cognitive complexity 27 of func `(*EventMonitor).monitorEvents` is high (> 20) (gocognit) func (em *EventMonitor) monitorEvents(ctx context.Context, sub *subscription, eventType string) { ^ pkg/arbitrum/market_discovery.go:129:1: cognitive complexity 25 of func `(*MarketDiscoveryManager).performIncrementalScan` is high (> 20) (gocognit) func (mdm *MarketDiscoveryManager) performIncrementalScan(ctx context.Context) error { ^ pkg/arbitrum/abi_decoder.go:602:1: cognitive complexity 23 of func `(*ABIDecoder).decodeMulticall` is high (> 20) (gocognit) func (d *ABIDecoder) decodeMulticall(data []byte, protocol string) (*SwapParams, error) { ^ pkg/arbitrum/pool_cache.go:339:1: cognitive complexity 22 of func `(*PoolCache).evictLRU` is high (> 20) (gocognit) func (c *PoolCache) evictLRU() { ^ pkg/arbitrum/pool_cache.go:376:1: cognitive complexity 22 of func `(*PoolCache).cleanupExpired` is high (> 20) (gocognit) func (c *PoolCache) cleanupExpired() { ^ pkg/monitor/concurrent.go:146:1: cognitive complexity 22 of func `(*ArbitrumMonitor).Start` is high (> 20) (gocognit) func (m *ArbitrumMonitor) Start(ctx context.Context) error { ^ pkg/arbitrage/executor.go:470:1: cognitive complexity 29 of func `(*ArbitrageExecutor).simulateFlashSwapArbitrage` is high (> 20) (gocognit) func (ae *ArbitrageExecutor) simulateFlashSwapArbitrage(ctx context.Context, params *FlashSwapParams) (*FlashSwapSimulation, error) { ^ pkg/arbitrage/service.go:505:1: cognitive complexity 24 of func `(*ArbitrageService).detectArbitrageOpportunities` is high (> 20) (gocognit) func (sas *ArbitrageService) detectArbitrageOpportunities(event *SimpleSwapEvent) error { ^ pkg/arbitrage/flash_executor.go:182:1: cognitive complexity 21 of func `(*FlashSwapExecutor).ExecuteArbitrage` is high (> 20) (gocognit) func (executor *FlashSwapExecutor) ExecuteArbitrage(ctx context.Context, opportunity *pkgtypes.ArbitrageOpportunity) (*ExecutionResult, error) { ^ cmd/mev-bot/main.go:52:1: cognitive complexity 41 of func `startBot` is high (> 20) (gocognit) func startBot() error { ^ pkg/math/exchange_math.go:895:7: string `balancer` has 3 occurrences, but such constant `ExchangeBalancer` already exists (goconst) case "balancer": ^ pkg/math/dex_math.go:260:8: string `kyber_elastic` has 3 occurrences, make it a constant (goconst) case "kyber_elastic", "kyber_classic": ^ pkg/math/dex_math.go:256:8: string `uniswap_v2` has 4 occurrences, but such constant `ExchangeUniswapV2` already exists (goconst) case "uniswap_v2": ^ pkg/math/dex_math.go:258:8: string `uniswap_v3` has 4 occurrences, but such constant `ExchangeUniswapV3` already exists (goconst) case "uniswap_v3": ^ pkg/math/dex_math.go:262:8: string `curve` has 4 occurrences, but such constant `ExchangeCurve` already exists (goconst) case "curve": ^ pkg/math/exchange_math.go:887:21: string `sushiswap` has 3 occurrences, but such constant `ExchangeSushiSwap` already exists (goconst) case "uniswap_v2", "sushiswap": ^ pkg/transport/provider_manager.go:269:7: string `round_robin` has 4 occurrences, make it a constant (goconst) case "round_robin": ^ pkg/transport/provider_pools.go:845:20: string `anvil_fork` has 6 occurrences, make it a constant (goconst) if config.Type == "anvil_fork" { ^ pkg/transport/failover.go:536:7: string `degraded` has 5 occurrences, but such constant `StatusDegraded` already exists (goconst) case "degraded": ^ pkg/transport/provider_pools.go:178:26: string `websocket_preferred` has 3 occurrences, make it a constant (goconst) if p.config.Strategy == "websocket_preferred" { ^ pkg/transport/failover.go:528:26: string `healthy` has 10 occurrences, but such constant `StatusHealthy` already exists (goconst) return health.Status == "healthy", nil ^ pkg/transport/memory_transport.go:154:12: string `unhealthy` has 5 occurrences, but such constant `StatusUnhealthy` already exists (goconst) status := "unhealthy" ^ pkg/transport/provider_manager.go:273:7: string `priority_based` has 4 occurrences, make it a constant (goconst) case "priority_based": ^ pkg/pools/discovery.go:140:93: string `Burn` has 3 occurrences, make it a constant (goconst) pd.eventSignatures["0xdccd412f0b1252819cb1fd330b93224ca42612892bb3f4f789976e6d81936496"] = "Burn" // Liquidity burn ^ pkg/pools/discovery.go:137:93: string `Swap` has 3 occurrences, make it a constant (goconst) pd.eventSignatures["0xd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d822"] = "Swap" // Uniswap V2 Swap ^ pkg/pools/discovery.go:149:68: string `UniswapV3` has 3 occurrences, make it a constant (goconst) pd.knownFactories["0x1f98431c8ad98523631ae4a59f267346ea31f984"] = "UniswapV3" ^ pkg/pools/discovery.go:139:93: string `Mint` has 3 occurrences, make it a constant (goconst) pd.eventSignatures["0x4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f"] = "Mint" // Liquidity mint ^ pkg/validation/input_validator.go:396:23: string `medium` has 4 occurrences, make it a constant (goconst) result.RiskLevel = "medium" ^ pkg/validation/input_validator.go:440:22: string `high` has 4 occurrences, make it a constant (goconst) result.RiskLevel = "high" ^ pkg/trading/slippage_protection.go:398:7: string `UniswapV3` has 4 occurrences, make it a constant (goconst) case "UniswapV3": ^ pkg/trading/slippage_protection.go:412:7: string `UniswapV2` has 3 occurrences, make it a constant (goconst) case "UniswapV2": ^ pkg/trading/slippage_protection.go:416:7: string `Curve` has 3 occurrences, make it a constant (goconst) case "Curve": ^ pkg/arbitrum/parser/core.go:199:7: string `uniswap_v2` has 5 occurrences, make it a constant (goconst) case "uniswap_v2": ^ pkg/arbitrum/parser/core.go:201:7: string `sushiswap` has 5 occurrences, make it a constant (goconst) case "sushiswap": ^ pkg/arbitrum/parser/core.go:197:7: string `uniswap_v3` has 4 occurrences, make it a constant (goconst) case "uniswap_v3": ^ pkg/arbitrum/parser/core.go:207:7: string `curve` has 3 occurrences, make it a constant (goconst) case "curve": ^ pkg/arbitrum/parser/transaction_analyzer.go:75:14: string `unknown` has 4 occurrences, make it a constant (goconst) protocol := "unknown" ^ pkg/arbitrum/event_monitor.go:507:19: string `unknown` has 14 occurrences, make it a constant (goconst) token0Display := "unknown" ^ pkg/arbitrum/l2_parser.go:1231:7: string `SushiSwap` has 4 occurrences, make it a constant (goconst) case "SushiSwap": ^ pkg/arbitrum/parser.go:73:86: string `Curve` has 3 occurrences, make it a constant (goconst) p.knownRouters[common.HexToAddress("0x98EE8517825C0bd778a57471a27555614F97F48D")] = "Curve" ^ pkg/arbitrum/l2_parser.go:458:29: string `0x` has 3 occurrences, make it a constant (goconst) if tx.To == "" || tx.To == "0x" { ^ pkg/arbitrum/parser.go:64:86: string `Camelot` has 3 occurrences, make it a constant (goconst) p.knownRouters[common.HexToAddress("0xc873fEcbd354f5A56E00E710B90EF4201db2448d")] = "Camelot" ^ pkg/arbitrum/l2_parser.go:565:10: string `, Invalid parameters` has 9 occurrences, make it a constant (goconst) return ", Invalid parameters" ^ pkg/arbitrum/l2_parser.go:1229:7: string `UniswapV3` has 6 occurrences, make it a constant (goconst) case "UniswapV3": ^ pkg/arbitrum/l2_parser.go:1227:7: string `UniswapV2` has 3 occurrences, make it a constant (goconst) case "UniswapV2": ^ pkg/arbitrage/executor.go:482:24: string `unknown` has 6 occurrences, make it a constant (goconst) firstTokenDisplay := "unknown" ^ pkg/oracle/price_oracle.go:442:1: cyclomatic complexity 20 of func `(*PriceOracle).getPoolState` is high (> 15) (gocyclo) func (p *PriceOracle) getPoolState(ctx context.Context, poolAddr common.Address) (*PoolState, error) { ^ pkg/arbitrum/parser.go:301:1: cyclomatic complexity 26 of func `(*L2MessageParser).ParseDEXInteraction` is high (> 15) (gocyclo) func (p *L2MessageParser) ParseDEXInteraction(tx *types.Transaction) (*DEXInteraction, error) { ^ pkg/arbitrage/executor.go:109:1: cyclomatic complexity 19 of func `NewArbitrageExecutor` is high (> 15) (gocyclo) func NewArbitrageExecutor( ^ cmd/mev-bot/main.go:348:1: cyclomatic complexity 16 of func `scanOpportunities` is high (> 15) (gocyclo) func scanOpportunities() error { ^ pkg/oracle/price_oracle.go:536:15: G115: integer overflow conversion int64 -> int32 (gosec) tick = int32(v.Int64()) ^ pkg/transport/provider_pools.go:900:9: G204: Subprocess launched with variable (gosec) cmd := exec.Command("anvil", args...) ^ pkg/arbitrum/discovery/core.go:281:19: G115: integer overflow conversion int -> uint8 (gosec) Decimals: uint8(token.Decimals), ^ pkg/arbitrum/discovery/core.go:722:30: G115: integer overflow conversion int -> uint64 (gosec) md.poolsDiscovered += uint64(discovered.PoolsFound) ^ pkg/arbitrum/discovery/pool_state.go:183:66: G115: integer overflow conversion int -> uint (gosec) reserve0.Add(reserve0, big.NewInt(int64(poolAddrBytes[i])< uint (gosec) reserve1.Add(reserve1, big.NewInt(int64(poolAddrBytes[(i+8)%len(poolAddrBytes)])< uint64 (gosec) now := uint64(time.Now().Unix()) ^ pkg/validation/input_validator.go:540:15: G115: integer overflow conversion int64 -> uint64 (gosec) now := uint64(time.Now().Unix()) ^ tools/math-audit/internal/checks/checks.go:32:9: G404: Use of weak random number generator (math/rand or math/rand/v2 instead of crypto/rand) (gosec) rng := rand.New(rand.NewSource(1337)) ^ tools/math-audit/internal/checks/checks.go:72:9: G404: Use of weak random number generator (math/rand or math/rand/v2 instead of crypto/rand) (gosec) rng := rand.New(rand.NewSource(4242)) ^ tools/math-audit/internal/checks/checks.go:99:9: G404: Use of weak random number generator (math/rand or math/rand/v2 instead of crypto/rand) (gosec) rng := rand.New(rand.NewSource(9001)) ^ pkg/scanner/swap/analyzer.go:75:22: G115: integer overflow conversion int -> int32 (gosec) Tick: int32(event.Tick), ^ pkg/arbitrum/parser/core.go:319:50: G115: integer overflow conversion int -> uint32 (gosec) binary.BigEndian.PutUint32(feeBytes[28:], uint32(feeInt)) ^ pkg/arbitrum/parser/core.go:498:20: G115: integer overflow conversion uint64 -> int (gosec) if len(data) < int(pathOffset)+64 { ^ pkg/arbitrum/parser/core.go:592:20: G115: integer overflow conversion uint64 -> int (gosec) if len(data) < int(pathOffset)+64 { ^ pkg/monitor/concurrent.go:456:17: G115: integer overflow conversion int -> uint64 (gosec) return uint64(v) ^ pkg/monitor/concurrent.go:733:44: G115: integer overflow conversion int -> uint (gosec) backoffDuration := time.Duration(1< uint32 (gosec) txCount := uint32(len(transactions)) ^ pkg/arbitrum/l2_parser.go:827:15: G115: integer overflow conversion uint64 -> uint32 (gosec) fee := uint32(new(big.Int).SetBytes(params[64:96]).Uint64()) ^ pkg/arbitrage/database.go:354:22: G115: integer overflow conversion int64 -> int32 (gosec) Tick: int32(tick), ^ pkg/arbitrage/database.go:357:21: G115: integer overflow conversion int64 -> uint (gosec) LogIndex: uint(logIndex), ^ pkg/arbitrage/service.go:342:9: G115: integer overflow conversion int64 -> uint32 (gosec) uint32(poolData.Fee), ^ pkg/arbitrage/service.go:353:8: G115: integer overflow conversion int -> int32 (gosec) int32(poolData.Tick), ^ pkg/arbitrage/service.go:1194:22: G115: integer overflow conversion int64 -> int32 (gosec) Tick: int32(tick.Int64()), ^ pkg/math/arbitrage_calculator.go:565:22: unnecessary conversion (unconvert) switch ExchangeType(step.Exchange) { ^ pkg/math/cached_functions.go:17:2: var `cachedTwoPower96` is unused (unused) cachedTwoPower96 *big.Float ^ pkg/math/cached_functions.go:19:2: var `cachedTwoPower384` is unused (unused) cachedTwoPower384 *big.Float ^ pkg/transport/message_bus.go:251:2: field `persistence` is unused (unused) persistence PersistenceLayer ^ pkg/exchanges/exchanges.go:78:2: field `marketScanner` is unused (unused) marketScanner *MarketScanner ^ pkg/trading/slippage_protection.go:514:31: func `(*SlippageProtection).isUniswapV3Pool` is unused (unused) func (sp *SlippageProtection) isUniswapV3Pool(poolAddress common.Address) bool { ^ pkg/arbitrum/parser/core.go:63:2: field `profitCalculator` is unused (unused) profitCalculator *ProfitCalculator ^ pkg/arbitrum/parser/core.go:65:2: field `arbitrageExecutor` is unused (unused) arbitrageExecutor interface{} // Will hold *arbitrage.ArbitrageExecutor when available, but we avoid direct import to prevent cycle ^ pkg/arbitrum/parser/core.go:66:2: field `capitalOptimizer` is unused (unused) capitalOptimizer interface{} // Will hold capital optimization component ^ pkg/arbitrum/parser/core.go:67:2: field `profitTracker` is unused (unused) profitTracker interface{} // Will hold profitability tracking component ^ pkg/arbitrum/parser/core.go:110:2: field `gasOracle` is unused (unused) gasOracle GasOracle ^ pkg/arbitrum/parser/core.go:111:2: field `priceOracle` is unused (unused) priceOracle PriceOracle ^ pkg/arbitrum/parser/core.go:112:2: field `poolOracle` is unused (unused) poolOracle PoolOracle ^ pkg/arbitrum/parser/core.go:438:35: func `(*EnhancedSequencerParser).calculateROI` is unused (unused) func (p *EnhancedSequencerParser) calculateROI(profit, investment *big.Int) float64 { ^ pkg/arbitrum/parser/executor.go:68:20: func `(*Executor).buildArbitrageBundle` is unused (unused) func (e *Executor) buildArbitrageBundle(ctx context.Context, arbOp *pkgtypes.ArbitrageOpportunity) (*ExecutionBundle, error) { ^ pkg/arbitrum/parser/executor.go:100:20: func `(*Executor).createArbitrageTransaction` is unused (unused) func (e *Executor) createArbitrageTransaction(ctx context.Context, arbOp *pkgtypes.ArbitrageOpportunity) (*types.Transaction, error) { ^ pkg/arbitrum/parser/executor.go:139:20: func `(*Executor).getOptimalGasPrice` is unused (unused) func (e *Executor) getOptimalGasPrice(ctx context.Context) (*big.Int, *big.Int, error) { ^ pkg/arbitrum/parser/executor.go:115:20: func `(*Executor).submitBundle` is unused (unused) func (e *Executor) submitBundle(ctx context.Context, bundle *ExecutionBundle) error { ^ pkg/arbitrum/parser/executor.go:132:20: func `(*Executor).simulateTransaction` is unused (unused) func (e *Executor) simulateTransaction(ctx context.Context, bundle *ExecutionBundle) (*big.Int, error) { ^ pkg/arbitrum/parser/transaction_analyzer.go:52:32: func `(*TransactionAnalyzer).analyzeTransactionForMEV` is unused (unused) func (ta *TransactionAnalyzer) analyzeTransactionForMEV(ctx context.Context, tx *RawL2Transaction, opportunities *MEVOpportunities) error { ^ pkg/arbitrum/parser/transaction_analyzer.go:97:32: func `(*TransactionAnalyzer).handleSwapTransaction` is unused (unused) func (ta *TransactionAnalyzer) handleSwapTransaction(ctx context.Context, tx *RawL2Transaction, protocol, functionName string, input []byte, opportunities *MEVOpportunities) error { ^ pkg/arbitrum/parser/transaction_analyzer.go:227:32: func `(*TransactionAnalyzer).isLiquidationFunction` is unused (unused) func (ta *TransactionAnalyzer) isLiquidationFunction(funcSig string) bool { ^ pkg/arbitrum/parser/transaction_analyzer.go:153:32: func `(*TransactionAnalyzer).handleLiquidationTransaction` is unused (unused) func (ta *TransactionAnalyzer) handleLiquidationTransaction(ctx context.Context, tx *RawL2Transaction, funcSig string, input []byte, opportunities *MEVOpportunities) error { ^ pkg/arbitrum/parser/transaction_analyzer.go:237:32: func `(*TransactionAnalyzer).isLiquidityFunction` is unused (unused) func (ta *TransactionAnalyzer) isLiquidityFunction(funcSig string) bool { ^ pkg/arbitrum/parser/transaction_analyzer.go:194:32: func `(*TransactionAnalyzer).handleLiquidityTransaction` is unused (unused) func (ta *TransactionAnalyzer) handleLiquidityTransaction(ctx context.Context, tx *RawL2Transaction, funcSig string, input []byte, opportunities *MEVOpportunities) error { ^ pkg/transport/websocket_transport.go:254:53: response body must be closed (bodyclose) conn, _, err := websocket.DefaultDialer.DialContext(ctx, url, nil) ^ pkg/arbitrage/executor.go:690:30: Function 'ExecuteArbitrage' has too many statements (51 > 50) (funlen) func (ae *ArbitrageExecutor) ExecuteArbitrage(ctx context.Context, params *ArbitrageParams) (*ExecutionResult, error) { ^ pkg/arbitrage/service.go:140:6: Function 'NewArbitrageService' is too long (109 > 100) (funlen) func NewArbitrageService( ^ pkg/arbitrum/arbitrum_protocols.go:151:36: Function 'loadArbitrumProtocols' is too long (217 > 100) (funlen) func (r *ArbitrumProtocolRegistry) loadArbitrumProtocols() error { ^ pkg/arbitrum/l2_parser.go:128:28: Function 'initializeDEXData' has too many statements (55 > 50) (funlen) func (p *ArbitrumL2Parser) initializeDEXData() { ^ pkg/arbitrum/l2_parser.go:1079:28: Function 'initializeABIs' is too long (129 > 100) (funlen) func (p *ArbitrumL2Parser) initializeABIs() error { ^ tools/math-audit/main.go:16:2: vectorsFlag is a global variable (gochecknoglobals) vectorsFlag = flag.String("vectors", "default", "Vector set to load (default, path, or comma-separated list)") ^ tools/math-audit/main.go:17:2: reportDir is a global variable (gochecknoglobals) reportDir = flag.String("report", "", "Optional directory to write JSON and Markdown reports") ^ pkg/arbitrage/decimal_helpers.go:10:5: sharedDecimalConverter is a global variable (gochecknoglobals) var sharedDecimalConverter = math.NewDecimalConverter() ^ pkg/math/cached_functions.go:13:2: cachedConstantsOnce is a global variable (gochecknoglobals) cachedConstantsOnce sync.Once ^ pkg/math/cached_functions.go:14:2: cachedQ192 is a global variable (gochecknoglobals) cachedQ192 *big.Int ^ pkg/math/cached_functions.go:15:2: cachedQ96 is a global variable (gochecknoglobals) cachedQ96 *big.Int ^ pkg/math/cached_functions.go:16:2: cachedQ384 is a global variable (gochecknoglobals) cachedQ384 *big.Int ^ pkg/math/cached_functions.go:18:2: cachedTwoPower192 is a global variable (gochecknoglobals) cachedTwoPower192 *big.Float ^ pkg/uniswap/constants.go:12:2: q96 is a global variable (gochecknoglobals) q96 *big.Int ^ pkg/uniswap/constants.go:13:2: q192 is a global variable (gochecknoglobals) q192 *big.Int ^ pkg/uniswap/constants.go:14:2: lnBase is a global variable (gochecknoglobals) lnBase float64 // ln(1.0001) ^ pkg/uniswap/constants.go:15:2: invLnBase is a global variable (gochecknoglobals) invLnBase float64 // 1 / ln(1.0001) ^ pkg/uniswap/constants.go:16:2: q96Float is a global variable (gochecknoglobals) q96Float *big.Float ^ pkg/uniswap/constants.go:17:2: q192Float is a global variable (gochecknoglobals) q192Float *big.Float ^ pkg/uniswap/constants.go:18:2: once is a global variable (gochecknoglobals) once sync.Once ^ pkg/arbitrage/multihop.go:209:15: appendAssign: append result not assigned to the same slice (gocritic) newPath := append(currentPath, pool) ^ pkg/arbitrage/multihop.go:210:17: appendAssign: append result not assigned to the same slice (gocritic) newTokens := append(currentTokens, nextToken) ^ pkg/arbitrum/pool_cache.go:520:10: elseif: can replace 'else {if cond {}}' with 'else if cond {}' (gocritic) } else { ^ pkg/math/exchange_math.go:361:52: captLocal: `A' should not be capitalized (gocritic) func (c *CurveMath) calculateD(balance0, balance1, A *big.Int) *big.Int { ^ pkg/math/exchange_math.go:397:32: captLocal: `D' should not be capitalized (gocritic) func (c *CurveMath) getY(newX, D, A *big.Int) *big.Int { ^ pkg/scanner/market/scanner.go:981:2: S1000: should use for range instead of for { select {} } (gosimple) for { ^ pkg/arbitrage/multihop.go:513:2: S1008: should use 'return pool.Liquidity.Cmp(minLiquidity) >= 0' instead of 'if pool.Liquidity.Cmp(minLiquidity) < 0 { return false }; return true' (gosimple) if pool.Liquidity.Cmp(minLiquidity) < 0 { ^ pkg/arbitrum/abi_decoder.go:117:2: S1017: should replace this `if` statement with an unconditional `strings.TrimPrefix` (gosimple) if strings.HasPrefix(txData, "0x") { ^ pkg/transport/provider_pools.go:29:2: S1021: should merge variable declaration with assignment on next line (gosimple) var err error ^ pkg/transport/provider_pools.go:57:2: S1021: should merge variable declaration with assignment on next line (gosimple) var err error ^ pkg/arbitrum/swap_pipeline.go:306:2: S1023: redundant `return` statement (gosimple) return ^ pkg/arbitrum/swap_pipeline.go:520:2: S1023: redundant `return` statement (gosimple) return ^ pkg/scanner/swap/analyzer.go:259:2: S1031: unnecessary nil check around range (gosimple) if profitData != nil { ^ pkg/scanner/swap/analyzer.go:391:20: S1039: unnecessary use of fmt.Sprintf (gosimple) s.logger.Error(fmt.Sprintf("Nil price detected for pool comparison")) ^ pkg/orchestrator/coordinator.go:443:17: S1039: unnecessary use of fmt.Sprintf (gosimple) mc.logger.Info(fmt.Sprintf("🎯 ARBITRAGE OPPORTUNITY DETECTED!")) ^ pkg/arbitrum/parser/transaction_analyzer.go:894:2: unreachable: unreachable code (govet) return arbOp ^ pkg/scanner/analysis/pool_analyzer.go:42:2: ineffectual assignment to factory (ineffassign) factory := common.Address{} ^ pkg/scanner/swap/analyzer.go:50:2: ineffectual assignment to factory (ineffassign) factory := common.Address{} ^ pkg/arbitrage/decimal_helpers.go:77:3: ineffectual assignment to dec (ineffassign) dec = sharedDecimalConverter ^ pkg/arbitrage/executor.go:483:3: ineffectual assignment to lastTokenDisplay (ineffassign) lastTokenDisplay := "unknown" ^ pkg/arbitrage/flash_executor.go:242:2: ineffectual assignment to status (ineffassign) status := "Unknown" ^ pkg/arbitrum/market_discovery.go:163:4: ineffectual assignment to poolAddrDisplay (ineffassign) poolAddrDisplay := "unknown" ^ pkg/arbitrum/market_discovery.go:176:4: ineffectual assignment to factoryAddrDisplay (ineffassign) factoryAddrDisplay := "unknown" ^ pkg/arbitrum/swap_pipeline.go:786:2: ineffectual assignment to poolAddrDisplay (ineffassign) poolAddrDisplay := "unknown" ^ pkg/arbitrum/swap_pipeline.go:787:2: ineffectual assignment to tokenInDisplay (ineffassign) tokenInDisplay := "unknown" ^ pkg/arbitrum/swap_pipeline.go:788:2: ineffectual assignment to tokenOutDisplay (ineffassign) tokenOutDisplay := "unknown" ^ pkg/scanner/swap/analyzer.go:193:1: `if amountInFloat.Sign() > 0 && amountOutFloat.Sign() > 0` has complex nested blocks (complexity: 6) (nestif) if amountInFloat.Sign() > 0 && amountOutFloat.Sign() > 0 { ^ pkg/scanner/swap/analyzer.go:362:1: `if len(relatedPools) > 0` has complex nested blocks (complexity: 7) (nestif) if len(relatedPools) > 0 { ^ pkg/arbitrum/parser/transaction_analyzer.go:314:1: `if ok && ok2` has complex nested blocks (complexity: 21) (nestif) if ok && ok2 { ^ pkg/arbitrum/parser/transaction_analyzer.go:697:1: `if swapParams.Pool != (common.Address{})` has complex nested blocks (complexity: 6) (nestif) if swapParams.Pool != (common.Address{}) { ^ pkg/arbitrum/parser/transaction_analyzer.go:981:1: `if amountFloat < 1e18 && amountFloat > 1e6` has complex nested blocks (complexity: 6) (nestif) if amountFloat < 1e18 && amountFloat > 1e6 { // Likely USDC/USDT (6 decimals) ^ pkg/arbitrage/detection_engine.go:561:1: `if opp1.Quantities != nil && opp2.Quantities != nil` has complex nested blocks (complexity: 7) (nestif) if opp1.Quantities != nil && opp2.Quantities != nil { ^ pkg/arbitrage/executor.go:480:1: `if len(params.TokenPath) == 0` has complex nested blocks (complexity: 16) (nestif) if len(params.TokenPath) == 0 { ^ pkg/arbitrage/live_execution_framework.go:593:1: `if framework.config.DailyLossLimit != nil` has complex nested blocks (complexity: 11) (nestif) if framework.config.DailyLossLimit != nil { ^ pkg/arbitrum/abi_decoder.go:178:1: `if strings.Contains(functionSig, "swapExactTokensForTokens")` has complex nested blocks (complexity: 7) (nestif) if strings.Contains(functionSig, "swapExactTokensForTokens") { ^ pkg/arbitrum/abi_decoder.go:300:1: `if len(data) >= 128` has complex nested blocks (complexity: 33) (nestif) if len(data) >= 128 { // Minimum for token addresses and amounts ^ pkg/arbitrum/l2_parser.go:749:1: `if len(params) >= 96` has complex nested blocks (complexity: 9) (nestif) if len(params) >= 96 { ^ pkg/arbitrum/l2_parser.go:954:1: `if arrayLength.Cmp(big.NewInt(0)) > 0 && len(params) > 96` has complex nested blocks (complexity: 5) (nestif) if arrayLength.Cmp(big.NewInt(0)) > 0 && len(params) > 96 { ^ pkg/arbitrum/market_discovery.go:159:1: `if result.PoolsFound > 0` has complex nested blocks (complexity: 10) (nestif) if result.PoolsFound > 0 { ^ pkg/arbitrum/parser.go:319:1: `if !isDEX` has complex nested blocks (complexity: 9) (nestif) if !isDEX { ^ pkg/arbitrum/pool_cache.go:153:1: `if exists` has complex nested blocks (complexity: 5) (nestif) if cached, exists := c.pools[address]; exists { ^ pkg/arbitrum/pool_cache.go:351:1: `if oldestAddress != (common.Address{})` has complex nested blocks (complexity: 9) (nestif) if oldestAddress != (common.Address{}) { ^ pkg/arbitrum/pool_cache.go:392:1: `if exists` has complex nested blocks (complexity: 5) (nestif) if cached, exists := c.pools[address]; exists { ^ pkg/math/arbitrage_calculator.go:636:1: `if opportunity.Quantities != nil` has complex nested blocks (complexity: 5) (nestif) if opportunity.Quantities != nil { ^ pkg/transport/provider_manager.go:235:21: SA1019: rpc.DialHTTPWithClient is deprecated: use DialOptions and the WithHTTPClient option. (staticcheck) rpcClient, err := rpc.DialHTTPWithClient(config.HTTPEndpoint, httpClient) ^ pkg/transport/persistence.go:12:2: SA1019: "io/ioutil" has been deprecated since Go 1.19: As of Go 1.16, the same functionality is now provided by package [io] or package [os], and those implementations should be preferred in new code. See the specific function documentation for details. (staticcheck) "io/ioutil" ^ pkg/math/precision_test.go:178:2: SA1019: rand.Seed has been deprecated since Go 1.20 and an alternative has been available since Go 1.0: As of Go 1.20 there is no reason to call Seed with a random value. Programs that call Seed with a known value to get a specific sequence of results should use New(NewSource(seed)) to obtain a local random generator. (staticcheck) rand.Seed(time.Now().UnixNano()) ^ pkg/market/manager_test.go:83:2: SA4006: this value of `manager` is never used (staticcheck) manager := NewMarketManager(cfg, logger) ^ pkg/arbitrum/discovery/core.go:387:41: SA4009: argument limit is overwritten before first use (staticcheck) func (md *MarketDiscovery) getTopTokens(limit int) []*TokenInfo { ^ pkg/arbitrum/discovery/core.go:407:2: SA4009(related information): assignment to limit (staticcheck) limit = 10 // Reduced from 20 to 10 to reduce load ^ pkg/arbitrum/parser/transaction_analyzer.go:418:5: SA4023: this comparison is never true (staticcheck) if mathEngine == nil { ^ pkg/arbitrum/parser/transaction_analyzer.go:417:16: SA4023(related information): the lhs of the comparison is the 1st return value of this function call (staticcheck) mathEngine := ta.mathCalculator.GetMathForExchange(protocol) ^ pkg/math/exchange_math.go:885:1: SA4023(related information): (*github.com/fraktal/mev-beta/pkg/math.MathCalculator).GetMathForExchange never returns a nil interface value (staticcheck) func (mc *MathCalculator) GetMathForExchange(exchangeType string) ExchangeMath { ^ pkg/arbitrum/parser/transaction_analyzer.go:660:5: SA4023: this comparison is never true (staticcheck) if mathEngine == nil { ^ pkg/arbitrum/parser/transaction_analyzer.go:659:16: SA4023(related information): the lhs of the comparison is the 1st return value of this function call (staticcheck) mathEngine := ta.mathCalculator.GetMathForExchange("balancer_v2") ^ pkg/arbitrum/parser/transaction_analyzer.go:705:7: SA4023: this comparison is always true (staticcheck) if mathEngine != nil { ^ pkg/arbitrum/parser/transaction_analyzer.go:704:18: SA4023(related information): the lhs of the comparison is the 1st return value of this function call (staticcheck) mathEngine := ta.mathCalculator.GetMathForExchange("uniswap_v2") // Default to Uniswap V2 math ^ pkg/arbitrum/parser.go:195:5: SA4031: this nil check is never true (staticcheck) if tx == nil { ^ pkg/arbitrum/parser.go:189:9: SA4031(related information): this is the value of tx (staticcheck) tx := &types.Transaction{} ^ pkg/arbitrum/parser.go:283:7: SA4031: this nil check is always true (staticcheck) if tx != nil { ^ pkg/arbitrum/parser.go:279:10: SA4031(related information): this is the value of tx (staticcheck) tx := &types.Transaction{} ^ pkg/pools/discovery.go:789:9: ST1003: range var poolId should be poolID (stylecheck) for _, poolId := range poolIdentifiers { ^ pkg/exchanges/exchanges.go:42:2: ST1003: struct field Url should be URL (stylecheck) Url string ^ pkg/exchanges/exchanges.go:43:2: ST1003: struct field ApiUrl should be APIURL (stylecheck) ApiUrl string ^ pkg/math/precision_test.go:206:3: ST1003: should not use underscores in Go names; var ab_c should be abC (stylecheck) ab_c, err1 := dc.Add(ab, c) ^ pkg/math/precision_test.go:208:3: ST1003: should not use underscores in Go names; var a_bc should be aBc (stylecheck) a_bc, err3 := dc.Add(a, bc) ^ pkg/scanner/swap/analyzer.go:190:25: ST1023: should omit type float64 from declaration; it will be inferred from the right-hand side (stylecheck) var estimatedProfitUSD float64 = 0.0 ^ pkg/arbitrum/l2_parser.go:748:24: ST1023: should omit type string from declaration; it will be inferred from the right-hand side (stylecheck) var tokenIn, tokenOut string = "0x0000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000" ^ pkg/arbitrum/pool_cache.go:341:17: ST1023: should omit type time.Time from declaration; it will be inferred from the right-hand side (stylecheck) var oldestTime time.Time = time.Now() ^ pkg/market/pipeline.go:761:15: ST1023: should omit type int64 from declaration; it will be inferred from the right-hand side (stylecheck) var totalGas int64 = baseGasSwap*2 + baseGasTransfer // Two swaps + transfer ^ pkg/arbitrage/multihop_test.go:61:2: float-compare: use assert.InEpsilon (or InDelta) (testifylint) assert.Equal(t, 0.03, scanner.maxSlippage) ^ pkg/market/manager_test.go:235:2: compares: use assert.GreaterOrEqual (testifylint) assert.True(t, updatedPool.LastUpdated.Unix() >= pool.LastUpdated.Unix()) ^ pkg/market/pipeline_test.go:183:2: float-compare: use assert.InEpsilon (or InDelta) (testifylint) assert.Equal(t, 0.0, impact) ^ pkg/uniswap/advanced_cached_test.go:34:2: negative-positive: use assert.Negative (testifylint) assert.True(t, diff.Cmp(tolerance) < 0, "PriceToSqrtPriceX96Advanced should convert correctly for price=1.0") ^ pkg/uniswap/advanced_cached_test.go:48:2: negative-positive: use assert.Negative (testifylint) assert.True(t, diff.Cmp(tolerance) < 0, "TickToSqrtPriceX96Advanced should convert tick 0 correctly") ^ pkg/uniswap/advanced_cached_test.go:73:2: negative-positive: use assert.Negative (testifylint) assert.True(t, diff.Cmp(big.NewInt(1000000000000)) < 0, "Advanced round trip conversion should be accurate") ^ pkg/validation/input_validator_test.go:11:2: useless-assert: meaningless assertion (testifylint) assert.True(t, true) ^ pkg/arbitrum/discovery/core.go:416:145: (*MarketDiscovery).buildFactoryMarkets - result 1 (error) is always nil (unparam) func (md *MarketDiscovery) buildFactoryMarkets(factoryAddr common.Address, factoryInfo *FactoryInfo, tokens []*TokenInfo) ([]*PoolInfoDetailed, error) { ^ pkg/arbitrum/discovery/pool_state.go:87:55: `(*PoolStateManager).updateUniswapV2PoolState` - `ctx` is unused (unparam) func (psm *PoolStateManager) updateUniswapV2PoolState(ctx context.Context, pool *PoolInfoDetailed) error { ^ pkg/arbitrum/discovery/pool_state.go:123:55: `(*PoolStateManager).updateUniswapV3PoolState` - `ctx` is unused (unparam) func (psm *PoolStateManager) updateUniswapV3PoolState(ctx context.Context, pool *PoolInfoDetailed) error { ^ pkg/arbitrum/discovery/pool_state.go:174:54: `(*PoolStateManager).updateBalancerPoolState` - `ctx` is unused (unparam) func (psm *PoolStateManager) updateBalancerPoolState(ctx context.Context, pool *PoolInfoDetailed) error { ^ pkg/arbitrum/discovery/pool_state.go:214:51: `(*PoolStateManager).updateCurvePoolState` - `ctx` is unused (unparam) func (psm *PoolStateManager) updateCurvePoolState(ctx context.Context, pool *PoolInfoDetailed) error { ^ pkg/pools/create2.go:488:55: `(*CREATE2Calculator).queryFactoryCurveRegistry` - `ctx` is unused (unparam) func (c *CREATE2Calculator) queryFactoryCurveRegistry(ctx context.Context, registryAddr, token0, token1 common.Address) (common.Address, error) { ^ pkg/pools/create2.go:498:54: `(*CREATE2Calculator).queryCryptoCurveRegistry` - `ctx` is unused (unparam) func (c *CREATE2Calculator) queryCryptoCurveRegistry(ctx context.Context, registryAddr, token0, token1 common.Address) (common.Address, error) { ^ pkg/pools/create2.go:508:56: `(*CREATE2Calculator).queryMetapoolCurveRegistry` - `ctx` is unused (unparam) func (c *CREATE2Calculator) queryMetapoolCurveRegistry(ctx context.Context, registryAddr, token0, token1 common.Address) (common.Address, error) { ^ pkg/pools/discovery.go:266:90: `(*PoolDiscovery).handlePoolCreation` - `logData` is unused (unparam) func (pd *PoolDiscovery) handlePoolCreation(factoryAddress string, topics []interface{}, logData map[string]interface{}, txHash string) { ^ pkg/pools/discovery.go:306:62: `(*PoolDiscovery).handleSwapEvent` - `topics` is unused (unparam) func (pd *PoolDiscovery) handleSwapEvent(poolAddress string, topics []interface{}, logData map[string]interface{}, txHash string) { ^ pkg/pools/discovery.go:473:67: `(*PoolDiscovery).handleLiquidityEvent` - `topics` is unused (unparam) func (pd *PoolDiscovery) handleLiquidityEvent(poolAddress string, topics []interface{}, logData map[string]interface{}, txHash, eventType string) { ^ pkg/pools/discovery.go:528:62: `(*PoolDiscovery).handleSyncEvent` - `topics` is unused (unparam) func (pd *PoolDiscovery) handleSyncEvent(poolAddress string, topics []interface{}, logData map[string]interface{}, txHash string) { ^ pkg/pools/discovery.go:663:51: `(*PoolDiscovery).parseLiquidityData` - `eventType` is unused (unparam) func (pd *PoolDiscovery) parseLiquidityData(data, eventType string) *SwapData { ^ pkg/trading/slippage_protection.go:137:102: (*SlippageProtection).validateInputParameters - result 0 (error) is always nil (unparam) func (sp *SlippageProtection) validateInputParameters(params *TradeParameters, check *SlippageCheck) error { ^ pkg/trading/slippage_protection.go:287:80: `(*SlippageProtection).checkSandwichAttackRisk` - `check` is unused (unparam) func (sp *SlippageProtection) checkSandwichAttackRisk(params *TradeParameters, check *SlippageCheck) error { ^ pkg/trading/slippage_protection.go:706:54: `(*SlippageProtection).checkFactoryDeployment` - `ctx` is unused (unparam) func (sp *SlippageProtection) checkFactoryDeployment(ctx context.Context, poolAddress common.Address) string { ^ pkg/trading/slippage_protection.go:813:57: `(*SlippageProtection).calculateRecentVolatility` - `token0` is unused (unparam) func (sp *SlippageProtection) calculateRecentVolatility(token0, token1 common.Address) float64 { ^ pkg/transport/failover.go:449:71: (*FailoverManager).switchPrimary - result 0 (error) is always nil (unparam) func (fm *FailoverManager) switchPrimary(newPrimaryID, reason string) error { ^ pkg/transport/memory_transport.go:121:37: `(*MemoryTransport).Receive$1$1` - `topicName` is unused (unparam) go func(topicCh <-chan *Message, topicName string) { ^ pkg/transport/message_bus_impl.go:596:11: `(*UniversalMessageBus).deliverToSubscribers$1` - `subscription` is unused (unparam) go func(subscription *Subscription, message *Message) { ^ pkg/transport/websocket_transport.go:211:45: (*WebSocketTransport).startServer - result 0 (error) is always nil (unparam) func (wt *WebSocketTransport) startServer() error { ^ pkg/transport/websocket_transport.go:328:43: `(*WebSocketTransport).pingRoutine` - `connID` is unused (unparam) func (wt *WebSocketTransport) pingRoutine(connID string, conn *websocket.Conn) { ^ pkg/arbitrum/parser/core.go:649:59: `(*sophisticatedABIDecoder).decodeBalancerBatchSwap` - `data` is unused (unparam) func (p *sophisticatedABIDecoder) decodeBalancerBatchSwap(data []byte) (*SwapEvent, error) { ^ pkg/arbitrum/parser/core.go:761:138: (*EnhancedSequencerParser).analyzeTransactionLogs - result 0 (error) is always nil (unparam) func (p *EnhancedSequencerParser) analyzeTransactionLogs(tx *types.Transaction, receipt *types.Receipt, opportunities *MEVOpportunities) error { ^ pkg/arbitrum/parser/core.go:804:64: `(*EnhancedSequencerParser).parseSwapLog` - `receipt` is unused (unparam) func (p *EnhancedSequencerParser) parseSwapLog(log *types.Log, receipt *types.Receipt) *SwapEvent { ^ pkg/oracle/price_oracle.go:568:96: (*PriceOracle).calculateSlippage - result 1 (error) is always nil (unparam) func (p *PriceOracle) calculateSlippage(amountIn, amountOut, currentPrice *big.Int) (*big.Int, error) { ^ Analysis complete. Review the output for any errors or warnings.