github.com/InjectiveLabs/sdk-go@v1.53.0/client/explorer/explorer.go (about)

     1  package exchange
     2  
     3  import (
     4  	"context"
     5  	"fmt"
     6  
     7  	"google.golang.org/grpc/credentials/insecure"
     8  
     9  	"github.com/InjectiveLabs/sdk-go/client/common"
    10  	explorerPB "github.com/InjectiveLabs/sdk-go/exchange/explorer_rpc/pb"
    11  	log "github.com/InjectiveLabs/suplog"
    12  	"github.com/pkg/errors"
    13  	"google.golang.org/grpc"
    14  )
    15  
    16  type ExplorerClient interface {
    17  	QueryClient() *grpc.ClientConn
    18  	GetTxByTxHash(ctx context.Context, hash string) (*explorerPB.GetTxByTxHashResponse, error)
    19  	GetTxs(ctx context.Context, req *explorerPB.GetTxsRequest) (*explorerPB.GetTxsResponse, error)
    20  	GetBlock(ctx context.Context, blockHeight string) (*explorerPB.GetBlockResponse, error)
    21  	GetBlocks(ctx context.Context) (*explorerPB.GetBlocksResponse, error)
    22  	GetAccountTxs(ctx context.Context, req *explorerPB.GetAccountTxsRequest) (*explorerPB.GetAccountTxsResponse, error)
    23  	GetPeggyDeposits(ctx context.Context, req *explorerPB.GetPeggyDepositTxsRequest) (*explorerPB.GetPeggyDepositTxsResponse, error)
    24  	GetPeggyWithdrawals(ctx context.Context, req *explorerPB.GetPeggyWithdrawalTxsRequest) (*explorerPB.GetPeggyWithdrawalTxsResponse, error)
    25  	GetIBCTransfers(ctx context.Context, req *explorerPB.GetIBCTransferTxsRequest) (*explorerPB.GetIBCTransferTxsResponse, error)
    26  	StreamTxs(ctx context.Context) (explorerPB.InjectiveExplorerRPC_StreamTxsClient, error)
    27  	StreamBlocks(ctx context.Context) (explorerPB.InjectiveExplorerRPC_StreamBlocksClient, error)
    28  	GetWasmCodes(ctx context.Context, req *explorerPB.GetWasmCodesRequest) (*explorerPB.GetWasmCodesResponse, error)
    29  	GetWasmCodeByID(ctx context.Context, req *explorerPB.GetWasmCodeByIDRequest) (*explorerPB.GetWasmCodeByIDResponse, error)
    30  	GetWasmContracts(ctx context.Context, req *explorerPB.GetWasmContractsRequest) (*explorerPB.GetWasmContractsResponse, error)
    31  	GetWasmContractByAddress(ctx context.Context, req *explorerPB.GetWasmContractByAddressRequest) (*explorerPB.GetWasmContractByAddressResponse, error)
    32  	GetCW20Balance(ctx context.Context, req *explorerPB.GetCw20BalanceRequest) (*explorerPB.GetCw20BalanceResponse, error)
    33  	Close()
    34  }
    35  
    36  func NewExplorerClient(network common.Network, options ...common.ClientOption) (ExplorerClient, error) {
    37  	// process options
    38  	opts := common.DefaultClientOptions()
    39  	if network.ChainTLSCert != nil {
    40  		options = append(options, common.OptionTLSCert(network.ExchangeTLSCert))
    41  	}
    42  	for _, opt := range options {
    43  		if err := opt(opts); err != nil {
    44  			err = errors.Wrap(err, "error in client option")
    45  			return nil, err
    46  		}
    47  	}
    48  
    49  	// create grpc client
    50  	var conn *grpc.ClientConn
    51  	var err error
    52  	if opts.TLSCert != nil {
    53  		conn, err = grpc.Dial(network.ExplorerGrpcEndpoint, grpc.WithTransportCredentials(opts.TLSCert), grpc.WithContextDialer(common.DialerFunc))
    54  	} else {
    55  		conn, err = grpc.Dial(network.ExplorerGrpcEndpoint, grpc.WithTransportCredentials(insecure.NewCredentials()), grpc.WithContextDialer(common.DialerFunc))
    56  	}
    57  	if err != nil {
    58  		err := errors.Wrapf(err, "failed to connect to the gRPC: %s", network.ExplorerGrpcEndpoint)
    59  		return nil, err
    60  	}
    61  
    62  	// build client
    63  	cc := &explorerClient{
    64  		opts:    opts,
    65  		network: network,
    66  		conn:    conn,
    67  
    68  		explorerClient: explorerPB.NewInjectiveExplorerRPCClient(conn),
    69  		logger: log.WithFields(log.Fields{
    70  			"module": "sdk-go",
    71  			"svc":    "exchangeClient",
    72  		}),
    73  	}
    74  
    75  	return cc, nil
    76  }
    77  
    78  type explorerClient struct {
    79  	opts    *common.ClientOptions
    80  	network common.Network
    81  	conn    *grpc.ClientConn
    82  	logger  log.Logger
    83  
    84  	explorerClient explorerPB.InjectiveExplorerRPCClient
    85  }
    86  
    87  func (c *explorerClient) QueryClient() *grpc.ClientConn {
    88  	return c.conn
    89  }
    90  
    91  func (c *explorerClient) GetTxByTxHash(ctx context.Context, hash string) (*explorerPB.GetTxByTxHashResponse, error) {
    92  	req := explorerPB.GetTxByTxHashRequest{
    93  		Hash: hash,
    94  	}
    95  
    96  	res, err := common.ExecuteCall(ctx, c.network.ExplorerCookieAssistant, c.explorerClient.GetTxByTxHash, &req)
    97  
    98  	if err != nil {
    99  		fmt.Println(err)
   100  		return &explorerPB.GetTxByTxHashResponse{}, err
   101  	}
   102  
   103  	return res, nil
   104  }
   105  
   106  func (c *explorerClient) GetAccountTxs(ctx context.Context, req *explorerPB.GetAccountTxsRequest) (*explorerPB.GetAccountTxsResponse, error) {
   107  	res, err := common.ExecuteCall(ctx, c.network.ExplorerCookieAssistant, c.explorerClient.GetAccountTxs, req)
   108  
   109  	if err != nil {
   110  		fmt.Println(err)
   111  		return &explorerPB.GetAccountTxsResponse{}, err
   112  	}
   113  
   114  	return res, nil
   115  }
   116  
   117  func (c *explorerClient) GetBlocks(ctx context.Context) (*explorerPB.GetBlocksResponse, error) {
   118  	req := explorerPB.GetBlocksRequest{}
   119  
   120  	res, err := common.ExecuteCall(ctx, c.network.ExplorerCookieAssistant, c.explorerClient.GetBlocks, &req)
   121  
   122  	if err != nil {
   123  		fmt.Println(err)
   124  		return &explorerPB.GetBlocksResponse{}, err
   125  	}
   126  
   127  	return res, nil
   128  }
   129  
   130  func (c *explorerClient) GetBlock(ctx context.Context, blockHeight string) (*explorerPB.GetBlockResponse, error) {
   131  	req := explorerPB.GetBlockRequest{
   132  		Id: blockHeight,
   133  	}
   134  
   135  	res, err := common.ExecuteCall(ctx, c.network.ExplorerCookieAssistant, c.explorerClient.GetBlock, &req)
   136  
   137  	if err != nil {
   138  		fmt.Println(err)
   139  		return &explorerPB.GetBlockResponse{}, err
   140  	}
   141  
   142  	return res, nil
   143  }
   144  
   145  func (c *explorerClient) GetTxs(ctx context.Context, req *explorerPB.GetTxsRequest) (*explorerPB.GetTxsResponse, error) {
   146  	res, err := common.ExecuteCall(ctx, c.network.ExplorerCookieAssistant, c.explorerClient.GetTxs, req)
   147  
   148  	if err != nil {
   149  		fmt.Println(err)
   150  		return &explorerPB.GetTxsResponse{}, err
   151  	}
   152  
   153  	return res, nil
   154  }
   155  
   156  func (c *explorerClient) GetPeggyDeposits(ctx context.Context, req *explorerPB.GetPeggyDepositTxsRequest) (*explorerPB.GetPeggyDepositTxsResponse, error) {
   157  	res, err := common.ExecuteCall(ctx, c.network.ExplorerCookieAssistant, c.explorerClient.GetPeggyDepositTxs, req)
   158  
   159  	if err != nil {
   160  		fmt.Println(err)
   161  		return &explorerPB.GetPeggyDepositTxsResponse{}, err
   162  	}
   163  
   164  	return res, nil
   165  }
   166  
   167  func (c *explorerClient) GetPeggyWithdrawals(ctx context.Context, req *explorerPB.GetPeggyWithdrawalTxsRequest) (*explorerPB.GetPeggyWithdrawalTxsResponse, error) {
   168  	res, err := common.ExecuteCall(ctx, c.network.ExplorerCookieAssistant, c.explorerClient.GetPeggyWithdrawalTxs, req)
   169  
   170  	if err != nil {
   171  		fmt.Println(err)
   172  		return &explorerPB.GetPeggyWithdrawalTxsResponse{}, err
   173  	}
   174  
   175  	return res, nil
   176  }
   177  
   178  func (c *explorerClient) GetIBCTransfers(ctx context.Context, req *explorerPB.GetIBCTransferTxsRequest) (*explorerPB.GetIBCTransferTxsResponse, error) {
   179  	res, err := common.ExecuteCall(ctx, c.network.ExplorerCookieAssistant, c.explorerClient.GetIBCTransferTxs, req)
   180  
   181  	if err != nil {
   182  		fmt.Println(err)
   183  		return &explorerPB.GetIBCTransferTxsResponse{}, err
   184  	}
   185  
   186  	return res, nil
   187  }
   188  
   189  func (c *explorerClient) StreamTxs(ctx context.Context) (explorerPB.InjectiveExplorerRPC_StreamTxsClient, error) {
   190  	req := explorerPB.StreamTxsRequest{}
   191  
   192  	stream, err := common.ExecuteStreamCall(ctx, c.network.ExplorerCookieAssistant, c.explorerClient.StreamTxs, &req)
   193  
   194  	if err != nil {
   195  		fmt.Println(err)
   196  		return nil, err
   197  	}
   198  
   199  	return stream, nil
   200  }
   201  
   202  func (c *explorerClient) StreamBlocks(ctx context.Context) (explorerPB.InjectiveExplorerRPC_StreamBlocksClient, error) {
   203  	req := explorerPB.StreamBlocksRequest{}
   204  
   205  	stream, err := common.ExecuteStreamCall(ctx, c.network.ExplorerCookieAssistant, c.explorerClient.StreamBlocks, &req)
   206  
   207  	if err != nil {
   208  		fmt.Println(err)
   209  		return nil, err
   210  	}
   211  
   212  	return stream, nil
   213  }
   214  
   215  func (c *explorerClient) GetWasmCodes(ctx context.Context, req *explorerPB.GetWasmCodesRequest) (*explorerPB.GetWasmCodesResponse, error) {
   216  	res, err := common.ExecuteCall(ctx, c.network.ExplorerCookieAssistant, c.explorerClient.GetWasmCodes, req)
   217  
   218  	if err != nil {
   219  		fmt.Println(err)
   220  		return &explorerPB.GetWasmCodesResponse{}, err
   221  	}
   222  
   223  	return res, nil
   224  }
   225  
   226  func (c *explorerClient) GetWasmCodeByID(ctx context.Context, req *explorerPB.GetWasmCodeByIDRequest) (*explorerPB.GetWasmCodeByIDResponse, error) {
   227  	res, err := common.ExecuteCall(ctx, c.network.ExplorerCookieAssistant, c.explorerClient.GetWasmCodeByID, req)
   228  
   229  	if err != nil {
   230  		fmt.Println(err)
   231  		return &explorerPB.GetWasmCodeByIDResponse{}, err
   232  	}
   233  
   234  	return res, nil
   235  }
   236  
   237  func (c *explorerClient) GetWasmContracts(ctx context.Context, req *explorerPB.GetWasmContractsRequest) (*explorerPB.GetWasmContractsResponse, error) {
   238  	res, err := common.ExecuteCall(ctx, c.network.ExplorerCookieAssistant, c.explorerClient.GetWasmContracts, req)
   239  
   240  	if err != nil {
   241  		fmt.Println(err)
   242  		return &explorerPB.GetWasmContractsResponse{}, err
   243  	}
   244  
   245  	return res, nil
   246  }
   247  
   248  func (c *explorerClient) GetWasmContractByAddress(ctx context.Context, req *explorerPB.GetWasmContractByAddressRequest) (*explorerPB.GetWasmContractByAddressResponse, error) {
   249  	res, err := common.ExecuteCall(ctx, c.network.ExplorerCookieAssistant, c.explorerClient.GetWasmContractByAddress, req)
   250  
   251  	if err != nil {
   252  		fmt.Println(err)
   253  		return &explorerPB.GetWasmContractByAddressResponse{}, err
   254  	}
   255  
   256  	return res, nil
   257  }
   258  
   259  func (c *explorerClient) GetCW20Balance(ctx context.Context, req *explorerPB.GetCw20BalanceRequest) (*explorerPB.GetCw20BalanceResponse, error) {
   260  	res, err := common.ExecuteCall(ctx, c.network.ExplorerCookieAssistant, c.explorerClient.GetCw20Balance, req)
   261  
   262  	if err != nil {
   263  		fmt.Println(err)
   264  		return &explorerPB.GetCw20BalanceResponse{}, err
   265  	}
   266  
   267  	return res, nil
   268  }
   269  
   270  func (c *explorerClient) Close() {
   271  	c.conn.Close()
   272  }