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 }