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, &params)
    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, &params)
    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, &params)
   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, &params)
   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, &params)
   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, &params)
   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, &params)
   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  }