package main import ( "context" "encoding/json" "fmt" "log" "time" "github.com/gorilla/websocket" ) func main() { fmt.Println("=== Arbitrum Sequencer Feed Test ===") fmt.Println("Testing: wss://arb1.arbitrum.io/feed") fmt.Println() ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second) defer cancel() log.Println("[1/3] Connecting to Arbitrum sequencer feed...") dialer := websocket.DefaultDialer dialer.HandshakeTimeout = 10 * time.Second conn, resp, err := dialer.DialContext(ctx, "wss://arb1.arbitrum.io/feed", nil) if err != nil { log.Fatalf("❌ Connection FAILED: %v", err) } defer conn.Close() log.Printf("✅ Connected successfully! (HTTP %d)", resp.StatusCode) log.Println() log.Println("[2/3] Waiting for messages from feed (30 second timeout)...") // Set read deadline conn.SetReadDeadline(time.Now().Add(25 * time.Second)) // Try to read messages messageCount := 0 startTime := time.Now() for i := 0; i < 100; i++ { var msg map[string]interface{} err := conn.ReadJSON(&msg) if err != nil { elapsed := time.Since(startTime) log.Printf("❌ Read error after %d messages (%.2fs elapsed): %v", messageCount, elapsed.Seconds(), err) break } messageCount++ elapsed := time.Since(startTime) // Print first 3 messages in full if messageCount <= 3 { msgJSON, _ := json.MarshalIndent(msg, "", " ") log.Printf("✅ Message %d (%.2fs):\n%s\n", messageCount, elapsed.Seconds(), msgJSON) } else if messageCount%10 == 0 { log.Printf("✅ Received %d messages so far (%.2fs elapsed)...", messageCount, elapsed.Seconds()) } // Reset deadline for next read conn.SetReadDeadline(time.Now().Add(25 * time.Second)) } log.Println() log.Println("[3/3] Test Results:") if messageCount == 0 { log.Println("❌ FAILED - ZERO messages received from feed") log.Println(" The feed connects but doesn't send any data") log.Println(" This could be:") log.Println(" - Cloudflare blocking the connection") log.Println(" - Feed requires authentication") log.Println(" - Feed URL is incorrect") } else { log.Printf("✅ SUCCESS - Received %d messages from feed", messageCount) log.Println(" The feed is working correctly!") } }