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 }