Sequencer is working (minimal parsing)

This commit is contained in:
Krypto Kajun
2025-09-14 06:21:10 -05:00
parent 7dd5b5b692
commit 518758790a
59 changed files with 10539 additions and 471 deletions

View File

@@ -6,12 +6,14 @@ import (
"os"
"os/signal"
"syscall"
"time"
"github.com/urfave/cli/v2"
"github.com/fraktal/mev-beta/internal/config"
"github.com/fraktal/mev-beta/internal/logger"
"github.com/fraktal/mev-beta/internal/ratelimit"
"github.com/fraktal/mev-beta/pkg/market"
"github.com/fraktal/mev-beta/pkg/metrics"
"github.com/fraktal/mev-beta/pkg/monitor"
"github.com/fraktal/mev-beta/pkg/scanner"
)
@@ -46,15 +48,40 @@ func main() {
func startBot() error {
// Load configuration
cfg, err := config.Load("config/config.yaml")
configFile := "config/config.yaml"
if _, err := os.Stat("config/local.yaml"); err == nil {
configFile = "config/local.yaml"
}
cfg, err := config.Load(configFile)
if err != nil {
return fmt.Errorf("failed to load config: %w", err)
}
// Initialize logger
// Debug output to check config values
log := logger.New(cfg.Log.Level, cfg.Log.Format, cfg.Log.File)
log.Debug(fmt.Sprintf("RPC Endpoint: %s", cfg.Arbitrum.RPCEndpoint))
log.Debug(fmt.Sprintf("WS Endpoint: %s", cfg.Arbitrum.WSEndpoint))
log.Debug(fmt.Sprintf("Chain ID: %d", cfg.Arbitrum.ChainID))
log.Info("Starting MEV bot...")
log.Info("Starting MEV bot with L2 message processing...")
// Initialize metrics collector
metricsCollector := metrics.NewMetricsCollector(log)
// Start metrics server if enabled
var metricsServer *metrics.MetricsServer
if os.Getenv("METRICS_ENABLED") == "true" {
metricsPort := os.Getenv("METRICS_PORT")
if metricsPort == "" {
metricsPort = "9090"
}
metricsServer = metrics.NewMetricsServer(metricsCollector, log, metricsPort)
go func() {
if err := metricsServer.Start(); err != nil {
log.Error("Metrics server error: ", err)
}
}()
}
// Create rate limiter manager
rateLimiter := ratelimit.NewLimiterManager(&cfg.Arbitrum)
@@ -87,28 +114,57 @@ func startBot() error {
signal.Notify(sigChan, syscall.SIGINT, syscall.SIGTERM)
// Start monitoring in a goroutine
monitorDone := make(chan error, 1)
go func() {
if err := monitor.Start(ctx); err != nil {
log.Error("Monitor error: ", err)
}
monitorDone <- monitor.Start(ctx)
}()
log.Info("MEV bot started. Press Ctrl+C to stop.")
// Wait for signal
<-sigChan
log.Info("Received shutdown signal...")
// Wait for signal or monitor completion
select {
case <-sigChan:
log.Info("Received shutdown signal...")
case err := <-monitorDone:
if err != nil {
log.Error("Monitor error: ", err)
}
log.Info("Monitor stopped...")
}
// Cancel context to stop monitor
cancel()
// Stop the monitor
monitor.Stop()
// Create shutdown timeout context (5 seconds)
shutdownCtx, shutdownCancel := context.WithTimeout(context.Background(), 5*time.Second)
defer shutdownCancel()
// Stop the scanner
scanner.Stop()
// Shutdown components with timeout
shutdownDone := make(chan struct{})
go func() {
defer close(shutdownDone)
// Stop the monitor
monitor.Stop()
// Stop the scanner
scanner.Stop()
// Stop metrics server if running
if metricsServer != nil {
metricsServer.Stop()
}
}()
// Wait for shutdown or timeout
select {
case <-shutdownDone:
log.Info("MEV bot stopped gracefully.")
case <-shutdownCtx.Done():
log.Error("Shutdown timeout exceeded, forcing exit...")
os.Exit(1)
}
log.Info("MEV bot stopped.")
return nil
}

BIN
cmd/mev-bot/mev-bot Executable file

Binary file not shown.