github.com/Finschia/finschia-sdk@v0.49.1/x/auth/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 codectypes "github.com/Finschia/finschia-sdk/codec/types" 10 "github.com/Finschia/finschia-sdk/store/prefix" 11 sdk "github.com/Finschia/finschia-sdk/types" 12 "github.com/Finschia/finschia-sdk/types/query" 13 "github.com/Finschia/finschia-sdk/x/auth/types" 14 ) 15 16 var _ types.QueryServer = AccountKeeper{} 17 18 func (ak AccountKeeper) Accounts(c context.Context, req *types.QueryAccountsRequest) (*types.QueryAccountsResponse, error) { 19 if req == nil { 20 return nil, status.Error(codes.InvalidArgument, "empty request") 21 } 22 23 ctx := sdk.UnwrapSDKContext(c) 24 store := ctx.KVStore(ak.key) 25 accountsStore := prefix.NewStore(store, types.AddressStoreKeyPrefix) 26 27 var accounts []*codectypes.Any 28 pageRes, err := query.Paginate(accountsStore, req.Pagination, func(key, value []byte) error { 29 account := ak.decodeAccount(value) 30 any, err := codectypes.NewAnyWithValue(account) 31 if err != nil { 32 return err 33 } 34 35 accounts = append(accounts, any) 36 return nil 37 }) 38 if err != nil { 39 return nil, status.Errorf(codes.Internal, "paginate: %v", err) 40 } 41 42 return &types.QueryAccountsResponse{Accounts: accounts, Pagination: pageRes}, err 43 } 44 45 // Account returns account details based on address 46 func (ak AccountKeeper) Account(c context.Context, req *types.QueryAccountRequest) (*types.QueryAccountResponse, error) { 47 if req == nil { 48 return nil, status.Errorf(codes.InvalidArgument, "empty request") 49 } 50 51 if req.Address == "" { 52 return nil, status.Error(codes.InvalidArgument, "Address cannot be empty") 53 } 54 55 ctx := sdk.UnwrapSDKContext(c) 56 addr, err := sdk.AccAddressFromBech32(req.Address) 57 if err != nil { 58 return nil, err 59 } 60 account := ak.GetAccount(ctx, addr) 61 if account == nil { 62 return nil, status.Errorf(codes.NotFound, "account %s not found", req.Address) 63 } 64 65 any, err := codectypes.NewAnyWithValue(account) 66 if err != nil { 67 return nil, status.Errorf(codes.Internal, err.Error()) 68 } 69 70 return &types.QueryAccountResponse{Account: any}, nil 71 } 72 73 // Params returns parameters of auth module 74 func (ak AccountKeeper) Params(c context.Context, req *types.QueryParamsRequest) (*types.QueryParamsResponse, error) { 75 if req == nil { 76 return nil, status.Error(codes.InvalidArgument, "empty request") 77 } 78 ctx := sdk.UnwrapSDKContext(c) 79 params := ak.GetParams(ctx) 80 81 return &types.QueryParamsResponse{Params: params}, nil 82 } 83 84 // ModuleAccountByName returns module account by module name 85 func (ak AccountKeeper) ModuleAccountByName(c context.Context, req *types.QueryModuleAccountByNameRequest) (*types.QueryModuleAccountByNameResponse, error) { 86 if req == nil { 87 return nil, status.Errorf(codes.InvalidArgument, "empty request") 88 } 89 90 if len(req.Name) == 0 { 91 return nil, status.Error(codes.InvalidArgument, "module name is empty") 92 } 93 94 ctx := sdk.UnwrapSDKContext(c) 95 moduleName := req.Name 96 97 account := ak.GetModuleAccount(ctx, moduleName) 98 if account == nil { 99 return nil, status.Errorf(codes.NotFound, "account %s not found", moduleName) 100 } 101 any, err := codectypes.NewAnyWithValue(account) 102 if err != nil { 103 return nil, status.Errorf(codes.Internal, err.Error()) 104 } 105 106 return &types.QueryModuleAccountByNameResponse{Account: any}, nil 107 } 108 109 // NextAccountNumber implements the Query/NextAccountNumber gRPC method 110 // nolint: staticcheck 111 func (ak AccountKeeper) NextAccountNumber(c context.Context, req *types.QueryNextAccountNumberRequest) (*types.QueryNextAccountNumberResponse, error) { 112 if req == nil { 113 return nil, status.Errorf(codes.InvalidArgument, "empty request") 114 } 115 116 ctx := sdk.UnwrapSDKContext(c) 117 accNumber := ak.QueryNextAccountNumber(ctx) 118 119 return &types.QueryNextAccountNumberResponse{NextAccountNumber: accNumber}, nil //nolint: staticcheck 120 }