StreamBlocks gRPC Method
Parameters
timestamp
integer
Loading...
Returns
stream
object
Loading...
Request
1package main23import (4"context"5"crypto/tls"6"encoding/json"7"fmt"8"io"9"log"10"time"1112"google.golang.org/grpc"13"google.golang.org/grpc/credentials"14"google.golang.org/grpc/metadata"1516pb "hyperliquid-grpc-go/pb"17)1819const (20// Using Quicknode endpoint21grpcEndpoint = "your-grpc-endpoint:port"22authToken = "your-auth-token"23)2425// Create gRPC connection with TLS26func createConnection() (*grpc.ClientConn, error) {27tlsConfig := &tls.Config{28InsecureSkipVerify: false, // Set to true only for testing29}30creds := credentials.NewTLS(tlsConfig)3132conn, err := grpc.Dial(33grpcEndpoint,34grpc.WithTransportCredentials(creds),35grpc.WithDefaultCallOptions(36grpc.MaxCallRecvMsgSize(100*1024*1024), // 100MB37),38)3940return conn, err41}4243// Create context with auth metadata44func createContext() context.Context {45md := metadata.Pairs("x-token", authToken)46return metadata.NewOutgoingContext(context.Background(), md)47}484950// Stream blocks51func streamBlocks(client pb.BlockStreamingClient) error {52ctx := createContext()5354stream, err := client.StreamBlocks(ctx, &pb.Timestamp{55Timestamp: time.Now().UnixMilli(),56})57if err != nil {58return fmt.Errorf("failed to stream blocks: %v", err)59}6061log.Println("š Starting blocks stream...")6263for {64block, err := stream.Recv()65if err == io.EOF {66log.Println("Block stream ended")67break68}69if err != nil {70return fmt.Errorf("receive error: %v", err)71}7273var blockData map[string]interface{}74if err := json.Unmarshal([]byte(block.DataJson), &blockData); err != nil {75log.Printf("ā ļø Failed to parse block: %v", err)76continue77}7879if abciBlock, ok := blockData["abci_block"].(map[string]interface{}); ok {80if round, ok := abciBlock["round"].(float64); ok {81log.Printf("š§± Received block round: %.0f", round)82}83}84}8586return nil87}888990// Interactive menu91func runInteractiveMenu(conn *grpc.ClientConn) {92blockClient := pb.NewBlockStreamingClient(conn)9394fmt.Println("\nš Connected successfully!")95fmt.Println("\nAvailable stream:")96fmt.Println("1. Stream blocks")97fmt.Println("2. Exit")9899for {100fmt.Print("\nSelect option (1-2): ")101var choice string102fmt.Scanln(&choice)103104switch choice {105case "1":106if err := streamBlocks(blockClient); err != nil {107log.Printf("ā Block stream error: %v", err)108}109case "2":110fmt.Println("š Goodbye!")111return112default:113fmt.Println("ā Invalid choice. Please select 1-2.")114}115}116}117118func main() {119// Create connection120conn, err := createConnection()121if err != nil {122log.Fatalf("ā Failed to connect: %v", err)123}124defer conn.Close()125126fmt.Printf("Connected to: %s\n", grpcEndpoint)127128// Run interactive menu129runInteractiveMenu(conn)130}
1package main23import (4"context"5"crypto/tls"6"encoding/json"7"fmt"8"io"9"log"10"time"1112"google.golang.org/grpc"13"google.golang.org/grpc/credentials"14"google.golang.org/grpc/metadata"1516pb "hyperliquid-grpc-go/pb"17)1819const (20// Using Quicknode endpoint21grpcEndpoint = "your-grpc-endpoint:port"22authToken = "your-auth-token"23)2425// Create gRPC connection with TLS26func createConnection() (*grpc.ClientConn, error) {27tlsConfig := &tls.Config{28InsecureSkipVerify: false, // Set to true only for testing29}30creds := credentials.NewTLS(tlsConfig)3132conn, err := grpc.Dial(33grpcEndpoint,34grpc.WithTransportCredentials(creds),35grpc.WithDefaultCallOptions(36grpc.MaxCallRecvMsgSize(100*1024*1024), // 100MB37),38)3940return conn, err41}4243// Create context with auth metadata44func createContext() context.Context {45md := metadata.Pairs("x-token", authToken)46return metadata.NewOutgoingContext(context.Background(), md)47}484950// Stream blocks51func streamBlocks(client pb.BlockStreamingClient) error {52ctx := createContext()5354stream, err := client.StreamBlocks(ctx, &pb.Timestamp{55Timestamp: time.Now().UnixMilli(),56})57if err != nil {58return fmt.Errorf("failed to stream blocks: %v", err)59}6061log.Println("š Starting blocks stream...")6263for {64block, err := stream.Recv()65if err == io.EOF {66log.Println("Block stream ended")67break68}69if err != nil {70return fmt.Errorf("receive error: %v", err)71}7273var blockData map[string]interface{}74if err := json.Unmarshal([]byte(block.DataJson), &blockData); err != nil {75log.Printf("ā ļø Failed to parse block: %v", err)76continue77}7879if abciBlock, ok := blockData["abci_block"].(map[string]interface{}); ok {80if round, ok := abciBlock["round"].(float64); ok {81log.Printf("š§± Received block round: %.0f", round)82}83}84}8586return nil87}888990// Interactive menu91func runInteractiveMenu(conn *grpc.ClientConn) {92blockClient := pb.NewBlockStreamingClient(conn)9394fmt.Println("\nš Connected successfully!")95fmt.Println("\nAvailable stream:")96fmt.Println("1. Stream blocks")97fmt.Println("2. Exit")9899for {100fmt.Print("\nSelect option (1-2): ")101var choice string102fmt.Scanln(&choice)103104switch choice {105case "1":106if err := streamBlocks(blockClient); err != nil {107log.Printf("ā Block stream error: %v", err)108}109case "2":110fmt.Println("š Goodbye!")111return112default:113fmt.Println("ā Invalid choice. Please select 1-2.")114}115}116}117118func main() {119// Create connection120conn, err := createConnection()121if err != nil {122log.Fatalf("ā Failed to connect: %v", err)123}124defer conn.Close()125126fmt.Printf("Connected to: %s\n", grpcEndpoint)127128// Run interactive menu129runInteractiveMenu(conn)130}
Don't have an account yet?
Create your Quicknode endpoint in seconds and start building
Get started for free