Sequencer is working (minimal parsing)
This commit is contained in:
@@ -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
BIN
cmd/mev-bot/mev-bot
Executable file
Binary file not shown.
Reference in New Issue
Block a user