mirror of
https://github.com/tendermint/tendermint.git
synced 2026-02-04 02:52:07 +00:00
## Description - Add `context.Context` to Privval interface This pr does not introduce context into our custom privval connection protocol because this will be removed in the next release. When this pr is released.
88 lines
2.7 KiB
Go
88 lines
2.7 KiB
Go
package grpc
|
|
|
|
import (
|
|
context "context"
|
|
|
|
"google.golang.org/grpc/codes"
|
|
"google.golang.org/grpc/status"
|
|
|
|
"github.com/tendermint/tendermint/crypto"
|
|
cryptoenc "github.com/tendermint/tendermint/crypto/encoding"
|
|
"github.com/tendermint/tendermint/libs/log"
|
|
privvalproto "github.com/tendermint/tendermint/proto/tendermint/privval"
|
|
"github.com/tendermint/tendermint/types"
|
|
)
|
|
|
|
// SignerServer implements PrivValidatorAPIServer 9generated via protobuf services)
|
|
// Handles remote validator connections that provide signing services
|
|
type SignerServer struct {
|
|
logger log.Logger
|
|
chainID string
|
|
privVal types.PrivValidator
|
|
}
|
|
|
|
func NewSignerServer(chainID string,
|
|
privVal types.PrivValidator, log log.Logger) *SignerServer {
|
|
|
|
return &SignerServer{
|
|
logger: log,
|
|
chainID: chainID,
|
|
privVal: privVal,
|
|
}
|
|
}
|
|
|
|
var _ privvalproto.PrivValidatorAPIServer = (*SignerServer)(nil)
|
|
|
|
// PubKey receives a request for the pubkey
|
|
// returns the pubkey on success and error on failure
|
|
func (ss *SignerServer) GetPubKey(ctx context.Context, req *privvalproto.PubKeyRequest) (
|
|
*privvalproto.PubKeyResponse, error) {
|
|
var pubKey crypto.PubKey
|
|
|
|
pubKey, err := ss.privVal.GetPubKey(ctx)
|
|
if err != nil {
|
|
return nil, status.Errorf(codes.NotFound, "error getting pubkey: %v", err)
|
|
}
|
|
|
|
pk, err := cryptoenc.PubKeyToProto(pubKey)
|
|
if err != nil {
|
|
return nil, status.Errorf(codes.Internal, "error transitioning pubkey to proto: %v", err)
|
|
}
|
|
|
|
ss.logger.Info("SignerServer: GetPubKey Success")
|
|
|
|
return &privvalproto.PubKeyResponse{PubKey: pk}, nil
|
|
}
|
|
|
|
// SignVote receives a vote sign requests, attempts to sign it
|
|
// returns SignedVoteResponse on success and error on failure
|
|
func (ss *SignerServer) SignVote(ctx context.Context, req *privvalproto.SignVoteRequest) (
|
|
*privvalproto.SignedVoteResponse, error) {
|
|
vote := req.Vote
|
|
|
|
err := ss.privVal.SignVote(ctx, req.ChainId, vote)
|
|
if err != nil {
|
|
return nil, status.Errorf(codes.InvalidArgument, "error signing vote: %v", err)
|
|
}
|
|
|
|
ss.logger.Info("SignerServer: SignVote Success", "height", req.Vote.Height)
|
|
|
|
return &privvalproto.SignedVoteResponse{Vote: *vote}, nil
|
|
}
|
|
|
|
// SignProposal receives a proposal sign requests, attempts to sign it
|
|
// returns SignedProposalResponse on success and error on failure
|
|
func (ss *SignerServer) SignProposal(ctx context.Context, req *privvalproto.SignProposalRequest) (
|
|
*privvalproto.SignedProposalResponse, error) {
|
|
proposal := req.Proposal
|
|
|
|
err := ss.privVal.SignProposal(ctx, req.ChainId, proposal)
|
|
if err != nil {
|
|
return nil, status.Errorf(codes.InvalidArgument, "error signing proposal: %v", err)
|
|
}
|
|
|
|
ss.logger.Info("SignerServer: SignProposal Success", "height", req.Proposal.Height)
|
|
|
|
return &privvalproto.SignedProposalResponse{Proposal: *proposal}, nil
|
|
}
|