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  }