Some checks are pending
docker-build-cometbft / vars (push) Waiting to run
docker-build-cometbft / build-images (amd64, ubuntu-24.04) (push) Blocked by required conditions
docker-build-cometbft / build-images (arm64, ubuntu-24.04-arm) (push) Blocked by required conditions
docker-build-cometbft / merge-images (push) Blocked by required conditions
docker-build-e2e-node / vars (push) Waiting to run
docker-build-e2e-node / build-images (amd64, ubuntu-24.04) (push) Blocked by required conditions
docker-build-e2e-node / build-images (arm64, ubuntu-24.04-arm) (push) Blocked by required conditions
docker-build-e2e-node / merge-images (push) Blocked by required conditions
90 lines
3.1 KiB
Go
90 lines
3.1 KiB
Go
package privval
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"git.cw.tr/mukan-network/mukan-consensus/crypto"
|
|
cryptoenc "git.cw.tr/mukan-network/mukan-consensus/crypto/encoding"
|
|
cryptoproto "git.cw.tr/mukan-network/mukan-consensus/proto/tendermint/crypto"
|
|
privvalproto "git.cw.tr/mukan-network/mukan-consensus/proto/tendermint/privval"
|
|
cmtproto "git.cw.tr/mukan-network/mukan-consensus/proto/tendermint/types"
|
|
"git.cw.tr/mukan-network/mukan-consensus/types"
|
|
)
|
|
|
|
func DefaultValidationRequestHandler(
|
|
privVal types.PrivValidator,
|
|
req privvalproto.Message,
|
|
chainID string,
|
|
) (privvalproto.Message, error) {
|
|
var (
|
|
res privvalproto.Message
|
|
err error
|
|
)
|
|
|
|
switch r := req.Sum.(type) {
|
|
case *privvalproto.Message_PubKeyRequest:
|
|
if r.PubKeyRequest.GetChainId() != chainID {
|
|
res = mustWrapMsg(&privvalproto.PubKeyResponse{
|
|
PubKey: cryptoproto.PublicKey{}, Error: &privvalproto.RemoteSignerError{
|
|
Code: 0, Description: "unable to provide pubkey"}})
|
|
return res, fmt.Errorf("want chainID: %s, got chainID: %s", r.PubKeyRequest.GetChainId(), chainID)
|
|
}
|
|
|
|
var pubKey crypto.PubKey
|
|
pubKey, err = privVal.GetPubKey()
|
|
if err != nil {
|
|
return res, err
|
|
}
|
|
pk, err := cryptoenc.PubKeyToProto(pubKey)
|
|
if err != nil {
|
|
res = mustWrapMsg(&privvalproto.PubKeyResponse{
|
|
PubKey: cryptoproto.PublicKey{}, Error: &privvalproto.RemoteSignerError{Code: 0, Description: err.Error()}})
|
|
} else {
|
|
res = mustWrapMsg(&privvalproto.PubKeyResponse{PubKey: pk, Error: nil})
|
|
}
|
|
|
|
case *privvalproto.Message_SignVoteRequest:
|
|
if r.SignVoteRequest.ChainId != chainID {
|
|
res = mustWrapMsg(&privvalproto.SignedVoteResponse{
|
|
Vote: cmtproto.Vote{}, Error: &privvalproto.RemoteSignerError{
|
|
Code: 0, Description: "unable to sign vote"}})
|
|
return res, fmt.Errorf("want chainID: %s, got chainID: %s", r.SignVoteRequest.GetChainId(), chainID)
|
|
}
|
|
|
|
vote := r.SignVoteRequest.Vote
|
|
|
|
err = privVal.SignVote(chainID, vote)
|
|
if err != nil {
|
|
res = mustWrapMsg(&privvalproto.SignedVoteResponse{
|
|
Vote: cmtproto.Vote{}, Error: &privvalproto.RemoteSignerError{Code: 0, Description: err.Error()}})
|
|
} else {
|
|
res = mustWrapMsg(&privvalproto.SignedVoteResponse{Vote: *vote, Error: nil})
|
|
}
|
|
|
|
case *privvalproto.Message_SignProposalRequest:
|
|
if r.SignProposalRequest.GetChainId() != chainID {
|
|
res = mustWrapMsg(&privvalproto.SignedProposalResponse{
|
|
Proposal: cmtproto.Proposal{}, Error: &privvalproto.RemoteSignerError{
|
|
Code: 0,
|
|
Description: "unable to sign proposal"}})
|
|
return res, fmt.Errorf("want chainID: %s, got chainID: %s", r.SignProposalRequest.GetChainId(), chainID)
|
|
}
|
|
|
|
proposal := r.SignProposalRequest.Proposal
|
|
|
|
err = privVal.SignProposal(chainID, proposal)
|
|
if err != nil {
|
|
res = mustWrapMsg(&privvalproto.SignedProposalResponse{
|
|
Proposal: cmtproto.Proposal{}, Error: &privvalproto.RemoteSignerError{Code: 0, Description: err.Error()}})
|
|
} else {
|
|
res = mustWrapMsg(&privvalproto.SignedProposalResponse{Proposal: *proposal, Error: nil})
|
|
}
|
|
case *privvalproto.Message_PingRequest:
|
|
err, res = nil, mustWrapMsg(&privvalproto.PingResponse{})
|
|
|
|
default:
|
|
err = fmt.Errorf("unknown msg: %v", r)
|
|
}
|
|
|
|
return res, err
|
|
}
|