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