57 lines
1.5 KiB
Go
57 lines
1.5 KiB
Go
|
package gov
|
||
|
|
||
|
import (
|
||
|
sdk "github.com/cosmos/cosmos-sdk/types"
|
||
|
abci "github.com/tendermint/tendermint/abci/types"
|
||
|
)
|
||
|
|
||
|
type Querier struct {
|
||
|
keeper Keeper
|
||
|
}
|
||
|
|
||
|
func NewQuerier(keeper Keeper) {
|
||
|
return Querier{
|
||
|
keeper: keeper,
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func (keeper Keeper) Query(ctx sdk.Context, path []string, req abci.RequestQuery) (res []byte, err sdk.Error) {
|
||
|
switch path[0] {
|
||
|
case "tally":
|
||
|
return QueryTally(ctx, path[1:], req)
|
||
|
case "proposal":
|
||
|
return handleMsgSubmitProposal(ctx, keeper, msg)
|
||
|
case MsgVote:
|
||
|
return handleMsgVote(ctx, keeper, msg)
|
||
|
default:
|
||
|
errMsg := "Unrecognized gov msg type"
|
||
|
return sdk.ErrUnknownRequest(errMsg).Result()
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func QueryProposal(ctx sdk.Context, path []string, req abci.RequestQuery) (res []byte, err sdk.Error) {
|
||
|
var proposalID int64
|
||
|
err := keeper.cdc.UnmarshalBinary(req.Data, proposalID)
|
||
|
if err != nil {
|
||
|
return []byte{}, sdk.ErrUnknownRequest()
|
||
|
}
|
||
|
proposal := keeper.GetProposal(ctx, proposalID)
|
||
|
if proposal == nil {
|
||
|
return []byte{}, ErrUnknownProposal(DefaultCodespace, proposalID)
|
||
|
}
|
||
|
return keeper.cdc.MustMarshalBinary(proposal), nil
|
||
|
}
|
||
|
|
||
|
func QueryTally(ctx sdk.Context, path []string, req abci.RequestQuery) (res []byte, err sdk.Error) {
|
||
|
var proposalID int64
|
||
|
err := keeper.cdc.UnmarshalBinary(req.Data, proposalID)
|
||
|
if err != nil {
|
||
|
return []byte{}, sdk.ErrUnknownRequest()
|
||
|
}
|
||
|
proposal := keeper.GetProposal(ctx, proposalID)
|
||
|
if proposal == nil {
|
||
|
return []byte{}, ErrUnknownProposal(DefaultCodespace, proposalID)
|
||
|
}
|
||
|
passes, _ := tally(ctx, keeper, proposal)
|
||
|
}
|