github.com/fibonacci-chain/fbc@v0.0.0-20231124064014-c7636198c1e9/x/gov/keeper/querier.go (about) 1 package keeper 2 3 import ( 4 "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/codec" 5 sdk "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/types" 6 abci "github.com/fibonacci-chain/fbc/libs/tendermint/abci/types" 7 "github.com/fibonacci-chain/fbc/x/common" 8 evmtypes "github.com/fibonacci-chain/fbc/x/evm/types" 9 "github.com/fibonacci-chain/fbc/x/gov/types" 10 ) 11 12 // NewQuerier returns all query handlers 13 func NewQuerier(keeper Keeper) sdk.Querier { 14 return func(ctx sdk.Context, path []string, req abci.RequestQuery) ([]byte, sdk.Error) { 15 switch path[0] { 16 case types.QueryParams: 17 return queryParams(ctx, path[1:], req, keeper) 18 case types.QueryProposals: 19 return queryProposals(ctx, path[1:], req, keeper) 20 case types.QueryProposal: 21 return queryProposal(ctx, path[1:], req, keeper) 22 case types.QueryDeposits: 23 return queryDeposits(ctx, path[1:], req, keeper) 24 case types.QueryDeposit: 25 return queryDeposit(ctx, path[1:], req, keeper) 26 case types.QueryVotes: 27 return queryVotes(ctx, path[1:], req, keeper) 28 case types.QueryVote: 29 return queryVote(ctx, path[1:], req, keeper) 30 case types.QueryTally: 31 return queryTally(ctx, path[1:], req, keeper) 32 default: 33 return nil, sdk.ErrUnknownRequest("unknown gov query endpoint") 34 } 35 } 36 } 37 38 func queryParams(ctx sdk.Context, path []string, req abci.RequestQuery, keeper Keeper) ([]byte, sdk.Error) { 39 switch path[0] { 40 case types.ParamDeposit: 41 bz, err := codec.MarshalJSONIndent(keeper.cdc, keeper.GetDepositParams(ctx)) 42 if err != nil { 43 return nil, common.ErrMarshalJSONFailed(err.Error()) 44 } 45 return bz, nil 46 case types.ParamVoting: 47 bz, err := codec.MarshalJSONIndent(keeper.cdc, keeper.GetVotingParams(ctx)) 48 if err != nil { 49 return nil, common.ErrMarshalJSONFailed(err.Error()) 50 } 51 return bz, nil 52 case types.ParamTallying: 53 bz, err := codec.MarshalJSONIndent(keeper.cdc, keeper.GetTallyParams(ctx)) 54 if err != nil { 55 return nil, common.ErrMarshalJSONFailed(err.Error()) 56 } 57 return bz, nil 58 default: 59 return nil, types.ErrUnknownGovParamType() 60 } 61 } 62 63 // nolint: unparam 64 func queryProposal(ctx sdk.Context, path []string, req abci.RequestQuery, keeper Keeper) ([]byte, sdk.Error) { 65 var params types.QueryProposalParams 66 err := keeper.cdc.UnmarshalJSON(req.Data, ¶ms) 67 if err != nil { 68 return nil, common.ErrUnMarshalJSONFailed(err.Error()) 69 } 70 71 proposal, ok := keeper.GetProposal(ctx, params.ProposalID) 72 if !ok { 73 return nil, types.ErrUnknownProposal(params.ProposalID) 74 } 75 76 if p, ok := proposal.Content.(evmtypes.ManageContractMethodBlockedListProposal); ok { 77 p.FixShortAddr() 78 newProposal := types.WrapProposalForCosmosAPI(proposal, p) 79 proposal = newProposal 80 } 81 82 bz, err := codec.MarshalJSONIndent(keeper.cdc, proposal) 83 if err != nil { 84 return nil, common.ErrMarshalJSONFailed(err.Error()) 85 } 86 return bz, nil 87 } 88 89 // nolint: unparam 90 func queryDeposit(ctx sdk.Context, path []string, req abci.RequestQuery, keeper Keeper) ([]byte, sdk.Error) { 91 var params types.QueryDepositParams 92 err := keeper.cdc.UnmarshalJSON(req.Data, ¶ms) 93 if err != nil { 94 return nil, common.ErrUnMarshalJSONFailed(err.Error()) 95 } 96 97 deposit, _ := keeper.GetDeposit(ctx, params.ProposalID, params.Depositor) 98 bz, err := codec.MarshalJSONIndent(keeper.cdc, deposit) 99 if err != nil { 100 return nil, common.ErrMarshalJSONFailed(sdk.AppendMsgToErr("could not marshal result to JSON", err.Error())) 101 } 102 return bz, nil 103 } 104 105 // nolint: unparam 106 func queryVote(ctx sdk.Context, path []string, req abci.RequestQuery, keeper Keeper) ([]byte, sdk.Error) { 107 var params types.QueryVoteParams 108 err := keeper.cdc.UnmarshalJSON(req.Data, ¶ms) 109 if err != nil { 110 return nil, common.ErrUnMarshalJSONFailed(sdk.AppendMsgToErr("incorrectly formatted request data", err.Error())) 111 } 112 113 vote, _ := keeper.GetVote(ctx, params.ProposalID, params.Voter) 114 bz, err := codec.MarshalJSONIndent(keeper.cdc, vote) 115 if err != nil { 116 return nil, common.ErrMarshalJSONFailed(sdk.AppendMsgToErr("could not marshal result to JSON", err.Error())) 117 } 118 return bz, nil 119 } 120 121 // nolint: unparam 122 func queryDeposits(ctx sdk.Context, path []string, req abci.RequestQuery, keeper Keeper) ([]byte, sdk.Error) { 123 var params types.QueryProposalParams 124 err := keeper.cdc.UnmarshalJSON(req.Data, ¶ms) 125 if err != nil { 126 return nil, common.ErrUnMarshalJSONFailed(sdk.AppendMsgToErr("incorrectly formatted request data", err.Error())) 127 } 128 129 deposits := keeper.GetDeposits(ctx, params.ProposalID) 130 131 bz, err := codec.MarshalJSONIndent(keeper.cdc, deposits) 132 if err != nil { 133 return nil, common.ErrMarshalJSONFailed(sdk.AppendMsgToErr("could not marshal result to JSON", err.Error())) 134 } 135 return bz, nil 136 } 137 138 // nolint: unparam 139 func queryTally(ctx sdk.Context, path []string, req abci.RequestQuery, keeper Keeper) ([]byte, sdk.Error) { 140 var params types.QueryProposalParams 141 err := keeper.cdc.UnmarshalJSON(req.Data, ¶ms) 142 if err != nil { 143 return nil, common.ErrUnMarshalJSONFailed(sdk.AppendMsgToErr("incorrectly formatted request data", err.Error())) 144 } 145 146 proposalID := params.ProposalID 147 148 proposal, ok := keeper.GetProposal(ctx, proposalID) 149 if !ok { 150 return nil, types.ErrUnknownProposal(proposalID) 151 } 152 153 var tallyResult types.TallyResult 154 155 switch proposal.Status { 156 case types.StatusDepositPeriod: 157 tallyResult = types.EmptyTallyResult(keeper.totalPower(ctx)) 158 case types.StatusPassed, types.StatusRejected, types.StatusFailed: 159 tallyResult = proposal.FinalTallyResult 160 default: 161 // proposal is in voting period 162 _, _, tallyResult = Tally(ctx, keeper, proposal, true) 163 } 164 165 bz, err := codec.MarshalJSONIndent(keeper.cdc, tallyResult) 166 if err != nil { 167 return nil, common.ErrMarshalJSONFailed(sdk.AppendMsgToErr("could not marshal result to JSON", err.Error())) 168 } 169 return bz, nil 170 } 171 172 // nolint: unparam 173 func queryVotes(ctx sdk.Context, path []string, req abci.RequestQuery, keeper Keeper) ([]byte, sdk.Error) { 174 var params types.QueryProposalParams 175 err := keeper.cdc.UnmarshalJSON(req.Data, ¶ms) 176 177 if err != nil { 178 return nil, common.ErrUnMarshalJSONFailed(sdk.AppendMsgToErr("incorrectly formatted request data", err.Error())) 179 } 180 181 votes := keeper.GetVotes(ctx, params.ProposalID) 182 183 bz, err := codec.MarshalJSONIndent(keeper.cdc, votes) 184 if err != nil { 185 return nil, common.ErrMarshalJSONFailed(sdk.AppendMsgToErr("could not marshal result to JSON", err.Error())) 186 } 187 return bz, nil 188 } 189 190 // nolint: unparam 191 func queryProposals(ctx sdk.Context, path []string, req abci.RequestQuery, keeper Keeper) ([]byte, sdk.Error) { 192 var params types.QueryProposalsParams 193 err := keeper.cdc.UnmarshalJSON(req.Data, ¶ms) 194 if err != nil { 195 return nil, common.ErrUnMarshalJSONFailed(sdk.AppendMsgToErr("incorrectly formatted request data", err.Error())) 196 } 197 198 proposals := keeper.GetProposalsFiltered(ctx, params.Voter, params.Depositor, params.ProposalStatus, params.Limit) 199 200 newProposals := make([]types.Proposal, 0) 201 for _, proposal := range proposals { 202 if p, ok := proposal.Content.(evmtypes.ManageContractMethodBlockedListProposal); ok { 203 p.FixShortAddr() 204 newProposal := types.WrapProposalForCosmosAPI(proposal, p) 205 newProposals = append(newProposals, newProposal) 206 } else { 207 newProposals = append(newProposals, proposal) 208 } 209 } 210 211 bz, err := codec.MarshalJSONIndent(keeper.cdc, newProposals) 212 if err != nil { 213 return nil, common.ErrMarshalJSONFailed(sdk.AppendMsgToErr("could not marshal result to JSON", err.Error())) 214 } 215 return bz, nil 216 }