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 }