From d227e2a29e584210aae6d0894770170ee62d671e Mon Sep 17 00:00:00 2001 From: Federico Kunze <31522760+fedekunze@users.noreply.github.com> Date: Wed, 21 Nov 2018 10:54:51 +0100 Subject: [PATCH] Merge PR #2869: Gov tally endpoint * Added tally endpoint * Update querier.go * rename queryable * Address @alexanderbez comments --- PENDING.md | 1 + client/lcd/lcd_test.go | 29 ++- client/lcd/swagger-ui/swagger.yaml | 49 +++- x/gov/client/cli/query.go | 35 +-- x/gov/client/rest/rest.go | 25 +- x/gov/querier.go | 227 ++++++++++-------- x/gov/querier_test.go | 33 +-- x/stake/querier/{queryable.go => querier.go} | 0 .../{queryable_test.go => querier_test.go} | 0 9 files changed, 217 insertions(+), 182 deletions(-) rename x/stake/querier/{queryable.go => querier.go} (100%) rename x/stake/querier/{queryable_test.go => querier_test.go} (100%) diff --git a/PENDING.md b/PENDING.md index 41e5c39c609b..a3e505c51565 100644 --- a/PENDING.md +++ b/PENDING.md @@ -74,6 +74,7 @@ IMPROVEMENTS BUG FIXES * Gaia REST API (`gaiacli advanced rest-server`) + - [gaia-lite] #2868 Added handler for governance tally endpoit * Gaia CLI (`gaiacli`) diff --git a/client/lcd/lcd_test.go b/client/lcd/lcd_test.go index 885e4b914f7c..5a6368dac4f2 100644 --- a/client/lcd/lcd_test.go +++ b/client/lcd/lcd_test.go @@ -678,7 +678,7 @@ func TestDeposit(t *testing.T) { func TestVote(t *testing.T) { name, password := "test", "1234567890" addr, seed := CreateAddr(t, "test", password, GetKeyBase(t)) - cleanup, _, _, port := InitializeTestLCD(t, 1, []sdk.AccAddress{addr}) + cleanup, _, operAddrs, port := InitializeTestLCD(t, 1, []sdk.AccAddress{addr}) defer cleanup() // create SubmitProposal TX @@ -696,7 +696,7 @@ func TestVote(t *testing.T) { proposal := getProposal(t, port, proposalID) require.Equal(t, "Test", proposal.GetTitle()) - // create SubmitProposal TX + // deposit resultTx = doDeposit(t, port, seed, name, password, addr, proposalID, 5) tests.WaitForHeight(resultTx.Height+1, port) @@ -704,13 +704,27 @@ func TestVote(t *testing.T) { proposal = getProposal(t, port, proposalID) require.Equal(t, gov.StatusVotingPeriod, proposal.GetStatus()) - // create SubmitProposal TX + // vote resultTx = doVote(t, port, seed, name, password, addr, proposalID) tests.WaitForHeight(resultTx.Height+1, port) vote := getVote(t, port, proposalID, addr) require.Equal(t, proposalID, vote.ProposalID) require.Equal(t, gov.OptionYes, vote.Option) + + tally := getTally(t, port, proposalID) + require.Equal(t, sdk.ZeroDec(), tally.Yes, "tally should be 0 as the address is not bonded") + + // create bond TX + resultTx = doDelegate(t, port, seed, name, password, addr, operAddrs[0], 60) + tests.WaitForHeight(resultTx.Height+1, port) + + // vote + resultTx = doVote(t, port, seed, name, password, addr, proposalID) + tests.WaitForHeight(resultTx.Height+1, port) + + tally = getTally(t, port, proposalID) + require.Equal(t, sdk.NewDec(60), tally.Yes, "tally should be equal to the amount delegated") } func TestUnjail(t *testing.T) { @@ -1328,6 +1342,15 @@ func getVotes(t *testing.T, port string, proposalID uint64) []gov.Vote { return votes } +func getTally(t *testing.T, port string, proposalID uint64) gov.TallyResult { + res, body := Request(t, port, "GET", fmt.Sprintf("/gov/proposals/%d/tally", proposalID), nil) + require.Equal(t, http.StatusOK, res.StatusCode, body) + var tally gov.TallyResult + err := cdc.UnmarshalJSON([]byte(body), &tally) + require.Nil(t, err) + return tally +} + func getProposalsAll(t *testing.T, port string) []gov.Proposal { res, body := Request(t, port, "GET", "/gov/proposals", nil) require.Equal(t, http.StatusOK, res.StatusCode, body) diff --git a/client/lcd/swagger-ui/swagger.yaml b/client/lcd/swagger-ui/swagger.yaml index 920194ffa49f..e5de2fe04e1c 100644 --- a/client/lcd/swagger-ui/swagger.yaml +++ b/client/lcd/swagger-ui/swagger.yaml @@ -1321,6 +1321,29 @@ paths: description: Invalid proposal id 500: description: Internal Server Error + /gov/proposals/{proposalId}/tally: + get: + summary: Get a proposal's tally result at the current time + description: Gets a proposal's tally result at the current time. If the proposal is pending deposits (i.e status 'DepositPeriod') it returns an empty tally result. + produces: + - application/json + tags: + - ICS22 + parameters: + - type: string + description: proposal id + name: proposalId + required: true + in: path + responses: + 200: + description: OK + schema: + $ref: "#/definitions/TallyResult" + 400: + description: Invalid proposal id + 500: + description: Internal Server Error /gov/proposals/{proposalId}/votes: post: summary: Vote a proposal @@ -1893,16 +1916,7 @@ definitions: proposal_status: type: string tally_result: - type: object - properties: - yes: - type: string - abstain: - type: string - no: - type: string - no_with_veto: - type: string + $ref: "#/definitions/TallyResult" submit_time: type: string total_deposit: @@ -1922,6 +1936,21 @@ definitions: type: integer depositer: "$ref": "#/definitions/Address" + TallyResult: + type: object + properties: + yes: + type: string + example: "0.0000000000" + abstain: + type: string + example: "0.0000000000" + no: + type: string + example: "0.0000000000" + no_with_veto: + type: string + example: "0.0000000000" Vote: type: object properties: diff --git a/x/gov/client/cli/query.go b/x/gov/client/cli/query.go index 227f278a91e8..ef8840527cc7 100644 --- a/x/gov/client/cli/query.go +++ b/x/gov/client/cli/query.go @@ -21,10 +21,7 @@ func GetCmdQueryProposal(queryRoute string, cdc *codec.Codec) *cobra.Command { cliCtx := context.NewCLIContext().WithCodec(cdc) proposalID := uint64(viper.GetInt64(flagProposalID)) - params := gov.QueryProposalParams{ - ProposalID: proposalID, - } - + params := gov.NewQueryProposalParams(proposalID) bz, err := cdc.MarshalJSON(params) if err != nil { return err @@ -56,9 +53,11 @@ func GetCmdQueryProposals(queryRoute string, cdc *codec.Codec) *cobra.Command { strProposalStatus := viper.GetString(flagStatus) numLimit := uint64(viper.GetInt64(flagNumLimit)) - params := gov.QueryProposalsParams{ - Limit: numLimit, - } + var depositerAddr sdk.AccAddress + var voterAddr sdk.AccAddress + var proposalStatus gov.ProposalStatus + + params := gov.NewQueryProposalsParams(proposalStatus, numLimit, voterAddr, depositerAddr) if len(bechDepositerAddr) != 0 { depositerAddr, err := sdk.AccAddressFromBech32(bechDepositerAddr) @@ -138,10 +137,7 @@ func GetCmdQueryVote(queryRoute string, cdc *codec.Codec) *cobra.Command { return err } - params := gov.QueryVoteParams{ - Voter: voterAddr, - ProposalID: proposalID, - } + params := gov.NewQueryVoteParams(proposalID, voterAddr) bz, err := cdc.MarshalJSON(params) if err != nil { return err @@ -172,9 +168,7 @@ func GetCmdQueryVotes(queryRoute string, cdc *codec.Codec) *cobra.Command { cliCtx := context.NewCLIContext().WithCodec(cdc) proposalID := uint64(viper.GetInt64(flagProposalID)) - params := gov.QueryVotesParams{ - ProposalID: proposalID, - } + params := gov.NewQueryProposalParams(proposalID) bz, err := cdc.MarshalJSON(params) if err != nil { return err @@ -210,10 +204,7 @@ func GetCmdQueryDeposit(queryRoute string, cdc *codec.Codec) *cobra.Command { return err } - params := gov.QueryDepositParams{ - Depositer: depositerAddr, - ProposalID: proposalID, - } + params := gov.NewQueryDepositParams(proposalID, depositerAddr) bz, err := cdc.MarshalJSON(params) if err != nil { return err @@ -244,9 +235,7 @@ func GetCmdQueryDeposits(queryRoute string, cdc *codec.Codec) *cobra.Command { cliCtx := context.NewCLIContext().WithCodec(cdc) proposalID := uint64(viper.GetInt64(flagProposalID)) - params := gov.QueryDepositsParams{ - ProposalID: proposalID, - } + params := gov.NewQueryProposalParams(proposalID) bz, err := cdc.MarshalJSON(params) if err != nil { return err @@ -276,9 +265,7 @@ func GetCmdQueryTally(queryRoute string, cdc *codec.Codec) *cobra.Command { cliCtx := context.NewCLIContext().WithCodec(cdc) proposalID := uint64(viper.GetInt64(flagProposalID)) - params := gov.QueryTallyParams{ - ProposalID: proposalID, - } + params := gov.NewQueryProposalParams(proposalID) bz, err := cdc.MarshalJSON(params) if err != nil { return err diff --git a/x/gov/client/rest/rest.go b/x/gov/client/rest/rest.go index c000a34d871c..06416e5c84f2 100644 --- a/x/gov/client/rest/rest.go +++ b/x/gov/client/rest/rest.go @@ -42,6 +42,7 @@ func RegisterRoutes(cliCtx context.CLIContext, r *mux.Router, cdc *codec.Codec) r.HandleFunc(fmt.Sprintf("/gov/proposals/{%s}", RestProposalID), queryProposalHandlerFn(cdc, cliCtx)).Methods("GET") r.HandleFunc(fmt.Sprintf("/gov/proposals/{%s}/deposits", RestProposalID), queryDepositsHandlerFn(cdc, cliCtx)).Methods("GET") r.HandleFunc(fmt.Sprintf("/gov/proposals/{%s}/deposits/{%s}", RestProposalID, RestDepositer), queryDepositHandlerFn(cdc, cliCtx)).Methods("GET") + r.HandleFunc(fmt.Sprintf("/gov/proposals/{%s}/tally", RestProposalID), queryTallyOnProposalHandlerFn(cdc, cliCtx)).Methods("GET") r.HandleFunc(fmt.Sprintf("/gov/proposals/{%s}/votes", RestProposalID), queryVotesOnProposalHandlerFn(cdc, cliCtx)).Methods("GET") r.HandleFunc(fmt.Sprintf("/gov/proposals/{%s}/votes/{%s}", RestProposalID, RestVoter), queryVoteHandlerFn(cdc, cliCtx)).Methods("GET") } @@ -244,9 +245,7 @@ func queryDepositsHandlerFn(cdc *codec.Codec, cliCtx context.CLIContext) http.Ha return } - params := gov.QueryDepositsParams{ - ProposalID: proposalID, - } + params := gov.NewQueryProposalParams(proposalID) bz, err := cdc.MarshalJSON(params) if err != nil { @@ -412,9 +411,8 @@ func queryVotesOnProposalHandlerFn(cdc *codec.Codec, cliCtx context.CLIContext) return } - params := gov.QueryVotesParams{ - ProposalID: proposalID, - } + params := gov.NewQueryProposalParams(proposalID) + bz, err := cdc.MarshalJSON(params) if err != nil { utils.WriteErrorResponse(w, http.StatusBadRequest, err.Error()) @@ -498,10 +496,8 @@ func queryTallyOnProposalHandlerFn(cdc *codec.Codec, cliCtx context.CLIContext) strProposalID := vars[RestProposalID] if len(strProposalID) == 0 { - w.WriteHeader(http.StatusBadRequest) err := errors.New("proposalId required but not specified") - w.Write([]byte(err.Error())) - + utils.WriteErrorResponse(w, http.StatusBadRequest, err.Error()) return } @@ -510,20 +506,17 @@ func queryTallyOnProposalHandlerFn(cdc *codec.Codec, cliCtx context.CLIContext) return } - params := gov.QueryTallyParams{ - ProposalID: proposalID, - } + params := gov.NewQueryProposalParams(proposalID) + bz, err := cdc.MarshalJSON(params) if err != nil { - w.WriteHeader(http.StatusBadRequest) - w.Write([]byte(err.Error())) + utils.WriteErrorResponse(w, http.StatusBadRequest, err.Error()) return } res, err := cliCtx.QueryWithData("custom/gov/tally", bz) if err != nil { - w.WriteHeader(http.StatusInternalServerError) - w.Write([]byte(err.Error())) + utils.WriteErrorResponse(w, http.StatusInternalServerError, err.Error()) return } diff --git a/x/gov/querier.go b/x/gov/querier.go index 171ab469d551..37335b9a1e5c 100644 --- a/x/gov/querier.go +++ b/x/gov/querier.go @@ -25,7 +25,7 @@ const ( ) func NewQuerier(keeper Keeper) sdk.Querier { - return func(ctx sdk.Context, path []string, req abci.RequestQuery) (res []byte, err sdk.Error) { + return func(ctx sdk.Context, path []string, req abci.RequestQuery) ([]byte, sdk.Error) { switch path[0] { case QueryParams: return queryParams(ctx, path[1:], req, keeper) @@ -49,42 +49,53 @@ func NewQuerier(keeper Keeper) sdk.Querier { } } -func queryParams(ctx sdk.Context, path []string, req abci.RequestQuery, keeper Keeper) (res []byte, err sdk.Error) { +func queryParams(ctx sdk.Context, path []string, req abci.RequestQuery, keeper Keeper) ([]byte, sdk.Error) { switch path[0] { case ParamDeposit: - bz, err2 := codec.MarshalJSONIndent(keeper.cdc, keeper.GetDepositParams(ctx)) - if err2 != nil { - return nil, sdk.ErrInternal(sdk.AppendMsgToErr("could not marshal result to JSON", err2.Error())) + bz, err := codec.MarshalJSONIndent(keeper.cdc, keeper.GetDepositParams(ctx)) + if err != nil { + return nil, sdk.ErrInternal(sdk.AppendMsgToErr("could not marshal result to JSON", err.Error())) } return bz, nil case ParamVoting: - bz, err2 := codec.MarshalJSONIndent(keeper.cdc, keeper.GetVotingParams(ctx)) - if err2 != nil { - return nil, sdk.ErrInternal(sdk.AppendMsgToErr("could not marshal result to JSON", err2.Error())) + bz, err := codec.MarshalJSONIndent(keeper.cdc, keeper.GetVotingParams(ctx)) + if err != nil { + return nil, sdk.ErrInternal(sdk.AppendMsgToErr("could not marshal result to JSON", err.Error())) } return bz, nil case ParamTallying: - bz, err2 := codec.MarshalJSONIndent(keeper.cdc, keeper.GetTallyParams(ctx)) - if err2 != nil { - return nil, sdk.ErrInternal(sdk.AppendMsgToErr("could not marshal result to JSON", err2.Error())) + bz, err := codec.MarshalJSONIndent(keeper.cdc, keeper.GetTallyParams(ctx)) + if err != nil { + return nil, sdk.ErrInternal(sdk.AppendMsgToErr("could not marshal result to JSON", err.Error())) } return bz, nil default: - return res, sdk.ErrUnknownRequest(fmt.Sprintf("%s is not a valid query request path", req.Path)) + return nil, sdk.ErrUnknownRequest(fmt.Sprintf("%s is not a valid query request path", req.Path)) } } -// Params for query 'custom/gov/proposal' +// Params for queries: +// - 'custom/gov/proposal' +// - 'custom/gov/deposits' +// - 'custom/gov/tally' +// - 'custom/gov/votes' type QueryProposalParams struct { ProposalID uint64 } +// creates a new instance of QueryProposalParams +func NewQueryProposalParams(proposalID uint64) QueryProposalParams { + return QueryProposalParams{ + ProposalID: proposalID, + } +} + // nolint: unparam -func queryProposal(ctx sdk.Context, path []string, req abci.RequestQuery, keeper Keeper) (res []byte, err sdk.Error) { +func queryProposal(ctx sdk.Context, path []string, req abci.RequestQuery, keeper Keeper) ([]byte, sdk.Error) { var params QueryProposalParams - err2 := keeper.cdc.UnmarshalJSON(req.Data, ¶ms) - if err2 != nil { - return nil, sdk.ErrUnknownRequest(sdk.AppendMsgToErr("incorrectly formatted request data", err2.Error())) + err := keeper.cdc.UnmarshalJSON(req.Data, ¶ms) + if err != nil { + return nil, sdk.ErrUnknownRequest(sdk.AppendMsgToErr("incorrectly formatted request data", err.Error())) } proposal := keeper.GetProposal(ctx, params.ProposalID) @@ -92,9 +103,9 @@ func queryProposal(ctx sdk.Context, path []string, req abci.RequestQuery, keeper return nil, ErrUnknownProposal(DefaultCodespace, params.ProposalID) } - bz, err2 := codec.MarshalJSONIndent(keeper.cdc, proposal) - if err2 != nil { - return nil, sdk.ErrInternal(sdk.AppendMsgToErr("could not marshal result to JSON", err2.Error())) + bz, err := codec.MarshalJSONIndent(keeper.cdc, proposal) + if err != nil { + return nil, sdk.ErrInternal(sdk.AppendMsgToErr("could not marshal result to JSON", err.Error())) } return bz, nil } @@ -105,18 +116,26 @@ type QueryDepositParams struct { Depositer sdk.AccAddress } +// creates a new instance of QueryDepositParams +func NewQueryDepositParams(proposalID uint64, depositer sdk.AccAddress) QueryDepositParams { + return QueryDepositParams{ + ProposalID: proposalID, + Depositer: depositer, + } +} + // nolint: unparam -func queryDeposit(ctx sdk.Context, path []string, req abci.RequestQuery, keeper Keeper) (res []byte, err sdk.Error) { +func queryDeposit(ctx sdk.Context, path []string, req abci.RequestQuery, keeper Keeper) ([]byte, sdk.Error) { var params QueryDepositParams - err2 := keeper.cdc.UnmarshalJSON(req.Data, ¶ms) - if err2 != nil { - return nil, sdk.ErrUnknownRequest(sdk.AppendMsgToErr("incorrectly formatted request data", err2.Error())) + err := keeper.cdc.UnmarshalJSON(req.Data, ¶ms) + if err != nil { + return nil, sdk.ErrUnknownRequest(sdk.AppendMsgToErr("incorrectly formatted request data", err.Error())) } deposit, _ := keeper.GetDeposit(ctx, params.ProposalID, params.Depositer) - bz, err2 := codec.MarshalJSONIndent(keeper.cdc, deposit) - if err2 != nil { - return nil, sdk.ErrInternal(sdk.AppendMsgToErr("could not marshal result to JSON", err2.Error())) + bz, err := codec.MarshalJSONIndent(keeper.cdc, deposit) + if err != nil { + return nil, sdk.ErrInternal(sdk.AppendMsgToErr("could not marshal result to JSON", err.Error())) } return bz, nil } @@ -127,33 +146,36 @@ type QueryVoteParams struct { Voter sdk.AccAddress } +// creates a new instance of QueryVoteParams +func NewQueryVoteParams(proposalID uint64, voter sdk.AccAddress) QueryVoteParams { + return QueryVoteParams{ + ProposalID: proposalID, + Voter: voter, + } +} + // nolint: unparam -func queryVote(ctx sdk.Context, path []string, req abci.RequestQuery, keeper Keeper) (res []byte, err sdk.Error) { +func queryVote(ctx sdk.Context, path []string, req abci.RequestQuery, keeper Keeper) ([]byte, sdk.Error) { var params QueryVoteParams - err2 := keeper.cdc.UnmarshalJSON(req.Data, ¶ms) - if err2 != nil { - return nil, sdk.ErrUnknownRequest(sdk.AppendMsgToErr("incorrectly formatted request data", err2.Error())) + err := keeper.cdc.UnmarshalJSON(req.Data, ¶ms) + if err != nil { + return nil, sdk.ErrUnknownRequest(sdk.AppendMsgToErr("incorrectly formatted request data", err.Error())) } vote, _ := keeper.GetVote(ctx, params.ProposalID, params.Voter) - bz, err2 := codec.MarshalJSONIndent(keeper.cdc, vote) - if err2 != nil { - return nil, sdk.ErrInternal(sdk.AppendMsgToErr("could not marshal result to JSON", err2.Error())) + bz, err := codec.MarshalJSONIndent(keeper.cdc, vote) + if err != nil { + return nil, sdk.ErrInternal(sdk.AppendMsgToErr("could not marshal result to JSON", err.Error())) } return bz, nil } -// Params for query 'custom/gov/deposits' -type QueryDepositsParams struct { - ProposalID uint64 -} - // nolint: unparam -func queryDeposits(ctx sdk.Context, path []string, req abci.RequestQuery, keeper Keeper) (res []byte, err sdk.Error) { - var params QueryDepositsParams - err2 := keeper.cdc.UnmarshalJSON(req.Data, ¶ms) - if err2 != nil { - return nil, sdk.ErrUnknownRequest(sdk.AppendMsgToErr("incorrectly formatted request data", err2.Error())) +func queryDeposits(ctx sdk.Context, path []string, req abci.RequestQuery, keeper Keeper) ([]byte, sdk.Error) { + var params QueryProposalParams + err := keeper.cdc.UnmarshalJSON(req.Data, ¶ms) + if err != nil { + return nil, sdk.ErrUnknownRequest(sdk.AppendMsgToErr("incorrectly formatted request data", err.Error())) } var deposits []Deposit @@ -164,25 +186,53 @@ func queryDeposits(ctx sdk.Context, path []string, req abci.RequestQuery, keeper deposits = append(deposits, deposit) } - bz, err2 := codec.MarshalJSONIndent(keeper.cdc, deposits) - if err2 != nil { - return nil, sdk.ErrInternal(sdk.AppendMsgToErr("could not marshal result to JSON", err2.Error())) + bz, err := codec.MarshalJSONIndent(keeper.cdc, deposits) + if err != nil { + return nil, sdk.ErrInternal(sdk.AppendMsgToErr("could not marshal result to JSON", err.Error())) } return bz, nil } -// Params for query 'custom/gov/votes' -type QueryVotesParams struct { - ProposalID uint64 +// nolint: unparam +func queryTally(ctx sdk.Context, path []string, req abci.RequestQuery, keeper Keeper) ([]byte, sdk.Error) { + var params QueryProposalParams + err := keeper.cdc.UnmarshalJSON(req.Data, ¶ms) + if err != nil { + return nil, sdk.ErrUnknownRequest(sdk.AppendMsgToErr("incorrectly formatted request data", err.Error())) + } + + proposalID := params.ProposalID + + proposal := keeper.GetProposal(ctx, proposalID) + if proposal == nil { + return nil, ErrUnknownProposal(DefaultCodespace, proposalID) + } + + var tallyResult TallyResult + + if proposal.GetStatus() == StatusDepositPeriod { + tallyResult = EmptyTallyResult() + } else if proposal.GetStatus() == StatusPassed || proposal.GetStatus() == StatusRejected { + tallyResult = proposal.GetTallyResult() + } else { + // proposal is in voting period + _, tallyResult = tally(ctx, keeper, proposal) + } + + bz, err := codec.MarshalJSONIndent(keeper.cdc, tallyResult) + if err != nil { + return nil, sdk.ErrInternal(sdk.AppendMsgToErr("could not marshal result to JSON", err.Error())) + } + return bz, nil } // nolint: unparam -func queryVotes(ctx sdk.Context, path []string, req abci.RequestQuery, keeper Keeper) (res []byte, err sdk.Error) { - var params QueryVotesParams - err2 := keeper.cdc.UnmarshalJSON(req.Data, ¶ms) +func queryVotes(ctx sdk.Context, path []string, req abci.RequestQuery, keeper Keeper) ([]byte, sdk.Error) { + var params QueryProposalParams + err := keeper.cdc.UnmarshalJSON(req.Data, ¶ms) - if err2 != nil { - return nil, sdk.ErrUnknownRequest(sdk.AppendMsgToErr("incorrectly formatted request data", err2.Error())) + if err != nil { + return nil, sdk.ErrUnknownRequest(sdk.AppendMsgToErr("incorrectly formatted request data", err.Error())) } var votes []Vote @@ -193,9 +243,9 @@ func queryVotes(ctx sdk.Context, path []string, req abci.RequestQuery, keeper Ke votes = append(votes, vote) } - bz, err2 := codec.MarshalJSONIndent(keeper.cdc, votes) - if err2 != nil { - return nil, sdk.ErrInternal(sdk.AppendMsgToErr("could not marshal result to JSON", err2.Error())) + bz, err := codec.MarshalJSONIndent(keeper.cdc, votes) + if err != nil { + return nil, sdk.ErrInternal(sdk.AppendMsgToErr("could not marshal result to JSON", err.Error())) } return bz, nil } @@ -208,58 +258,29 @@ type QueryProposalsParams struct { Limit uint64 } -// nolint: unparam -func queryProposals(ctx sdk.Context, path []string, req abci.RequestQuery, keeper Keeper) (res []byte, err sdk.Error) { - var params QueryProposalsParams - err2 := keeper.cdc.UnmarshalJSON(req.Data, ¶ms) - if err2 != nil { - return nil, sdk.ErrUnknownRequest(sdk.AppendMsgToErr("incorrectly formatted request data", err2.Error())) +// creates a new instance of QueryProposalsParams +func NewQueryProposalsParams(status ProposalStatus, limit uint64, voter, depositer sdk.AccAddress) QueryProposalsParams { + return QueryProposalsParams{ + Voter: voter, + Depositer: depositer, + ProposalStatus: status, + Limit: limit, } - - proposals := keeper.GetProposalsFiltered(ctx, params.Voter, params.Depositer, params.ProposalStatus, params.Limit) - - bz, err2 := codec.MarshalJSONIndent(keeper.cdc, proposals) - if err2 != nil { - return nil, sdk.ErrInternal(sdk.AppendMsgToErr("could not marshal result to JSON", err2.Error())) - } - return bz, nil -} - -// Params for query 'custom/gov/tally' -type QueryTallyParams struct { - ProposalID uint64 } // nolint: unparam -func queryTally(ctx sdk.Context, path []string, req abci.RequestQuery, keeper Keeper) (res []byte, err sdk.Error) { - // TODO: Dependant on #1914 - - var params QueryTallyParams - err2 := keeper.cdc.UnmarshalJSON(req.Data, ¶ms) - if err2 != nil { - return nil, sdk.ErrUnknownRequest(sdk.AppendMsgToErr("incorrectly formatted request data", err2.Error())) - } - - proposalID := params.ProposalID - - proposal := keeper.GetProposal(ctx, proposalID) - if proposal == nil { - return nil, ErrUnknownProposal(DefaultCodespace, proposalID) +func queryProposals(ctx sdk.Context, path []string, req abci.RequestQuery, keeper Keeper) ([]byte, sdk.Error) { + var params QueryProposalsParams + err := keeper.cdc.UnmarshalJSON(req.Data, ¶ms) + if err != nil { + return nil, sdk.ErrUnknownRequest(sdk.AppendMsgToErr("incorrectly formatted request data", err.Error())) } - var tallyResult TallyResult - - if proposal.GetStatus() == StatusDepositPeriod { - tallyResult = EmptyTallyResult() - } else if proposal.GetStatus() == StatusPassed || proposal.GetStatus() == StatusRejected { - tallyResult = proposal.GetTallyResult() - } else { - _, tallyResult = tally(ctx, keeper, proposal) - } + proposals := keeper.GetProposalsFiltered(ctx, params.Voter, params.Depositer, params.ProposalStatus, params.Limit) - bz, err2 := codec.MarshalJSONIndent(keeper.cdc, tallyResult) - if err2 != nil { - return nil, sdk.ErrInternal(sdk.AppendMsgToErr("could not marshal result to JSON", err2.Error())) + bz, err := codec.MarshalJSONIndent(keeper.cdc, proposals) + if err != nil { + return nil, sdk.ErrInternal(sdk.AppendMsgToErr("could not marshal result to JSON", err.Error())) } return bz, nil } diff --git a/x/gov/querier_test.go b/x/gov/querier_test.go index eee58d2ac192..c649f2b21a02 100644 --- a/x/gov/querier_test.go +++ b/x/gov/querier_test.go @@ -56,9 +56,7 @@ func getQueriedParams(t *testing.T, ctx sdk.Context, cdc *codec.Codec, querier s func getQueriedProposal(t *testing.T, ctx sdk.Context, cdc *codec.Codec, querier sdk.Querier, proposalID uint64) Proposal { query := abci.RequestQuery{ Path: strings.Join([]string{"custom", "gov", QueryProposal}, "/"), - Data: cdc.MustMarshalJSON(QueryProposalParams{ - ProposalID: proposalID, - }), + Data: cdc.MustMarshalJSON(NewQueryProposalParams(proposalID)), } bz, err := querier(ctx, []string{QueryProposal}, query) @@ -74,12 +72,7 @@ func getQueriedProposal(t *testing.T, ctx sdk.Context, cdc *codec.Codec, querier func getQueriedProposals(t *testing.T, ctx sdk.Context, cdc *codec.Codec, querier sdk.Querier, depositer, voter sdk.AccAddress, status ProposalStatus, limit uint64) []Proposal { query := abci.RequestQuery{ Path: strings.Join([]string{"custom", "gov", QueryProposals}, "/"), - Data: cdc.MustMarshalJSON(QueryProposalsParams{ - Voter: voter, - Depositer: depositer, - ProposalStatus: status, - Limit: limit, - }), + Data: cdc.MustMarshalJSON(NewQueryProposalsParams(status, limit, voter, depositer)), } bz, err := querier(ctx, []string{QueryProposal}, query) @@ -95,10 +88,7 @@ func getQueriedProposals(t *testing.T, ctx sdk.Context, cdc *codec.Codec, querie func getQueriedDeposit(t *testing.T, ctx sdk.Context, cdc *codec.Codec, querier sdk.Querier, proposalID uint64, depositer sdk.AccAddress) Deposit { query := abci.RequestQuery{ Path: strings.Join([]string{"custom", "gov", QueryDeposit}, "/"), - Data: cdc.MustMarshalJSON(QueryDepositParams{ - ProposalID: proposalID, - Depositer: depositer, - }), + Data: cdc.MustMarshalJSON(NewQueryDepositParams(proposalID, depositer)), } bz, err := querier(ctx, []string{QueryDeposits}, query) @@ -114,9 +104,7 @@ func getQueriedDeposit(t *testing.T, ctx sdk.Context, cdc *codec.Codec, querier func getQueriedDeposits(t *testing.T, ctx sdk.Context, cdc *codec.Codec, querier sdk.Querier, proposalID uint64) []Deposit { query := abci.RequestQuery{ Path: strings.Join([]string{"custom", "gov", QueryDeposits}, "/"), - Data: cdc.MustMarshalJSON(QueryDepositsParams{ - ProposalID: proposalID, - }), + Data: cdc.MustMarshalJSON(NewQueryProposalParams(proposalID)), } bz, err := querier(ctx, []string{QueryDeposits}, query) @@ -132,10 +120,7 @@ func getQueriedDeposits(t *testing.T, ctx sdk.Context, cdc *codec.Codec, querier func getQueriedVote(t *testing.T, ctx sdk.Context, cdc *codec.Codec, querier sdk.Querier, proposalID uint64, voter sdk.AccAddress) Vote { query := abci.RequestQuery{ Path: strings.Join([]string{"custom", "gov", QueryVote}, "/"), - Data: cdc.MustMarshalJSON(QueryVoteParams{ - ProposalID: proposalID, - Voter: voter, - }), + Data: cdc.MustMarshalJSON(NewQueryVoteParams(proposalID, voter)), } bz, err := querier(ctx, []string{QueryVote}, query) @@ -151,9 +136,7 @@ func getQueriedVote(t *testing.T, ctx sdk.Context, cdc *codec.Codec, querier sdk func getQueriedVotes(t *testing.T, ctx sdk.Context, cdc *codec.Codec, querier sdk.Querier, proposalID uint64) []Vote { query := abci.RequestQuery{ Path: strings.Join([]string{"custom", "gov", QueryVote}, "/"), - Data: cdc.MustMarshalJSON(QueryVotesParams{ - ProposalID: proposalID, - }), + Data: cdc.MustMarshalJSON(NewQueryProposalParams(proposalID)), } bz, err := querier(ctx, []string{QueryVotes}, query) @@ -169,9 +152,7 @@ func getQueriedVotes(t *testing.T, ctx sdk.Context, cdc *codec.Codec, querier sd func getQueriedTally(t *testing.T, ctx sdk.Context, cdc *codec.Codec, querier sdk.Querier, proposalID uint64) TallyResult { query := abci.RequestQuery{ Path: strings.Join([]string{"custom", "gov", QueryTally}, "/"), - Data: cdc.MustMarshalJSON(QueryTallyParams{ - ProposalID: proposalID, - }), + Data: cdc.MustMarshalJSON(NewQueryProposalParams(proposalID)), } bz, err := querier(ctx, []string{QueryTally}, query) diff --git a/x/stake/querier/queryable.go b/x/stake/querier/querier.go similarity index 100% rename from x/stake/querier/queryable.go rename to x/stake/querier/querier.go diff --git a/x/stake/querier/queryable_test.go b/x/stake/querier/querier_test.go similarity index 100% rename from x/stake/querier/queryable_test.go rename to x/stake/querier/querier_test.go