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  }