Merge PR #2869: Gov tally endpoint
* Added tally endpoint * Update querier.go * rename queryable * Address @alexanderbez comments
This commit is contained in:
parent
d8bbf85efa
commit
d227e2a29e
|
@ -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`)
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
||||
|
|
253
x/gov/querier.go
253
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,80 +186,19 @@ 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 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)
|
||||
|
||||
if err2 != nil {
|
||||
return nil, sdk.ErrUnknownRequest(sdk.AppendMsgToErr("incorrectly formatted request data", err2.Error()))
|
||||
}
|
||||
|
||||
var votes []Vote
|
||||
votesIterator := keeper.GetVotes(ctx, params.ProposalID)
|
||||
for ; votesIterator.Valid(); votesIterator.Next() {
|
||||
vote := Vote{}
|
||||
keeper.cdc.MustUnmarshalBinaryLengthPrefixed(votesIterator.Value(), &vote)
|
||||
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()))
|
||||
}
|
||||
return bz, nil
|
||||
}
|
||||
|
||||
// Params for query 'custom/gov/proposals'
|
||||
type QueryProposalsParams struct {
|
||||
Voter sdk.AccAddress
|
||||
Depositer sdk.AccAddress
|
||||
ProposalStatus ProposalStatus
|
||||
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()))
|
||||
}
|
||||
|
||||
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()))
|
||||
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
|
||||
|
@ -254,12 +215,72 @@ func queryTally(ctx sdk.Context, path []string, req abci.RequestQuery, keeper Ke
|
|||
} else if proposal.GetStatus() == StatusPassed || proposal.GetStatus() == StatusRejected {
|
||||
tallyResult = proposal.GetTallyResult()
|
||||
} else {
|
||||
// proposal is in voting period
|
||||
_, tallyResult = tally(ctx, keeper, proposal)
|
||||
}
|
||||
|
||||
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, 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) ([]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 votes []Vote
|
||||
votesIterator := keeper.GetVotes(ctx, params.ProposalID)
|
||||
for ; votesIterator.Valid(); votesIterator.Next() {
|
||||
vote := Vote{}
|
||||
keeper.cdc.MustUnmarshalBinaryLengthPrefixed(votesIterator.Value(), &vote)
|
||||
votes = append(votes, vote)
|
||||
}
|
||||
|
||||
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
|
||||
}
|
||||
|
||||
// Params for query 'custom/gov/proposals'
|
||||
type QueryProposalsParams struct {
|
||||
Voter sdk.AccAddress
|
||||
Depositer sdk.AccAddress
|
||||
ProposalStatus ProposalStatus
|
||||
Limit uint64
|
||||
}
|
||||
|
||||
// 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,
|
||||
}
|
||||
}
|
||||
|
||||
// nolint: unparam
|
||||
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()))
|
||||
}
|
||||
|
||||
proposals := keeper.GetProposalsFiltered(ctx, params.Voter, params.Depositer, params.ProposalStatus, params.Limit)
|
||||
|
||||
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
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Reference in New Issue