/
shredstream.go
45 lines (36 loc) · 1.26 KB
/
shredstream.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
package shredstream_client
import (
"crypto/tls"
"github.com/17535250630/jito_cli/pkg"
"github.com/17535250630/jito_cli/proto"
"github.com/17535250630/solana-go"
"github.com/17535250630/solana-go/rpc"
"google.golang.org/grpc"
"google.golang.org/grpc/credentials"
)
type Client struct {
GrpcConn *grpc.ClientConn
RpcConn *rpc.Client
ShredstreamClient proto.ShredstreamClient
Auth *pkg.AuthenticationService
}
func NewShredstreamClient(grpcDialURL string, rpcClient *rpc.Client, privateKey solana.PrivateKey) (*Client, error) {
conn, err := grpc.Dial(grpcDialURL, grpc.WithTransportCredentials(credentials.NewTLS(&tls.Config{})))
if err != nil {
return nil, err
}
shredstreamService := proto.NewShredstreamClient(conn)
authService := pkg.NewAuthenticationService(conn, privateKey)
if err = authService.AuthenticateAndRefresh(proto.Role_SHREDSTREAM_SUBSCRIBER); err != nil {
return nil, err
}
return &Client{
GrpcConn: conn,
RpcConn: rpcClient,
ShredstreamClient: shredstreamService,
Auth: authService,
}, nil
}
func (c *Client) SendHeartbeat(count uint64, opts ...grpc.CallOption) (*proto.HeartbeatResponse, error) {
return c.ShredstreamClient.SendHeartbeat(c.Auth.GrpcCtx, &proto.Heartbeat{Count: count}, opts...)
}