github.com/cosmos/cosmos-sdk@v0.50.10/x/params/keeper/grpc_query.go (about)

     1  package keeper
     2  
     3  import (
     4  	"context"
     5  
     6  	"google.golang.org/grpc/codes"
     7  	"google.golang.org/grpc/status"
     8  
     9  	"cosmossdk.io/errors"
    10  
    11  	sdk "github.com/cosmos/cosmos-sdk/types"
    12  	"github.com/cosmos/cosmos-sdk/x/params/types/proposal"
    13  )
    14  
    15  var _ proposal.QueryServer = Keeper{}
    16  
    17  // Params returns subspace params
    18  func (k Keeper) Params(c context.Context, req *proposal.QueryParamsRequest) (*proposal.QueryParamsResponse, error) {
    19  	if req == nil {
    20  		return nil, status.Errorf(codes.InvalidArgument, "empty request")
    21  	}
    22  
    23  	if req.Subspace == "" || req.Key == "" {
    24  		return nil, status.Errorf(codes.InvalidArgument, "invalid request")
    25  	}
    26  
    27  	ss, ok := k.GetSubspace(req.Subspace)
    28  	if !ok {
    29  		return nil, errors.Wrap(proposal.ErrUnknownSubspace, req.Subspace)
    30  	}
    31  
    32  	ctx := sdk.UnwrapSDKContext(c)
    33  	rawValue := ss.GetRaw(ctx, []byte(req.Key))
    34  	param := proposal.NewParamChange(req.Subspace, req.Key, string(rawValue))
    35  
    36  	return &proposal.QueryParamsResponse{Param: param}, nil
    37  }
    38  
    39  // Subspaces implements the gRPC query handler for fetching all registered
    40  // subspaces and all the keys for each subspace.
    41  func (k Keeper) Subspaces(
    42  	goCtx context.Context,
    43  	req *proposal.QuerySubspacesRequest,
    44  ) (*proposal.QuerySubspacesResponse, error) {
    45  	if req == nil {
    46  		return nil, status.Errorf(codes.InvalidArgument, "empty request")
    47  	}
    48  
    49  	spaces := k.GetSubspaces()
    50  	resp := &proposal.QuerySubspacesResponse{
    51  		Subspaces: make([]*proposal.Subspace, len(spaces)),
    52  	}
    53  
    54  	ctx := sdk.UnwrapSDKContext(goCtx)
    55  	for i, ss := range spaces {
    56  		var keys []string
    57  		ss.IterateKeys(ctx, func(key []byte) bool {
    58  			keys = append(keys, string(key))
    59  			return false
    60  		})
    61  
    62  		resp.Subspaces[i] = &proposal.Subspace{
    63  			Subspace: ss.Name(),
    64  			Keys:     keys,
    65  		}
    66  	}
    67  
    68  	return resp, nil
    69  }