|
/*
|
|
package client 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.
|
|
*/
|
|
package client
|
|
|
|
import (
|
|
ctypes "github.com/tendermint/tendermint/rpc/core/types"
|
|
"github.com/tendermint/tendermint/types"
|
|
cmn "github.com/tendermint/tmlibs/common"
|
|
)
|
|
|
|
// 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() (*ctypes.ResultABCIInfo, error)
|
|
ABCIQuery(path string, data cmn.HexBytes) (*ctypes.ResultABCIQuery, error)
|
|
ABCIQueryWithOptions(path string, data cmn.HexBytes,
|
|
opts ABCIQueryOptions) (*ctypes.ResultABCIQuery, error)
|
|
|
|
// writing to abci app
|
|
BroadcastTxCommit(tx types.Tx) (*ctypes.ResultBroadcastTxCommit, error)
|
|
BroadcastTxAsync(tx types.Tx) (*ctypes.ResultBroadcastTx, error)
|
|
BroadcastTxSync(tx types.Tx) (*ctypes.ResultBroadcastTx, error)
|
|
}
|
|
|
|
// SignClient groups together the interfaces need to get valid
|
|
// signatures and prove anything about the chain
|
|
type SignClient interface {
|
|
Block(height *int64) (*ctypes.ResultBlock, error)
|
|
BlockResults(height *int64) (*ctypes.ResultBlockResults, error)
|
|
Commit(height *int64) (*ctypes.ResultCommit, error)
|
|
Validators(height *int64) (*ctypes.ResultValidators, error)
|
|
Tx(hash []byte, prove bool) (*ctypes.ResultTx, error)
|
|
TxSearch(query string, prove bool) ([]*ctypes.ResultTx, error)
|
|
}
|
|
|
|
// HistoryClient shows us data from genesis to now in large chunks.
|
|
type HistoryClient interface {
|
|
Genesis() (*ctypes.ResultGenesis, error)
|
|
BlockchainInfo(minHeight, maxHeight int64) (*ctypes.ResultBlockchainInfo, error)
|
|
}
|
|
|
|
type StatusClient interface {
|
|
// general chain info
|
|
Status() (*ctypes.ResultStatus, error)
|
|
}
|
|
|
|
// Client wraps most important rpc calls a client would make
|
|
// if you want to listen for events, test if it also
|
|
// implements events.EventSwitch
|
|
type Client interface {
|
|
cmn.Service
|
|
ABCIClient
|
|
SignClient
|
|
HistoryClient
|
|
StatusClient
|
|
EventsClient
|
|
}
|
|
|
|
// NetworkClient is general info about the network state. May not
|
|
// be needed usually.
|
|
//
|
|
// Not included in the Client interface, but generally implemented
|
|
// by concrete implementations.
|
|
type NetworkClient interface {
|
|
NetInfo() (*ctypes.ResultNetInfo, error)
|
|
DumpConsensusState() (*ctypes.ResultDumpConsensusState, error)
|
|
Health() (*ctypes.ResultHealth, error)
|
|
}
|
|
|
|
// EventsClient is reactive, you can subscribe to any message, given the proper
|
|
// string. see tendermint/types/events.go
|
|
type EventsClient interface {
|
|
types.EventBusSubscriber
|
|
}
|