github.com/fibonacci-chain/fbc@v0.0.0-20231124064014-c7636198c1e9/libs/cosmos-sdk/x/auth/keeper/adapter.go (about) 1 package keeper 2 3 import ( 4 "context" 5 6 codectypes "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/codec/types" 7 "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/store/prefix" 8 sdk "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/types" 9 "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/types/query" 10 "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/x/auth/exported" 11 "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/x/auth/types" 12 internaltypes "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/x/auth/typesadapter" 13 "google.golang.org/grpc/codes" 14 "google.golang.org/grpc/status" 15 ) 16 17 var ( 18 _ types.QueryServer = (*AccountKeeper)(nil) 19 ) 20 21 func (ak AccountKeeper) Accounts(c context.Context, req *types.QueryAccountsRequest) (*types.QueryAccountsResponse, error) { 22 if req == nil { 23 return nil, status.Error(codes.InvalidArgument, "empty request") 24 } 25 26 ctx := sdk.UnwrapSDKContext(c) 27 store := ctx.KVStore(ak.key) 28 accountsStore := prefix.NewStore(store, types.AddressStoreKeyPrefix) 29 30 var accounts []*codectypes.Any 31 pageRes, err := query.Paginate(accountsStore, req.Pagination, func(key, value []byte) error { 32 account := ak.decodeAccount(value) 33 ba := convEthAccountToBaseAccount(account) 34 any, err := codectypes.NewAnyWithValue(ba) 35 if err != nil { 36 return err 37 } 38 39 accounts = append(accounts, any) 40 return nil 41 }) 42 43 if err != nil { 44 return nil, status.Errorf(codes.Internal, "paginate: %v", err) 45 } 46 47 return &types.QueryAccountsResponse{Accounts: accounts, Pagination: pageRes}, err 48 49 return nil, nil 50 } 51 52 func (ak AccountKeeper) Account(conte context.Context, req *types.QueryAccountRequest) (*types.QueryAccountResponse, error) { 53 if req == nil { 54 return nil, status.Errorf(codes.InvalidArgument, "empty request") 55 } 56 57 if req.Address == "" { 58 return nil, status.Error(codes.InvalidArgument, "Address cannot be empty") 59 } 60 61 ctx := sdk.UnwrapSDKContext(conte) 62 addr, err := sdk.AccAddressFromBech32(req.Address) 63 64 if err != nil { 65 return nil, err 66 } 67 68 account := ak.GetAccount(ctx, addr) 69 if account == nil { 70 return nil, status.Errorf(codes.NotFound, "account %s not found", req.Address) 71 } 72 //ethA:=account.(*ethermint.EthAccount) 73 ba := &internaltypes.BaseAccount{ 74 Address: account.GetAddress().String(), 75 PubKey: nil, 76 AccountNumber: account.GetAccountNumber(), 77 Sequence: account.GetSequence(), 78 } 79 any, err := codectypes.NewAnyWithValue(ba) 80 if err != nil { 81 return nil, status.Errorf(codes.Internal, err.Error()) 82 } 83 84 return &types.QueryAccountResponse{Account: any}, nil 85 } 86 87 // Params returns parameters of auth module 88 func (ak AccountKeeper) Params(c context.Context, req *types.QueryParamsRequest) (*types.QueryParamsResponse, error) { 89 if req == nil { 90 return nil, status.Error(codes.InvalidArgument, "empty request") 91 } 92 ctx := sdk.UnwrapSDKContext(c) 93 params := ak.GetParams(ctx) 94 95 return &types.QueryParamsResponse{Params: params}, nil 96 } 97 98 func convEthAccountToBaseAccount(account exported.Account) *internaltypes.BaseAccount { 99 ba := &internaltypes.BaseAccount{ 100 Address: account.GetAddress().String(), 101 PubKey: nil, 102 AccountNumber: account.GetAccountNumber(), 103 Sequence: account.GetSequence(), 104 } 105 return ba 106 }