diff --git a/discovery/client/client.go b/discovery/client/client.go index d82e70230ac..f602ea8ff91 100644 --- a/discovery/client/client.go +++ b/discovery/client/client.go @@ -75,7 +75,7 @@ func (req *Request) AddEndorsersQuery(chaincodes ...string) *Request { } for _, cc := range chaincodes { q.CcQuery.Interests = append(q.CcQuery.Interests, &discovery.ChaincodeInterest{ - ChaincodeNames: []string{cc}, + Chaincodes: []*discovery.ChaincodeCall{{Name: cc}}, }) } req.Queries = append(req.Queries, &discovery.Query{ diff --git a/discovery/endorsement/endorsement.go b/discovery/endorsement/endorsement.go index b60f6d1aa57..2a590b47719 100644 --- a/discovery/endorsement/endorsement.go +++ b/discovery/endorsement/endorsement.go @@ -79,10 +79,10 @@ type peerPrincipalEvaluator func(member discovery2.NetworkMember, principal *msp // PeersForEndorsement returns an EndorsementDescriptor for a given set of peers, channel, and chaincode func (ea *endorsementAnalyzer) PeersForEndorsement(chainID common.ChainID, interest *discovery.ChaincodeInterest) (*discovery.EndorsementDescriptor, error) { - chaincode := interest.ChaincodeNames[0] - ccMD := ea.Metadata(string(chainID), chaincode) + chaincode := interest.Chaincodes[0] + ccMD := ea.Metadata(string(chainID), chaincode.Name) if ccMD == nil { - return nil, errors.Errorf("No metadata was found for chaincode %s in channel %s", chaincode, string(chainID)) + return nil, errors.Errorf("No metadata was found for chaincode %s in channel %s", chaincode.Name, string(chainID)) } // Filter out peers that don't have the chaincode installed on them chanMembership := ea.PeersOfChannel(chainID).Filter(peersWithChaincode(ccMD)) @@ -95,7 +95,7 @@ func (ea *endorsementAnalyzer) PeersForEndorsement(chainID common.ChainID, inter identitiesOfMembers := computeIdentitiesOfMembers(identities, membersById) // Retrieve the policy for the chaincode - pol := ea.PolicyByChaincode(string(chainID), chaincode) + pol := ea.PolicyByChaincode(string(chainID), chaincode.Name) if pol == nil { logger.Debug("Policy for chaincode '", chaincode, "'doesn't exist") return nil, errors.New("policy not found") @@ -137,7 +137,7 @@ func (ea *endorsementAnalyzer) PeersForEndorsement(chainID common.ChainID, inter } return &discovery.EndorsementDescriptor{ - Chaincode: chaincode, + Chaincode: chaincode.Name, Layouts: layouts, EndorsersByGroups: endorsersByGroup(criteria), }, nil diff --git a/discovery/endorsement/endorsement_test.go b/discovery/endorsement/endorsement_test.go index 6df7ddcf25c..045656281bc 100644 --- a/discovery/endorsement/endorsement_test.go +++ b/discovery/endorsement/endorsement_test.go @@ -87,7 +87,7 @@ func TestPeersForEndorsement(t *testing.T) { // Scenario I: Policy isn't found pf.On("PolicyByChaincode", ccWithMissingPolicy).Return(nil).Once() analyzer := NewEndorsementAnalyzer(g, pf, &principalEvaluatorMock{}, mf) - desc, err := analyzer.PeersForEndorsement(channel, &discovery2.ChaincodeInterest{ChaincodeNames: []string{ccWithMissingPolicy}}) + desc, err := analyzer.PeersForEndorsement(channel, &discovery2.ChaincodeInterest{Chaincodes: []*discovery2.ChaincodeCall{{Name: ccWithMissingPolicy}}}) assert.Nil(t, desc) assert.Equal(t, "policy not found", err.Error()) @@ -106,7 +106,7 @@ func TestPeersForEndorsement(t *testing.T) { analyzer = NewEndorsementAnalyzer(g, pf, policy.ToPrincipalEvaluator(pkiID2MSPID), mf) pf.On("PolicyByChaincode", cc).Return(policy).Once() - desc, err = analyzer.PeersForEndorsement(channel, &discovery2.ChaincodeInterest{ChaincodeNames: []string{cc}}) + desc, err = analyzer.PeersForEndorsement(channel, &discovery2.ChaincodeInterest{Chaincodes: []*discovery2.ChaincodeCall{{Name: cc}}}) assert.Nil(t, desc) assert.Equal(t, err.Error(), "cannot satisfy any principal combination") @@ -126,7 +126,7 @@ func TestPeersForEndorsement(t *testing.T) { analyzer = NewEndorsementAnalyzer(g, pf, policy.ToPrincipalEvaluator(pkiID2MSPID), mf) pf.On("PolicyByChaincode", cc).Return(policy).Once() - desc, err = analyzer.PeersForEndorsement(channel, &discovery2.ChaincodeInterest{ChaincodeNames: []string{cc}}) + desc, err = analyzer.PeersForEndorsement(channel, &discovery2.ChaincodeInterest{Chaincodes: []*discovery2.ChaincodeCall{{Name: cc}}}) assert.NoError(t, err) assert.NotNil(t, desc) assert.Len(t, desc.Layouts, 1) @@ -150,7 +150,7 @@ func TestPeersForEndorsement(t *testing.T) { analyzer = NewEndorsementAnalyzer(g, pf, policy.ToPrincipalEvaluator(pkiID2MSPID), mf) pf.On("PolicyByChaincode", cc).Return(policy).Once() - desc, err = analyzer.PeersForEndorsement(channel, &discovery2.ChaincodeInterest{ChaincodeNames: []string{cc}}) + desc, err = analyzer.PeersForEndorsement(channel, &discovery2.ChaincodeInterest{Chaincodes: []*discovery2.ChaincodeCall{{Name: cc}}}) assert.NoError(t, err) assert.NotNil(t, desc) assert.Len(t, desc.Layouts, 2) @@ -169,7 +169,7 @@ func TestPeersForEndorsement(t *testing.T) { }).Once() g.On("PeersOfChannel").Return(chanPeers.toMembers()).Once() pf.On("PolicyByChaincode", cc).Return(policy).Once() - desc, err = analyzer.PeersForEndorsement(channel, &discovery2.ChaincodeInterest{ChaincodeNames: []string{cc}}) + desc, err = analyzer.PeersForEndorsement(channel, &discovery2.ChaincodeInterest{Chaincodes: []*discovery2.ChaincodeCall{{Name: cc}}}) assert.Nil(t, desc) assert.Equal(t, err.Error(), "cannot satisfy any principal combination") @@ -182,7 +182,7 @@ func TestPeersForEndorsement(t *testing.T) { mf.On("Metadata").Return(&chaincode.Metadata{ Name: cc, Version: "1.0", }).Once() - desc, err = analyzer.PeersForEndorsement(channel, &discovery2.ChaincodeInterest{ChaincodeNames: []string{cc}}) + desc, err = analyzer.PeersForEndorsement(channel, &discovery2.ChaincodeInterest{Chaincodes: []*discovery2.ChaincodeCall{{Name: cc}}}) assert.Nil(t, desc) assert.Equal(t, err.Error(), "cannot satisfy any principal combination") @@ -191,7 +191,7 @@ func TestPeersForEndorsement(t *testing.T) { g.On("PeersOfChannel").Return(chanPeers.toMembers()).Once() pf.On("PolicyByChaincode", cc).Return(policy).Once() mf.On("Metadata").Return(nil).Once() - desc, err = analyzer.PeersForEndorsement(channel, &discovery2.ChaincodeInterest{ChaincodeNames: []string{cc}}) + desc, err = analyzer.PeersForEndorsement(channel, &discovery2.ChaincodeInterest{Chaincodes: []*discovery2.ChaincodeCall{{Name: cc}}}) assert.Nil(t, desc) assert.Equal(t, err.Error(), "No metadata was found for chaincode chaincode in channel test") } diff --git a/discovery/service.go b/discovery/service.go index e5b0ebbe605..e3b9948ed5a 100644 --- a/discovery/service.go +++ b/discovery/service.go @@ -121,7 +121,7 @@ func (s *service) dispatch(q *discovery.Query) *discovery.QueryResult { func (s *service) chaincodeQuery(q *discovery.Query) *discovery.QueryResult { var descriptors []*discovery.EndorsementDescriptor for _, interest := range q.GetCcQuery().Interests { - if len(interest.ChaincodeNames) == 0 { + if len(interest.Chaincodes) == 0 || interest.Chaincodes[0] == nil { return wrapError(errors.Errorf("must include at least one chaincode")) } desc, err := s.PeersForEndorsement(common2.ChainID(q.Channel), interest) diff --git a/discovery/service_test.go b/discovery/service_test.go index a9367f1ebcc..f7bb84682fd 100644 --- a/discovery/service_test.go +++ b/discovery/service_test.go @@ -108,10 +108,10 @@ func TestService(t *testing.T) { CcQuery: &discovery.ChaincodeQuery{ Interests: []*discovery.ChaincodeInterest{ { - ChaincodeNames: []string{"unknownCC"}, + Chaincodes: []*discovery.ChaincodeCall{{Name: "unknownCC"}}, }, { - ChaincodeNames: []string{"cc1"}, + Chaincodes: []*discovery.ChaincodeCall{{Name: "cc1"}}, }, }, }, @@ -127,13 +127,13 @@ func TestService(t *testing.T) { CcQuery: &discovery.ChaincodeQuery{ Interests: []*discovery.ChaincodeInterest{ { - ChaincodeNames: []string{"cc1"}, + Chaincodes: []*discovery.ChaincodeCall{{Name: "cc1"}}, }, { - ChaincodeNames: []string{"cc2"}, + Chaincodes: []*discovery.ChaincodeCall{{Name: "cc2"}}, }, { - ChaincodeNames: []string{"cc3"}, + Chaincodes: []*discovery.ChaincodeCall{{Name: "cc3"}}, }, }, }, @@ -446,7 +446,7 @@ func (ms *mockSupport) Peers() discovery2.Members { } func (ms *mockSupport) PeersForEndorsement(channel common2.ChainID, interest *discovery.ChaincodeInterest) (*discovery.EndorsementDescriptor, error) { - cc := interest.ChaincodeNames[0] + cc := interest.Chaincodes[0].Name args := ms.Called(cc) if args.Get(0) == nil { return nil, args.Error(1) diff --git a/protos/discovery/protocol.pb.go b/protos/discovery/protocol.pb.go index 3d9a9b9697f..153639be4ed 100644 --- a/protos/discovery/protocol.pb.go +++ b/protos/discovery/protocol.pb.go @@ -20,6 +20,7 @@ It has these top-level messages: PeerMembershipResult ChaincodeQuery ChaincodeInterest + ChaincodeCall ChaincodeQueryResult LocalPeerQuery EndorsementDescriptor @@ -624,11 +625,9 @@ func (m *ChaincodeQuery) GetInterests() []*ChaincodeInterest { // ChaincodeInterest defines an interest about an endorsement // for a specific single chaincode invocation. -// Multiple chaincode names indicate chaincode to chaincode invocations. -// Collections indicate the chaincode invocation includes collections. +// Multiple chaincodes indicate chaincode to chaincode invocations. type ChaincodeInterest struct { - ChaincodeNames []string `protobuf:"bytes,1,rep,name=chaincode_names,json=chaincodeNames" json:"chaincode_names,omitempty"` - CollectionNames []string `protobuf:"bytes,2,rep,name=collection_names,json=collectionNames" json:"collection_names,omitempty"` + Chaincodes []*ChaincodeCall `protobuf:"bytes,1,rep,name=chaincodes" json:"chaincodes,omitempty"` } func (m *ChaincodeInterest) Reset() { *m = ChaincodeInterest{} } @@ -636,14 +635,33 @@ func (m *ChaincodeInterest) String() string { return proto.CompactTex func (*ChaincodeInterest) ProtoMessage() {} func (*ChaincodeInterest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{11} } -func (m *ChaincodeInterest) GetChaincodeNames() []string { +func (m *ChaincodeInterest) GetChaincodes() []*ChaincodeCall { if m != nil { - return m.ChaincodeNames + return m.Chaincodes } return nil } -func (m *ChaincodeInterest) GetCollectionNames() []string { +// ChaincodeCall defines a call to a chaincode. +// It may have collections that are related to the chaincode +type ChaincodeCall struct { + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + CollectionNames []string `protobuf:"bytes,2,rep,name=collection_names,json=collectionNames" json:"collection_names,omitempty"` +} + +func (m *ChaincodeCall) Reset() { *m = ChaincodeCall{} } +func (m *ChaincodeCall) String() string { return proto.CompactTextString(m) } +func (*ChaincodeCall) ProtoMessage() {} +func (*ChaincodeCall) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{12} } + +func (m *ChaincodeCall) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *ChaincodeCall) GetCollectionNames() []string { if m != nil { return m.CollectionNames } @@ -659,7 +677,7 @@ type ChaincodeQueryResult struct { func (m *ChaincodeQueryResult) Reset() { *m = ChaincodeQueryResult{} } func (m *ChaincodeQueryResult) String() string { return proto.CompactTextString(m) } func (*ChaincodeQueryResult) ProtoMessage() {} -func (*ChaincodeQueryResult) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{12} } +func (*ChaincodeQueryResult) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{13} } func (m *ChaincodeQueryResult) GetContent() []*EndorsementDescriptor { if m != nil { @@ -675,7 +693,7 @@ type LocalPeerQuery struct { func (m *LocalPeerQuery) Reset() { *m = LocalPeerQuery{} } func (m *LocalPeerQuery) String() string { return proto.CompactTextString(m) } func (*LocalPeerQuery) ProtoMessage() {} -func (*LocalPeerQuery) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{13} } +func (*LocalPeerQuery) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{14} } // EndorsementDescriptor contains information about which peers can be used // to request endorsement from, such that the endorsement policy would be fulfilled. @@ -702,7 +720,7 @@ type EndorsementDescriptor struct { func (m *EndorsementDescriptor) Reset() { *m = EndorsementDescriptor{} } func (m *EndorsementDescriptor) String() string { return proto.CompactTextString(m) } func (*EndorsementDescriptor) ProtoMessage() {} -func (*EndorsementDescriptor) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{14} } +func (*EndorsementDescriptor) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{15} } func (m *EndorsementDescriptor) GetChaincode() string { if m != nil { @@ -736,7 +754,7 @@ type Layout struct { func (m *Layout) Reset() { *m = Layout{} } func (m *Layout) String() string { return proto.CompactTextString(m) } func (*Layout) ProtoMessage() {} -func (*Layout) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{15} } +func (*Layout) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{16} } func (m *Layout) GetQuantitiesByGroup() map[string]uint32 { if m != nil { @@ -753,7 +771,7 @@ type Peers struct { func (m *Peers) Reset() { *m = Peers{} } func (m *Peers) String() string { return proto.CompactTextString(m) } func (*Peers) ProtoMessage() {} -func (*Peers) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{16} } +func (*Peers) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{17} } func (m *Peers) GetPeers() []*Peer { if m != nil { @@ -776,7 +794,7 @@ type Peer struct { func (m *Peer) Reset() { *m = Peer{} } func (m *Peer) String() string { return proto.CompactTextString(m) } func (*Peer) ProtoMessage() {} -func (*Peer) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{17} } +func (*Peer) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{18} } func (m *Peer) GetStateInfo() *gossip.Envelope { if m != nil { @@ -807,7 +825,7 @@ type Error struct { func (m *Error) Reset() { *m = Error{} } func (m *Error) String() string { return proto.CompactTextString(m) } func (*Error) ProtoMessage() {} -func (*Error) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{18} } +func (*Error) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{19} } func (m *Error) GetContent() string { if m != nil { @@ -824,7 +842,7 @@ type Endpoints struct { func (m *Endpoints) Reset() { *m = Endpoints{} } func (m *Endpoints) String() string { return proto.CompactTextString(m) } func (*Endpoints) ProtoMessage() {} -func (*Endpoints) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{19} } +func (*Endpoints) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{20} } func (m *Endpoints) GetEndpoint() []*Endpoint { if m != nil { @@ -842,7 +860,7 @@ type Endpoint struct { func (m *Endpoint) Reset() { *m = Endpoint{} } func (m *Endpoint) String() string { return proto.CompactTextString(m) } func (*Endpoint) ProtoMessage() {} -func (*Endpoint) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{20} } +func (*Endpoint) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{21} } func (m *Endpoint) GetHost() string { if m != nil { @@ -871,6 +889,7 @@ func init() { proto.RegisterType((*PeerMembershipResult)(nil), "discovery.PeerMembershipResult") proto.RegisterType((*ChaincodeQuery)(nil), "discovery.ChaincodeQuery") proto.RegisterType((*ChaincodeInterest)(nil), "discovery.ChaincodeInterest") + proto.RegisterType((*ChaincodeCall)(nil), "discovery.ChaincodeCall") proto.RegisterType((*ChaincodeQueryResult)(nil), "discovery.ChaincodeQueryResult") proto.RegisterType((*LocalPeerQuery)(nil), "discovery.LocalPeerQuery") proto.RegisterType((*EndorsementDescriptor)(nil), "discovery.EndorsementDescriptor") @@ -959,75 +978,76 @@ var _Discovery_serviceDesc = grpc.ServiceDesc{ func init() { proto.RegisterFile("discovery/protocol.proto", fileDescriptor0) } var fileDescriptor0 = []byte{ - // 1110 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x56, 0xdb, 0x4e, 0xe3, 0x46, - 0x18, 0x26, 0x81, 0x90, 0xe4, 0x0f, 0x04, 0x18, 0xb2, 0x34, 0x8d, 0x56, 0x5d, 0xd6, 0xd2, 0xb6, - 0x74, 0x2b, 0x39, 0x2b, 0xaa, 0x9e, 0x00, 0xb5, 0x5a, 0x0e, 0xdd, 0x20, 0x2d, 0x05, 0xbc, 0x55, - 0x55, 0xf5, 0x26, 0x32, 0xce, 0x8f, 0x6d, 0xd5, 0xf6, 0x98, 0x99, 0x31, 0x92, 0xaf, 0x7b, 0xdf, - 0x47, 0xe8, 0x4d, 0x6f, 0xaa, 0x3e, 0x42, 0x9f, 0xae, 0xf2, 0x1c, 0x1c, 0x27, 0x04, 0x6d, 0xa5, - 0xde, 0x79, 0xbe, 0xf9, 0xbe, 0xff, 0xec, 0x99, 0x81, 0xfe, 0x24, 0xe4, 0x1e, 0xbd, 0x47, 0x96, - 0x0f, 0x53, 0x46, 0x05, 0xf5, 0x68, 0x64, 0xcb, 0x0f, 0xd2, 0x2e, 0x77, 0x06, 0x3d, 0x9f, 0x72, - 0x1e, 0xa6, 0xc3, 0x18, 0x39, 0x77, 0x7d, 0x54, 0x84, 0x41, 0x2f, 0xe6, 0xe9, 0x30, 0xe6, 0xe9, - 0xd8, 0xa3, 0xc9, 0x6d, 0xe8, 0x57, 0xd1, 0x70, 0x82, 0x89, 0x08, 0x45, 0x88, 0x5c, 0xa1, 0xd6, - 0x1b, 0x58, 0x7f, 0x17, 0xfa, 0x09, 0x4e, 0x1c, 0xbc, 0xcb, 0x90, 0x0b, 0xd2, 0x87, 0x66, 0xea, - 0xe6, 0x11, 0x75, 0x27, 0xfd, 0xda, 0x6e, 0x6d, 0x6f, 0xcd, 0x31, 0x4b, 0xf2, 0x14, 0xda, 0x3c, - 0xf4, 0x13, 0x57, 0x64, 0x0c, 0xfb, 0x75, 0xb9, 0x37, 0x05, 0x2c, 0x06, 0x4d, 0x63, 0xe2, 0x10, - 0xba, 0x6e, 0x26, 0x82, 0xc2, 0x93, 0xe7, 0x8a, 0x90, 0x26, 0xd2, 0x52, 0x67, 0x7f, 0xdb, 0x2e, - 0x23, 0xb7, 0x5f, 0x67, 0x22, 0x38, 0x4f, 0x6e, 0xa9, 0x33, 0x47, 0x25, 0x2f, 0xa1, 0x79, 0x97, - 0x21, 0x0b, 0x91, 0xf7, 0xeb, 0xbb, 0xcb, 0x7b, 0x9d, 0xfd, 0xcd, 0x8a, 0xea, 0x3a, 0x43, 0x96, - 0x3b, 0x86, 0x60, 0x1d, 0x41, 0xcb, 0x41, 0x9e, 0xd2, 0x84, 0x23, 0x79, 0x05, 0x4d, 0x86, 0x3c, - 0x8b, 0x04, 0xef, 0xd7, 0xa4, 0x6e, 0xe7, 0x81, 0x4e, 0x6e, 0x3b, 0x86, 0x66, 0x4d, 0xa0, 0x65, - 0xa2, 0x20, 0x9f, 0xc0, 0x86, 0x17, 0x85, 0x98, 0x88, 0xb1, 0xae, 0x50, 0xae, 0xb3, 0xef, 0x2a, - 0xf8, 0x5c, 0xa3, 0x64, 0x08, 0x3d, 0x4d, 0x14, 0x11, 0x1f, 0x7b, 0xc8, 0xc4, 0x38, 0x70, 0x79, - 0xa0, 0xeb, 0xb1, 0xa5, 0xf6, 0x7e, 0x8c, 0xf8, 0x09, 0x32, 0x31, 0x72, 0x79, 0x60, 0xfd, 0x51, - 0x87, 0x86, 0x74, 0x5f, 0x54, 0xd6, 0x0b, 0xdc, 0x24, 0xc1, 0x48, 0xda, 0x6e, 0x3b, 0x66, 0x49, - 0x0e, 0x61, 0x4d, 0xb5, 0x6a, 0x5c, 0x64, 0x96, 0x4b, 0x63, 0xb3, 0x09, 0x9c, 0xc8, 0x6d, 0x69, - 0x67, 0xb4, 0xe4, 0x74, 0xbc, 0xe9, 0x92, 0x7c, 0x07, 0x90, 0x22, 0x32, 0x2d, 0x5d, 0x96, 0xd2, - 0x8f, 0x2a, 0xd2, 0x2b, 0x44, 0x76, 0x81, 0xf1, 0x0d, 0x32, 0x1e, 0x84, 0xa9, 0x31, 0xd1, 0x2e, - 0x34, 0xca, 0xc0, 0x97, 0xd0, 0xf2, 0x3c, 0x2d, 0x5f, 0x91, 0xf2, 0x0f, 0xab, 0x9e, 0x03, 0x37, - 0x4c, 0x3c, 0x3a, 0x41, 0xa3, 0x6c, 0x7a, 0x9e, 0xd2, 0x1d, 0x41, 0x27, 0xa2, 0x9e, 0x1b, 0x8d, - 0x0b, 0x53, 0xbc, 0xdf, 0x78, 0x20, 0x7d, 0x5b, 0xec, 0x5e, 0x19, 0x3f, 0xa3, 0x25, 0x07, 0x22, - 0x83, 0xf0, 0xe3, 0x26, 0x34, 0xa4, 0x4b, 0xeb, 0xb7, 0x3a, 0x74, 0x2a, 0xfd, 0x21, 0x7b, 0xd0, - 0x40, 0xc6, 0x28, 0xd3, 0x43, 0x53, 0x6d, 0xff, 0x59, 0x81, 0x8f, 0x96, 0x1c, 0x45, 0x20, 0xdf, - 0xc2, 0xba, 0x2e, 0x9b, 0x6a, 0xa9, 0xae, 0xdb, 0x07, 0x0f, 0xea, 0xa6, 0x2c, 0x8f, 0x96, 0x1c, - 0x5d, 0x66, 0xed, 0xe9, 0x04, 0xd6, 0x4c, 0xe2, 0x85, 0x05, 0x5d, 0xbb, 0x67, 0x8f, 0x26, 0x5f, - 0x9a, 0x01, 0x5d, 0x02, 0x07, 0x39, 0x39, 0x84, 0x66, 0xac, 0xaa, 0xab, 0x8b, 0xf7, 0xec, 0xd1, - 0xda, 0x97, 0x7a, 0xa3, 0x38, 0x6e, 0xc1, 0xaa, 0x0a, 0xdd, 0x5a, 0x87, 0x4e, 0xa5, 0xc7, 0xd6, - 0xdf, 0x75, 0x58, 0xab, 0xc6, 0x4e, 0xbe, 0x80, 0x95, 0x98, 0xa7, 0x66, 0xb6, 0x9f, 0x3f, 0x92, - 0xa2, 0x7d, 0xc1, 0x53, 0x7e, 0x96, 0x08, 0x96, 0x3b, 0x92, 0x4e, 0x5e, 0x43, 0x8b, 0xb2, 0x09, - 0xb2, 0x22, 0x3c, 0xf5, 0x3b, 0xbd, 0x78, 0x4c, 0x7a, 0xa9, 0x79, 0x4a, 0x5e, 0xca, 0x06, 0x17, - 0xd0, 0x2e, 0xad, 0x92, 0x4d, 0x58, 0xfe, 0x15, 0x73, 0x3d, 0xbf, 0xc5, 0x27, 0x79, 0x09, 0x8d, - 0x7b, 0x37, 0xca, 0x50, 0x17, 0xbf, 0x67, 0xc7, 0x3c, 0xb5, 0xbf, 0x77, 0x6f, 0x58, 0xe8, 0x5d, - 0xbc, 0xbb, 0xd2, 0x1e, 0x14, 0xe5, 0xa0, 0xfe, 0x75, 0x6d, 0x70, 0x0d, 0xeb, 0x33, 0x9e, 0xfe, - 0x8b, 0xc9, 0xca, 0x04, 0x24, 0x93, 0x94, 0x86, 0x89, 0xe0, 0x15, 0x93, 0xd6, 0x13, 0xd8, 0x5e, - 0x30, 0xe4, 0xd6, 0x3f, 0x35, 0xe8, 0x2d, 0x6a, 0x00, 0xb9, 0x86, 0x35, 0x39, 0xb2, 0xe3, 0x9b, - 0x7c, 0x4c, 0x99, 0xaf, 0x6b, 0x3a, 0x7c, 0x4f, 0xdf, 0x6c, 0x35, 0xb7, 0xf9, 0x25, 0xf3, 0x55, - 0x89, 0xe4, 0x6f, 0xa7, 0x80, 0xc1, 0x25, 0x6c, 0xcc, 0x6d, 0x2f, 0xc8, 0xeb, 0xe3, 0xd9, 0xbc, - 0x36, 0xe7, 0x1c, 0xce, 0xe4, 0xf4, 0x16, 0xba, 0xb3, 0xc3, 0x47, 0x0e, 0xa0, 0x1d, 0x26, 0x02, - 0x19, 0xf2, 0xf2, 0x88, 0x7b, 0xba, 0x68, 0x54, 0xcf, 0x35, 0xc9, 0x99, 0xd2, 0x2d, 0x1f, 0xb6, - 0x1e, 0xec, 0xcb, 0x33, 0xcf, 0x80, 0xe3, 0xc4, 0x8d, 0x51, 0x99, 0x6d, 0x3b, 0xdd, 0x12, 0xfe, - 0xa1, 0x40, 0xc9, 0xa7, 0xb0, 0xe9, 0xd1, 0x28, 0x42, 0xaf, 0x38, 0xa0, 0x35, 0xb3, 0x2e, 0x99, - 0x1b, 0x53, 0x5c, 0x52, 0x2d, 0x07, 0x7a, 0x8b, 0xfe, 0x19, 0x72, 0x00, 0x4d, 0x8f, 0x26, 0x02, - 0x13, 0xa1, 0x43, 0xdf, 0x9d, 0x6d, 0x2a, 0x65, 0x1c, 0x63, 0x4c, 0xc4, 0x29, 0x72, 0x8f, 0x85, - 0xa9, 0xa0, 0xcc, 0x31, 0x02, 0x6b, 0x13, 0xba, 0xb3, 0x27, 0x89, 0xf5, 0x67, 0x1d, 0x9e, 0x2c, - 0x14, 0x15, 0x77, 0x54, 0x19, 0xbc, 0x2e, 0xfd, 0x14, 0x20, 0x3e, 0x6c, 0xa3, 0x92, 0xa9, 0xe6, - 0xfb, 0x8c, 0x66, 0xa9, 0xf9, 0x31, 0xbe, 0x7a, 0x5f, 0x44, 0x06, 0x2d, 0xba, 0xfc, 0x46, 0x2a, - 0xd5, 0x1c, 0x6c, 0xe1, 0x3c, 0x4e, 0x3e, 0x83, 0x66, 0xe4, 0xe6, 0x34, 0x13, 0xc5, 0xa1, 0x52, - 0x18, 0xdf, 0xaa, 0x1e, 0x8b, 0x72, 0xc7, 0x31, 0x8c, 0xc1, 0x4f, 0xb0, 0xb3, 0xd8, 0xf2, 0xff, - 0x1c, 0xa1, 0xbf, 0x6a, 0xb0, 0xaa, 0x7c, 0x91, 0x9f, 0x61, 0xfb, 0x2e, 0x73, 0xf5, 0xcd, 0x5f, - 0x66, 0xae, 0x5b, 0xb1, 0xf7, 0x20, 0x36, 0xfb, 0xba, 0x24, 0xeb, 0x80, 0x74, 0xa6, 0x77, 0xf3, - 0xf8, 0xe0, 0x14, 0x76, 0x16, 0x93, 0x17, 0x04, 0xdf, 0xab, 0x06, 0xbf, 0x5e, 0x0d, 0xd5, 0x86, - 0x86, 0x0c, 0x9f, 0xbc, 0x80, 0x86, 0xba, 0x4d, 0x54, 0x68, 0x1b, 0x73, 0xf9, 0x39, 0x6a, 0xd7, - 0xfa, 0xbd, 0x06, 0x2b, 0xc5, 0x9a, 0x0c, 0x01, 0xb8, 0x70, 0x05, 0x8e, 0xc3, 0xe4, 0x96, 0x96, - 0x37, 0x86, 0x7a, 0x15, 0xd9, 0x67, 0xc9, 0x3d, 0x46, 0x34, 0x45, 0xa7, 0x2d, 0x39, 0xf2, 0xa2, - 0xff, 0x06, 0x36, 0xe2, 0xf2, 0xc7, 0x56, 0xaa, 0xfa, 0x23, 0xaa, 0xee, 0x94, 0x28, 0xa5, 0x03, - 0x68, 0x95, 0x8f, 0x83, 0x65, 0x79, 0xdd, 0x97, 0x6b, 0xeb, 0x39, 0x34, 0xe4, 0xe5, 0x24, 0x2f, - 0xf9, 0x72, 0xd0, 0xd5, 0x25, 0xaf, 0xc7, 0xf8, 0x08, 0xda, 0xe5, 0xe9, 0x45, 0x86, 0xd0, 0x42, - 0xbd, 0xd0, 0xa9, 0x6e, 0x2f, 0x38, 0xe5, 0x9c, 0x92, 0x64, 0xed, 0x43, 0xcb, 0xa0, 0x84, 0xc0, - 0x4a, 0x40, 0xb9, 0x71, 0x20, 0xbf, 0x0b, 0x2c, 0xa5, 0x4c, 0xe8, 0xd2, 0xca, 0xef, 0xfd, 0x11, - 0xb4, 0x4f, 0x8d, 0x4d, 0x72, 0x08, 0x2d, 0xb3, 0x20, 0xfd, 0x8a, 0xaf, 0x99, 0xd7, 0xdf, 0xa0, - 0x1a, 0x85, 0x79, 0x5a, 0x59, 0x4b, 0xc7, 0xaf, 0x7e, 0xb1, 0xfd, 0x50, 0x04, 0xd9, 0x8d, 0xed, - 0xd1, 0x78, 0x18, 0xe4, 0x29, 0xb2, 0x08, 0x27, 0x3e, 0xb2, 0xe1, 0xad, 0x3c, 0xe9, 0xd5, 0x13, - 0x95, 0x0f, 0x4b, 0xf1, 0xcd, 0xaa, 0x44, 0x3e, 0xff, 0x37, 0x00, 0x00, 0xff, 0xff, 0x2d, 0xb1, - 0x87, 0x7b, 0xc7, 0x0a, 0x00, 0x00, + // 1131 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x56, 0x5b, 0x6f, 0x1b, 0x45, + 0x14, 0x8e, 0x9d, 0xb8, 0xb6, 0x8f, 0xe3, 0x5c, 0x26, 0x6e, 0x30, 0x56, 0x45, 0xd3, 0x95, 0x0a, + 0xa1, 0x48, 0xeb, 0x2a, 0x08, 0x28, 0x49, 0x04, 0x6a, 0x2e, 0xd4, 0x91, 0x9a, 0x26, 0x99, 0x22, + 0x84, 0x78, 0xb1, 0x36, 0xeb, 0x13, 0x7b, 0xc5, 0x7a, 0x67, 0x33, 0x33, 0x1b, 0x69, 0x9f, 0x79, + 0xe7, 0x27, 0xf0, 0xc2, 0x0b, 0xe2, 0x27, 0xf0, 0xeb, 0xd0, 0xce, 0x65, 0xbd, 0x76, 0x36, 0x2a, + 0x12, 0x6f, 0x33, 0xe7, 0x9c, 0xef, 0x3b, 0x97, 0x39, 0x33, 0x73, 0xa0, 0x3b, 0x0a, 0x84, 0xcf, + 0xee, 0x90, 0xa7, 0xfd, 0x98, 0x33, 0xc9, 0x7c, 0x16, 0xba, 0x6a, 0x41, 0x9a, 0xb9, 0xa6, 0xd7, + 0x19, 0x33, 0x21, 0x82, 0xb8, 0x3f, 0x45, 0x21, 0xbc, 0x31, 0x6a, 0x83, 0x5e, 0x67, 0x2a, 0xe2, + 0xfe, 0x54, 0xc4, 0x43, 0x9f, 0x45, 0x37, 0xc1, 0xb8, 0x28, 0x0d, 0x46, 0x18, 0xc9, 0x40, 0x06, + 0x28, 0xb4, 0xd4, 0x79, 0x03, 0xed, 0xf7, 0xc1, 0x38, 0xc2, 0x11, 0xc5, 0xdb, 0x04, 0x85, 0x24, + 0x5d, 0xa8, 0xc7, 0x5e, 0x1a, 0x32, 0x6f, 0xd4, 0xad, 0xec, 0x54, 0x76, 0x57, 0xa9, 0xdd, 0x92, + 0x27, 0xd0, 0x14, 0xc1, 0x38, 0xf2, 0x64, 0xc2, 0xb1, 0x5b, 0x55, 0xba, 0x99, 0xc0, 0xe1, 0x50, + 0xb7, 0x14, 0x07, 0xb0, 0xe6, 0x25, 0x72, 0x92, 0x79, 0xf2, 0x3d, 0x19, 0xb0, 0x48, 0x31, 0xb5, + 0xf6, 0xb6, 0xdc, 0x3c, 0x72, 0xf7, 0x75, 0x22, 0x27, 0x67, 0xd1, 0x0d, 0xa3, 0x0b, 0xa6, 0xe4, + 0x05, 0xd4, 0x6f, 0x13, 0xe4, 0x01, 0x8a, 0x6e, 0x75, 0x67, 0x79, 0xb7, 0xb5, 0xb7, 0x51, 0x40, + 0x5d, 0x25, 0xc8, 0x53, 0x6a, 0x0d, 0x9c, 0x43, 0x68, 0x50, 0x14, 0x31, 0x8b, 0x04, 0x92, 0x97, + 0x50, 0xe7, 0x28, 0x92, 0x50, 0x8a, 0x6e, 0x45, 0xe1, 0xb6, 0xef, 0xe1, 0x94, 0x9a, 0x5a, 0x33, + 0x67, 0x04, 0x0d, 0x1b, 0x05, 0xf9, 0x0c, 0xd6, 0xfd, 0x30, 0xc0, 0x48, 0x0e, 0x4d, 0x85, 0x52, + 0x93, 0xfd, 0x9a, 0x16, 0x9f, 0x19, 0x29, 0xe9, 0x43, 0xc7, 0x18, 0xca, 0x50, 0x0c, 0x7d, 0xe4, + 0x72, 0x38, 0xf1, 0xc4, 0xc4, 0xd4, 0x63, 0x53, 0xeb, 0x7e, 0x0c, 0xc5, 0x31, 0x72, 0x39, 0xf0, + 0xc4, 0xc4, 0xf9, 0xa3, 0x0a, 0x35, 0xe5, 0x3e, 0xab, 0xac, 0x3f, 0xf1, 0xa2, 0x08, 0x43, 0xc5, + 0xdd, 0xa4, 0x76, 0x4b, 0x0e, 0x60, 0x55, 0x1f, 0xd5, 0x30, 0xcb, 0x2c, 0x55, 0x64, 0xf3, 0x09, + 0x1c, 0x2b, 0xb5, 0xe2, 0x19, 0x2c, 0xd1, 0x96, 0x3f, 0xdb, 0x92, 0xef, 0x01, 0x62, 0x44, 0x6e, + 0xa0, 0xcb, 0x0a, 0xfa, 0x49, 0x01, 0x7a, 0x89, 0xc8, 0xcf, 0x71, 0x7a, 0x8d, 0x5c, 0x4c, 0x82, + 0xd8, 0x52, 0x34, 0x33, 0x8c, 0x26, 0xf8, 0x1a, 0x1a, 0xbe, 0x6f, 0xe0, 0x2b, 0x0a, 0xfe, 0x71, + 0xd1, 0xf3, 0xc4, 0x0b, 0x22, 0x9f, 0x8d, 0xd0, 0x22, 0xeb, 0xbe, 0xaf, 0x71, 0x87, 0xd0, 0x0a, + 0x99, 0xef, 0x85, 0xc3, 0x8c, 0x4a, 0x74, 0x6b, 0xf7, 0xa0, 0x6f, 0x33, 0xed, 0xa5, 0xf5, 0x33, + 0x58, 0xa2, 0x10, 0x5a, 0x89, 0x38, 0xaa, 0x43, 0x4d, 0xb9, 0x74, 0x7e, 0xab, 0x42, 0xab, 0x70, + 0x3e, 0x64, 0x17, 0x6a, 0xc8, 0x39, 0xe3, 0xa6, 0x69, 0x8a, 0xc7, 0x7f, 0x9a, 0xc9, 0x07, 0x4b, + 0x54, 0x1b, 0x90, 0xef, 0xa0, 0x6d, 0xca, 0xa6, 0x8f, 0xd4, 0xd4, 0xed, 0xa3, 0x7b, 0x75, 0xd3, + 0xcc, 0x83, 0x25, 0x6a, 0xca, 0x6c, 0x3c, 0x1d, 0xc3, 0xaa, 0x4d, 0x3c, 0x63, 0x30, 0xb5, 0x7b, + 0xfa, 0x60, 0xf2, 0x39, 0x0d, 0x98, 0x12, 0x50, 0x14, 0xe4, 0x00, 0xea, 0x53, 0x5d, 0x5d, 0x53, + 0xbc, 0xa7, 0x0f, 0xd6, 0x3e, 0xc7, 0x5b, 0xc4, 0x51, 0x03, 0x1e, 0xe9, 0xd0, 0x9d, 0x36, 0xb4, + 0x0a, 0x67, 0xec, 0xfc, 0x5d, 0x85, 0xd5, 0x62, 0xec, 0xe4, 0x2b, 0x58, 0x99, 0x8a, 0xd8, 0xf6, + 0xf6, 0xb3, 0x07, 0x52, 0x74, 0xcf, 0x45, 0x2c, 0x4e, 0x23, 0xc9, 0x53, 0xaa, 0xcc, 0xc9, 0x6b, + 0x68, 0x30, 0x3e, 0x42, 0x9e, 0x85, 0xa7, 0xaf, 0xd3, 0xf3, 0x87, 0xa0, 0x17, 0xc6, 0x4e, 0xc3, + 0x73, 0x58, 0xef, 0x1c, 0x9a, 0x39, 0x2b, 0xd9, 0x80, 0xe5, 0x5f, 0x31, 0x35, 0xfd, 0x9b, 0x2d, + 0xc9, 0x0b, 0xa8, 0xdd, 0x79, 0x61, 0x82, 0xa6, 0xf8, 0x1d, 0x77, 0x2a, 0x62, 0xf7, 0x07, 0xef, + 0x9a, 0x07, 0xfe, 0xf9, 0xfb, 0x4b, 0xe3, 0x41, 0x9b, 0xec, 0x57, 0x5f, 0x55, 0x7a, 0x57, 0xd0, + 0x9e, 0xf3, 0xf4, 0x5f, 0x28, 0x0b, 0x1d, 0x10, 0x8d, 0x62, 0x16, 0x44, 0x52, 0x14, 0x28, 0x9d, + 0xc7, 0xb0, 0x55, 0xd2, 0xe4, 0xce, 0x3f, 0x15, 0xe8, 0x94, 0x1d, 0x00, 0xb9, 0x82, 0x55, 0xd5, + 0xb2, 0xc3, 0xeb, 0x74, 0xc8, 0xf8, 0xd8, 0xd4, 0xb4, 0xff, 0x81, 0x73, 0x73, 0x75, 0xdf, 0xa6, + 0x17, 0x7c, 0xac, 0x4b, 0xa4, 0xae, 0x9d, 0x16, 0xf4, 0x2e, 0x60, 0x7d, 0x41, 0x5d, 0x92, 0xd7, + 0xa7, 0xf3, 0x79, 0x6d, 0x2c, 0x38, 0x9c, 0xcb, 0xe9, 0x2d, 0xac, 0xcd, 0x37, 0x1f, 0xd9, 0x87, + 0x66, 0x10, 0x49, 0xe4, 0x28, 0xf2, 0x27, 0xee, 0x49, 0x59, 0xab, 0x9e, 0x19, 0x23, 0x3a, 0x33, + 0x77, 0xce, 0x61, 0xf3, 0x9e, 0x9e, 0xbc, 0x02, 0xf0, 0xad, 0xd0, 0x32, 0x76, 0xcb, 0x18, 0x8f, + 0xbd, 0x30, 0xa4, 0x05, 0x5b, 0xe7, 0x1d, 0xb4, 0xe7, 0x94, 0x84, 0xc0, 0x4a, 0xe4, 0x4d, 0xd1, + 0x24, 0xab, 0xd6, 0xe4, 0x73, 0xd8, 0xf0, 0x59, 0x18, 0xa2, 0x9f, 0x3d, 0xeb, 0xc3, 0x4c, 0xa4, + 0x5b, 0xb0, 0x49, 0xd7, 0x67, 0xf2, 0x77, 0x99, 0xd8, 0xa1, 0xd0, 0x29, 0xbb, 0x69, 0x64, 0x1f, + 0xea, 0x3e, 0x8b, 0x24, 0x46, 0xd2, 0x84, 0xb7, 0x33, 0xdf, 0x0a, 0x8c, 0x0b, 0x9c, 0x62, 0x24, + 0x4f, 0x50, 0xf8, 0x3c, 0x88, 0x25, 0xe3, 0xd4, 0x02, 0x9c, 0x0d, 0x58, 0x9b, 0x7f, 0x7f, 0x9c, + 0x3f, 0xab, 0xf0, 0xb8, 0x14, 0x94, 0xfd, 0x6c, 0x79, 0x76, 0x26, 0x87, 0x99, 0x80, 0x8c, 0x61, + 0x0b, 0x35, 0x4c, 0xb7, 0xcc, 0x98, 0xb3, 0x24, 0xb6, 0xd7, 0xe9, 0x9b, 0x0f, 0x45, 0x64, 0xa5, + 0x59, 0x6f, 0xbc, 0x51, 0x48, 0xdd, 0x3d, 0x9b, 0xb8, 0x28, 0x27, 0x5f, 0x40, 0x3d, 0xf4, 0x52, + 0x96, 0xc8, 0xec, 0x29, 0xca, 0xc8, 0x37, 0x8b, 0x8f, 0xa9, 0xd2, 0x50, 0x6b, 0xd1, 0xfb, 0x09, + 0xb6, 0xcb, 0x99, 0xff, 0x67, 0xe3, 0xfd, 0x55, 0x81, 0x47, 0xda, 0x17, 0xf9, 0x19, 0xb6, 0x6e, + 0x13, 0xcf, 0xcc, 0x0b, 0x79, 0xe6, 0xe6, 0x28, 0x76, 0xef, 0xc5, 0xe6, 0x5e, 0xe5, 0xc6, 0x26, + 0x20, 0x93, 0xe9, 0xed, 0xa2, 0xbc, 0x77, 0x02, 0xdb, 0xe5, 0xc6, 0x25, 0xc1, 0x77, 0x8a, 0xc1, + 0xb7, 0x8b, 0xa1, 0xba, 0x50, 0x53, 0xe1, 0x93, 0xe7, 0x50, 0xd3, 0x7f, 0x90, 0x0e, 0x6d, 0x7d, + 0x21, 0x3f, 0xaa, 0xb5, 0xce, 0xef, 0x15, 0x58, 0xc9, 0xf6, 0xa4, 0x0f, 0x20, 0xa4, 0x27, 0x71, + 0x18, 0x44, 0x37, 0x2c, 0xff, 0x67, 0xf4, 0x2c, 0xe5, 0x9e, 0x46, 0x77, 0x18, 0xb2, 0x18, 0x69, + 0x53, 0xd9, 0xa8, 0xf1, 0xe0, 0x5b, 0x58, 0x9f, 0xe6, 0xcf, 0x81, 0x46, 0x55, 0x1f, 0x40, 0xad, + 0xcd, 0x0c, 0x15, 0xb4, 0x07, 0x8d, 0x7c, 0xa4, 0x58, 0x56, 0x43, 0x42, 0xbe, 0x77, 0x9e, 0x41, + 0x4d, 0x7d, 0x69, 0x6a, 0x34, 0xc8, 0x1b, 0x5d, 0x8f, 0x06, 0xa6, 0x8d, 0x0f, 0xa1, 0x99, 0xbf, + 0x79, 0xa4, 0x0f, 0x0d, 0x34, 0x1b, 0x93, 0xea, 0x56, 0xc9, 0xdb, 0x48, 0x73, 0x23, 0x67, 0x0f, + 0x1a, 0x56, 0x9a, 0xdd, 0xd1, 0x09, 0x13, 0xd6, 0x81, 0x5a, 0x67, 0xb2, 0x98, 0x71, 0x69, 0x4a, + 0xab, 0xd6, 0x7b, 0x03, 0x68, 0x9e, 0x58, 0x4e, 0x72, 0x00, 0x0d, 0xbb, 0x21, 0xc5, 0xb7, 0x61, + 0x6e, 0x66, 0xec, 0x15, 0xa3, 0xb0, 0x03, 0x99, 0xb3, 0x74, 0xf4, 0xf2, 0x17, 0x77, 0x1c, 0xc8, + 0x49, 0x72, 0xed, 0xfa, 0x6c, 0xda, 0x9f, 0xa4, 0x31, 0xf2, 0x10, 0x47, 0x63, 0xe4, 0xfd, 0x1b, + 0xf5, 0x3f, 0xe8, 0xc1, 0x56, 0xf4, 0x73, 0xf0, 0xf5, 0x23, 0x25, 0xf9, 0xf2, 0xdf, 0x00, 0x00, + 0x00, 0xff, 0xff, 0x59, 0x7e, 0x3b, 0x2c, 0xfd, 0x0a, 0x00, 0x00, } diff --git a/protos/discovery/protocol.proto b/protos/discovery/protocol.proto index 8380421ae8b..1cf80cc690c 100644 --- a/protos/discovery/protocol.proto +++ b/protos/discovery/protocol.proto @@ -142,10 +142,15 @@ message ChaincodeQuery { // ChaincodeInterest defines an interest about an endorsement // for a specific single chaincode invocation. -// Multiple chaincode names indicate chaincode to chaincode invocations. -// Collections indicate the chaincode invocation includes collections. +// Multiple chaincodes indicate chaincode to chaincode invocations. message ChaincodeInterest { - repeated string chaincode_names = 1; + repeated ChaincodeCall chaincodes = 1; +} + +// ChaincodeCall defines a call to a chaincode. +// It may have collections that are related to the chaincode +message ChaincodeCall { + string name = 1; repeated string collection_names = 2; }