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  }