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:
Key
Description
Values
dappAddress
ETH address of DApp that should receive quotes
string
QuotesReply
fields (stream message):
Key
Description
Values
quoteId
UUID of the quote
string
quote
quote
byte[]
dappAddress
ETH address of the DApp that should receive quote
string
solverAddress
ETH address of the quote solver
string
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
}