github.com/Finschia/finschia-sdk@v0.49.1/x/fbridge/keeper/grpc_query.go (about) 1 package keeper 2 3 import ( 4 "context" 5 "fmt" 6 7 "google.golang.org/grpc/codes" 8 "google.golang.org/grpc/status" 9 10 "github.com/Finschia/finschia-sdk/store/prefix" 11 sdk "github.com/Finschia/finschia-sdk/types" 12 sdkerrors "github.com/Finschia/finschia-sdk/types/errors" 13 "github.com/Finschia/finschia-sdk/types/query" 14 "github.com/Finschia/finschia-sdk/x/fbridge/types" 15 ) 16 17 var _ types.QueryServer = Keeper{} 18 19 func (k Keeper) Params(goCtx context.Context, req *types.QueryParamsRequest) (*types.QueryParamsResponse, error) { 20 if req == nil { 21 return nil, status.Error(codes.InvalidArgument, "empty request") 22 } 23 24 ctx := sdk.UnwrapSDKContext(goCtx) 25 params := k.GetParams(ctx) 26 27 return &types.QueryParamsResponse{Params: params}, nil 28 } 29 30 func (k Keeper) NextSeqSend(goCtx context.Context, req *types.QueryNextSeqSendRequest) (*types.QueryNextSeqSendResponse, error) { 31 if req == nil { 32 return nil, status.Error(codes.InvalidArgument, "empty request") 33 } 34 35 ctx := sdk.UnwrapSDKContext(goCtx) 36 seq := k.GetNextSequence(ctx) 37 38 return &types.QueryNextSeqSendResponse{Seq: seq}, nil 39 } 40 41 func (k Keeper) SeqToBlocknums(goCtx context.Context, req *types.QuerySeqToBlocknumsRequest) (*types.QuerySeqToBlocknumsResponse, error) { 42 if req == nil { 43 return nil, status.Error(codes.InvalidArgument, "empty request") 44 } 45 46 const lowerBound int = 1 47 const upperBound int = 1000 48 if len(req.Seqs) < lowerBound || len(req.Seqs) > upperBound { 49 return nil, status.Error(codes.InvalidArgument, fmt.Sprintf("The number of seqs requested must be between %d and %d", lowerBound, upperBound)) 50 } 51 52 ctx := sdk.UnwrapSDKContext(goCtx) 53 bhList := make([]uint64, len(req.Seqs)) 54 for i, seq := range req.Seqs { 55 bh, err := k.GetSeqToBlocknum(ctx, seq) 56 if err != nil { 57 return nil, err 58 } 59 bhList[i] = bh 60 } 61 62 return &types.QuerySeqToBlocknumsResponse{Blocknums: bhList}, nil 63 } 64 65 func (k Keeper) GreatestSeqByOperator(ctx context.Context, request *types.QueryGreatestSeqByOperatorRequest) (*types.QueryGreatestSeqByOperatorResponse, error) { 66 panic(sdkerrors.ErrNotSupported) 67 } 68 69 func (k Keeper) GreatestConsecutiveConfirmedSeq(ctx context.Context, request *types.QueryGreatestConsecutiveConfirmedSeqRequest) (*types.QueryGreatestConsecutiveConfirmedSeqResponse, error) { 70 panic(sdkerrors.ErrNotSupported) 71 } 72 73 func (k Keeper) SubmittedProvision(ctx context.Context, request *types.QuerySubmittedProvisionRequest) (*types.QuerySubmittedProvisionResponse, error) { 74 panic(sdkerrors.ErrNotSupported) 75 } 76 77 func (k Keeper) ConfirmedProvision(ctx context.Context, request *types.QueryConfirmedProvisionRequest) (*types.QueryConfirmedProvisionResponse, error) { 78 panic(sdkerrors.ErrNotSupported) 79 } 80 81 func (k Keeper) NeededSubmissionSeqs(ctx context.Context, request *types.QueryNeededSubmissionSeqsRequest) (*types.QueryNeededSubmissionSeqsResponse, error) { 82 panic(sdkerrors.ErrNotSupported) 83 } 84 85 func (k Keeper) Commitments(ctx context.Context, request *types.QueryCommitmentsRequest) (*types.QueryCommitmentsResponse, error) { 86 panic(sdkerrors.ErrNotSupported) 87 } 88 89 func (k Keeper) Members(goCtx context.Context, req *types.QueryMembersRequest) (*types.QueryMembersResponse, error) { 90 if req == nil { 91 return nil, status.Error(codes.InvalidArgument, "empty request") 92 } 93 94 ctx := sdk.UnwrapSDKContext(goCtx) 95 roles := k.GetRolePairs(ctx) 96 members := make([]string, 0) 97 98 if req.Role == "" { 99 for _, pair := range roles { 100 members = append(members, pair.Address) 101 } 102 } else { 103 role, found := types.QueryParamToRole[req.Role] 104 if !found { 105 return nil, status.Error(codes.InvalidArgument, "invalid role") 106 } 107 108 for _, pair := range roles { 109 if pair.Role == role { 110 members = append(members, pair.Address) 111 } 112 } 113 } 114 115 return &types.QueryMembersResponse{Members: members}, nil 116 } 117 118 func (k Keeper) Member(goCtx context.Context, req *types.QueryMemberRequest) (*types.QueryMemberResponse, error) { 119 if req == nil { 120 return nil, status.Error(codes.InvalidArgument, "empty request") 121 } 122 123 ctx := sdk.UnwrapSDKContext(goCtx) 124 r := k.GetRole(ctx, sdk.MustAccAddressFromBech32(req.Address)) 125 if r == types.RoleEmpty { 126 return nil, status.Error(codes.NotFound, "role not found") 127 } 128 129 return &types.QueryMemberResponse{Role: types.Role_name[int32(r)]}, nil 130 } 131 132 func (k Keeper) Proposals(goCtx context.Context, req *types.QueryProposalsRequest) (*types.QueryProposalsResponse, error) { 133 if req == nil { 134 return nil, status.Error(codes.InvalidArgument, "empty request") 135 } 136 137 ctx := sdk.UnwrapSDKContext(goCtx) 138 store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyProposalPrefix) 139 proposals := make([]types.RoleProposal, 0) 140 pageRes, err := query.Paginate(store, req.Pagination, func(_, value []byte) error { 141 var proposal types.RoleProposal 142 k.cdc.MustUnmarshal(value, &proposal) 143 proposals = append(proposals, proposal) 144 return nil 145 }) 146 if err != nil { 147 return nil, status.Error(codes.Internal, err.Error()) 148 } 149 150 return &types.QueryProposalsResponse{Proposals: proposals, Pagination: pageRes}, nil 151 } 152 153 func (k Keeper) Proposal(goCtx context.Context, req *types.QueryProposalRequest) (*types.QueryProposalResponse, error) { 154 if req == nil { 155 return nil, status.Error(codes.InvalidArgument, "empty request") 156 } 157 158 ctx := sdk.UnwrapSDKContext(goCtx) 159 proposal, found := k.GetRoleProposal(ctx, req.ProposalId) 160 if !found { 161 return nil, status.Error(codes.NotFound, fmt.Sprintf("role proposal %d", req.ProposalId)) 162 } 163 164 return &types.QueryProposalResponse{Proposal: proposal}, nil 165 } 166 167 func (k Keeper) Votes(goCtx context.Context, req *types.QueryVotesRequest) (*types.QueryVotesResponse, error) { 168 if req == nil { 169 return nil, status.Error(codes.InvalidArgument, "empty request") 170 } 171 172 ctx := sdk.UnwrapSDKContext(goCtx) 173 votes := k.GetProposalVotes(ctx, req.ProposalId) 174 return &types.QueryVotesResponse{Votes: votes}, nil 175 } 176 177 func (k Keeper) Vote(goCtx context.Context, req *types.QueryVoteRequest) (*types.QueryVoteResponse, error) { 178 if req == nil { 179 return nil, status.Error(codes.InvalidArgument, "empty request") 180 } 181 182 ctx := sdk.UnwrapSDKContext(goCtx) 183 opt, err := k.GetVote(ctx, req.ProposalId, sdk.MustAccAddressFromBech32(req.Voter)) 184 if err != nil { 185 return nil, status.Error(codes.NotFound, err.Error()) 186 } 187 188 return &types.QueryVoteResponse{Vote: types.Vote{ProposalId: req.ProposalId, Voter: req.Voter, Option: opt}}, nil 189 } 190 191 func (k Keeper) BridgeStatus(goCtx context.Context, req *types.QueryBridgeStatusRequest) (*types.QueryBridgeStatusResponse, error) { 192 if req == nil { 193 return nil, status.Error(codes.InvalidArgument, "empty request") 194 } 195 196 ctx := sdk.UnwrapSDKContext(goCtx) 197 return &types.QueryBridgeStatusResponse{Status: k.GetBridgeStatus(ctx), Metadata: k.GetBridgeStatusMetadata(ctx)}, nil 198 }