- Added comprehensive bounds checking to prevent buffer overruns in multicall parsing - Implemented graduated validation system (Strict/Moderate/Permissive) to reduce false positives - Added LRU caching system for address validation with 10-minute TTL - Enhanced ABI decoder with missing Universal Router and Arbitrum-specific DEX signatures - Fixed duplicate function declarations and import conflicts across multiple files - Added error recovery mechanisms with multiple fallback strategies - Updated tests to handle new validation behavior for suspicious addresses - Fixed parser test expectations for improved validation system - Applied gofmt formatting fixes to ensure code style compliance - Fixed mutex copying issues in monitoring package by introducing MetricsSnapshot - Resolved critical security vulnerabilities in heuristic address extraction - Progress: Updated TODO audit from 10% to 35% complete 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
6327 lines
421 KiB
Plaintext
6327 lines
421 KiB
Plaintext
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(i*8)))
|
|
^
|
|
pkg/arbitrum/discovery/pool_state.go:187:89: G115: integer overflow conversion int -> uint (gosec)
|
|
reserve1.Add(reserve1, big.NewInt(int64(poolAddrBytes[(i+8)%len(poolAddrBytes)])<<uint(i*8)))
|
|
^
|
|
pkg/validation/input_validator.go:508:15: G115: integer overflow conversion int64 -> 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<<uint(attempt)) * time.Second
|
|
^
|
|
pkg/arbitrum/client.go:189:19: G115: integer overflow conversion int -> 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.
|