- package client
-
- /*
- The client package provides a general purpose interface (Client) for connecting
- to a tendermint node, as well as higher-level functionality.
-
- The main implementation for production code is client.HTTP, which
- connects via http to the jsonrpc interface of the tendermint node.
-
- For connecting to a node running in the same process (eg. when
- compiling the abci app in the same process), you can use the client.Local
- implementation.
-
- For mocking out server responses during testing to see behavior for
- arbitrary return values, use the mock package.
-
- In addition to the Client interface, which should be used externally
- for maximum flexibility and testability, and two implementations,
- this package also provides helper functions that work on any Client
- implementation.
- */
-
- import (
- "context"
-
- "github.com/tendermint/tendermint/libs/bytes"
- "github.com/tendermint/tendermint/rpc/coretypes"
- "github.com/tendermint/tendermint/types"
- )
-
- //go:generate ../../scripts/mockery_generate.sh Client
-
- // Client describes the interface of Tendermint RPC client implementations.
- type Client interface {
- // These methods define the operational structure of the client.
-
- // Start the client. Start must report an error if the client is running.
- Start() error
-
- // Stop the client. Stop must report an error if the client is not running.
- Stop() error
-
- // IsRunning reports whether the client is running.
- IsRunning() bool
-
- // These embedded interfaces define the callable methods of the service.
- ABCIClient
- EventsClient
- HistoryClient
- NetworkClient
- SignClient
- StatusClient
- EvidenceClient
- MempoolClient
- }
-
- // ABCIClient groups together the functionality that principally affects the
- // ABCI app.
- //
- // In many cases this will be all we want, so we can accept an interface which
- // is easier to mock.
- type ABCIClient interface {
- // Reading from abci app
- ABCIInfo(context.Context) (*coretypes.ResultABCIInfo, error)
- ABCIQuery(ctx context.Context, path string, data bytes.HexBytes) (*coretypes.ResultABCIQuery, error)
- ABCIQueryWithOptions(ctx context.Context, path string, data bytes.HexBytes,
- opts ABCIQueryOptions) (*coretypes.ResultABCIQuery, error)
-
- // Writing to abci app
- BroadcastTxCommit(context.Context, types.Tx) (*coretypes.ResultBroadcastTxCommit, error)
- BroadcastTxAsync(context.Context, types.Tx) (*coretypes.ResultBroadcastTx, error)
- BroadcastTxSync(context.Context, types.Tx) (*coretypes.ResultBroadcastTx, error)
- }
-
- // SignClient groups together the functionality needed to get valid signatures
- // and prove anything about the chain.
- type SignClient interface {
- Block(ctx context.Context, height *int64) (*coretypes.ResultBlock, error)
- BlockByHash(ctx context.Context, hash bytes.HexBytes) (*coretypes.ResultBlock, error)
- BlockResults(ctx context.Context, height *int64) (*coretypes.ResultBlockResults, error)
- Commit(ctx context.Context, height *int64) (*coretypes.ResultCommit, error)
- Validators(ctx context.Context, height *int64, page, perPage *int) (*coretypes.ResultValidators, error)
- Tx(ctx context.Context, hash bytes.HexBytes, prove bool) (*coretypes.ResultTx, error)
-
- // TxSearch defines a method to search for a paginated set of transactions by
- // DeliverTx event search criteria.
- TxSearch(
- ctx context.Context,
- query string,
- prove bool,
- page, perPage *int,
- orderBy string,
- ) (*coretypes.ResultTxSearch, error)
-
- // BlockSearch defines a method to search for a paginated set of blocks by
- // BeginBlock and EndBlock event search criteria.
- BlockSearch(
- ctx context.Context,
- query string,
- page, perPage *int,
- orderBy string,
- ) (*coretypes.ResultBlockSearch, error)
- }
-
- // HistoryClient provides access to data from genesis to now in large chunks.
- type HistoryClient interface {
- Genesis(context.Context) (*coretypes.ResultGenesis, error)
- GenesisChunked(context.Context, uint) (*coretypes.ResultGenesisChunk, error)
- BlockchainInfo(ctx context.Context, minHeight, maxHeight int64) (*coretypes.ResultBlockchainInfo, error)
- }
-
- // StatusClient provides access to general chain info.
- type StatusClient interface {
- Status(context.Context) (*coretypes.ResultStatus, error)
- }
-
- // NetworkClient is general info about the network state. May not be needed
- // usually.
- type NetworkClient interface {
- NetInfo(context.Context) (*coretypes.ResultNetInfo, error)
- DumpConsensusState(context.Context) (*coretypes.ResultDumpConsensusState, error)
- ConsensusState(context.Context) (*coretypes.ResultConsensusState, error)
- ConsensusParams(ctx context.Context, height *int64) (*coretypes.ResultConsensusParams, error)
- Health(context.Context) (*coretypes.ResultHealth, error)
- }
-
- // EventsClient is reactive, you can subscribe to any message, given the proper
- // string. see tendermint/types/events.go
- type EventsClient interface {
- // Subscribe subscribes given subscriber to query. Returns a channel with
- // cap=1 onto which events are published. An error is returned if it fails to
- // subscribe. outCapacity can be used optionally to set capacity for the
- // channel. Channel is never closed to prevent accidental reads.
- //
- // ctx cannot be used to unsubscribe. To unsubscribe, use either Unsubscribe
- // or UnsubscribeAll.
- Subscribe(ctx context.Context, subscriber, query string, outCapacity ...int) (out <-chan coretypes.ResultEvent, err error) //nolint:lll
- // Unsubscribe unsubscribes given subscriber from query.
- Unsubscribe(ctx context.Context, subscriber, query string) error
- // UnsubscribeAll unsubscribes given subscriber from all the queries.
- UnsubscribeAll(ctx context.Context, subscriber string) error
- }
-
- // MempoolClient shows us data about current mempool state.
- type MempoolClient interface {
- UnconfirmedTxs(ctx context.Context, limit *int) (*coretypes.ResultUnconfirmedTxs, error)
- NumUnconfirmedTxs(context.Context) (*coretypes.ResultUnconfirmedTxs, error)
- CheckTx(context.Context, types.Tx) (*coretypes.ResultCheckTx, error)
- RemoveTx(context.Context, types.TxKey) error
- }
-
- // EvidenceClient is used for submitting an evidence of the malicious
- // behavior.
- type EvidenceClient interface {
- BroadcastEvidence(context.Context, types.Evidence) (*coretypes.ResultBroadcastEvidence, error)
- }
-
- // RemoteClient is a Client, which can also return the remote network address.
- type RemoteClient interface {
- Client
-
- // Remote returns the remote network address in a string form.
- Remote() string
- }
|