Subscribe to quotes

This example demonstrates how to subscribe to quotes from the bloXroute gateway.

Name: Quotes

Quotes is a GRPC stream of new quote that match the dappAddress of the subscription as they are propagated in the BDN.\ QuotesRequest arguments:

QuotesReply fields (stream message):

Examples

package main

import (
	"context"
	"encoding/hex"
	"fmt"
	"log"

	pb "github.com/bloXroute-Labs/gateway/v2/protobuf"

	"github.com/ethereum/go-ethereum/crypto"
	"google.golang.org/grpc"
	"google.golang.org/grpc/credentials"
)

// gatewayHost is the address of the gateway to which the subscription is being made
const gatewayHost = "127.0.0.1:5002"

// header is the authorization header of your bloXroute Account
const header = "<YOUR-AUTHORIZATION-HEADER>"

func main() {
	// this will use localhost CA to verify the certificate
	creds := credentials.NewClientTLSFromCert(nil, "")

	// Dial the gateway
	conn, err := grpc.Dial(gatewayHost,
		grpc.WithTransportCredentials(creds),
		grpc.WithPerRPCCredentials(blxrCredentials{authorization: header}))
	if err != nil {
		log.Fatalln("dial grpc", err)
	}

	// Create a client
	client := pb.NewGatewayClient(conn)

	// Subscribe to quotes
	stream, err := client.Quotes(context.Background(), genQuotesRequest())
	if err != nil {
		log.Fatalln("subscribe to quotes", err)
	}

	for {
		fmt.Printf("listening for quotes from %s ...\n", gatewayHost)

		// Receive the quotes from the stream until the stream is closed
		msg, err := stream.Recv()
		if err != nil {
			log.Fatalln("receive from stream", err)
		}

		fmt.Println("got quote:")
		fmt.Println("- quote_id:", msg.QuoteId)
		fmt.Println("- dapp_addr:", msg.DappAddress)
		fmt.Println("- solver_addr:", msg.SolverAddress)
		fmt.Println("- quote:", hex.EncodeToString(msg.Quote))
	}
}

func genQuotesRequest() *pb.QuotesRequest {
	// Return the quote request
	return &pb.QuotesReply{
		DappAddress: "<dapp addr wanted>",
	}
}

// blxrCredentials is an implementation of PerRPCCredentials
type blxrCredentials struct {
	authorization string
}

// GetRequestMetadata sets the authorization header
func (bc blxrCredentials) GetRequestMetadata(ctx context.Context, uri ...string) (map[string]string, error) {
	return map[string]string{
		"authorization": bc.authorization,
	}, nil
}

// RequireTransportSecurity is a method of the PerRPCCredentials interface
func (bc blxrCredentials) RequireTransportSecurity() bool {
	return false
}

Last updated