github.com/number571/tendermint@v0.34.11-gost/privval/grpc/server.go (about)

     1  package grpc
     2  
     3  import (
     4  	context "context"
     5  
     6  	"google.golang.org/grpc/codes"
     7  	"google.golang.org/grpc/status"
     8  
     9  	"github.com/number571/tendermint/crypto"
    10  	cryptoenc "github.com/number571/tendermint/crypto/encoding"
    11  	"github.com/number571/tendermint/libs/log"
    12  	privvalproto "github.com/number571/tendermint/proto/tendermint/privval"
    13  	"github.com/number571/tendermint/types"
    14  )
    15  
    16  // SignerServer implements PrivValidatorAPIServer 9generated via protobuf services)
    17  // Handles remote validator connections that provide signing services
    18  type SignerServer struct {
    19  	logger  log.Logger
    20  	chainID string
    21  	privVal types.PrivValidator
    22  }
    23  
    24  func NewSignerServer(chainID string,
    25  	privVal types.PrivValidator, log log.Logger) *SignerServer {
    26  
    27  	return &SignerServer{
    28  		logger:  log,
    29  		chainID: chainID,
    30  		privVal: privVal,
    31  	}
    32  }
    33  
    34  var _ privvalproto.PrivValidatorAPIServer = (*SignerServer)(nil)
    35  
    36  // PubKey receives a request for the pubkey
    37  // returns the pubkey on success and error on failure
    38  func (ss *SignerServer) GetPubKey(ctx context.Context, req *privvalproto.PubKeyRequest) (
    39  	*privvalproto.PubKeyResponse, error) {
    40  	var pubKey crypto.PubKey
    41  
    42  	pubKey, err := ss.privVal.GetPubKey(ctx)
    43  	if err != nil {
    44  		return nil, status.Errorf(codes.NotFound, "error getting pubkey: %v", err)
    45  	}
    46  
    47  	pk, err := cryptoenc.PubKeyToProto(pubKey)
    48  	if err != nil {
    49  		return nil, status.Errorf(codes.Internal, "error transitioning pubkey to proto: %v", err)
    50  	}
    51  
    52  	ss.logger.Info("SignerServer: GetPubKey Success")
    53  
    54  	return &privvalproto.PubKeyResponse{PubKey: pk}, nil
    55  }
    56  
    57  // SignVote receives a vote sign requests, attempts to sign it
    58  // returns SignedVoteResponse on success and error on failure
    59  func (ss *SignerServer) SignVote(ctx context.Context, req *privvalproto.SignVoteRequest) (
    60  	*privvalproto.SignedVoteResponse, error) {
    61  	vote := req.Vote
    62  
    63  	err := ss.privVal.SignVote(ctx, req.ChainId, vote)
    64  	if err != nil {
    65  		return nil, status.Errorf(codes.InvalidArgument, "error signing vote: %v", err)
    66  	}
    67  
    68  	ss.logger.Info("SignerServer: SignVote Success", "height", req.Vote.Height)
    69  
    70  	return &privvalproto.SignedVoteResponse{Vote: *vote}, nil
    71  }
    72  
    73  // SignProposal receives a proposal sign requests, attempts to sign it
    74  // returns SignedProposalResponse on success and error on failure
    75  func (ss *SignerServer) SignProposal(ctx context.Context, req *privvalproto.SignProposalRequest) (
    76  	*privvalproto.SignedProposalResponse, error) {
    77  	proposal := req.Proposal
    78  
    79  	err := ss.privVal.SignProposal(ctx, req.ChainId, proposal)
    80  	if err != nil {
    81  		return nil, status.Errorf(codes.InvalidArgument, "error signing proposal: %v", err)
    82  	}
    83  
    84  	ss.logger.Info("SignerServer: SignProposal Success", "height", req.Proposal.Height)
    85  
    86  	return &privvalproto.SignedProposalResponse{Proposal: *proposal}, nil
    87  }