github.com/Finschia/finschia-sdk@v0.49.1/x/evidence/keeper/grpc_query.go (about) 1 package keeper 2 3 import ( 4 "context" 5 6 proto "github.com/gogo/protobuf/proto" 7 "google.golang.org/grpc/codes" 8 "google.golang.org/grpc/status" 9 10 codectypes "github.com/Finschia/finschia-sdk/codec/types" 11 "github.com/Finschia/finschia-sdk/store/prefix" 12 sdk "github.com/Finschia/finschia-sdk/types" 13 "github.com/Finschia/finschia-sdk/types/query" 14 "github.com/Finschia/finschia-sdk/x/evidence/types" 15 ) 16 17 var _ types.QueryServer = Keeper{} 18 19 // Evidence implements the Query/Evidence gRPC method 20 func (k Keeper) Evidence(c context.Context, req *types.QueryEvidenceRequest) (*types.QueryEvidenceResponse, error) { 21 if req == nil { 22 return nil, status.Errorf(codes.InvalidArgument, "empty request") 23 } 24 25 if req.EvidenceHash == nil { 26 return nil, status.Errorf(codes.InvalidArgument, "invalid hash") 27 } 28 29 ctx := sdk.UnwrapSDKContext(c) 30 31 evidence, _ := k.GetEvidence(ctx, req.EvidenceHash) 32 if evidence == nil { 33 return nil, status.Errorf(codes.NotFound, "evidence %s not found", req.EvidenceHash) 34 } 35 36 msg, ok := evidence.(proto.Message) 37 if !ok { 38 return nil, status.Errorf(codes.Internal, "can't protomarshal %T", msg) 39 } 40 41 evidenceAny, err := codectypes.NewAnyWithValue(msg) 42 if err != nil { 43 return nil, status.Errorf(codes.Internal, err.Error()) 44 } 45 46 return &types.QueryEvidenceResponse{Evidence: evidenceAny}, nil 47 } 48 49 // AllEvidence implements the Query/AllEvidence gRPC method 50 func (k Keeper) AllEvidence(c context.Context, req *types.QueryAllEvidenceRequest) (*types.QueryAllEvidenceResponse, error) { 51 if req == nil { 52 return nil, status.Errorf(codes.InvalidArgument, "empty request") 53 } 54 ctx := sdk.UnwrapSDKContext(c) 55 56 k.GetAllEvidence(ctx) 57 58 var evidence []*codectypes.Any 59 store := ctx.KVStore(k.storeKey) 60 evidenceStore := prefix.NewStore(store, types.KeyPrefixEvidence) 61 62 pageRes, err := query.Paginate(evidenceStore, req.Pagination, func(key, value []byte) error { 63 result, err := k.UnmarshalEvidence(value) 64 if err != nil { 65 return err 66 } 67 68 msg, ok := result.(proto.Message) 69 if !ok { 70 return status.Errorf(codes.Internal, "can't protomarshal %T", msg) 71 } 72 73 evidenceAny, err := codectypes.NewAnyWithValue(msg) 74 if err != nil { 75 return err 76 } 77 evidence = append(evidence, evidenceAny) 78 return nil 79 }) 80 if err != nil { 81 return &types.QueryAllEvidenceResponse{}, err 82 } 83 84 return &types.QueryAllEvidenceResponse{Evidence: evidence, Pagination: pageRes}, nil 85 }