- package core
-
- import (
- "context"
- "time"
-
- "github.com/tendermint/tendermint/internal/eventlog/cursor"
- "github.com/tendermint/tendermint/libs/bytes"
- "github.com/tendermint/tendermint/rpc/coretypes"
- rpc "github.com/tendermint/tendermint/rpc/jsonrpc/server"
- "github.com/tendermint/tendermint/types"
- )
-
- // TODO: better system than "unsafe" prefix
-
- type RoutesMap map[string]*rpc.RPCFunc
-
- // RouteOptions provide optional settings to NewRoutesMap. A nil *RouteOptions
- // is ready for use and provides defaults as specified.
- type RouteOptions struct {
- Unsafe bool // include "unsafe" methods (default false)
- }
-
- // NewRoutesMap constructs an RPC routing map for the given service
- // implementation. If svc implements RPCUnsafe and opts.Unsafe is true, the
- // "unsafe" methods will also be added to the map. The caller may also edit the
- // map after construction; each call to NewRoutesMap returns a fresh map.
- func NewRoutesMap(svc RPCService, opts *RouteOptions) RoutesMap {
- if opts == nil {
- opts = new(RouteOptions)
- }
- out := RoutesMap{
- // Event subscription. Note that subscribe, unsubscribe, and
- // unsubscribe_all are only available via the websocket endpoint.
- "events": rpc.NewRPCFunc(svc.Events, "filter", "maxItems", "before", "after", "waitTime"),
- "subscribe": rpc.NewWSRPCFunc(svc.Subscribe, "query"),
- "unsubscribe": rpc.NewWSRPCFunc(svc.Unsubscribe, "query"),
- "unsubscribe_all": rpc.NewWSRPCFunc(svc.UnsubscribeAll),
-
- // info API
- "health": rpc.NewRPCFunc(svc.Health),
- "status": rpc.NewRPCFunc(svc.Status),
- "net_info": rpc.NewRPCFunc(svc.NetInfo),
- "blockchain": rpc.NewRPCFunc(svc.BlockchainInfo, "minHeight", "maxHeight"),
- "genesis": rpc.NewRPCFunc(svc.Genesis),
- "genesis_chunked": rpc.NewRPCFunc(svc.GenesisChunked, "chunk"),
- "header": rpc.NewRPCFunc(svc.Header, "height"),
- "header_by_hash": rpc.NewRPCFunc(svc.HeaderByHash, "hash"),
- "block": rpc.NewRPCFunc(svc.Block, "height"),
- "block_by_hash": rpc.NewRPCFunc(svc.BlockByHash, "hash"),
- "block_results": rpc.NewRPCFunc(svc.BlockResults, "height"),
- "commit": rpc.NewRPCFunc(svc.Commit, "height"),
- "check_tx": rpc.NewRPCFunc(svc.CheckTx, "tx"),
- "remove_tx": rpc.NewRPCFunc(svc.RemoveTx, "txkey"),
- "tx": rpc.NewRPCFunc(svc.Tx, "hash", "prove"),
- "tx_search": rpc.NewRPCFunc(svc.TxSearch, "query", "prove", "page", "per_page", "order_by"),
- "block_search": rpc.NewRPCFunc(svc.BlockSearch, "query", "page", "per_page", "order_by"),
- "validators": rpc.NewRPCFunc(svc.Validators, "height", "page", "per_page"),
- "dump_consensus_state": rpc.NewRPCFunc(svc.DumpConsensusState),
- "consensus_state": rpc.NewRPCFunc(svc.GetConsensusState),
- "consensus_params": rpc.NewRPCFunc(svc.ConsensusParams, "height"),
- "unconfirmed_txs": rpc.NewRPCFunc(svc.UnconfirmedTxs, "page", "per_page"),
- "num_unconfirmed_txs": rpc.NewRPCFunc(svc.NumUnconfirmedTxs),
-
- // tx broadcast API
- "broadcast_tx_commit": rpc.NewRPCFunc(svc.BroadcastTxCommit, "tx"),
- "broadcast_tx_sync": rpc.NewRPCFunc(svc.BroadcastTxSync, "tx"),
- "broadcast_tx_async": rpc.NewRPCFunc(svc.BroadcastTxAsync, "tx"),
-
- // abci API
- "abci_query": rpc.NewRPCFunc(svc.ABCIQuery, "path", "data", "height", "prove"),
- "abci_info": rpc.NewRPCFunc(svc.ABCIInfo),
-
- // evidence API
- "broadcast_evidence": rpc.NewRPCFunc(svc.BroadcastEvidence, "evidence"),
- }
- if u, ok := svc.(RPCUnsafe); ok && opts.Unsafe {
- out["unsafe_flush_mempool"] = rpc.NewRPCFunc(u.UnsafeFlushMempool)
- }
- return out
- }
-
- // RPCService defines the set of methods exported by the RPC service
- // implementation, for use in constructing a routing table.
- type RPCService interface {
- ABCIInfo(ctx context.Context) (*coretypes.ResultABCIInfo, error)
- ABCIQuery(ctx context.Context, path string, data bytes.HexBytes, height int64, prove bool) (*coretypes.ResultABCIQuery, error)
- Block(ctx context.Context, heightPtr *int64) (*coretypes.ResultBlock, error)
- BlockByHash(ctx context.Context, hash bytes.HexBytes) (*coretypes.ResultBlock, error)
- BlockResults(ctx context.Context, heightPtr *int64) (*coretypes.ResultBlockResults, error)
- BlockSearch(ctx context.Context, query string, pagePtr, perPagePtr *int, orderBy string) (*coretypes.ResultBlockSearch, error)
- BlockchainInfo(ctx context.Context, minHeight, maxHeight int64) (*coretypes.ResultBlockchainInfo, error)
- BroadcastEvidence(ctx context.Context, ev coretypes.Evidence) (*coretypes.ResultBroadcastEvidence, error)
- BroadcastTxAsync(ctx context.Context, tx types.Tx) (*coretypes.ResultBroadcastTx, error)
- BroadcastTxCommit(ctx context.Context, tx types.Tx) (*coretypes.ResultBroadcastTxCommit, error)
- BroadcastTxSync(ctx context.Context, tx types.Tx) (*coretypes.ResultBroadcastTx, error)
- CheckTx(ctx context.Context, tx types.Tx) (*coretypes.ResultCheckTx, error)
- Commit(ctx context.Context, heightPtr *int64) (*coretypes.ResultCommit, error)
- ConsensusParams(ctx context.Context, heightPtr *int64) (*coretypes.ResultConsensusParams, error)
- DumpConsensusState(ctx context.Context) (*coretypes.ResultDumpConsensusState, error)
- Events(ctx context.Context, filter *coretypes.EventFilter, maxItems int, before, after cursor.Cursor, waitTime time.Duration) (*coretypes.ResultEvents, error)
- Genesis(ctx context.Context) (*coretypes.ResultGenesis, error)
- GenesisChunked(ctx context.Context, chunk uint) (*coretypes.ResultGenesisChunk, error)
- GetConsensusState(ctx context.Context) (*coretypes.ResultConsensusState, error)
- Header(ctx context.Context, heightPtr *int64) (*coretypes.ResultHeader, error)
- HeaderByHash(ctx context.Context, hash bytes.HexBytes) (*coretypes.ResultHeader, error)
- Health(ctx context.Context) (*coretypes.ResultHealth, error)
- NetInfo(ctx context.Context) (*coretypes.ResultNetInfo, error)
- NumUnconfirmedTxs(ctx context.Context) (*coretypes.ResultUnconfirmedTxs, error)
- RemoveTx(ctx context.Context, txkey types.TxKey) error
- Status(ctx context.Context) (*coretypes.ResultStatus, error)
- Subscribe(ctx context.Context, query string) (*coretypes.ResultSubscribe, error)
- Tx(ctx context.Context, hash bytes.HexBytes, prove bool) (*coretypes.ResultTx, error)
- TxSearch(ctx context.Context, query string, prove bool, pagePtr, perPagePtr *int, orderBy string) (*coretypes.ResultTxSearch, error)
- UnconfirmedTxs(ctx context.Context, page, perPage *int) (*coretypes.ResultUnconfirmedTxs, error)
- Unsubscribe(ctx context.Context, query string) (*coretypes.ResultUnsubscribe, error)
- UnsubscribeAll(ctx context.Context) (*coretypes.ResultUnsubscribe, error)
- Validators(ctx context.Context, heightPtr *int64, pagePtr, perPagePtr *int) (*coretypes.ResultValidators, error)
- }
-
- // RPCUnsafe defines the set of "unsafe" methods that may optionally be
- // exported by the RPC service.
- type RPCUnsafe interface {
- UnsafeFlushMempool(ctx context.Context) (*coretypes.ResultUnsafeFlushMempool, error)
- }
|