Browse Source

privval: add chainID to requests (#5239)

## Description

Add chainid to requests to privval. This is a non-breaking change and hardware devices can opt to ignore the field.
 
Closes: #4503 

Took the approach of passing chainID to the client instead of modifying `GetPubKey` because it would lead to a larger change throughout the codebase and in some places it could get tricky to get chainID.
pull/5255/head
Marko 4 years ago
committed by GitHub
parent
commit
8cdaa7f515
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
9 changed files with 252 additions and 62 deletions
  1. +2
    -0
      CHANGELOG_PENDING.md
  2. +7
    -1
      UPGRADING.md
  3. +4
    -3
      node/node.go
  4. +8
    -5
      privval/signer_client.go
  5. +1
    -1
      privval/signer_client_test.go
  6. +22
    -0
      privval/signer_requestHandler.go
  7. +201
    -48
      proto/tendermint/privval/types.pb.go
  8. +6
    -3
      proto/tendermint/privval/types.proto
  9. +1
    -1
      tools/tm-signer-harness/internal/test_harness.go

+ 2
- 0
CHANGELOG_PENDING.md View File

@ -8,6 +8,8 @@ Friendly reminder, we have a [bug bounty program](https://hackerone.com/tendermi
### FEATURES:
- [privval] \#5239 Add `chainID` to requests from client.
### IMPROVEMENTS:
### BUG FIXES:


+ 7
- 1
UPGRADING.md View File

@ -136,9 +136,15 @@ RPC client can be found in `/rpc` directory. HTTP(S) proxy is located in
### State
A field `State.InitialHeight` has been added to record the initial chain height, which must be `1`
(not `0`) if starting from height `1`. This can be configured via the genesis field
(not `0`) if starting from height `1`. This can be configured via the genesis field
`initial_height`.
### Privval
All requests are now accompanied by the chainID from the network.
This is a optional field and can be ignored by key management systems. It
is recommended to check the chainID if using the same key management system for multiple chains.
## v0.33.4
### Go API


+ 4
- 3
node/node.go View File

@ -655,7 +655,7 @@ func NewNode(config *cfg.Config,
// external signing process.
if config.PrivValidatorListenAddr != "" {
// FIXME: we should start services inside OnStart
privValidator, err = createAndStartPrivValidatorSocketClient(config.PrivValidatorListenAddr, logger)
privValidator, err = createAndStartPrivValidatorSocketClient(config.PrivValidatorListenAddr, genDoc.ChainID, logger)
if err != nil {
return nil, fmt.Errorf("error with private validator socket client: %w", err)
}
@ -1312,7 +1312,8 @@ func saveGenesisDoc(db dbm.DB, genDoc *types.GenesisDoc) error {
}
func createAndStartPrivValidatorSocketClient(
listenAddr string,
listenAddr,
chainID string,
logger log.Logger,
) (types.PrivValidator, error) {
pve, err := privval.NewSignerListener(listenAddr, logger)
@ -1320,7 +1321,7 @@ func createAndStartPrivValidatorSocketClient(
return nil, fmt.Errorf("failed to start private validator: %w", err)
}
pvsc, err := privval.NewSignerClient(pve)
pvsc, err := privval.NewSignerClient(pve, chainID)
if err != nil {
return nil, fmt.Errorf("failed to start private validator: %w", err)
}


+ 8
- 5
privval/signer_client.go View File

@ -15,20 +15,21 @@ import (
// Handles remote validator connections that provide signing services
type SignerClient struct {
endpoint *SignerListenerEndpoint
chainID string
}
var _ types.PrivValidator = (*SignerClient)(nil)
// NewSignerClient returns an instance of SignerClient.
// it will start the endpoint (if not already started)
func NewSignerClient(endpoint *SignerListenerEndpoint) (*SignerClient, error) {
func NewSignerClient(endpoint *SignerListenerEndpoint, chainID string) (*SignerClient, error) {
if !endpoint.IsRunning() {
if err := endpoint.Start(); err != nil {
return nil, fmt.Errorf("failed to start listener endpoint: %w", err)
}
}
return &SignerClient{endpoint: endpoint}, nil
return &SignerClient{endpoint: endpoint, chainID: chainID}, nil
}
// Close closes the underlying connection
@ -68,7 +69,7 @@ func (sc *SignerClient) Ping() error {
// GetPubKey retrieves a public key from a remote signer
// returns an error if client is not able to provide the key
func (sc *SignerClient) GetPubKey() (crypto.PubKey, error) {
response, err := sc.endpoint.SendRequest(mustWrapMsg(&privvalproto.PubKeyRequest{}))
response, err := sc.endpoint.SendRequest(mustWrapMsg(&privvalproto.PubKeyRequest{ChainId: sc.chainID}))
if err != nil {
return nil, fmt.Errorf("send: %w", err)
}
@ -91,7 +92,7 @@ func (sc *SignerClient) GetPubKey() (crypto.PubKey, error) {
// SignVote requests a remote signer to sign a vote
func (sc *SignerClient) SignVote(chainID string, vote *tmproto.Vote) error {
response, err := sc.endpoint.SendRequest(mustWrapMsg(&privvalproto.SignVoteRequest{Vote: vote}))
response, err := sc.endpoint.SendRequest(mustWrapMsg(&privvalproto.SignVoteRequest{Vote: vote, ChainId: chainID}))
if err != nil {
return err
}
@ -111,7 +112,9 @@ func (sc *SignerClient) SignVote(chainID string, vote *tmproto.Vote) error {
// SignProposal requests a remote signer to sign a proposal
func (sc *SignerClient) SignProposal(chainID string, proposal *tmproto.Proposal) error {
response, err := sc.endpoint.SendRequest(mustWrapMsg(&privvalproto.SignProposalRequest{Proposal: proposal}))
response, err := sc.endpoint.SendRequest(mustWrapMsg(
&privvalproto.SignProposalRequest{Proposal: proposal, ChainId: chainID},
))
if err != nil {
return err
}


+ 1
- 1
privval/signer_client_test.go View File

@ -33,7 +33,7 @@ func getSignerTestCases(t *testing.T) []signerTestCase {
// get a pair of signer listener, signer dialer endpoints
sl, sd := getMockEndpoints(t, dtc.addr, dtc.dialer)
sc, err := NewSignerClient(sl)
sc, err := NewSignerClient(sl, chainID)
require.NoError(t, err)
ss := NewSignerServer(sd, chainID, mockPV)


+ 22
- 0
privval/signer_requestHandler.go View File

@ -21,6 +21,13 @@ func DefaultValidationRequestHandler(
switch r := req.Sum.(type) {
case *privvalproto.Message_PubKeyRequest:
if r.PubKeyRequest.GetChainId() != chainID {
res = mustWrapMsg(&privvalproto.SignedVoteResponse{
Vote: nil, 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()
pk, err := cryptoenc.PubKeyToProto(pubKey)
@ -36,6 +43,13 @@ func DefaultValidationRequestHandler(
}
case *privvalproto.Message_SignVoteRequest:
if r.SignVoteRequest.ChainId != chainID {
res = mustWrapMsg(&privvalproto.SignedVoteResponse{
Vote: nil, 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)
@ -47,6 +61,14 @@ func DefaultValidationRequestHandler(
}
case *privvalproto.Message_SignProposalRequest:
if r.SignProposalRequest.GetChainId() != chainID {
res = mustWrapMsg(&privvalproto.SignedVoteResponse{
Vote: nil, 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)


+ 201
- 48
proto/tendermint/privval/types.pb.go View File

@ -5,7 +5,6 @@ package privval
import (
fmt "fmt"
_ "github.com/gogo/protobuf/gogoproto"
proto "github.com/gogo/protobuf/proto"
crypto "github.com/tendermint/tendermint/proto/tendermint/crypto"
types "github.com/tendermint/tendermint/proto/tendermint/types"
@ -116,6 +115,7 @@ func (m *RemoteSignerError) GetDescription() string {
// PubKeyRequest requests the consensus public key from the remote signer.
type PubKeyRequest struct {
ChainId string `protobuf:"bytes,1,opt,name=chain_id,json=chainId,proto3" json:"chain_id,omitempty"`
}
func (m *PubKeyRequest) Reset() { *m = PubKeyRequest{} }
@ -151,6 +151,13 @@ func (m *PubKeyRequest) XXX_DiscardUnknown() {
var xxx_messageInfo_PubKeyRequest proto.InternalMessageInfo
func (m *PubKeyRequest) GetChainId() string {
if m != nil {
return m.ChainId
}
return ""
}
// PubKeyResponse is a response message containing the public key.
type PubKeyResponse struct {
PubKey *crypto.PublicKey `protobuf:"bytes,1,opt,name=pub_key,json=pubKey,proto3" json:"pub_key,omitempty"`
@ -206,7 +213,8 @@ func (m *PubKeyResponse) GetError() *RemoteSignerError {
// SignVoteRequest is a request to sign a vote
type SignVoteRequest struct {
Vote *types.Vote `protobuf:"bytes,1,opt,name=vote,proto3" json:"vote,omitempty"`
Vote *types.Vote `protobuf:"bytes,1,opt,name=vote,proto3" json:"vote,omitempty"`
ChainId string `protobuf:"bytes,2,opt,name=chain_id,json=chainId,proto3" json:"chain_id,omitempty"`
}
func (m *SignVoteRequest) Reset() { *m = SignVoteRequest{} }
@ -249,6 +257,13 @@ func (m *SignVoteRequest) GetVote() *types.Vote {
return nil
}
func (m *SignVoteRequest) GetChainId() string {
if m != nil {
return m.ChainId
}
return ""
}
// SignedVoteResponse is a response containing a signed vote or an error
type SignedVoteResponse struct {
Vote *types.Vote `protobuf:"bytes,1,opt,name=vote,proto3" json:"vote,omitempty"`
@ -305,6 +320,7 @@ func (m *SignedVoteResponse) GetError() *RemoteSignerError {
// SignProposalRequest is a request to sign a proposal
type SignProposalRequest struct {
Proposal *types.Proposal `protobuf:"bytes,1,opt,name=proposal,proto3" json:"proposal,omitempty"`
ChainId string `protobuf:"bytes,2,opt,name=chain_id,json=chainId,proto3" json:"chain_id,omitempty"`
}
func (m *SignProposalRequest) Reset() { *m = SignProposalRequest{} }
@ -347,6 +363,13 @@ func (m *SignProposalRequest) GetProposal() *types.Proposal {
return nil
}
func (m *SignProposalRequest) GetChainId() string {
if m != nil {
return m.ChainId
}
return ""
}
// SignedProposalResponse is response containing a signed proposal or an error
type SignedProposalResponse struct {
Proposal *types.Proposal `protobuf:"bytes,1,opt,name=proposal,proto3" json:"proposal,omitempty"`
@ -654,52 +677,53 @@ func init() {
func init() { proto.RegisterFile("tendermint/privval/types.proto", fileDescriptor_cb4e437a5328cf9c) }
var fileDescriptor_cb4e437a5328cf9c = []byte{
// 711 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x95, 0xcf, 0x6e, 0xd3, 0x4a,
0x14, 0xc6, 0xed, 0x36, 0x49, 0x7b, 0x4f, 0x9a, 0x3f, 0x9d, 0xf6, 0xf6, 0xe6, 0x46, 0xbd, 0xbe,
0xc1, 0x08, 0xa8, 0xba, 0x48, 0xa4, 0x22, 0x90, 0x10, 0x62, 0x41, 0x5b, 0x8b, 0x44, 0x55, 0xed,
0x30, 0x49, 0x29, 0xaa, 0x84, 0xac, 0x26, 0x19, 0x8c, 0xd5, 0xc6, 0x33, 0x78, 0x9c, 0x4a, 0x59,
0xb0, 0x63, 0x8b, 0xc4, 0x63, 0xb0, 0xe6, 0x29, 0x58, 0x76, 0xc9, 0x12, 0xb5, 0x2f, 0x82, 0x3c,
0x9e, 0x38, 0x6e, 0xfe, 0x20, 0x41, 0x77, 0x9e, 0xf3, 0xcd, 0xfc, 0xce, 0x77, 0x3c, 0x9f, 0x34,
0xa0, 0x05, 0xc4, 0xeb, 0x11, 0xbf, 0xef, 0x7a, 0x41, 0x8d, 0xf9, 0xee, 0xc5, 0xc5, 0xe9, 0x79,
0x2d, 0x18, 0x32, 0xc2, 0xab, 0xcc, 0xa7, 0x01, 0x45, 0x68, 0xac, 0x57, 0xa5, 0x5e, 0x5e, 0x77,
0xa8, 0x43, 0x85, 0x5c, 0x0b, 0xbf, 0xa2, 0x9d, 0xe5, 0xcd, 0x04, 0xa9, 0xeb, 0x0f, 0x59, 0x40,
0x6b, 0x67, 0x64, 0xc8, 0x67, 0xa8, 0x82, 0x9f, 0xec, 0xa2, 0x37, 0x60, 0x15, 0x93, 0x3e, 0x0d,
0x48, 0xcb, 0x75, 0x3c, 0xe2, 0x1b, 0xbe, 0x4f, 0x7d, 0x84, 0x20, 0xd5, 0xa5, 0x3d, 0x52, 0x52,
0x2b, 0xea, 0x56, 0x1a, 0x8b, 0x6f, 0x54, 0x81, 0x6c, 0x8f, 0xf0, 0xae, 0xef, 0xb2, 0xc0, 0xa5,
0x5e, 0x69, 0xa1, 0xa2, 0x6e, 0xfd, 0x85, 0x93, 0x25, 0xbd, 0x00, 0xb9, 0xe6, 0xa0, 0x73, 0x40,
0x86, 0x98, 0xbc, 0x1f, 0x10, 0x1e, 0xe8, 0x1f, 0x55, 0xc8, 0x8f, 0x2a, 0x9c, 0x51, 0x8f, 0x13,
0xf4, 0x08, 0x96, 0xd8, 0xa0, 0x63, 0x9f, 0x91, 0xa1, 0x80, 0x67, 0x77, 0x36, 0xab, 0x89, 0x31,
0x23, 0xf3, 0xd5, 0xe6, 0xa0, 0x73, 0xee, 0x76, 0xc3, 0x63, 0x19, 0x26, 0x8e, 0xa3, 0xa7, 0x90,
0x26, 0xa1, 0x33, 0xd1, 0x36, 0xbb, 0x73, 0xaf, 0x3a, 0xfd, 0x6f, 0xaa, 0x53, 0x63, 0xe0, 0xe8,
0x8c, 0xfe, 0x0c, 0x0a, 0x61, 0xf5, 0x15, 0x0d, 0x88, 0x74, 0x86, 0xb6, 0x21, 0x75, 0x41, 0x03,
0x22, 0x3d, 0x6c, 0x24, 0x71, 0xd1, 0xcf, 0x11, 0x9b, 0xc5, 0x1e, 0xfd, 0x03, 0x20, 0x01, 0xed,
0x45, 0x00, 0x39, 0xc8, 0x6f, 0x10, 0x6e, 0xe7, 0xfe, 0x10, 0xd6, 0xc2, 0x6a, 0xd3, 0xa7, 0x8c,
0xf2, 0xd3, 0xf3, 0xd1, 0x04, 0x8f, 0x61, 0x99, 0xc9, 0x92, 0xf4, 0x50, 0x9e, 0xf6, 0x10, 0x1f,
0x8a, 0xf7, 0xea, 0x9f, 0x54, 0xd8, 0x88, 0xc6, 0x19, 0x13, 0xe5, 0x48, 0x7f, 0x88, 0xbc, 0xdd,
0x78, 0x39, 0xc8, 0x36, 0x5d, 0xcf, 0x19, 0x45, 0x26, 0x0f, 0x2b, 0xd1, 0x32, 0xf2, 0xa4, 0x7f,
0x4d, 0xc3, 0xd2, 0x21, 0xe1, 0xfc, 0xd4, 0x21, 0xe8, 0x00, 0x0a, 0x32, 0x3b, 0xb6, 0x1f, 0x6d,
0x97, 0x36, 0xef, 0xcc, 0xea, 0x78, 0x23, 0x8a, 0x75, 0x05, 0xe7, 0x58, 0xb2, 0x80, 0x4c, 0x28,
0x8e, 0x61, 0x51, 0x33, 0xe9, 0x5f, 0xff, 0x15, 0x2d, 0xda, 0x59, 0x57, 0x70, 0x9e, 0xdd, 0x0c,
0xf6, 0x4b, 0x58, 0xe5, 0xae, 0xe3, 0xd9, 0xe1, 0x85, 0xc7, 0xf6, 0x16, 0x05, 0xf0, 0xee, 0x2c,
0xe0, 0x44, 0x22, 0xeb, 0x0a, 0x2e, 0xf0, 0x89, 0x90, 0x9e, 0xc0, 0x3a, 0x17, 0x37, 0x35, 0x82,
0x4a, 0x9b, 0x29, 0x41, 0xbd, 0x3f, 0x8f, 0x7a, 0x33, 0xa8, 0x75, 0x05, 0x23, 0x3e, 0x1d, 0xdf,
0x37, 0xf0, 0xb7, 0xb0, 0x3b, 0xba, 0xc4, 0xd8, 0x72, 0x5a, 0xc0, 0x1f, 0xcc, 0x83, 0x4f, 0xc4,
0xb0, 0xae, 0xe0, 0x35, 0x3e, 0x23, 0x9d, 0x6f, 0xa1, 0x24, 0xad, 0x27, 0x1a, 0x48, 0xfb, 0x19,
0xd1, 0x61, 0x7b, 0xbe, 0xfd, 0xc9, 0x60, 0xd6, 0x15, 0xbc, 0xc1, 0x67, 0x47, 0x76, 0x1f, 0x56,
0x98, 0xeb, 0x39, 0xb1, 0xfb, 0x25, 0xc1, 0xfe, 0x7f, 0xe6, 0x0d, 0x8e, 0x53, 0x56, 0x57, 0x70,
0x96, 0x8d, 0x97, 0xe8, 0x05, 0xe4, 0x24, 0x45, 0x5a, 0x5c, 0x16, 0x98, 0xca, 0x7c, 0x4c, 0x6c,
0x6c, 0x85, 0x25, 0xd6, 0xbb, 0x69, 0x58, 0xe4, 0x83, 0xfe, 0xf6, 0x17, 0x15, 0x32, 0x22, 0xe4,
0x1c, 0x21, 0xc8, 0x1b, 0x18, 0x5b, 0xb8, 0x65, 0x1f, 0x99, 0x07, 0xa6, 0x75, 0x6c, 0x16, 0x15,
0xa4, 0x41, 0x39, 0xae, 0x19, 0xaf, 0x9b, 0xc6, 0x5e, 0xdb, 0xd8, 0xb7, 0xb1, 0xd1, 0x6a, 0x5a,
0x66, 0xcb, 0x28, 0xaa, 0xa8, 0x04, 0xeb, 0x52, 0x37, 0x2d, 0x7b, 0xcf, 0x32, 0x4d, 0x63, 0xaf,
0xdd, 0xb0, 0xcc, 0xe2, 0x02, 0xfa, 0x0f, 0xfe, 0x95, 0xca, 0xb8, 0x6c, 0xb7, 0x1b, 0x87, 0x86,
0x75, 0xd4, 0x2e, 0x2e, 0xa2, 0x7f, 0x60, 0x4d, 0xca, 0xd8, 0x78, 0xbe, 0x1f, 0x0b, 0xa9, 0x04,
0xf1, 0x18, 0x37, 0xda, 0x46, 0xac, 0xa4, 0x77, 0x5b, 0xdf, 0xae, 0x34, 0xf5, 0xf2, 0x4a, 0x53,
0x7f, 0x5c, 0x69, 0xea, 0xe7, 0x6b, 0x4d, 0xb9, 0xbc, 0xd6, 0x94, 0xef, 0xd7, 0x9a, 0x72, 0xf2,
0xc4, 0x71, 0x83, 0x77, 0x83, 0x4e, 0xb5, 0x4b, 0xfb, 0xb5, 0xe4, 0x0b, 0x92, 0x7c, 0xb4, 0xc2,
0x77, 0x68, 0xfa, 0x15, 0xeb, 0x64, 0x84, 0xf2, 0xf0, 0x67, 0x00, 0x00, 0x00, 0xff, 0xff, 0xbe,
0xc8, 0xae, 0x83, 0xe2, 0x06, 0x00, 0x00,
// 724 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x55, 0x4d, 0x4f, 0xdb, 0x4a,
0x14, 0xb5, 0x21, 0x1f, 0x70, 0x43, 0x42, 0x18, 0x78, 0xbc, 0x80, 0x78, 0x7e, 0x79, 0x79, 0x6a,
0x8b, 0xb2, 0x48, 0x24, 0xaa, 0x56, 0xaa, 0xba, 0x2a, 0x60, 0x35, 0x11, 0xc2, 0x4e, 0x27, 0xa1,
0x20, 0xa4, 0xca, 0xca, 0xc7, 0x34, 0x58, 0x10, 0xcf, 0xd4, 0xe3, 0x20, 0x65, 0xd1, 0x5d, 0xb7,
0x95, 0xfa, 0x33, 0xba, 0xee, 0xaf, 0xe8, 0x92, 0x65, 0x97, 0x15, 0xfc, 0x91, 0x2a, 0xe3, 0x89,
0x63, 0xe7, 0x03, 0xa9, 0x65, 0x97, 0xb9, 0xe7, 0xde, 0x73, 0xcf, 0xf1, 0x9c, 0x68, 0x40, 0xf3,
0x88, 0xd3, 0x21, 0x6e, 0xcf, 0x76, 0xbc, 0x32, 0x73, 0xed, 0xeb, 0xeb, 0xe6, 0x55, 0xd9, 0x1b,
0x30, 0xc2, 0x4b, 0xcc, 0xa5, 0x1e, 0x45, 0x68, 0x8c, 0x97, 0x24, 0xbe, 0xbd, 0x13, 0x9a, 0x69,
0xbb, 0x03, 0xe6, 0xd1, 0xf2, 0x25, 0x19, 0xc8, 0x89, 0x08, 0x2a, 0x98, 0xc2, 0x7c, 0x85, 0x2a,
0xac, 0x61, 0xd2, 0xa3, 0x1e, 0xa9, 0xdb, 0x5d, 0x87, 0xb8, 0xba, 0xeb, 0x52, 0x17, 0x21, 0x88,
0xb5, 0x69, 0x87, 0xe4, 0xd4, 0xbc, 0xba, 0x1b, 0xc7, 0xe2, 0x37, 0xca, 0x43, 0xaa, 0x43, 0x78,
0xdb, 0xb5, 0x99, 0x67, 0x53, 0x27, 0xb7, 0x90, 0x57, 0x77, 0x97, 0x71, 0xb8, 0x54, 0x28, 0x42,
0xba, 0xd6, 0x6f, 0x1d, 0x91, 0x01, 0x26, 0x1f, 0xfa, 0x84, 0x7b, 0x68, 0x0b, 0x96, 0xda, 0x17,
0x4d, 0xdb, 0xb1, 0xec, 0x8e, 0xa0, 0x5a, 0xc6, 0x49, 0x71, 0xae, 0x76, 0x0a, 0x9f, 0x54, 0xc8,
0x8c, 0x9a, 0x39, 0xa3, 0x0e, 0x27, 0xe8, 0x19, 0x24, 0x59, 0xbf, 0x65, 0x5d, 0x92, 0x81, 0x68,
0x4e, 0xed, 0xed, 0x94, 0x42, 0x5e, 0x7d, 0x5f, 0xa5, 0x5a, 0xbf, 0x75, 0x65, 0xb7, 0x87, 0x63,
0x09, 0x26, 0xc6, 0xd1, 0x4b, 0x88, 0x93, 0xa1, 0x68, 0xa1, 0x28, 0xb5, 0xf7, 0xa8, 0x34, 0xfd,
0x81, 0x4a, 0x53, 0x0e, 0xb1, 0x3f, 0x53, 0x38, 0x83, 0xd5, 0x61, 0xf5, 0x2d, 0xf5, 0xc8, 0x48,
0x74, 0x11, 0x62, 0xd7, 0xd4, 0x23, 0x52, 0xc3, 0x66, 0x98, 0xce, 0xff, 0x6e, 0xa2, 0x59, 0xf4,
0x44, 0x0c, 0x2e, 0x44, 0x0d, 0x7e, 0x04, 0x24, 0xf6, 0x75, 0x7c, 0x6e, 0xe9, 0xf1, 0x77, 0xc8,
0x1f, 0x64, 0xec, 0x02, 0xd6, 0x87, 0xd5, 0x9a, 0x4b, 0x19, 0xe5, 0xcd, 0xab, 0x91, 0xb9, 0xe7,
0xb0, 0xc4, 0x64, 0x49, 0x6a, 0xd8, 0x9e, 0xd6, 0x10, 0x0c, 0x05, 0xbd, 0xf7, 0x19, 0xfd, 0xac,
0xc2, 0xa6, 0xef, 0x74, 0xbc, 0x4c, 0xba, 0xfd, 0xd3, 0x6d, 0x0f, 0x72, 0x9e, 0x86, 0x54, 0xcd,
0x76, 0xba, 0xd2, 0x71, 0x21, 0x03, 0x2b, 0xfe, 0xd1, 0xd7, 0x54, 0xf8, 0x16, 0x87, 0xe4, 0x31,
0xe1, 0xbc, 0xd9, 0x25, 0xe8, 0x08, 0x56, 0x65, 0xe2, 0x2c, 0xd7, 0x6f, 0x97, 0x32, 0xff, 0x9b,
0xb5, 0x31, 0x92, 0xed, 0x8a, 0x82, 0xd3, 0x2c, 0x12, 0x76, 0x03, 0xb2, 0x63, 0x32, 0x7f, 0x99,
0xd4, 0x5f, 0xb8, 0x8f, 0xcd, 0xef, 0xac, 0x28, 0x38, 0xc3, 0xa2, 0x7f, 0x87, 0x37, 0xb0, 0xc6,
0xed, 0xae, 0x63, 0x0d, 0xb3, 0x10, 0xc8, 0x5b, 0x14, 0x84, 0xff, 0xcf, 0x22, 0x9c, 0xc8, 0x71,
0x45, 0xc1, 0xab, 0x7c, 0x22, 0xda, 0xe7, 0xb0, 0xc1, 0xc5, 0x4d, 0x8d, 0x48, 0xa5, 0xcc, 0x98,
0x60, 0x7d, 0x3c, 0x8f, 0x35, 0x9a, 0xe1, 0x8a, 0x82, 0x11, 0x9f, 0x4e, 0xf6, 0x3b, 0xf8, 0x4b,
0xc8, 0x1d, 0x5d, 0x62, 0x20, 0x39, 0x2e, 0xc8, 0x9f, 0xcc, 0x23, 0x9f, 0x48, 0x68, 0x45, 0xc1,
0xeb, 0x7c, 0x46, 0x70, 0xdf, 0x43, 0x4e, 0x4a, 0x0f, 0x2d, 0x90, 0xf2, 0x13, 0x62, 0x43, 0x71,
0xbe, 0xfc, 0xc9, 0x60, 0x56, 0x14, 0xbc, 0xc9, 0x67, 0x47, 0xf6, 0x10, 0x56, 0x98, 0xed, 0x74,
0x03, 0xf5, 0x49, 0xc1, 0xfd, 0xef, 0xcc, 0x1b, 0x1c, 0xa7, 0xac, 0xa2, 0xe0, 0x14, 0x1b, 0x1f,
0xd1, 0x6b, 0x48, 0x4b, 0x16, 0x29, 0x71, 0x49, 0xd0, 0xe4, 0xe7, 0xd3, 0x04, 0xc2, 0x56, 0x58,
0xe8, 0xbc, 0x1f, 0x87, 0x45, 0xde, 0xef, 0x15, 0xbf, 0xaa, 0x90, 0x10, 0x21, 0xe7, 0x08, 0x41,
0x46, 0xc7, 0xd8, 0xc4, 0x75, 0xeb, 0xc4, 0x38, 0x32, 0xcc, 0x53, 0x23, 0xab, 0x20, 0x0d, 0xb6,
0x83, 0x9a, 0x7e, 0x56, 0xd3, 0x0f, 0x1a, 0xfa, 0xa1, 0x85, 0xf5, 0x7a, 0xcd, 0x34, 0xea, 0x7a,
0x56, 0x45, 0x39, 0xd8, 0x90, 0xb8, 0x61, 0x5a, 0x07, 0xa6, 0x61, 0xe8, 0x07, 0x8d, 0xaa, 0x69,
0x64, 0x17, 0xd0, 0x3f, 0xb0, 0x25, 0x91, 0x71, 0xd9, 0x6a, 0x54, 0x8f, 0x75, 0xf3, 0xa4, 0x91,
0x5d, 0x44, 0x7f, 0xc3, 0xba, 0x84, 0xb1, 0xfe, 0xea, 0x30, 0x00, 0x62, 0x21, 0xc6, 0x53, 0x5c,
0x6d, 0xe8, 0x01, 0x12, 0xdf, 0xaf, 0x7f, 0xbf, 0xd5, 0xd4, 0x9b, 0x5b, 0x4d, 0xfd, 0x79, 0xab,
0xa9, 0x5f, 0xee, 0x34, 0xe5, 0xe6, 0x4e, 0x53, 0x7e, 0xdc, 0x69, 0xca, 0xf9, 0x8b, 0xae, 0xed,
0x5d, 0xf4, 0x5b, 0xa5, 0x36, 0xed, 0x95, 0xc3, 0x4f, 0x52, 0xf8, 0xbd, 0xa3, 0x1e, 0x2d, 0x4f,
0x3f, 0x80, 0xad, 0x84, 0x40, 0x9e, 0xfe, 0x0a, 0x00, 0x00, 0xff, 0xff, 0x5b, 0xb0, 0xa7, 0xec,
0x1d, 0x07, 0x00, 0x00,
}
func (m *RemoteSignerError) Marshal() (dAtA []byte, err error) {
@ -757,6 +781,13 @@ func (m *PubKeyRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) {
_ = i
var l int
_ = l
if len(m.ChainId) > 0 {
i -= len(m.ChainId)
copy(dAtA[i:], m.ChainId)
i = encodeVarintTypes(dAtA, i, uint64(len(m.ChainId)))
i--
dAtA[i] = 0xa
}
return len(dAtA) - i, nil
}
@ -827,6 +858,13 @@ func (m *SignVoteRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) {
_ = i
var l int
_ = l
if len(m.ChainId) > 0 {
i -= len(m.ChainId)
copy(dAtA[i:], m.ChainId)
i = encodeVarintTypes(dAtA, i, uint64(len(m.ChainId)))
i--
dAtA[i] = 0x12
}
if m.Vote != nil {
{
size, err := m.Vote.MarshalToSizedBuffer(dAtA[:i])
@ -909,6 +947,13 @@ func (m *SignProposalRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) {
_ = i
var l int
_ = l
if len(m.ChainId) > 0 {
i -= len(m.ChainId)
copy(dAtA[i:], m.ChainId)
i = encodeVarintTypes(dAtA, i, uint64(len(m.ChainId)))
i--
dAtA[i] = 0x12
}
if m.Proposal != nil {
{
size, err := m.Proposal.MarshalToSizedBuffer(dAtA[:i])
@ -1250,6 +1295,10 @@ func (m *PubKeyRequest) Size() (n int) {
}
var l int
_ = l
l = len(m.ChainId)
if l > 0 {
n += 1 + l + sovTypes(uint64(l))
}
return n
}
@ -1280,6 +1329,10 @@ func (m *SignVoteRequest) Size() (n int) {
l = m.Vote.Size()
n += 1 + l + sovTypes(uint64(l))
}
l = len(m.ChainId)
if l > 0 {
n += 1 + l + sovTypes(uint64(l))
}
return n
}
@ -1310,6 +1363,10 @@ func (m *SignProposalRequest) Size() (n int) {
l = m.Proposal.Size()
n += 1 + l + sovTypes(uint64(l))
}
l = len(m.ChainId)
if l > 0 {
n += 1 + l + sovTypes(uint64(l))
}
return n
}
@ -1596,6 +1653,38 @@ func (m *PubKeyRequest) Unmarshal(dAtA []byte) error {
return fmt.Errorf("proto: PubKeyRequest: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field ChainId", wireType)
}
var stringLen uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowTypes
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
stringLen |= uint64(b&0x7F) << shift
if b < 0x80 {
break
}
}
intStringLen := int(stringLen)
if intStringLen < 0 {
return ErrInvalidLengthTypes
}
postIndex := iNdEx + intStringLen
if postIndex < 0 {
return ErrInvalidLengthTypes
}
if postIndex > l {
return io.ErrUnexpectedEOF
}
m.ChainId = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
default:
iNdEx = preIndex
skippy, err := skipTypes(dAtA[iNdEx:])
@ -1810,6 +1899,38 @@ func (m *SignVoteRequest) Unmarshal(dAtA []byte) error {
return err
}
iNdEx = postIndex
case 2:
if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field ChainId", wireType)
}
var stringLen uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowTypes
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
stringLen |= uint64(b&0x7F) << shift
if b < 0x80 {
break
}
}
intStringLen := int(stringLen)
if intStringLen < 0 {
return ErrInvalidLengthTypes
}
postIndex := iNdEx + intStringLen
if postIndex < 0 {
return ErrInvalidLengthTypes
}
if postIndex > l {
return io.ErrUnexpectedEOF
}
m.ChainId = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
default:
iNdEx = preIndex
skippy, err := skipTypes(dAtA[iNdEx:])
@ -2024,6 +2145,38 @@ func (m *SignProposalRequest) Unmarshal(dAtA []byte) error {
return err
}
iNdEx = postIndex
case 2:
if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field ChainId", wireType)
}
var stringLen uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowTypes
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
stringLen |= uint64(b&0x7F) << shift
if b < 0x80 {
break
}
}
intStringLen := int(stringLen)
if intStringLen < 0 {
return ErrInvalidLengthTypes
}
postIndex := iNdEx + intStringLen
if postIndex < 0 {
return ErrInvalidLengthTypes
}
if postIndex > l {
return io.ErrUnexpectedEOF
}
m.ChainId = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
default:
iNdEx = preIndex
skippy, err := skipTypes(dAtA[iNdEx:])


+ 6
- 3
proto/tendermint/privval/types.proto View File

@ -1,7 +1,6 @@
syntax = "proto3";
package tendermint.privval;
import "gogoproto/gogo.proto";
import "tendermint/crypto/keys.proto";
import "tendermint/types/types.proto";
@ -22,7 +21,9 @@ message RemoteSignerError {
}
// PubKeyRequest requests the consensus public key from the remote signer.
message PubKeyRequest {}
message PubKeyRequest {
string chain_id = 1;
}
// PubKeyResponse is a response message containing the public key.
message PubKeyResponse {
@ -32,7 +33,8 @@ message PubKeyResponse {
// SignVoteRequest is a request to sign a vote
message SignVoteRequest {
tendermint.types.Vote vote = 1;
tendermint.types.Vote vote = 1;
string chain_id = 2;
}
// SignedVoteResponse is a response containing a signed vote or an error
@ -44,6 +46,7 @@ message SignedVoteResponse {
// SignProposalRequest is a request to sign a proposal
message SignProposalRequest {
tendermint.types.Proposal proposal = 1;
string chain_id = 2;
}
// SignedProposalResponse is response containing a signed proposal or an error


+ 1
- 1
tools/tm-signer-harness/internal/test_harness.go View File

@ -109,7 +109,7 @@ func NewTestHarness(logger log.Logger, cfg TestHarnessConfig) (*TestHarness, err
return nil, newTestHarnessError(ErrFailedToCreateListener, err, "")
}
signerClient, err := privval.NewSignerClient(spv)
signerClient, err := privval.NewSignerClient(spv, st.ChainID)
if err != nil {
return nil, newTestHarnessError(ErrFailedToCreateListener, err, "")
}


Loading…
Cancel
Save