mirror of
https://github.com/tendermint/tendermint.git
synced 2026-08-16 12:16:11 +00:00
rpc: replace anonymous arguments with structured types (#7552)
Instead of using anonymous maps, define tagged struct types for JSON argument encoding. This allows us to have the encoding rules we want without tmjson. This commit handles the "easy" cases. BroadcastEvidence is omitted here, because it depends on the interface encoding rules from tmjson. I will address that in a forthcoming change.
This commit is contained in:
+51
-102
@@ -203,7 +203,7 @@ func (b *BatchHTTP) Count() int {
|
||||
|
||||
func (c *baseRPCClient) Status(ctx context.Context) (*coretypes.ResultStatus, error) {
|
||||
result := new(coretypes.ResultStatus)
|
||||
if err := c.caller.Call(ctx, "status", map[string]interface{}{}, result); err != nil {
|
||||
if err := c.caller.Call(ctx, "status", nil, result); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return result, nil
|
||||
@@ -211,7 +211,7 @@ func (c *baseRPCClient) Status(ctx context.Context) (*coretypes.ResultStatus, er
|
||||
|
||||
func (c *baseRPCClient) ABCIInfo(ctx context.Context) (*coretypes.ResultABCIInfo, error) {
|
||||
result := new(coretypes.ResultABCIInfo)
|
||||
if err := c.caller.Call(ctx, "abci_info", map[string]interface{}{}, result); err != nil {
|
||||
if err := c.caller.Call(ctx, "abci_info", nil, result); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return result, nil
|
||||
@@ -231,9 +231,12 @@ func (c *baseRPCClient) ABCIQueryWithOptions(
|
||||
data bytes.HexBytes,
|
||||
opts rpcclient.ABCIQueryOptions) (*coretypes.ResultABCIQuery, error) {
|
||||
result := new(coretypes.ResultABCIQuery)
|
||||
if err := c.caller.Call(ctx, "abci_query",
|
||||
map[string]interface{}{"path": path, "data": data, "height": opts.Height, "prove": opts.Prove},
|
||||
result); err != nil {
|
||||
if err := c.caller.Call(ctx, "abci_query", abciQueryArgs{
|
||||
Path: path,
|
||||
Data: data,
|
||||
Height: opts.Height,
|
||||
Prove: opts.Prove,
|
||||
}, result); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return result, nil
|
||||
@@ -244,7 +247,7 @@ func (c *baseRPCClient) BroadcastTxCommit(
|
||||
tx types.Tx,
|
||||
) (*coretypes.ResultBroadcastTxCommit, error) {
|
||||
result := new(coretypes.ResultBroadcastTxCommit)
|
||||
if err := c.caller.Call(ctx, "broadcast_tx_commit", map[string]interface{}{"tx": tx}, result); err != nil {
|
||||
if err := c.caller.Call(ctx, "broadcast_tx_commit", txArgs{Tx: tx}, result); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return result, nil
|
||||
@@ -270,7 +273,7 @@ func (c *baseRPCClient) broadcastTX(
|
||||
tx types.Tx,
|
||||
) (*coretypes.ResultBroadcastTx, error) {
|
||||
result := new(coretypes.ResultBroadcastTx)
|
||||
if err := c.caller.Call(ctx, route, map[string]interface{}{"tx": tx}, result); err != nil {
|
||||
if err := c.caller.Call(ctx, route, txArgs{Tx: tx}, result); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return result, nil
|
||||
@@ -281,11 +284,8 @@ func (c *baseRPCClient) UnconfirmedTxs(
|
||||
limit *int,
|
||||
) (*coretypes.ResultUnconfirmedTxs, error) {
|
||||
result := new(coretypes.ResultUnconfirmedTxs)
|
||||
params := make(map[string]interface{})
|
||||
if limit != nil {
|
||||
params["limit"] = limit
|
||||
}
|
||||
if err := c.caller.Call(ctx, "unconfirmed_txs", params, result); err != nil {
|
||||
|
||||
if err := c.caller.Call(ctx, "unconfirmed_txs", unconfirmedArgs{Limit: limit}, result); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return result, nil
|
||||
@@ -293,7 +293,7 @@ func (c *baseRPCClient) UnconfirmedTxs(
|
||||
|
||||
func (c *baseRPCClient) NumUnconfirmedTxs(ctx context.Context) (*coretypes.ResultUnconfirmedTxs, error) {
|
||||
result := new(coretypes.ResultUnconfirmedTxs)
|
||||
if err := c.caller.Call(ctx, "num_unconfirmed_txs", map[string]interface{}{}, result); err != nil {
|
||||
if err := c.caller.Call(ctx, "num_unconfirmed_txs", nil, result); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return result, nil
|
||||
@@ -301,14 +301,14 @@ func (c *baseRPCClient) NumUnconfirmedTxs(ctx context.Context) (*coretypes.Resul
|
||||
|
||||
func (c *baseRPCClient) CheckTx(ctx context.Context, tx types.Tx) (*coretypes.ResultCheckTx, error) {
|
||||
result := new(coretypes.ResultCheckTx)
|
||||
if err := c.caller.Call(ctx, "check_tx", map[string]interface{}{"tx": tx}, result); err != nil {
|
||||
if err := c.caller.Call(ctx, "check_tx", txArgs{Tx: tx}, result); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return result, nil
|
||||
}
|
||||
|
||||
func (c *baseRPCClient) RemoveTx(ctx context.Context, txKey types.TxKey) error {
|
||||
if err := c.caller.Call(ctx, "remove_tx", map[string]interface{}{"tx_key": txKey}, nil); err != nil {
|
||||
if err := c.caller.Call(ctx, "remove_tx", txKeyArgs{TxKey: txKey[:]}, nil); err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
@@ -316,7 +316,7 @@ func (c *baseRPCClient) RemoveTx(ctx context.Context, txKey types.TxKey) error {
|
||||
|
||||
func (c *baseRPCClient) NetInfo(ctx context.Context) (*coretypes.ResultNetInfo, error) {
|
||||
result := new(coretypes.ResultNetInfo)
|
||||
if err := c.caller.Call(ctx, "net_info", map[string]interface{}{}, result); err != nil {
|
||||
if err := c.caller.Call(ctx, "net_info", nil, result); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return result, nil
|
||||
@@ -324,7 +324,7 @@ func (c *baseRPCClient) NetInfo(ctx context.Context) (*coretypes.ResultNetInfo,
|
||||
|
||||
func (c *baseRPCClient) DumpConsensusState(ctx context.Context) (*coretypes.ResultDumpConsensusState, error) {
|
||||
result := new(coretypes.ResultDumpConsensusState)
|
||||
if err := c.caller.Call(ctx, "dump_consensus_state", map[string]interface{}{}, result); err != nil {
|
||||
if err := c.caller.Call(ctx, "dump_consensus_state", nil, result); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return result, nil
|
||||
@@ -332,7 +332,7 @@ func (c *baseRPCClient) DumpConsensusState(ctx context.Context) (*coretypes.Resu
|
||||
|
||||
func (c *baseRPCClient) ConsensusState(ctx context.Context) (*coretypes.ResultConsensusState, error) {
|
||||
result := new(coretypes.ResultConsensusState)
|
||||
if err := c.caller.Call(ctx, "consensus_state", map[string]interface{}{}, result); err != nil {
|
||||
if err := c.caller.Call(ctx, "consensus_state", nil, result); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return result, nil
|
||||
@@ -343,11 +343,7 @@ func (c *baseRPCClient) ConsensusParams(
|
||||
height *int64,
|
||||
) (*coretypes.ResultConsensusParams, error) {
|
||||
result := new(coretypes.ResultConsensusParams)
|
||||
params := make(map[string]interface{})
|
||||
if height != nil {
|
||||
params["height"] = height
|
||||
}
|
||||
if err := c.caller.Call(ctx, "consensus_params", params, result); err != nil {
|
||||
if err := c.caller.Call(ctx, "consensus_params", heightArgs{Height: height}, result); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return result, nil
|
||||
@@ -355,7 +351,7 @@ func (c *baseRPCClient) ConsensusParams(
|
||||
|
||||
func (c *baseRPCClient) Health(ctx context.Context) (*coretypes.ResultHealth, error) {
|
||||
result := new(coretypes.ResultHealth)
|
||||
if err := c.caller.Call(ctx, "health", map[string]interface{}{}, result); err != nil {
|
||||
if err := c.caller.Call(ctx, "health", nil, result); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return result, nil
|
||||
@@ -367,9 +363,10 @@ func (c *baseRPCClient) BlockchainInfo(
|
||||
maxHeight int64,
|
||||
) (*coretypes.ResultBlockchainInfo, error) {
|
||||
result := new(coretypes.ResultBlockchainInfo)
|
||||
if err := c.caller.Call(ctx, "blockchain",
|
||||
map[string]interface{}{"minHeight": minHeight, "maxHeight": maxHeight},
|
||||
result); err != nil {
|
||||
if err := c.caller.Call(ctx, "blockchain", blockchainInfoArgs{
|
||||
MinHeight: minHeight,
|
||||
MaxHeight: maxHeight,
|
||||
}, result); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return result, nil
|
||||
@@ -377,7 +374,7 @@ func (c *baseRPCClient) BlockchainInfo(
|
||||
|
||||
func (c *baseRPCClient) Genesis(ctx context.Context) (*coretypes.ResultGenesis, error) {
|
||||
result := new(coretypes.ResultGenesis)
|
||||
if err := c.caller.Call(ctx, "genesis", map[string]interface{}{}, result); err != nil {
|
||||
if err := c.caller.Call(ctx, "genesis", nil, result); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return result, nil
|
||||
@@ -385,7 +382,7 @@ func (c *baseRPCClient) Genesis(ctx context.Context) (*coretypes.ResultGenesis,
|
||||
|
||||
func (c *baseRPCClient) GenesisChunked(ctx context.Context, id uint) (*coretypes.ResultGenesisChunk, error) {
|
||||
result := new(coretypes.ResultGenesisChunk)
|
||||
if err := c.caller.Call(ctx, "genesis_chunked", map[string]interface{}{"chunk": id}, result); err != nil {
|
||||
if err := c.caller.Call(ctx, "genesis_chunked", genesisChunkArgs{Chunk: id}, result); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return result, nil
|
||||
@@ -393,11 +390,7 @@ func (c *baseRPCClient) GenesisChunked(ctx context.Context, id uint) (*coretypes
|
||||
|
||||
func (c *baseRPCClient) Block(ctx context.Context, height *int64) (*coretypes.ResultBlock, error) {
|
||||
result := new(coretypes.ResultBlock)
|
||||
params := make(map[string]interface{})
|
||||
if height != nil {
|
||||
params["height"] = height
|
||||
}
|
||||
if err := c.caller.Call(ctx, "block", params, result); err != nil {
|
||||
if err := c.caller.Call(ctx, "block", heightArgs{Height: height}, result); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return result, nil
|
||||
@@ -405,10 +398,7 @@ func (c *baseRPCClient) Block(ctx context.Context, height *int64) (*coretypes.Re
|
||||
|
||||
func (c *baseRPCClient) BlockByHash(ctx context.Context, hash bytes.HexBytes) (*coretypes.ResultBlock, error) {
|
||||
result := new(coretypes.ResultBlock)
|
||||
params := map[string]interface{}{
|
||||
"hash": hash,
|
||||
}
|
||||
if err := c.caller.Call(ctx, "block_by_hash", params, result); err != nil {
|
||||
if err := c.caller.Call(ctx, "block_by_hash", hashArgs{Hash: hash}, result); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return result, nil
|
||||
@@ -419,11 +409,7 @@ func (c *baseRPCClient) BlockResults(
|
||||
height *int64,
|
||||
) (*coretypes.ResultBlockResults, error) {
|
||||
result := new(coretypes.ResultBlockResults)
|
||||
params := make(map[string]interface{})
|
||||
if height != nil {
|
||||
params["height"] = height
|
||||
}
|
||||
if err := c.caller.Call(ctx, "block_results", params, result); err != nil {
|
||||
if err := c.caller.Call(ctx, "block_results", heightArgs{Height: height}, result); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return result, nil
|
||||
@@ -431,11 +417,7 @@ func (c *baseRPCClient) BlockResults(
|
||||
|
||||
func (c *baseRPCClient) Header(ctx context.Context, height *int64) (*coretypes.ResultHeader, error) {
|
||||
result := new(coretypes.ResultHeader)
|
||||
params := make(map[string]interface{})
|
||||
if height != nil {
|
||||
params["height"] = height
|
||||
}
|
||||
if err := c.caller.Call(ctx, "header", params, result); err != nil {
|
||||
if err := c.caller.Call(ctx, "header", heightArgs{Height: height}, result); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return result, nil
|
||||
@@ -443,10 +425,7 @@ func (c *baseRPCClient) Header(ctx context.Context, height *int64) (*coretypes.R
|
||||
|
||||
func (c *baseRPCClient) HeaderByHash(ctx context.Context, hash bytes.HexBytes) (*coretypes.ResultHeader, error) {
|
||||
result := new(coretypes.ResultHeader)
|
||||
params := map[string]interface{}{
|
||||
"hash": hash,
|
||||
}
|
||||
if err := c.caller.Call(ctx, "header_by_hash", params, result); err != nil {
|
||||
if err := c.caller.Call(ctx, "header_by_hash", hashArgs{Hash: hash}, result); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return result, nil
|
||||
@@ -454,11 +433,7 @@ func (c *baseRPCClient) HeaderByHash(ctx context.Context, hash bytes.HexBytes) (
|
||||
|
||||
func (c *baseRPCClient) Commit(ctx context.Context, height *int64) (*coretypes.ResultCommit, error) {
|
||||
result := new(coretypes.ResultCommit)
|
||||
params := make(map[string]interface{})
|
||||
if height != nil {
|
||||
params["height"] = height
|
||||
}
|
||||
if err := c.caller.Call(ctx, "commit", params, result); err != nil {
|
||||
if err := c.caller.Call(ctx, "commit", heightArgs{Height: height}, result); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return result, nil
|
||||
@@ -466,11 +441,7 @@ func (c *baseRPCClient) Commit(ctx context.Context, height *int64) (*coretypes.R
|
||||
|
||||
func (c *baseRPCClient) Tx(ctx context.Context, hash bytes.HexBytes, prove bool) (*coretypes.ResultTx, error) {
|
||||
result := new(coretypes.ResultTx)
|
||||
params := map[string]interface{}{
|
||||
"hash": hash,
|
||||
"prove": prove,
|
||||
}
|
||||
if err := c.caller.Call(ctx, "tx", params, result); err != nil {
|
||||
if err := c.caller.Call(ctx, "tx", hashArgs{Hash: hash, Prove: prove}, result); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return result, nil
|
||||
@@ -484,22 +455,14 @@ func (c *baseRPCClient) TxSearch(
|
||||
perPage *int,
|
||||
orderBy string,
|
||||
) (*coretypes.ResultTxSearch, error) {
|
||||
|
||||
result := new(coretypes.ResultTxSearch)
|
||||
params := map[string]interface{}{
|
||||
"query": query,
|
||||
"prove": prove,
|
||||
"order_by": orderBy,
|
||||
}
|
||||
|
||||
if page != nil {
|
||||
params["page"] = page
|
||||
}
|
||||
if perPage != nil {
|
||||
params["per_page"] = perPage
|
||||
}
|
||||
|
||||
if err := c.caller.Call(ctx, "tx_search", params, result); err != nil {
|
||||
if err := c.caller.Call(ctx, "tx_search", searchArgs{
|
||||
Query: query,
|
||||
Prove: prove,
|
||||
OrderBy: orderBy,
|
||||
Page: page,
|
||||
PerPage: perPage,
|
||||
}, result); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
@@ -512,21 +475,13 @@ func (c *baseRPCClient) BlockSearch(
|
||||
page, perPage *int,
|
||||
orderBy string,
|
||||
) (*coretypes.ResultBlockSearch, error) {
|
||||
|
||||
result := new(coretypes.ResultBlockSearch)
|
||||
params := map[string]interface{}{
|
||||
"query": query,
|
||||
"order_by": orderBy,
|
||||
}
|
||||
|
||||
if page != nil {
|
||||
params["page"] = page
|
||||
}
|
||||
if perPage != nil {
|
||||
params["per_page"] = perPage
|
||||
}
|
||||
|
||||
if err := c.caller.Call(ctx, "block_search", params, result); err != nil {
|
||||
if err := c.caller.Call(ctx, "block_search", searchArgs{
|
||||
Query: query,
|
||||
OrderBy: orderBy,
|
||||
Page: page,
|
||||
PerPage: perPage,
|
||||
}, result); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
@@ -540,17 +495,11 @@ func (c *baseRPCClient) Validators(
|
||||
perPage *int,
|
||||
) (*coretypes.ResultValidators, error) {
|
||||
result := new(coretypes.ResultValidators)
|
||||
params := make(map[string]interface{})
|
||||
if page != nil {
|
||||
params["page"] = page
|
||||
}
|
||||
if perPage != nil {
|
||||
params["per_page"] = perPage
|
||||
}
|
||||
if height != nil {
|
||||
params["height"] = height
|
||||
}
|
||||
if err := c.caller.Call(ctx, "validators", params, result); err != nil {
|
||||
if err := c.caller.Call(ctx, "validators", validatorArgs{
|
||||
Height: height,
|
||||
Page: page,
|
||||
PerPage: perPage,
|
||||
}, result); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return result, nil
|
||||
|
||||
@@ -0,0 +1,59 @@
|
||||
package http
|
||||
|
||||
// The types in this file define the JSON encoding for RPC method parameters
|
||||
// from the client to the server.
|
||||
|
||||
import (
|
||||
"github.com/tendermint/tendermint/libs/bytes"
|
||||
)
|
||||
|
||||
type abciQueryArgs struct {
|
||||
Path string `json:"path"`
|
||||
Data bytes.HexBytes `json:"data"`
|
||||
Height int64 `json:"height,string"`
|
||||
Prove bool `json:"prove"`
|
||||
}
|
||||
|
||||
type txArgs struct {
|
||||
Tx []byte `json:"tx"`
|
||||
}
|
||||
|
||||
type txKeyArgs struct {
|
||||
TxKey []byte `json:"tx_key"`
|
||||
}
|
||||
|
||||
type unconfirmedArgs struct {
|
||||
Limit *int `json:"limit,string,omitempty"`
|
||||
}
|
||||
|
||||
type heightArgs struct {
|
||||
Height *int64 `json:"height,string,omitempty"`
|
||||
}
|
||||
|
||||
type hashArgs struct {
|
||||
Hash bytes.HexBytes `json:"hash"`
|
||||
Prove bool `json:"prove,omitempty"`
|
||||
}
|
||||
|
||||
type blockchainInfoArgs struct {
|
||||
MinHeight int64 `json:"minHeight,string"`
|
||||
MaxHeight int64 `json:"maxHeight,string"`
|
||||
}
|
||||
|
||||
type genesisChunkArgs struct {
|
||||
Chunk uint `json:"chunk,string"`
|
||||
}
|
||||
|
||||
type searchArgs struct {
|
||||
Query string `json:"query"`
|
||||
Prove bool `json:"prove,omitempty"`
|
||||
OrderBy string `json:"order_by,omitempty"`
|
||||
Page *int `json:"page,string,omitempty"`
|
||||
PerPage *int `json:"per_page,string,omitempty"`
|
||||
}
|
||||
|
||||
type validatorArgs struct {
|
||||
Height *int64 `json:"height,string,omitempty"`
|
||||
Page *int `json:"page,string,omitempty"`
|
||||
PerPage *int `json:"per_page,string,omitempty"`
|
||||
}
|
||||
Reference in New Issue
Block a user