Get BlockStream
Introduction
Endpoint
Region
Endpoint
Rate Limit
Tier 4
Tier 3
Tier 2
Tier 1
Tier 0
Request Example
// GetBlockStream provides a simplified example of subscribing to and processing the regular block stream.
// Note: This function attempts to connect and subscribe only once. For production use, implement your own reconnection logic.
func GetBlockStream(authToken string) {
log.Printf("[BlockStream] Attempting to connect to gRPC server at %s...", grpcAddr)
// Establish a connection to the gRPC server with a timeout.
ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
defer cancel()
conn, err := grpc.DialContext(ctx, grpcAddr,
grpc.WithTransportCredentials(insecure.NewCredentials()))
if err != nil {
log.Printf("[BlockStream] Failed to connect to gRPC server: %v", err)
return
}
defer conn.Close()
log.Println("[BlockStream] Successfully connected to gRPC server.")
client := basepb.NewBaseApiClient(conn)
// Create a new context with authentication metadata for the stream subscription.
streamCtx := metadata.NewOutgoingContext(context.Background(), metadata.Pairs("authorization", authToken))
stream, err := client.GetBlockStream(streamCtx, &basepb.GetBlockStreamRequest{})
if err != nil {
log.Printf("[BlockStream] Failed to subscribe to stream: %v", err)
return
}
log.Println("[BlockStream] Subscription successful. Waiting for new blocks...")
// Loop indefinitely to receive messages from the stream.
for {
block, err := stream.Recv()
if err != nil {
if err == io.EOF {
log.Println("[BlockStream] Stream closed by the server (EOF).")
} else {
log.Printf("[BlockStream] An error occurred while receiving data: %v", err)
}
break // Exit the loop on error or stream closure.
}
// Process the received block data.
log.Printf("=> [BlockStream] Received new block: Number=%d, Hash=%s, TransactionCount=%d",
block.GetBlockNumber(),
block.GetBlockHash(),
len(block.GetTransactions()),
)
// To decode transactions, you can call DecodeTransactions(block.Transactions).
}
}Response
Last updated