package testenv import ( "github.com/cometbft/cometbft/crypto" tmproto "github.com/cometbft/cometbft/proto/tendermint/types" tmtypes "github.com/cometbft/cometbft/types" cryptocodec "github.com/cosmos/cosmos-sdk/crypto/codec" "github.com/cosmos/cosmos-sdk/crypto/keys/secp256k1" cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types" ) var _ tmtypes.PrivValidator = PV{} // PV implements PrivValidator without any safety or persistence. // Only use it for testing. type PV struct { PrivKey cryptotypes.PrivKey } func NewPV() PV { return PV{secp256k1.GenPrivKey()} } // GetPubKey implements PrivValidator interface func (pv PV) GetPubKey() (crypto.PubKey, error) { return cryptocodec.ToTmPubKeyInterface(pv.PrivKey.PubKey()) } // SignVote implements PrivValidator interface func (pv PV) SignVote(chainID string, vote *tmproto.Vote) error { signBytes := tmtypes.VoteSignBytes(chainID, vote) sig, err := pv.PrivKey.Sign(signBytes) if err != nil { return err } vote.Signature = sig return nil } // SignProposal implements PrivValidator interface func (pv PV) SignProposal(chainID string, proposal *tmproto.Proposal) error { signBytes := tmtypes.ProposalSignBytes(chainID, proposal) sig, err := pv.PrivKey.Sign(signBytes) if err != nil { return err } proposal.Signature = sig return nil }