github.com/ari-anchor/sei-tendermint@v0.0.0-20230519144642-dc826b7b56bb/internal/rpc/core/routes.go (about)

     1  package core
     2  
     3  import (
     4  	"context"
     5  
     6  	"github.com/ari-anchor/sei-tendermint/rpc/coretypes"
     7  	rpc "github.com/ari-anchor/sei-tendermint/rpc/jsonrpc/server"
     8  )
     9  
    10  // TODO: better system than "unsafe" prefix
    11  
    12  type RoutesMap map[string]*rpc.RPCFunc
    13  
    14  // RouteOptions provide optional settings to NewRoutesMap.  A nil *RouteOptions
    15  // is ready for use and provides defaults as specified.
    16  type RouteOptions struct {
    17  	Unsafe bool // include "unsafe" methods (default false)
    18  }
    19  
    20  // NewRoutesMap constructs an RPC routing map for the given service
    21  // implementation. If svc implements RPCUnsafe and opts.Unsafe is true, the
    22  // "unsafe" methods will also be added to the map. The caller may also edit the
    23  // map after construction; each call to NewRoutesMap returns a fresh map.
    24  func NewRoutesMap(svc RPCService, opts *RouteOptions) RoutesMap {
    25  	if opts == nil {
    26  		opts = new(RouteOptions)
    27  	}
    28  	out := RoutesMap{
    29  		// Event subscription. Note that subscribe, unsubscribe, and
    30  		// unsubscribe_all are only available via the websocket endpoint.
    31  		"events":          rpc.NewRPCFunc(svc.Events).Timeout(0),
    32  		"subscribe":       rpc.NewWSRPCFunc(svc.Subscribe),
    33  		"unsubscribe":     rpc.NewWSRPCFunc(svc.Unsubscribe),
    34  		"unsubscribe_all": rpc.NewWSRPCFunc(svc.UnsubscribeAll),
    35  
    36  		// info API
    37  		"health":               rpc.NewRPCFunc(svc.Health),
    38  		"status":               rpc.NewRPCFunc(svc.Status),
    39  		"net_info":             rpc.NewRPCFunc(svc.NetInfo),
    40  		"blockchain":           rpc.NewRPCFunc(svc.BlockchainInfo),
    41  		"genesis":              rpc.NewRPCFunc(svc.Genesis),
    42  		"genesis_chunked":      rpc.NewRPCFunc(svc.GenesisChunked),
    43  		"header":               rpc.NewRPCFunc(svc.Header),
    44  		"header_by_hash":       rpc.NewRPCFunc(svc.HeaderByHash),
    45  		"block":                rpc.NewRPCFunc(svc.Block),
    46  		"block_by_hash":        rpc.NewRPCFunc(svc.BlockByHash),
    47  		"block_results":        rpc.NewRPCFunc(svc.BlockResults),
    48  		"commit":               rpc.NewRPCFunc(svc.Commit),
    49  		"check_tx":             rpc.NewRPCFunc(svc.CheckTx),
    50  		"remove_tx":            rpc.NewRPCFunc(svc.RemoveTx),
    51  		"tx":                   rpc.NewRPCFunc(svc.Tx),
    52  		"tx_search":            rpc.NewRPCFunc(svc.TxSearch),
    53  		"block_search":         rpc.NewRPCFunc(svc.BlockSearch),
    54  		"validators":           rpc.NewRPCFunc(svc.Validators),
    55  		"dump_consensus_state": rpc.NewRPCFunc(svc.DumpConsensusState),
    56  		"consensus_state":      rpc.NewRPCFunc(svc.GetConsensusState),
    57  		"consensus_params":     rpc.NewRPCFunc(svc.ConsensusParams),
    58  		"unconfirmed_txs":      rpc.NewRPCFunc(svc.UnconfirmedTxs),
    59  		"num_unconfirmed_txs":  rpc.NewRPCFunc(svc.NumUnconfirmedTxs),
    60  
    61  		// tx broadcast API
    62  		"broadcast_tx": rpc.NewRPCFunc(svc.BroadcastTx),
    63  		// TODO remove after 0.36
    64  		// deprecated broadcast tx methods:
    65  		"broadcast_tx_commit": rpc.NewRPCFunc(svc.BroadcastTxCommit),
    66  		"broadcast_tx_sync":   rpc.NewRPCFunc(svc.BroadcastTx),
    67  		"broadcast_tx_async":  rpc.NewRPCFunc(svc.BroadcastTxAsync),
    68  
    69  		// abci API
    70  		"abci_query": rpc.NewRPCFunc(svc.ABCIQuery),
    71  		"abci_info":  rpc.NewRPCFunc(svc.ABCIInfo),
    72  
    73  		// evidence API
    74  		"broadcast_evidence": rpc.NewRPCFunc(svc.BroadcastEvidence),
    75  	}
    76  	if u, ok := svc.(RPCUnsafe); ok && opts.Unsafe {
    77  		out["unsafe_flush_mempool"] = rpc.NewRPCFunc(u.UnsafeFlushMempool)
    78  	}
    79  	return out
    80  }
    81  
    82  // RPCService defines the set of methods exported by the RPC service
    83  // implementation, for use in constructing a routing table.
    84  type RPCService interface {
    85  	ABCIInfo(ctx context.Context) (*coretypes.ResultABCIInfo, error)
    86  	ABCIQuery(ctx context.Context, req *coretypes.RequestABCIQuery) (*coretypes.ResultABCIQuery, error)
    87  	Block(ctx context.Context, req *coretypes.RequestBlockInfo) (*coretypes.ResultBlock, error)
    88  	BlockByHash(ctx context.Context, req *coretypes.RequestBlockByHash) (*coretypes.ResultBlock, error)
    89  	BlockResults(ctx context.Context, req *coretypes.RequestBlockInfo) (*coretypes.ResultBlockResults, error)
    90  	BlockSearch(ctx context.Context, req *coretypes.RequestBlockSearch) (*coretypes.ResultBlockSearch, error)
    91  	BlockchainInfo(ctx context.Context, req *coretypes.RequestBlockchainInfo) (*coretypes.ResultBlockchainInfo, error)
    92  	BroadcastEvidence(ctx context.Context, req *coretypes.RequestBroadcastEvidence) (*coretypes.ResultBroadcastEvidence, error)
    93  	BroadcastTx(ctx context.Context, req *coretypes.RequestBroadcastTx) (*coretypes.ResultBroadcastTx, error)
    94  	BroadcastTxAsync(ctx context.Context, req *coretypes.RequestBroadcastTx) (*coretypes.ResultBroadcastTx, error)
    95  	BroadcastTxCommit(ctx context.Context, req *coretypes.RequestBroadcastTx) (*coretypes.ResultBroadcastTxCommit, error)
    96  	BroadcastTxSync(ctx context.Context, req *coretypes.RequestBroadcastTx) (*coretypes.ResultBroadcastTx, error)
    97  	CheckTx(ctx context.Context, req *coretypes.RequestCheckTx) (*coretypes.ResultCheckTx, error)
    98  	Commit(ctx context.Context, req *coretypes.RequestBlockInfo) (*coretypes.ResultCommit, error)
    99  	ConsensusParams(ctx context.Context, req *coretypes.RequestConsensusParams) (*coretypes.ResultConsensusParams, error)
   100  	DumpConsensusState(ctx context.Context) (*coretypes.ResultDumpConsensusState, error)
   101  	Events(ctx context.Context, req *coretypes.RequestEvents) (*coretypes.ResultEvents, error)
   102  	Genesis(ctx context.Context) (*coretypes.ResultGenesis, error)
   103  	GenesisChunked(ctx context.Context, req *coretypes.RequestGenesisChunked) (*coretypes.ResultGenesisChunk, error)
   104  	GetConsensusState(ctx context.Context) (*coretypes.ResultConsensusState, error)
   105  	Header(ctx context.Context, req *coretypes.RequestBlockInfo) (*coretypes.ResultHeader, error)
   106  	HeaderByHash(ctx context.Context, req *coretypes.RequestBlockByHash) (*coretypes.ResultHeader, error)
   107  	Health(ctx context.Context) (*coretypes.ResultHealth, error)
   108  	NetInfo(ctx context.Context) (*coretypes.ResultNetInfo, error)
   109  	NumUnconfirmedTxs(ctx context.Context) (*coretypes.ResultUnconfirmedTxs, error)
   110  	RemoveTx(ctx context.Context, req *coretypes.RequestRemoveTx) error
   111  	Status(ctx context.Context) (*coretypes.ResultStatus, error)
   112  	Subscribe(ctx context.Context, req *coretypes.RequestSubscribe) (*coretypes.ResultSubscribe, error)
   113  	Tx(ctx context.Context, req *coretypes.RequestTx) (*coretypes.ResultTx, error)
   114  	TxSearch(ctx context.Context, req *coretypes.RequestTxSearch) (*coretypes.ResultTxSearch, error)
   115  	UnconfirmedTxs(ctx context.Context, req *coretypes.RequestUnconfirmedTxs) (*coretypes.ResultUnconfirmedTxs, error)
   116  	Unsubscribe(ctx context.Context, req *coretypes.RequestUnsubscribe) (*coretypes.ResultUnsubscribe, error)
   117  	UnsubscribeAll(ctx context.Context) (*coretypes.ResultUnsubscribe, error)
   118  	Validators(ctx context.Context, req *coretypes.RequestValidators) (*coretypes.ResultValidators, error)
   119  }
   120  
   121  // RPCUnsafe defines the set of "unsafe" methods that may optionally be
   122  // exported by the RPC service.
   123  type RPCUnsafe interface {
   124  	UnsafeFlushMempool(ctx context.Context) (*coretypes.ResultUnsafeFlushMempool, error)
   125  }