chore: add swqos client
This commit is contained in:
82
pkg/swqos/clients/block_razor_client.go
Normal file
82
pkg/swqos/clients/block_razor_client.go
Normal file
@@ -0,0 +1,82 @@
|
||||
package clients
|
||||
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
"fmt"
|
||||
|
||||
pb "github.com/BlockRazorinc/solana-trader-client-go/pb/serverpb"
|
||||
"github.com/gagliardetto/solana-go"
|
||||
"google.golang.org/grpc"
|
||||
"google.golang.org/grpc/credentials/insecure"
|
||||
)
|
||||
|
||||
type BlockRazorClient struct {
|
||||
conn *grpc.ClientConn
|
||||
client pb.ServerClient
|
||||
}
|
||||
|
||||
type Authentication struct {
|
||||
apiKey string
|
||||
}
|
||||
|
||||
func (a *Authentication) GetRequestMetadata(context.Context, ...string) (map[string]string, error) {
|
||||
return map[string]string{"apikey": a.apiKey}, nil
|
||||
}
|
||||
|
||||
func (a *Authentication) RequireTransportSecurity() bool {
|
||||
return false
|
||||
}
|
||||
|
||||
func NewBlockRazorClient(ctx context.Context, endpoint string) (*BlockRazorClient, error) {
|
||||
if endpoint == "" {
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
// setup grpc connect
|
||||
conn, err := grpc.NewClient(
|
||||
endpoint,
|
||||
grpc.WithTransportCredentials(insecure.NewCredentials()),
|
||||
grpc.WithKeepaliveParams(kacp),
|
||||
grpc.WithPerRPCCredentials(&Authentication{apiKey: "xhMIRxybodR6U35cDdTjQVIkUPPVVjKC5ynKWQMdL9fm8DnwoEFFAlj1E4ySBADo4xLh3RVTRgLQI2BTzegxb3N5CIXThEEJ"}), // TODO: maybe config?
|
||||
)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("connect error: %v", err)
|
||||
}
|
||||
|
||||
// use the Gateway client connection interface
|
||||
client := pb.NewServerClient(conn)
|
||||
|
||||
// grpc request warmup
|
||||
_, err = client.GetHealth(ctx, &pb.HealthRequest{})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return &BlockRazorClient{
|
||||
conn: conn,
|
||||
client: client,
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (c *BlockRazorClient) SendTransaction(ctx context.Context, tx *solana.Transaction) error {
|
||||
if c == nil {
|
||||
return errors.New("block razor client is nil")
|
||||
}
|
||||
|
||||
txBase64, _ := tx.ToBase64()
|
||||
_, err := c.client.SendTransaction(ctx, &pb.SendRequest{
|
||||
Transaction: txBase64,
|
||||
Mode: "fast",
|
||||
SafeWindow: 3,
|
||||
})
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (c *BlockRazorClient) SendBundle(ctx context.Context, txs []*solana.Transaction) error {
|
||||
return fmt.Errorf("block razor client not support send bundle")
|
||||
}
|
||||
Reference in New Issue
Block a user