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 }