diff --git a/go.mod b/go.mod index 1ac9e107f8..4bd540bbc7 100644 --- a/go.mod +++ b/go.mod @@ -15,17 +15,17 @@ require ( github.com/go-stack/stack v1.8.0 // indirect github.com/gogo/protobuf v1.1.1 github.com/golang/mock v1.2.0 - github.com/golang/protobuf v1.3.2 + github.com/golang/protobuf v1.3.3 github.com/google/certificate-transparency-go v0.0.0-20180222191210-5ab67e519c93 // indirect github.com/hashicorp/hcl v0.0.0-20180404174102-ef8a98b0bbce // indirect + github.com/hyperledger/fabric-config v0.0.6 github.com/hyperledger/fabric-lib-go v1.0.0 - github.com/hyperledger/fabric-protos-go v0.0.0-20191121202242-f5500d5e3e85 + github.com/hyperledger/fabric-protos-go v0.0.0-20200424173316-dd554ba3746e github.com/kr/pretty v0.1.0 // indirect github.com/magiconair/properties v1.7.6 // indirect github.com/matttproud/golang_protobuf_extensions v1.0.1 // indirect github.com/miekg/pkcs11 v0.0.0-20190329070431-55f3fac3af27 github.com/mitchellh/mapstructure v0.0.0-20180220230111-00c29f56e238 - github.com/onsi/gomega v1.4.2 // indirect github.com/pelletier/go-toml v1.1.0 // indirect github.com/pkg/errors v0.8.1 github.com/prometheus/client_golang v0.8.0 @@ -43,7 +43,7 @@ require ( google.golang.org/genproto v0.0.0-20190327125643-d831d65fe17d // indirect google.golang.org/grpc v1.23.0 gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 // indirect - gopkg.in/yaml.v2 v2.2.1 + gopkg.in/yaml.v2 v2.2.4 ) go 1.13 diff --git a/go.sum b/go.sum index c5db694855..7268f12039 100644 --- a/go.sum +++ b/go.sum @@ -32,6 +32,8 @@ github.com/golang/protobuf v1.2.0 h1:P3YflyNX/ehuJFLhxviNdFxQPkGK5cDcApsge1SqnvM github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.2 h1:6nsPYzhq5kReh6QImI3k5qWzO4PEbvbIW2cwSfR/6xs= github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.3 h1:gyjaxf+svBWX08ZjK86iN9geUJF0H6gp2IRKX6Nf6/I= +github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= github.com/google/certificate-transparency-go v0.0.0-20180222191210-5ab67e519c93 h1:qdfmdGwtm13OVx+AxguOWUTbgmXGn2TbdUHipo3chMg= github.com/google/certificate-transparency-go v0.0.0-20180222191210-5ab67e519c93/go.mod h1:QeJfpSbVSfYc7RgB3gJFj9cbuQMMchQxrWXz8Ruopmg= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= @@ -39,10 +41,12 @@ github.com/hashicorp/hcl v0.0.0-20180404174102-ef8a98b0bbce h1:xdsDDbiBDQTKASoGE github.com/hashicorp/hcl v0.0.0-20180404174102-ef8a98b0bbce/go.mod h1:oZtUIOe8dh44I2q6ScRibXws4Ajl+d+nod3AaR9vL5w= github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= +github.com/hyperledger/fabric-config v0.0.6 h1:7Xblwtpb82j+QZCIFfqlHPBS4MMmHzNtuA1W7aokdXg= +github.com/hyperledger/fabric-config v0.0.6/go.mod h1:aeDZ0moG/qKvwLjddcqYr8+58/oNaJy3HE0tI01546c= github.com/hyperledger/fabric-lib-go v1.0.0 h1:UL1w7c9LvHZUSkIvHTDGklxFv2kTeva1QI2emOVc324= github.com/hyperledger/fabric-lib-go v1.0.0/go.mod h1:H362nMlunurmHwkYqR5uHL2UDWbQdbfz74n8kbCFsqc= -github.com/hyperledger/fabric-protos-go v0.0.0-20191121202242-f5500d5e3e85 h1:bNgEcCg5NVRWs/T+VUEfhgh5Olx/N4VB+0+ybW+oSuA= -github.com/hyperledger/fabric-protos-go v0.0.0-20191121202242-f5500d5e3e85/go.mod h1:xVYTjK4DtZRBxZ2D9aE4y6AbLaPwue2o/criQyQbVD0= +github.com/hyperledger/fabric-protos-go v0.0.0-20200424173316-dd554ba3746e h1:9PS5iezHk/j7XriSlNuSQILyCOfcZ9wZ3/PiucmSE8E= +github.com/hyperledger/fabric-protos-go v0.0.0-20200424173316-dd554ba3746e/go.mod h1:xVYTjK4DtZRBxZ2D9aE4y6AbLaPwue2o/criQyQbVD0= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515 h1:T+h1c/A9Gawja4Y9mFVWj2vyii2bbUNDw3kt9VxK2EY= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= @@ -60,8 +64,8 @@ github.com/mitchellh/mapstructure v0.0.0-20180220230111-00c29f56e238 h1:+MZW2uvH github.com/mitchellh/mapstructure v0.0.0-20180220230111-00c29f56e238/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/onsi/ginkgo v1.6.0 h1:Ix8l273rp3QzYgXSR+c8d1fTG7UPgYkOSELPhiY/YGw= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/gomega v1.4.2 h1:3mYCb7aPxS/RU7TI1y4rkEn1oKmPRjNJLNEXgw7MH2I= -github.com/onsi/gomega v1.4.2/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= +github.com/onsi/gomega v1.9.0 h1:R1uwffexN6Pr340GtYRIdZmAiN4J+iw6WG4wog1DUXg= +github.com/onsi/gomega v1.9.0/go.mod h1:Ho0h+IUsWyvy1OpqCwxlQ/21gkhVunqlU8fDGcoTdcA= github.com/pelletier/go-toml v1.1.0 h1:cmiOvKzEunMsAxyhXSzpL5Q1CRKpVv0KQsnAIcSEVYM= github.com/pelletier/go-toml v1.1.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I= @@ -122,6 +126,8 @@ golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGm golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7 h1:9zdDQZ7Thm29KFXgAX/+yaf3eVbP7djjWp/dXAppNCc= +golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8 h1:Nw54tB0rB7hY/N0NQvRW8DG4Yk3Q6T9cu9RcFQDu1tc= @@ -139,7 +145,7 @@ gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= -gopkg.in/yaml.v2 v2.2.1 h1:mUhvW9EsL+naU5Q3cakzfE91YhliOondGd6ZrsDBHQE= -gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.4 h1:/eiJrUcujPVeJ3xlSWaiNi3uSVmDGBK1pDHUHAnao1I= +gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= diff --git a/internal/github.com/hyperledger/fabric/common/tools/protolator/api.go b/internal/github.com/hyperledger/fabric/common/tools/protolator/api.go deleted file mode 100644 index 3da823a95e..0000000000 --- a/internal/github.com/hyperledger/fabric/common/tools/protolator/api.go +++ /dev/null @@ -1,151 +0,0 @@ -/* -Copyright IBM Corp. 2017 All Rights Reserved. - -SPDX-License-Identifier: Apache-2.0 -*/ -/* -Notice: This file has been modified for Hyperledger Fabric SDK Go usage. -Please review third_party pinning scripts and patches for more details. -*/ - -package protolator - -import ( - "github.com/golang/protobuf/proto" -) - -/////////////////////////////////////////////////////////////////////////////////////////////////// -// -// This set of interfaces and methods is designed to allow protos to have Go methods attached -// to them, so that they may be automatically marshaled to human readable JSON (where the -// opaque byte fields are represented as their expanded proto contents) and back once again -// to standard proto messages. -// -// There are currently three different types of interfaces available for protos to implement: -// -// 1. StaticallyOpaque*FieldProto: These interfaces should be implemented by protos which have -// opaque byte fields whose marshaled type is known at compile time. This is mostly true -// for the signature oriented fields like the Envelope.Payload, or Header.ChannelHeader -// -// 2. VariablyOpaque*FieldProto: These interfaces are identical to the StaticallyOpaque*FieldProto -// definitions, with the exception that they are guaranteed to be evaluated after the -// StaticallyOpaque*FieldProto definitions. In particular, this allows for the type selection of -// a VariablyOpaque*FieldProto to depend on data populated by the StaticallyOpaque*FieldProtos. -// For example, the Payload.data field depends upon the Payload.Header.ChannelHeader.type field, -// which is along a statically marshaled path. -// -// 3. Dynamic*FieldProto: These interfaces are for messages which contain other messages whose -// attributes cannot be determined at compile time. For example, a ConfigValue message may evaluate -// the map field values["MSP"] successfully in an organization context, but not at all in a channel -// context. Because go is not a dynamic language, this dynamic behavior must be simulated by -// wrapping the underlying proto message in another type which can be configured at runtime with -// different contextual behavior. (See tests for examples) -// -/////////////////////////////////////////////////////////////////////////////////////////////////// - -// StaticallyOpaqueFieldProto should be implemented by protos which have bytes fields which -// are the marshaled value of a fixed type -type StaticallyOpaqueFieldProto interface { - // StaticallyOpaqueFields returns the field names which contain opaque data - StaticallyOpaqueFields() []string - - // StaticallyOpaqueFieldProto returns a newly allocated proto message of the correct - // type for the field name. - StaticallyOpaqueFieldProto(name string) (proto.Message, error) -} - -// StaticallyOpaqueMapFieldProto should be implemented by protos which have maps to bytes fields -// which are the marshaled value of a fixed type -type StaticallyOpaqueMapFieldProto interface { - // StaticallyOpaqueMapFields returns the field names which contain opaque data - StaticallyOpaqueMapFields() []string - - // StaticallyOpaqueMapFieldProto returns a newly allocated proto message of the correct - // type for the field name. - StaticallyOpaqueMapFieldProto(name string, key string) (proto.Message, error) -} - -// StaticallyOpaqueSliceFieldProto should be implemented by protos which have maps to bytes fields -// which are the marshaled value of a fixed type -type StaticallyOpaqueSliceFieldProto interface { - // StaticallyOpaqueSliceFields returns the field names which contain opaque data - StaticallyOpaqueSliceFields() []string - - // StaticallyOpaqueSliceFieldProto returns a newly allocated proto message of the correct - // type for the field name. - StaticallyOpaqueSliceFieldProto(name string, index int) (proto.Message, error) -} - -// VariablyOpaqueFieldProto should be implemented by protos which have bytes fields which -// are the marshaled value depends upon the other contents of the proto -type VariablyOpaqueFieldProto interface { - // VariablyOpaqueFields returns the field names which contain opaque data - VariablyOpaqueFields() []string - - // VariablyOpaqueFieldProto returns a newly allocated proto message of the correct - // type for the field name. - VariablyOpaqueFieldProto(name string) (proto.Message, error) -} - -// VariablyOpaqueMapFieldProto should be implemented by protos which have maps to bytes fields -// which are the marshaled value of a a message type determined by the other contents of the proto -type VariablyOpaqueMapFieldProto interface { - // VariablyOpaqueMapFields returns the field names which contain opaque data - VariablyOpaqueMapFields() []string - - // VariablyOpaqueMapFieldProto returns a newly allocated proto message of the correct - // type for the field name. - VariablyOpaqueMapFieldProto(name string, key string) (proto.Message, error) -} - -// VariablyOpaqueSliceFieldProto should be implemented by protos which have maps to bytes fields -// which are the marshaled value of a a message type determined by the other contents of the proto -type VariablyOpaqueSliceFieldProto interface { - // VariablyOpaqueSliceFields returns the field names which contain opaque data - VariablyOpaqueSliceFields() []string - - // VariablyOpaqueFieldProto returns a newly allocated proto message of the correct - // type for the field name. - VariablyOpaqueSliceFieldProto(name string, index int) (proto.Message, error) -} - -// DynamicFieldProto should be implemented by protos which have nested fields whose attributes -// (such as their opaque types) cannot be determined until runtime -type DynamicFieldProto interface { - // DynamicFields returns the field names which are dynamic - DynamicFields() []string - - // DynamicFieldProto returns a newly allocated dynamic message, decorating an underlying - // proto message with the runtime determined function - DynamicFieldProto(name string, underlying proto.Message) (proto.Message, error) -} - -// DynamicMapFieldProto should be implemented by protos which have maps to messages whose attributes -// (such as their opaque types) cannot be determined until runtime -type DynamicMapFieldProto interface { - // DynamicMapFields returns the field names which are dynamic - DynamicMapFields() []string - - // DynamicMapFieldProto returns a newly allocated dynamic message, decorating an underlying - // proto message with the runtime determined function - DynamicMapFieldProto(name string, key string, underlying proto.Message) (proto.Message, error) -} - -// DynamicSliceFieldProto should be implemented by protos which have slices of messages whose attributes -// (such as their opaque types) cannot be determined until runtime -type DynamicSliceFieldProto interface { - // DynamicSliceFields returns the field names which are dynamic - DynamicSliceFields() []string - - // DynamicSliceFieldProto returns a newly allocated dynamic message, decorating an underlying - // proto message with the runtime determined function - DynamicSliceFieldProto(name string, index int, underlying proto.Message) (proto.Message, error) -} - -// DecoratedProto should be implemented by the dynamic wrappers applied by the Dynamic*FieldProto interfaces -// This is necessary for the proto system to unmarshal, because it discovers proto message type by reflection -// (Rather than by interface definition as it probably should ( https://github.com/golang/protobuf/issues/291 ) -type DecoratedProto interface { - // Underlying returns the underlying proto message which is being dynamically decorated - Underlying() proto.Message -} diff --git a/internal/github.com/hyperledger/fabric/common/tools/protolator/dynamic.go b/internal/github.com/hyperledger/fabric/common/tools/protolator/dynamic.go deleted file mode 100644 index 33c9f9560f..0000000000 --- a/internal/github.com/hyperledger/fabric/common/tools/protolator/dynamic.go +++ /dev/null @@ -1,153 +0,0 @@ -/* -Copyright IBM Corp. 2017 All Rights Reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ -/* -Notice: This file has been modified for Hyperledger Fabric SDK Go usage. -Please review third_party pinning scripts and patches for more details. -*/ - -package protolator - -import ( - "reflect" - - "github.com/golang/protobuf/proto" -) - -func dynamicFrom(dynamicMsg func(underlying proto.Message) (proto.Message, error), value interface{}, destType reflect.Type) (reflect.Value, error) { - tree := value.(map[string]interface{}) // Safe, already checked - uMsg := reflect.New(destType.Elem()) - nMsg, err := dynamicMsg(uMsg.Interface().(proto.Message)) // Safe, already checked - if err != nil { - return reflect.Value{}, err - } - if err := recursivelyPopulateMessageFromTree(tree, nMsg); err != nil { - return reflect.Value{}, err - } - return uMsg, nil -} - -func dynamicTo(dynamicMsg func(underlying proto.Message) (proto.Message, error), value reflect.Value) (interface{}, error) { - nMsg, err := dynamicMsg(value.Interface().(proto.Message)) // Safe, already checked - if err != nil { - return nil, err - } - return recursivelyCreateTreeFromMessage(nMsg) -} - -type dynamicFieldFactory struct{} - -func (dff dynamicFieldFactory) Handles(msg proto.Message, fieldName string, fieldType reflect.Type, fieldValue reflect.Value) bool { - dynamicProto, ok := msg.(DynamicFieldProto) - if !ok { - return false - } - - return stringInSlice(fieldName, dynamicProto.DynamicFields()) -} - -func (dff dynamicFieldFactory) NewProtoField(msg proto.Message, fieldName string, fieldType reflect.Type, fieldValue reflect.Value) (protoField, error) { - dynamicProto, _ := msg.(DynamicFieldProto) // Type checked in Handles - - return &plainField{ - baseField: baseField{ - msg: msg, - name: fieldName, - fType: mapStringInterfaceType, - vType: fieldType, - value: fieldValue, - }, - populateFrom: func(v interface{}, dT reflect.Type) (reflect.Value, error) { - return dynamicFrom(func(underlying proto.Message) (proto.Message, error) { - return dynamicProto.DynamicFieldProto(fieldName, underlying) - }, v, dT) - }, - populateTo: func(v reflect.Value) (interface{}, error) { - return dynamicTo(func(underlying proto.Message) (proto.Message, error) { - return dynamicProto.DynamicFieldProto(fieldName, underlying) - }, v) - }, - }, nil -} - -type dynamicMapFieldFactory struct{} - -func (dmff dynamicMapFieldFactory) Handles(msg proto.Message, fieldName string, fieldType reflect.Type, fieldValue reflect.Value) bool { - dynamicProto, ok := msg.(DynamicMapFieldProto) - if !ok { - return false - } - - return stringInSlice(fieldName, dynamicProto.DynamicMapFields()) -} - -func (dmff dynamicMapFieldFactory) NewProtoField(msg proto.Message, fieldName string, fieldType reflect.Type, fieldValue reflect.Value) (protoField, error) { - dynamicProto := msg.(DynamicMapFieldProto) // Type checked by Handles - - return &mapField{ - baseField: baseField{ - msg: msg, - name: fieldName, - fType: mapStringInterfaceType, - vType: fieldType, - value: fieldValue, - }, - populateFrom: func(k string, v interface{}, dT reflect.Type) (reflect.Value, error) { - return dynamicFrom(func(underlying proto.Message) (proto.Message, error) { - return dynamicProto.DynamicMapFieldProto(fieldName, k, underlying) - }, v, dT) - }, - populateTo: func(k string, v reflect.Value) (interface{}, error) { - return dynamicTo(func(underlying proto.Message) (proto.Message, error) { - return dynamicProto.DynamicMapFieldProto(fieldName, k, underlying) - }, v) - }, - }, nil -} - -type dynamicSliceFieldFactory struct{} - -func (dmff dynamicSliceFieldFactory) Handles(msg proto.Message, fieldName string, fieldType reflect.Type, fieldValue reflect.Value) bool { - dynamicProto, ok := msg.(DynamicSliceFieldProto) - if !ok { - return false - } - - return stringInSlice(fieldName, dynamicProto.DynamicSliceFields()) -} - -func (dmff dynamicSliceFieldFactory) NewProtoField(msg proto.Message, fieldName string, fieldType reflect.Type, fieldValue reflect.Value) (protoField, error) { - dynamicProto := msg.(DynamicSliceFieldProto) // Type checked by Handles - - return &sliceField{ - baseField: baseField{ - msg: msg, - name: fieldName, - fType: mapStringInterfaceType, - vType: fieldType, - value: fieldValue, - }, - populateFrom: func(i int, v interface{}, dT reflect.Type) (reflect.Value, error) { - return dynamicFrom(func(underlying proto.Message) (proto.Message, error) { - return dynamicProto.DynamicSliceFieldProto(fieldName, i, underlying) - }, v, dT) - }, - populateTo: func(i int, v reflect.Value) (interface{}, error) { - return dynamicTo(func(underlying proto.Message) (proto.Message, error) { - return dynamicProto.DynamicSliceFieldProto(fieldName, i, underlying) - }, v) - }, - }, nil -} diff --git a/internal/github.com/hyperledger/fabric/common/tools/protolator/json.go b/internal/github.com/hyperledger/fabric/common/tools/protolator/json.go deleted file mode 100644 index a7174f962e..0000000000 --- a/internal/github.com/hyperledger/fabric/common/tools/protolator/json.go +++ /dev/null @@ -1,479 +0,0 @@ -/* -Copyright IBM Corp. 2017 All Rights Reserved. - -SPDX-License-Identifier: Apache-2.0 -*/ -/* -Notice: This file has been modified for Hyperledger Fabric SDK Go usage. -Please review third_party pinning scripts and patches for more details. -*/ - -package protolator - -import ( - "bytes" - "encoding/json" - "fmt" - "io" - "io/ioutil" - "reflect" - - "github.com/golang/protobuf/jsonpb" - "github.com/golang/protobuf/proto" - "github.com/hyperledger/fabric-sdk-go/internal/github.com/hyperledger/fabric/common/tools/protolator/protoext" -) - -// MostlyDeterministicMarshal is _NOT_ the function you are looking for. -// It causes protobuf serialization consistent within a single build. It -// does not guarantee that the serialization is deterministic across proto -// versions or proto implementations. It is useful for situations where -// the same process wants to compare binary messages for equality without -// needing to unmarshal first, but should not be used generally. -func MostlyDeterministicMarshal(msg proto.Message) ([]byte, error) { - buffer := proto.NewBuffer(make([]byte, 0)) - buffer.SetDeterministic(true) - if err := buffer.Marshal(msg); err != nil { - return nil, err - } - return buffer.Bytes(), nil -} - -type protoFieldFactory interface { - // Handles should return whether or not this particular protoFieldFactory instance - // is responsible for the given proto's field - Handles(msg proto.Message, fieldName string, fieldType reflect.Type, fieldValue reflect.Value) bool - - // NewProtoField should create a backing protoField implementor - // Note that the fieldValue may represent nil, so the fieldType is also - // included (as reflecting the type of a nil value causes a panic) - NewProtoField(msg proto.Message, fieldName string, fieldType reflect.Type, fieldValue reflect.Value) (protoField, error) -} - -type protoField interface { - // Name returns the proto name of the field - Name() string - - // PopulateFrom mutates the underlying object, by taking the intermediate JSON representation - // and converting it into the proto representation, then assigning it to the backing value - // via reflection - PopulateFrom(source interface{}) error - - // PopulateTo does not mutate the underlying object, but instead converts it - // into the intermediate JSON representation (ie a struct -> map[string]interface{} - // or a slice of structs to []map[string]interface{} - PopulateTo() (interface{}, error) -} - -var ( - protoMsgType = reflect.TypeOf((*proto.Message)(nil)).Elem() - mapStringInterfaceType = reflect.TypeOf(map[string]interface{}{}) - bytesType = reflect.TypeOf([]byte{}) -) - -type baseField struct { - msg proto.Message - name string - fType reflect.Type - vType reflect.Type - value reflect.Value -} - -func (bf *baseField) Name() string { - return bf.name -} - -type plainField struct { - baseField - populateFrom func(source interface{}, destType reflect.Type) (reflect.Value, error) - populateTo func(source reflect.Value) (interface{}, error) -} - -func (pf *plainField) PopulateFrom(source interface{}) error { - if source == nil { - return nil - } - - if !reflect.TypeOf(source).AssignableTo(pf.fType) { - return fmt.Errorf("expected field %s for message %T to be assignable from %v but was not. Is %T", pf.name, pf.msg, pf.fType, source) - } - value, err := pf.populateFrom(source, pf.vType) - if err != nil { - return fmt.Errorf("error in PopulateFrom for field %s for message %T: %s", pf.name, pf.msg, err) - } - pf.value.Set(value) - return nil -} - -func (pf *plainField) PopulateTo() (interface{}, error) { - if !pf.value.Type().AssignableTo(pf.vType) { - return nil, fmt.Errorf("expected field %s for message %T to be assignable to %v but was not. Got %T.", pf.name, pf.msg, pf.fType, pf.value) - } - - kind := pf.value.Type().Kind() - // Do not try to deeply encode nil fields, as without correct type info etc. they - // may return errors - if (kind == reflect.Ptr || kind == reflect.Slice || kind == reflect.Map) && pf.value.IsNil() { - return nil, nil - } - - value, err := pf.populateTo(pf.value) - if err != nil { - return nil, fmt.Errorf("error in PopulateTo for field %s for message %T: %s", pf.name, pf.msg, err) - } - return value, nil -} - -type mapField struct { - baseField - populateFrom func(key string, value interface{}, destType reflect.Type) (reflect.Value, error) - populateTo func(key string, value reflect.Value) (interface{}, error) -} - -func (mf *mapField) PopulateFrom(source interface{}) error { - tree, ok := source.(map[string]interface{}) - if !ok { - return fmt.Errorf("expected map field %s for message %T to be assignable from map[string]interface{} but was not. Got %T", mf.name, mf.msg, source) - } - - result := reflect.MakeMap(mf.vType) - - for k, v := range tree { - if !reflect.TypeOf(v).AssignableTo(mf.fType) { - return fmt.Errorf("expected map field %s value for %s for message %T to be assignable from %v but was not. Is %T", mf.name, k, mf.msg, mf.fType, v) - } - newValue, err := mf.populateFrom(k, v, mf.vType.Elem()) - if err != nil { - return fmt.Errorf("error in PopulateFrom for map field %s with key %s for message %T: %s", mf.name, k, mf.msg, err) - } - result.SetMapIndex(reflect.ValueOf(k), newValue) - } - - mf.value.Set(result) - return nil -} - -func (mf *mapField) PopulateTo() (interface{}, error) { - result := make(map[string]interface{}) - keys := mf.value.MapKeys() - for _, key := range keys { - k, ok := key.Interface().(string) - if !ok { - return nil, fmt.Errorf("expected map field %s for message %T to have string keys, but did not.", mf.name, mf.msg) - } - - subValue := mf.value.MapIndex(key) - kind := subValue.Type().Kind() - if (kind == reflect.Ptr || kind == reflect.Slice || kind == reflect.Map) && subValue.IsNil() { - continue - } - - if !subValue.Type().AssignableTo(mf.vType.Elem()) { - return nil, fmt.Errorf("expected map field %s with key %s for message %T to be assignable to %v but was not. Got %v.", mf.name, k, mf.msg, mf.vType.Elem(), subValue.Type()) - } - - value, err := mf.populateTo(k, subValue) - if err != nil { - return nil, fmt.Errorf("error in PopulateTo for map field %s and key %s for message %T: %s", mf.name, k, mf.msg, err) - } - result[k] = value - } - - return result, nil -} - -type sliceField struct { - baseField - populateTo func(i int, source reflect.Value) (interface{}, error) - populateFrom func(i int, source interface{}, destType reflect.Type) (reflect.Value, error) -} - -func (sf *sliceField) PopulateFrom(source interface{}) error { - slice, ok := source.([]interface{}) - if !ok { - return fmt.Errorf("expected slice field %s for message %T to be assignable from []interface{} but was not. Got %T", sf.name, sf.msg, source) - } - - result := reflect.MakeSlice(sf.vType, len(slice), len(slice)) - - for i, v := range slice { - if !reflect.TypeOf(v).AssignableTo(sf.fType) { - return fmt.Errorf("expected slice field %s value at index %d for message %T to be assignable from %v but was not. Is %T", sf.name, i, sf.msg, sf.fType, v) - } - subValue, err := sf.populateFrom(i, v, sf.vType.Elem()) - if err != nil { - return fmt.Errorf("error in PopulateFrom for slice field %s at index %d for message %T: %s", sf.name, i, sf.msg, err) - } - result.Index(i).Set(subValue) - } - - sf.value.Set(result) - return nil -} - -func (sf *sliceField) PopulateTo() (interface{}, error) { - result := make([]interface{}, sf.value.Len()) - for i := range result { - subValue := sf.value.Index(i) - kind := subValue.Type().Kind() - if (kind == reflect.Ptr || kind == reflect.Slice || kind == reflect.Map) && subValue.IsNil() { - continue - } - - if !subValue.Type().AssignableTo(sf.vType.Elem()) { - return nil, fmt.Errorf("expected slice field %s at index %d for message %T to be assignable to %v but was not. Got %v.", sf.name, i, sf.msg, sf.vType.Elem(), subValue.Type()) - } - - value, err := sf.populateTo(i, subValue) - if err != nil { - return nil, fmt.Errorf("error in PopulateTo for slice field %s at index %d for message %T: %s", sf.name, i, sf.msg, err) - } - result[i] = value - } - - return result, nil -} - -func stringInSlice(target string, slice []string) bool { - for _, name := range slice { - if name == target { - return true - } - } - return false -} - -// protoToJSON is a simple shortcut wrapper around the proto JSON marshaler -func protoToJSON(msg proto.Message) ([]byte, error) { - if reflect.ValueOf(msg).IsNil() { - panic("We're nil here") - } - var b bytes.Buffer - m := jsonpb.Marshaler{ - EnumsAsInts: false, - EmitDefaults: true, - Indent: " ", - OrigName: true, - } - err := m.Marshal(&b, msg) - if err != nil { - return nil, err - } - return b.Bytes(), nil -} - -func mapToProto(tree map[string]interface{}, msg proto.Message) error { - jsonOut, err := json.Marshal(tree) - if err != nil { - return err - } - - return jsonpb.UnmarshalString(string(jsonOut), msg) -} - -// jsonToMap allocates a map[string]interface{}, unmarshals a JSON document into it -// and returns it, or error -func jsonToMap(marshaled []byte) (map[string]interface{}, error) { - tree := make(map[string]interface{}) - d := json.NewDecoder(bytes.NewReader(marshaled)) - d.UseNumber() - err := d.Decode(&tree) - if err != nil { - return nil, fmt.Errorf("error unmarshaling intermediate JSON: %s", err) - } - return tree, nil -} - -// The factory implementations, listed in order of most greedy to least. -// Factories listed lower, may depend on factories listed higher being -// evaluated first. -var fieldFactories = []protoFieldFactory{ - dynamicSliceFieldFactory{}, - dynamicMapFieldFactory{}, - dynamicFieldFactory{}, - variablyOpaqueSliceFieldFactory{}, - variablyOpaqueMapFieldFactory{}, - variablyOpaqueFieldFactory{}, - staticallyOpaqueSliceFieldFactory{}, - staticallyOpaqueMapFieldFactory{}, - staticallyOpaqueFieldFactory{}, - nestedSliceFieldFactory{}, - nestedMapFieldFactory{}, - nestedFieldFactory{}, -} - -func protoFields(msg proto.Message, uMsg proto.Message) ([]protoField, error) { - var result []protoField - - pmVal := reflect.ValueOf(uMsg) - if pmVal.Kind() != reflect.Ptr { - return nil, fmt.Errorf("expected proto.Message %T to be pointer kind", uMsg) - } - - if pmVal.IsNil() { - return nil, nil - } - - mVal := pmVal.Elem() - if mVal.Kind() != reflect.Struct { - return nil, fmt.Errorf("expected proto.Message %T ptr value to be struct, was %v", uMsg, mVal.Kind()) - } - - iResult := make([][]protoField, len(fieldFactories)) - - protoProps := proto.GetProperties(mVal.Type()) - // TODO, this will skip oneof fields, this should be handled - // correctly at some point - for _, prop := range protoProps.Prop { - fieldName := prop.OrigName - fieldValue := mVal.FieldByName(prop.Name) - fieldTypeStruct, ok := mVal.Type().FieldByName(prop.Name) - if !ok { - return nil, fmt.Errorf("programming error: proto does not have field advertised by proto package") - } - fieldType := fieldTypeStruct.Type - - for i, factory := range fieldFactories { - if !factory.Handles(msg, fieldName, fieldType, fieldValue) { - continue - } - - field, err := factory.NewProtoField(msg, fieldName, fieldType, fieldValue) - if err != nil { - return nil, err - } - iResult[i] = append(iResult[i], field) - break - } - } - - // Loop over the collected fields in reverse order to collect them in - // correct dependency order as specified in fieldFactories - for i := len(iResult) - 1; i >= 0; i-- { - result = append(result, iResult[i]...) - } - - return result, nil -} - -func recursivelyCreateTreeFromMessage(msg proto.Message) (tree map[string]interface{}, err error) { - defer func() { - // Because this function is recursive, it's difficult to determine which level - // of the proto the error originated from, this wrapper leaves breadcrumbs for debugging - if err != nil { - err = fmt.Errorf("%T: %s", msg, err) - } - }() - - msg = protoext.Decorate(msg) - uMsg := msg - if decorated, ok := msg.(DecoratedProto); ok { - uMsg = decorated.Underlying() - } - - fields, err := protoFields(msg, uMsg) - if err != nil { - return nil, err - } - - jsonBytes, err := protoToJSON(uMsg) - if err != nil { - return nil, err - } - - tree, err = jsonToMap(jsonBytes) - if err != nil { - return nil, err - } - - for _, field := range fields { - if _, ok := tree[field.Name()]; !ok { - continue - } - delete(tree, field.Name()) - tree[field.Name()], err = field.PopulateTo() - if err != nil { - return nil, err - } - } - - return tree, nil -} - -// DeepMarshalJSON marshals msg to w as JSON, but instead of marshaling bytes fields which contain nested -// marshaled messages as base64 (like the standard proto encoding), these nested messages are remarshaled -// as the JSON representation of those messages. This is done so that the JSON representation is as non-binary -// and human readable as possible. -func DeepMarshalJSON(w io.Writer, msg proto.Message) error { - root, err := recursivelyCreateTreeFromMessage(msg) - if err != nil { - return err - } - - encoder := json.NewEncoder(w) - encoder.SetIndent("", "\t") - return encoder.Encode(root) -} - -func recursivelyPopulateMessageFromTree(tree map[string]interface{}, msg proto.Message) (err error) { - defer func() { - // Because this function is recursive, it's difficult to determine which level - // of the proto the error orginated from, this wrapper leaves breadcrumbs for debugging - if err != nil { - err = fmt.Errorf("%T: %s", msg, err) - } - }() - - msg = protoext.Decorate(msg) - uMsg := msg - if decorated, ok := msg.(DecoratedProto); ok { - uMsg = decorated.Underlying() - } - - fields, err := protoFields(msg, uMsg) - if err != nil { - return err - } - - specialFieldsMap := make(map[string]interface{}) - - for _, field := range fields { - specialField, ok := tree[field.Name()] - if !ok { - continue - } - specialFieldsMap[field.Name()] = specialField - delete(tree, field.Name()) - } - - if err = mapToProto(tree, uMsg); err != nil { - return err - } - - for _, field := range fields { - specialField, ok := specialFieldsMap[field.Name()] - if !ok { - continue - } - if err := field.PopulateFrom(specialField); err != nil { - return err - } - } - - return nil -} - -// DeepUnmarshalJSON takes JSON output as generated by DeepMarshalJSON and decodes it into msg -// This includes re-marshaling the expanded nested elements to binary form -func DeepUnmarshalJSON(r io.Reader, msg proto.Message) error { - b, err := ioutil.ReadAll(r) - if err != nil { - return err - } - - root, err := jsonToMap(b) - if err != nil { - return err - } - - return recursivelyPopulateMessageFromTree(root, msg) -} diff --git a/internal/github.com/hyperledger/fabric/common/tools/protolator/nested.go b/internal/github.com/hyperledger/fabric/common/tools/protolator/nested.go deleted file mode 100644 index 814de867c3..0000000000 --- a/internal/github.com/hyperledger/fabric/common/tools/protolator/nested.go +++ /dev/null @@ -1,115 +0,0 @@ -/* -Copyright IBM Corp. 2017 All Rights Reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ -/* -Notice: This file has been modified for Hyperledger Fabric SDK Go usage. -Please review third_party pinning scripts and patches for more details. -*/ - -package protolator - -import ( - "reflect" - - "github.com/golang/protobuf/proto" - "github.com/golang/protobuf/ptypes/timestamp" -) - -func nestedFrom(value interface{}, destType reflect.Type) (reflect.Value, error) { - tree := value.(map[string]interface{}) // Safe, already checked - result := reflect.New(destType.Elem()) - nMsg := result.Interface().(proto.Message) // Safe, already checked - if err := recursivelyPopulateMessageFromTree(tree, nMsg); err != nil { - return reflect.Value{}, err - } - return result, nil -} - -func nestedTo(value reflect.Value) (interface{}, error) { - nMsg := value.Interface().(proto.Message) // Safe, already checked - return recursivelyCreateTreeFromMessage(nMsg) -} - -var timestampType = reflect.TypeOf(×tamp.Timestamp{}) - -type nestedFieldFactory struct{} - -func (nff nestedFieldFactory) Handles(msg proto.Message, fieldName string, fieldType reflect.Type, fieldValue reflect.Value) bool { - // Note, we skip recursing into the field if it is a proto native timestamp, because there is other custom marshaling this conflicts with - // this should probably be revisited more generally to prevent custom marshaling of 'well known messages' - return fieldType.Kind() == reflect.Ptr && fieldType.AssignableTo(protoMsgType) && !fieldType.AssignableTo(timestampType) -} - -func (nff nestedFieldFactory) NewProtoField(msg proto.Message, fieldName string, fieldType reflect.Type, fieldValue reflect.Value) (protoField, error) { - return &plainField{ - baseField: baseField{ - msg: msg, - name: fieldName, - fType: mapStringInterfaceType, - vType: fieldType, - value: fieldValue, - }, - populateFrom: nestedFrom, - populateTo: nestedTo, - }, nil -} - -type nestedMapFieldFactory struct{} - -func (nmff nestedMapFieldFactory) Handles(msg proto.Message, fieldName string, fieldType reflect.Type, fieldValue reflect.Value) bool { - return fieldType.Kind() == reflect.Map && fieldType.Elem().AssignableTo(protoMsgType) && !fieldType.Elem().AssignableTo(timestampType) && fieldType.Key().Kind() == reflect.String -} - -func (nmff nestedMapFieldFactory) NewProtoField(msg proto.Message, fieldName string, fieldType reflect.Type, fieldValue reflect.Value) (protoField, error) { - return &mapField{ - baseField: baseField{ - msg: msg, - name: fieldName, - fType: mapStringInterfaceType, - vType: fieldType, - value: fieldValue, - }, - populateFrom: func(k string, v interface{}, dT reflect.Type) (reflect.Value, error) { - return nestedFrom(v, dT) - }, - populateTo: func(k string, v reflect.Value) (interface{}, error) { - return nestedTo(v) - }, - }, nil -} - -type nestedSliceFieldFactory struct{} - -func (nmff nestedSliceFieldFactory) Handles(msg proto.Message, fieldName string, fieldType reflect.Type, fieldValue reflect.Value) bool { - return fieldType.Kind() == reflect.Slice && fieldType.Elem().AssignableTo(protoMsgType) && !fieldType.Elem().AssignableTo(timestampType) -} - -func (nmff nestedSliceFieldFactory) NewProtoField(msg proto.Message, fieldName string, fieldType reflect.Type, fieldValue reflect.Value) (protoField, error) { - return &sliceField{ - baseField: baseField{ - msg: msg, - name: fieldName, - fType: mapStringInterfaceType, - vType: fieldType, - value: fieldValue, - }, - populateFrom: func(i int, v interface{}, dT reflect.Type) (reflect.Value, error) { - return nestedFrom(v, dT) - }, - populateTo: func(i int, v reflect.Value) (interface{}, error) { - return nestedTo(v) - }, - }, nil -} diff --git a/internal/github.com/hyperledger/fabric/common/tools/protolator/protoext/commonext/common.go b/internal/github.com/hyperledger/fabric/common/tools/protolator/protoext/commonext/common.go deleted file mode 100644 index 1c306ea1b9..0000000000 --- a/internal/github.com/hyperledger/fabric/common/tools/protolator/protoext/commonext/common.go +++ /dev/null @@ -1,157 +0,0 @@ -/* -Copyright IBM Corp. All Rights Reserved. - -SPDX-License-Identifier: Apache-2.0 -*/ -/* -Notice: This file has been modified for Hyperledger Fabric SDK Go usage. -Please review third_party pinning scripts and patches for more details. -*/ - -package commonext - -import ( - "fmt" - - "github.com/golang/protobuf/proto" - "github.com/hyperledger/fabric-protos-go/common" - "github.com/hyperledger/fabric-protos-go/msp" - "github.com/hyperledger/fabric-protos-go/peer" -) - -type Envelope struct{ *common.Envelope } - -func (e *Envelope) Underlying() proto.Message { - return e.Envelope -} - -func (e *Envelope) StaticallyOpaqueFields() []string { - return []string{"payload"} -} - -func (e *Envelope) StaticallyOpaqueFieldProto(name string) (proto.Message, error) { - if name != e.StaticallyOpaqueFields()[0] { - return nil, fmt.Errorf("not a marshaled field: %s", name) - } - return &common.Payload{}, nil -} - -type Payload struct{ *common.Payload } - -func (p *Payload) Underlying() proto.Message { - return p.Payload -} - -func (p *Payload) VariablyOpaqueFields() []string { - return []string{"data"} -} - -func (p *Payload) VariablyOpaqueFieldProto(name string) (proto.Message, error) { - if name != p.VariablyOpaqueFields()[0] { - return nil, fmt.Errorf("not a marshaled field: %s", name) - } - if p.Header == nil { - return nil, fmt.Errorf("cannot determine payload type when header is missing") - } - ch := &common.ChannelHeader{} - if err := proto.Unmarshal(p.Header.ChannelHeader, ch); err != nil { - return nil, fmt.Errorf("corrupt channel header: %s", err) - } - - switch ch.Type { - case int32(common.HeaderType_CONFIG): - return &common.ConfigEnvelope{}, nil - case int32(common.HeaderType_ORDERER_TRANSACTION): - return &common.Envelope{}, nil - case int32(common.HeaderType_CONFIG_UPDATE): - return &common.ConfigUpdateEnvelope{}, nil - case int32(common.HeaderType_MESSAGE): - // Only used by broadcast_msg sample client - return &common.ConfigValue{}, nil - case int32(common.HeaderType_ENDORSER_TRANSACTION): - return &peer.Transaction{}, nil - default: - return nil, fmt.Errorf("decoding type %v is unimplemented", ch.Type) - } -} - -type ChannelHeader struct{ *common.ChannelHeader } - -func (ch *ChannelHeader) Underlying() proto.Message { - return ch.ChannelHeader -} - -func (ch *ChannelHeader) VariablyOpaqueFields() []string { - return []string{"extension"} -} - -func (ch *ChannelHeader) VariablyOpaqueFieldProto(name string) (proto.Message, error) { - if name != "extension" { - return nil, fmt.Errorf("not an opaque field") - } - - switch ch.Type { - case int32(common.HeaderType_ENDORSER_TRANSACTION): - return &peer.ChaincodeHeaderExtension{}, nil - default: - return nil, fmt.Errorf("channel header extension only valid for endorser transactions") - } -} - -type Header struct{ *common.Header } - -func (h *Header) Underlying() proto.Message { - return h.Header -} - -func (h *Header) StaticallyOpaqueFields() []string { - return []string{"channel_header", "signature_header"} -} - -func (h *Header) StaticallyOpaqueFieldProto(name string) (proto.Message, error) { - switch name { - case h.StaticallyOpaqueFields()[0]: // channel_header - return &common.ChannelHeader{}, nil - case h.StaticallyOpaqueFields()[1]: // signature_header - return &common.SignatureHeader{}, nil - default: - return nil, fmt.Errorf("unknown header field: %s", name) - } -} - -type SignatureHeader struct{ *common.SignatureHeader } - -func (sh *SignatureHeader) Underlying() proto.Message { - return sh.SignatureHeader -} - -func (sh *SignatureHeader) StaticallyOpaqueFields() []string { - return []string{"creator"} -} - -func (sh *SignatureHeader) StaticallyOpaqueFieldProto(name string) (proto.Message, error) { - switch name { - case sh.StaticallyOpaqueFields()[0]: // creator - return &msp.SerializedIdentity{}, nil - default: - return nil, fmt.Errorf("unknown header field: %s", name) - } -} - -type BlockData struct{ *common.BlockData } - -func (bd *BlockData) Underlying() proto.Message { - return bd.BlockData -} - -func (bd *BlockData) StaticallyOpaqueSliceFields() []string { - return []string{"data"} -} - -func (bd *BlockData) StaticallyOpaqueSliceFieldProto(fieldName string, index int) (proto.Message, error) { - if fieldName != bd.StaticallyOpaqueSliceFields()[0] { - return nil, fmt.Errorf("not an opaque slice field: %s", fieldName) - } - - return &common.Envelope{}, nil -} diff --git a/internal/github.com/hyperledger/fabric/common/tools/protolator/protoext/commonext/configtx.go b/internal/github.com/hyperledger/fabric/common/tools/protolator/protoext/commonext/configtx.go deleted file mode 100644 index 2c2556e4af..0000000000 --- a/internal/github.com/hyperledger/fabric/common/tools/protolator/protoext/commonext/configtx.go +++ /dev/null @@ -1,119 +0,0 @@ -/* -Copyright IBM Corp. All Rights Reserved. - -SPDX-License-Identifier: Apache-2.0 -*/ -/* -Notice: This file has been modified for Hyperledger Fabric SDK Go usage. -Please review third_party pinning scripts and patches for more details. -*/ - -package commonext - -import ( - "fmt" - - "github.com/golang/protobuf/proto" - "github.com/hyperledger/fabric-protos-go/common" -) - -type ConfigUpdateEnvelope struct{ *common.ConfigUpdateEnvelope } - -func (cue *ConfigUpdateEnvelope) Underlying() proto.Message { - return cue.ConfigUpdateEnvelope -} - -func (cue *ConfigUpdateEnvelope) StaticallyOpaqueFields() []string { - return []string{"config_update"} -} - -func (cue *ConfigUpdateEnvelope) StaticallyOpaqueFieldProto(name string) (proto.Message, error) { - if name != cue.StaticallyOpaqueFields()[0] { - return nil, fmt.Errorf("Not a marshaled field: %s", name) - } - return &common.ConfigUpdate{}, nil -} - -type ConfigSignature struct{ *common.ConfigSignature } - -func (cs *ConfigSignature) Underlying() proto.Message { - return cs.ConfigSignature -} - -func (cs *ConfigSignature) StaticallyOpaqueFields() []string { - return []string{"signature_header"} -} - -func (cs *ConfigSignature) StaticallyOpaqueFieldProto(name string) (proto.Message, error) { - if name != cs.StaticallyOpaqueFields()[0] { - return nil, fmt.Errorf("Not a marshaled field: %s", name) - } - return &common.SignatureHeader{}, nil -} - -type Config struct{ *common.Config } - -func (c *Config) Underlying() proto.Message { - return c.Config -} - -func (c *Config) DynamicFields() []string { - return []string{"channel_group"} -} - -func (c *Config) DynamicFieldProto(name string, base proto.Message) (proto.Message, error) { - if name != c.DynamicFields()[0] { - return nil, fmt.Errorf("Not a dynamic field: %s", name) - } - - cg, ok := base.(*common.ConfigGroup) - if !ok { - return nil, fmt.Errorf("Config must embed a config group as its dynamic field") - } - - return &DynamicChannelGroup{ConfigGroup: cg}, nil -} - -// ConfigUpdateIsolatedDataTypes allows other proto packages to register types for the -// the isolated_data field. This is necessary to break import cycles. -var ConfigUpdateIsolatedDataTypes = map[string]func(string) proto.Message{} - -type ConfigUpdate struct{ *common.ConfigUpdate } - -func (c *ConfigUpdate) Underlying() proto.Message { - return c.ConfigUpdate -} - -func (c *ConfigUpdate) StaticallyOpaqueMapFields() []string { - return []string{"isolated_data"} -} - -func (c *ConfigUpdate) StaticallyOpaqueMapFieldProto(name string, key string) (proto.Message, error) { - if name != c.StaticallyOpaqueMapFields()[0] { - return nil, fmt.Errorf("Not a statically opaque map field: %s", name) - } - - mf, ok := ConfigUpdateIsolatedDataTypes[key] - if !ok { - return nil, fmt.Errorf("Unknown map key: %s", key) - } - - return mf(key), nil -} - -func (c *ConfigUpdate) DynamicFields() []string { - return []string{"read_set", "write_set"} -} - -func (c *ConfigUpdate) DynamicFieldProto(name string, base proto.Message) (proto.Message, error) { - if name != c.DynamicFields()[0] && name != c.DynamicFields()[1] { - return nil, fmt.Errorf("Not a dynamic field: %s", name) - } - - cg, ok := base.(*common.ConfigGroup) - if !ok { - return nil, fmt.Errorf("Expected base to be *ConfigGroup, got %T", base) - } - - return &DynamicChannelGroup{ConfigGroup: cg}, nil -} diff --git a/internal/github.com/hyperledger/fabric/common/tools/protolator/protoext/commonext/configuration.go b/internal/github.com/hyperledger/fabric/common/tools/protolator/protoext/commonext/configuration.go deleted file mode 100644 index 96bdc91a43..0000000000 --- a/internal/github.com/hyperledger/fabric/common/tools/protolator/protoext/commonext/configuration.go +++ /dev/null @@ -1,248 +0,0 @@ -/* -Copyright IBM Corp. All Rights Reserved. - -SPDX-License-Identifier: Apache-2.0 -*/ -/* -Notice: This file has been modified for Hyperledger Fabric SDK Go usage. -Please review third_party pinning scripts and patches for more details. -*/ - -package commonext - -import ( - "fmt" - - "github.com/golang/protobuf/proto" - "github.com/hyperledger/fabric-protos-go/common" - "github.com/hyperledger/fabric-protos-go/msp" - "github.com/hyperledger/fabric-sdk-go/internal/github.com/hyperledger/fabric/common/tools/protolator/protoext/ordererext" - "github.com/hyperledger/fabric-sdk-go/internal/github.com/hyperledger/fabric/common/tools/protolator/protoext/peerext" - - "github.com/pkg/errors" -) - -type DynamicChannelGroup struct { - *common.ConfigGroup -} - -func (dcg *DynamicChannelGroup) DynamicMapFields() []string { - return []string{"values", "groups"} -} - -func (dcg *DynamicChannelGroup) Underlying() proto.Message { - return dcg.ConfigGroup -} - -func (dcg *DynamicChannelGroup) DynamicMapFieldProto(name string, key string, base proto.Message) (proto.Message, error) { - switch name { - case "groups": - cg, ok := base.(*common.ConfigGroup) - if !ok { - return nil, fmt.Errorf("ConfigGroup groups can only contain ConfigGroup messages") - } - - switch key { - case "Consortiums": - return &DynamicConsortiumsGroup{ConfigGroup: cg}, nil - case "Orderer": - return &ordererext.DynamicOrdererGroup{ConfigGroup: cg}, nil - case "Application": - return &peerext.DynamicApplicationGroup{ConfigGroup: cg}, nil - default: - return nil, errors.Errorf("unknown channel group sub-group '%s'", key) - } - case "values": - cv, ok := base.(*common.ConfigValue) - if !ok { - return nil, fmt.Errorf("ConfigGroup values can only contain ConfigValue messages") - } - return &DynamicChannelConfigValue{ - ConfigValue: cv, - name: key, - }, nil - default: - return nil, fmt.Errorf("ConfigGroup does not have a dynamic field: %s", name) - } -} - -type DynamicChannelConfigValue struct { - *common.ConfigValue - name string -} - -func (dccv *DynamicChannelConfigValue) StaticallyOpaqueFields() []string { - return []string{"value"} -} - -func (dccv *DynamicChannelConfigValue) Underlying() proto.Message { - return dccv.ConfigValue -} - -func (dccv *DynamicChannelConfigValue) StaticallyOpaqueFieldProto(name string) (proto.Message, error) { - if name != "value" { - return nil, fmt.Errorf("not a marshaled field: %s", name) - } - switch dccv.name { - case "HashingAlgorithm": - return &common.HashingAlgorithm{}, nil - case "BlockDataHashingStructure": - return &common.BlockDataHashingStructure{}, nil - case "OrdererAddresses": - return &common.OrdererAddresses{}, nil - case "Consortium": - return &common.Consortium{}, nil - case "Capabilities": - return &common.Capabilities{}, nil - default: - return nil, fmt.Errorf("unknown Channel ConfigValue name: %s", dccv.name) - } -} - -type DynamicConsortiumsGroup struct { - *common.ConfigGroup -} - -func (dcg *DynamicConsortiumsGroup) Underlying() proto.Message { - return dcg.ConfigGroup -} - -func (dcg *DynamicConsortiumsGroup) DynamicMapFields() []string { - return []string{"values", "groups"} -} - -func (dcg *DynamicConsortiumsGroup) DynamicMapFieldProto(name string, key string, base proto.Message) (proto.Message, error) { - switch name { - case "groups": - cg, ok := base.(*common.ConfigGroup) - if !ok { - return nil, fmt.Errorf("ConfigGroup groups can only contain ConfigGroup messages") - } - - return &DynamicConsortiumGroup{ - ConfigGroup: cg, - }, nil - case "values": - return nil, fmt.Errorf("Consortiums currently support no config values") - default: - return nil, fmt.Errorf("ConfigGroup does not have a dynamic field: %s", name) - } -} - -type DynamicConsortiumGroup struct { - *common.ConfigGroup -} - -func (dcg *DynamicConsortiumGroup) Underlying() proto.Message { - return dcg.ConfigGroup -} - -func (dcg *DynamicConsortiumGroup) DynamicMapFields() []string { - return []string{"values", "groups"} -} - -func (dcg *DynamicConsortiumGroup) DynamicMapFieldProto(name string, key string, base proto.Message) (proto.Message, error) { - switch name { - case "groups": - cg, ok := base.(*common.ConfigGroup) - if !ok { - return nil, fmt.Errorf("ConfigGroup groups can only contain ConfigGroup messages") - } - return &DynamicConsortiumOrgGroup{ - ConfigGroup: cg, - }, nil - case "values": - cv, ok := base.(*common.ConfigValue) - if !ok { - return nil, fmt.Errorf("ConfigGroup values can only contain ConfigValue messages") - } - - return &DynamicConsortiumConfigValue{ - ConfigValue: cv, - name: key, - }, nil - default: - return nil, fmt.Errorf("not a dynamic orderer map field: %s", name) - } -} - -type DynamicConsortiumConfigValue struct { - *common.ConfigValue - name string -} - -func (dccv *DynamicConsortiumConfigValue) Underlying() proto.Message { - return dccv.ConfigValue -} - -func (dccv *DynamicConsortiumConfigValue) VariablyOpaqueFields() []string { - return []string{"value"} -} - -func (dccv *DynamicConsortiumConfigValue) VariablyOpaqueFieldProto(name string) (proto.Message, error) { - if name != "value" { - return nil, fmt.Errorf("not a marshaled field: %s", name) - } - switch dccv.name { - case "ChannelCreationPolicy": - return &common.Policy{}, nil - default: - return nil, fmt.Errorf("unknown Consortium ConfigValue name: %s", dccv.name) - } -} - -type DynamicConsortiumOrgGroup struct { - *common.ConfigGroup -} - -func (dcg *DynamicConsortiumOrgGroup) Underlying() proto.Message { - return dcg.ConfigGroup -} - -func (dcg *DynamicConsortiumOrgGroup) DynamicMapFields() []string { - return []string{"groups", "values"} -} - -func (dcg *DynamicConsortiumOrgGroup) DynamicMapFieldProto(name string, key string, base proto.Message) (proto.Message, error) { - switch name { - case "groups": - return nil, fmt.Errorf("ConsortiumOrg groups do not support sub groups") - case "values": - cv, ok := base.(*common.ConfigValue) - if !ok { - return nil, fmt.Errorf("ConfigGroup values can only contain ConfigValue messages") - } - - return &DynamicConsortiumOrgConfigValue{ - ConfigValue: cv, - name: key, - }, nil - default: - return nil, fmt.Errorf("not a dynamic orderer map field: %s", name) - } -} - -type DynamicConsortiumOrgConfigValue struct { - *common.ConfigValue - name string -} - -func (dcocv *DynamicConsortiumOrgConfigValue) Underlying() proto.Message { - return dcocv.ConfigValue -} - -func (dcocv *DynamicConsortiumOrgConfigValue) StaticallyOpaqueFields() []string { - return []string{"value"} -} - -func (dcocv *DynamicConsortiumOrgConfigValue) StaticallyOpaqueFieldProto(name string) (proto.Message, error) { - if name != "value" { - return nil, fmt.Errorf("not a marshaled field: %s", name) - } - switch dcocv.name { - case "MSP": - return &msp.MSPConfig{}, nil - default: - return nil, fmt.Errorf("unknown Consortium Org ConfigValue name: %s", dcocv.name) - } -} diff --git a/internal/github.com/hyperledger/fabric/common/tools/protolator/protoext/commonext/policies.go b/internal/github.com/hyperledger/fabric/common/tools/protolator/protoext/commonext/policies.go deleted file mode 100644 index 2d152b125c..0000000000 --- a/internal/github.com/hyperledger/fabric/common/tools/protolator/protoext/commonext/policies.go +++ /dev/null @@ -1,42 +0,0 @@ -/* -Copyright IBM Corp. All Rights Reserved. - -SPDX-License-Identifier: Apache-2.0 -*/ -/* -Notice: This file has been modified for Hyperledger Fabric SDK Go usage. -Please review third_party pinning scripts and patches for more details. -*/ - -package commonext - -import ( - "fmt" - - "github.com/golang/protobuf/proto" - "github.com/hyperledger/fabric-protos-go/common" -) - -type Policy struct{ *common.Policy } - -func (p *Policy) Underlying() proto.Message { - return p.Policy -} - -func (p *Policy) VariablyOpaqueFields() []string { - return []string{"value"} -} - -func (p *Policy) VariablyOpaqueFieldProto(name string) (proto.Message, error) { - if name != p.VariablyOpaqueFields()[0] { - return nil, fmt.Errorf("not a marshaled field: %s", name) - } - switch p.Type { - case int32(common.Policy_SIGNATURE): - return &common.SignaturePolicyEnvelope{}, nil - case int32(common.Policy_IMPLICIT_META): - return &common.ImplicitMetaPolicy{}, nil - default: - return nil, fmt.Errorf("unable to decode policy type: %v", p.Type) - } -} diff --git a/internal/github.com/hyperledger/fabric/common/tools/protolator/protoext/decorate.go b/internal/github.com/hyperledger/fabric/common/tools/protolator/protoext/decorate.go deleted file mode 100644 index 0de70a8f9c..0000000000 --- a/internal/github.com/hyperledger/fabric/common/tools/protolator/protoext/decorate.go +++ /dev/null @@ -1,81 +0,0 @@ -/* -Copyright IBM Corp. All Rights Reserved. - -SPDX-License-Identifier: Apache-2.0 -*/ -/* -Notice: This file has been modified for Hyperledger Fabric SDK Go usage. -Please review third_party pinning scripts and patches for more details. -*/ - -package protoext - -import ( - "github.com/golang/protobuf/proto" - "github.com/hyperledger/fabric-protos-go/common" - "github.com/hyperledger/fabric-protos-go/ledger/rwset" - "github.com/hyperledger/fabric-protos-go/msp" - "github.com/hyperledger/fabric-protos-go/orderer" - "github.com/hyperledger/fabric-protos-go/peer" - "github.com/hyperledger/fabric-sdk-go/internal/github.com/hyperledger/fabric/common/tools/protolator/protoext/commonext" - "github.com/hyperledger/fabric-sdk-go/internal/github.com/hyperledger/fabric/common/tools/protolator/protoext/ledger/rwsetext" - "github.com/hyperledger/fabric-sdk-go/internal/github.com/hyperledger/fabric/common/tools/protolator/protoext/mspext" - "github.com/hyperledger/fabric-sdk-go/internal/github.com/hyperledger/fabric/common/tools/protolator/protoext/ordererext" - "github.com/hyperledger/fabric-sdk-go/internal/github.com/hyperledger/fabric/common/tools/protolator/protoext/peerext" -) - -// Docorate will add additional capabilities to some protobuf messages that -// enable proper JSON marshalling and unmarshalling in protolator. -func Decorate(msg proto.Message) proto.Message { - switch m := msg.(type) { - case *common.BlockData: - return &commonext.BlockData{BlockData: m} - case *common.Config: - return &commonext.Config{Config: m} - case *common.ConfigSignature: - return &commonext.ConfigSignature{ConfigSignature: m} - case *common.ConfigUpdate: - return &commonext.ConfigUpdate{ConfigUpdate: m} - case *common.ConfigUpdateEnvelope: - return &commonext.ConfigUpdateEnvelope{ConfigUpdateEnvelope: m} - case *common.Envelope: - return &commonext.Envelope{Envelope: m} - case *common.Header: - return &commonext.Header{Header: m} - case *common.ChannelHeader: - return &commonext.ChannelHeader{ChannelHeader: m} - case *common.SignatureHeader: - return &commonext.SignatureHeader{SignatureHeader: m} - case *common.Payload: - return &commonext.Payload{Payload: m} - case *common.Policy: - return &commonext.Policy{Policy: m} - - case *msp.MSPConfig: - return &mspext.MSPConfig{MSPConfig: m} - case *msp.MSPPrincipal: - return &mspext.MSPPrincipal{MSPPrincipal: m} - - case *orderer.ConsensusType: - return &ordererext.ConsensusType{ConsensusType: m} - - case *peer.ChaincodeAction: - return &peerext.ChaincodeAction{ChaincodeAction: m} - case *peer.ChaincodeActionPayload: - return &peerext.ChaincodeActionPayload{ChaincodeActionPayload: m} - case *peer.ChaincodeEndorsedAction: - return &peerext.ChaincodeEndorsedAction{ChaincodeEndorsedAction: m} - case *peer.ChaincodeProposalPayload: - return &peerext.ChaincodeProposalPayload{ChaincodeProposalPayload: m} - case *peer.ProposalResponsePayload: - return &peerext.ProposalResponsePayload{ProposalResponsePayload: m} - case *peer.TransactionAction: - return &peerext.TransactionAction{TransactionAction: m} - - case *rwset.TxReadWriteSet: - return &rwsetext.TxReadWriteSet{TxReadWriteSet: m} - - default: - return msg - } -} diff --git a/internal/github.com/hyperledger/fabric/common/tools/protolator/protoext/ledger/rwsetext/rwset.go b/internal/github.com/hyperledger/fabric/common/tools/protolator/protoext/ledger/rwsetext/rwset.go deleted file mode 100644 index b9dd89ff84..0000000000 --- a/internal/github.com/hyperledger/fabric/common/tools/protolator/protoext/ledger/rwsetext/rwset.go +++ /dev/null @@ -1,129 +0,0 @@ -/* -Copyright IBM Corp. All Rights Reserved. - -SPDX-License-Identifier: Apache-2.0 -*/ -/* -Notice: This file has been modified for Hyperledger Fabric SDK Go usage. -Please review third_party pinning scripts and patches for more details. -*/ - -package rwsetext - -import ( - "fmt" - - "github.com/golang/protobuf/proto" - "github.com/hyperledger/fabric-protos-go/ledger/rwset" - "github.com/hyperledger/fabric-protos-go/ledger/rwset/kvrwset" -) - -type TxReadWriteSet struct{ *rwset.TxReadWriteSet } - -func (txrws *TxReadWriteSet) Underlying() proto.Message { - return txrws.TxReadWriteSet -} - -func (txrws *TxReadWriteSet) DynamicSliceFields() []string { - if txrws.DataModel != rwset.TxReadWriteSet_KV { - // We only know how to handle TxReadWriteSet_KV types - return []string{} - } - - return []string{"ns_rwset"} -} - -func (txrws *TxReadWriteSet) DynamicSliceFieldProto(name string, index int, base proto.Message) (proto.Message, error) { - if name != txrws.DynamicSliceFields()[0] { - return nil, fmt.Errorf("Not a dynamic field: %s", name) - } - - nsrw, ok := base.(*rwset.NsReadWriteSet) - if !ok { - return nil, fmt.Errorf("TxReadWriteSet must embed a NsReadWriteSet its dynamic field") - } - - return &DynamicNsReadWriteSet{ - NsReadWriteSet: nsrw, - DataModel: txrws.DataModel, - }, nil -} - -type DynamicNsReadWriteSet struct { - *rwset.NsReadWriteSet - DataModel rwset.TxReadWriteSet_DataModel -} - -func (dnrws *DynamicNsReadWriteSet) Underlying() proto.Message { - return dnrws.NsReadWriteSet -} - -func (dnrws *DynamicNsReadWriteSet) StaticallyOpaqueFields() []string { - return []string{"rwset"} -} - -func (dnrws *DynamicNsReadWriteSet) StaticallyOpaqueFieldProto(name string) (proto.Message, error) { - switch name { - case "rwset": - switch dnrws.DataModel { - case rwset.TxReadWriteSet_KV: - return &kvrwset.KVRWSet{}, nil - default: - return nil, fmt.Errorf("unknown data model type: %v", dnrws.DataModel) - } - default: - return nil, fmt.Errorf("not a marshaled field: %s", name) - } -} - -func (dnrws *DynamicNsReadWriteSet) DynamicSliceFields() []string { - if dnrws.DataModel != rwset.TxReadWriteSet_KV { - // We only know how to handle TxReadWriteSet_KV types - return []string{} - } - - return []string{"collection_hashed_rwset"} -} - -func (dnrws *DynamicNsReadWriteSet) DynamicSliceFieldProto(name string, index int, base proto.Message) (proto.Message, error) { - if name != dnrws.DynamicSliceFields()[0] { - return nil, fmt.Errorf("Not a dynamic field: %s", name) - } - - chrws, ok := base.(*rwset.CollectionHashedReadWriteSet) - if !ok { - return nil, fmt.Errorf("NsReadWriteSet must embed a *CollectionHashedReadWriteSet its dynamic field") - } - - return &DynamicCollectionHashedReadWriteSet{ - CollectionHashedReadWriteSet: chrws, - DataModel: dnrws.DataModel, - }, nil -} - -type DynamicCollectionHashedReadWriteSet struct { - *rwset.CollectionHashedReadWriteSet - DataModel rwset.TxReadWriteSet_DataModel -} - -func (dchrws *DynamicCollectionHashedReadWriteSet) Underlying() proto.Message { - return dchrws.CollectionHashedReadWriteSet -} - -func (dchrws *DynamicCollectionHashedReadWriteSet) StaticallyOpaqueFields() []string { - return []string{"rwset"} -} - -func (dchrws *DynamicCollectionHashedReadWriteSet) StaticallyOpaqueFieldProto(name string) (proto.Message, error) { - switch name { - case "rwset": - switch dchrws.DataModel { - case rwset.TxReadWriteSet_KV: - return &kvrwset.HashedRWSet{}, nil - default: - return nil, fmt.Errorf("unknown data model type: %v", dchrws.DataModel) - } - default: - return nil, fmt.Errorf("not a marshaled field: %s", name) - } -} diff --git a/internal/github.com/hyperledger/fabric/common/tools/protolator/protoext/mspext/msp_config.go b/internal/github.com/hyperledger/fabric/common/tools/protolator/protoext/mspext/msp_config.go deleted file mode 100644 index 6659ddceb1..0000000000 --- a/internal/github.com/hyperledger/fabric/common/tools/protolator/protoext/mspext/msp_config.go +++ /dev/null @@ -1,42 +0,0 @@ -/* -Copyright IBM Corp. All Rights Reserved. - -SPDX-License-Identifier: Apache-2.0 -*/ -/* -Notice: This file has been modified for Hyperledger Fabric SDK Go usage. -Please review third_party pinning scripts and patches for more details. -*/ - -package mspext - -import ( - "fmt" - - "github.com/golang/protobuf/proto" - "github.com/hyperledger/fabric-protos-go/msp" -) - -type MSPConfig struct{ *msp.MSPConfig } - -func (mc *MSPConfig) Underlying() proto.Message { - return mc.MSPConfig -} - -func (mc *MSPConfig) VariablyOpaqueFields() []string { - return []string{"config"} -} - -func (mc *MSPConfig) VariablyOpaqueFieldProto(name string) (proto.Message, error) { - if name != mc.VariablyOpaqueFields()[0] { - return nil, fmt.Errorf("not a marshaled field: %s", name) - } - switch mc.Type { - case 0: - return &msp.FabricMSPConfig{}, nil - case 1: - return &msp.IdemixMSPConfig{}, nil - default: - return nil, fmt.Errorf("unable to decode MSP type: %v", mc.Type) - } -} diff --git a/internal/github.com/hyperledger/fabric/common/tools/protolator/protoext/mspext/msp_principal.go b/internal/github.com/hyperledger/fabric/common/tools/protolator/protoext/mspext/msp_principal.go deleted file mode 100644 index 7af518ab30..0000000000 --- a/internal/github.com/hyperledger/fabric/common/tools/protolator/protoext/mspext/msp_principal.go +++ /dev/null @@ -1,44 +0,0 @@ -/* -Copyright IBM Corp. All Rights Reserved. - -SPDX-License-Identifier: Apache-2.0 -*/ -/* -Notice: This file has been modified for Hyperledger Fabric SDK Go usage. -Please review third_party pinning scripts and patches for more details. -*/ - -package mspext - -import ( - "fmt" - - "github.com/golang/protobuf/proto" - "github.com/hyperledger/fabric-protos-go/msp" -) - -type MSPPrincipal struct{ *msp.MSPPrincipal } - -func (mp *MSPPrincipal) Underlying() proto.Message { - return mp.MSPPrincipal -} - -func (mp *MSPPrincipal) VariablyOpaqueFields() []string { - return []string{"principal"} -} - -func (mp *MSPPrincipal) VariablyOpaqueFieldProto(name string) (proto.Message, error) { - if name != mp.VariablyOpaqueFields()[0] { - return nil, fmt.Errorf("not a marshaled field: %s", name) - } - switch mp.PrincipalClassification { - case msp.MSPPrincipal_ROLE: - return &msp.MSPRole{}, nil - case msp.MSPPrincipal_ORGANIZATION_UNIT: - return &msp.OrganizationUnit{}, nil - case msp.MSPPrincipal_IDENTITY: - return &msp.SerializedIdentity{}, nil - default: - return nil, fmt.Errorf("unable to decode MSP type: %v", mp.PrincipalClassification) - } -} diff --git a/internal/github.com/hyperledger/fabric/common/tools/protolator/protoext/ordererext/configuration.go b/internal/github.com/hyperledger/fabric/common/tools/protolator/protoext/ordererext/configuration.go deleted file mode 100644 index c7d5516776..0000000000 --- a/internal/github.com/hyperledger/fabric/common/tools/protolator/protoext/ordererext/configuration.go +++ /dev/null @@ -1,182 +0,0 @@ -/* -Copyright IBM Corp. All Rights Reserved. - -SPDX-License-Identifier: Apache-2.0 -*/ -/* -Notice: This file has been modified for Hyperledger Fabric SDK Go usage. -Please review third_party pinning scripts and patches for more details. -*/ - -package ordererext - -import ( - "fmt" - - "github.com/golang/protobuf/proto" - "github.com/golang/protobuf/ptypes/empty" - "github.com/hyperledger/fabric-protos-go/common" - "github.com/hyperledger/fabric-protos-go/msp" - "github.com/hyperledger/fabric-protos-go/orderer" - "github.com/hyperledger/fabric-protos-go/orderer/etcdraft" -) - -type DynamicOrdererGroup struct { - *common.ConfigGroup -} - -func (dcg *DynamicOrdererGroup) Underlying() proto.Message { - return dcg.ConfigGroup -} - -func (dcg *DynamicOrdererGroup) DynamicMapFields() []string { - return []string{"values", "groups"} -} - -func (dcg *DynamicOrdererGroup) DynamicMapFieldProto(name string, key string, base proto.Message) (proto.Message, error) { - switch name { - case "groups": - cg, ok := base.(*common.ConfigGroup) - if !ok { - return nil, fmt.Errorf("ConfigGroup groups can only contain ConfigGroup messages") - } - - return &DynamicOrdererOrgGroup{ - ConfigGroup: cg, - }, nil - case "values": - cv, ok := base.(*common.ConfigValue) - if !ok { - return nil, fmt.Errorf("ConfigGroup values can only contain ConfigValue messages") - } - return &DynamicOrdererConfigValue{ - ConfigValue: cv, - name: key, - }, nil - default: - return nil, fmt.Errorf("ConfigGroup does not have a dynamic field: %s", name) - } -} - -type ConsensusTypeMetadataFactory interface { - NewMessage() proto.Message -} - -// ConsensuTypeMetadataMap should have consensus implementations register their metadata message factories -var ConsensusTypeMetadataMap = map[string]ConsensusTypeMetadataFactory{} - -type ConsensusType struct { - *orderer.ConsensusType -} - -func (ct *ConsensusType) Underlying() proto.Message { - return ct.ConsensusType -} - -func (ct *ConsensusType) VariablyOpaqueFields() []string { - return []string{"metadata"} -} - -func (ct *ConsensusType) VariablyOpaqueFieldProto(name string) (proto.Message, error) { - if name != "metadata" { - return nil, fmt.Errorf("not a valid opaque field: %s", name) - } - switch ct.Type { - case "etcdraft": - return &etcdraft.ConfigMetadata{}, nil - default: - return &empty.Empty{}, nil - } -} - -type DynamicOrdererOrgGroup struct { - *common.ConfigGroup -} - -func (dcg *DynamicOrdererOrgGroup) Underlying() proto.Message { - return dcg.ConfigGroup -} - -func (dcg *DynamicOrdererOrgGroup) DynamicMapFields() []string { - return []string{"groups", "values"} -} - -func (dcg *DynamicOrdererOrgGroup) DynamicMapFieldProto(name string, key string, base proto.Message) (proto.Message, error) { - switch name { - case "groups": - return nil, fmt.Errorf("the orderer orgs do not support sub-groups") - case "values": - cv, ok := base.(*common.ConfigValue) - if !ok { - return nil, fmt.Errorf("ConfigGroup values can only contain ConfigValue messages") - } - - return &DynamicOrdererOrgConfigValue{ - ConfigValue: cv, - name: key, - }, nil - default: - return nil, fmt.Errorf("not a dynamic orderer map field: %s", name) - } -} - -type DynamicOrdererConfigValue struct { - *common.ConfigValue - name string -} - -func (docv *DynamicOrdererConfigValue) Underlying() proto.Message { - return docv.ConfigValue -} - -func (docv *DynamicOrdererConfigValue) StaticallyOpaqueFields() []string { - return []string{"value"} -} - -func (docv *DynamicOrdererConfigValue) StaticallyOpaqueFieldProto(name string) (proto.Message, error) { - if name != "value" { - return nil, fmt.Errorf("not a marshaled field: %s", name) - } - switch docv.name { - case "ConsensusType": - return &orderer.ConsensusType{}, nil - case "BatchSize": - return &orderer.BatchSize{}, nil - case "BatchTimeout": - return &orderer.BatchTimeout{}, nil - case "KafkaBrokers": - return &orderer.KafkaBrokers{}, nil - case "ChannelRestrictions": - return &orderer.ChannelRestrictions{}, nil - case "Capabilities": - return &common.Capabilities{}, nil - default: - return nil, fmt.Errorf("unknown Orderer ConfigValue name: %s", docv.name) - } -} - -type DynamicOrdererOrgConfigValue struct { - *common.ConfigValue - name string -} - -func (doocv *DynamicOrdererOrgConfigValue) Underlying() proto.Message { - return doocv.ConfigValue -} -func (doocv *DynamicOrdererOrgConfigValue) StaticallyOpaqueFields() []string { - return []string{"value"} -} - -func (doocv *DynamicOrdererOrgConfigValue) StaticallyOpaqueFieldProto(name string) (proto.Message, error) { - if name != "value" { - return nil, fmt.Errorf("not a marshaled field: %s", name) - } - switch doocv.name { - case "MSP": - return &msp.MSPConfig{}, nil - case "Endpoints": - return &common.OrdererAddresses{}, nil - default: - return nil, fmt.Errorf("unknown Orderer Org ConfigValue name: %s", doocv.name) - } -} diff --git a/internal/github.com/hyperledger/fabric/common/tools/protolator/protoext/peerext/configuration.go b/internal/github.com/hyperledger/fabric/common/tools/protolator/protoext/peerext/configuration.go deleted file mode 100644 index ea9d751d06..0000000000 --- a/internal/github.com/hyperledger/fabric/common/tools/protolator/protoext/peerext/configuration.go +++ /dev/null @@ -1,142 +0,0 @@ -/* -Copyright IBM Corp. All Rights Reserved. - -SPDX-License-Identifier: Apache-2.0 -*/ -/* -Notice: This file has been modified for Hyperledger Fabric SDK Go usage. -Please review third_party pinning scripts and patches for more details. -*/ - -package peerext - -import ( - "fmt" - - "github.com/golang/protobuf/proto" - "github.com/hyperledger/fabric-protos-go/common" - "github.com/hyperledger/fabric-protos-go/msp" - "github.com/hyperledger/fabric-protos-go/peer" -) - -type DynamicApplicationGroup struct { - *common.ConfigGroup -} - -func (dag *DynamicApplicationGroup) Underlying() proto.Message { - return dag.ConfigGroup -} - -func (dag *DynamicApplicationGroup) DynamicMapFields() []string { - return []string{"groups", "values"} -} - -func (dag *DynamicApplicationGroup) DynamicMapFieldProto(name string, key string, base proto.Message) (proto.Message, error) { - switch name { - case "groups": - cg, ok := base.(*common.ConfigGroup) - if !ok { - return nil, fmt.Errorf("ConfigGroup groups can only contain ConfigGroup messages") - } - - return &DynamicApplicationOrgGroup{ - ConfigGroup: cg, - }, nil - case "values": - cv, ok := base.(*common.ConfigValue) - if !ok { - return nil, fmt.Errorf("ConfigGroup values can only contain ConfigValue messages") - } - return &DynamicApplicationConfigValue{ - ConfigValue: cv, - name: key, - }, nil - default: - return nil, fmt.Errorf("ConfigGroup does not have a dynamic field: %s", name) - } -} - -type DynamicApplicationOrgGroup struct { - *common.ConfigGroup -} - -func (dag *DynamicApplicationOrgGroup) Underlying() proto.Message { - return dag.ConfigGroup -} - -func (dag *DynamicApplicationOrgGroup) DynamicMapFields() []string { - return []string{"groups", "values"} -} - -func (dag *DynamicApplicationOrgGroup) DynamicMapFieldProto(name string, key string, base proto.Message) (proto.Message, error) { - switch name { - case "groups": - return nil, fmt.Errorf("The application orgs do not support sub-groups") - case "values": - cv, ok := base.(*common.ConfigValue) - if !ok { - return nil, fmt.Errorf("ConfigGroup values can only contain ConfigValue messages") - } - - return &DynamicApplicationOrgConfigValue{ - ConfigValue: cv, - name: key, - }, nil - default: - return nil, fmt.Errorf("Not a dynamic application map field: %s", name) - } -} - -type DynamicApplicationConfigValue struct { - *common.ConfigValue - name string -} - -func (ccv *DynamicApplicationConfigValue) Underlying() proto.Message { - return ccv.ConfigValue -} - -func (ccv *DynamicApplicationConfigValue) StaticallyOpaqueFields() []string { - return []string{"value"} -} - -func (ccv *DynamicApplicationConfigValue) StaticallyOpaqueFieldProto(name string) (proto.Message, error) { - if name != "value" { - return nil, fmt.Errorf("Not a marshaled field: %s", name) - } - switch ccv.name { - case "Capabilities": - return &common.Capabilities{}, nil - case "ACLs": - return &peer.ACLs{}, nil - default: - return nil, fmt.Errorf("Unknown Application ConfigValue name: %s", ccv.name) - } -} - -type DynamicApplicationOrgConfigValue struct { - *common.ConfigValue - name string -} - -func (daocv *DynamicApplicationOrgConfigValue) Underlying() proto.Message { - return daocv.ConfigValue -} - -func (daocv *DynamicApplicationOrgConfigValue) StaticallyOpaqueFields() []string { - return []string{"value"} -} - -func (daocv *DynamicApplicationOrgConfigValue) StaticallyOpaqueFieldProto(name string) (proto.Message, error) { - if name != "value" { - return nil, fmt.Errorf("Not a marshaled field: %s", name) - } - switch daocv.name { - case "MSP": - return &msp.MSPConfig{}, nil - case "AnchorPeers": - return &peer.AnchorPeers{}, nil - default: - return nil, fmt.Errorf("Unknown Application Org ConfigValue name: %s", daocv.name) - } -} diff --git a/internal/github.com/hyperledger/fabric/common/tools/protolator/protoext/peerext/proposal.go b/internal/github.com/hyperledger/fabric/common/tools/protolator/protoext/peerext/proposal.go deleted file mode 100644 index d14d561785..0000000000 --- a/internal/github.com/hyperledger/fabric/common/tools/protolator/protoext/peerext/proposal.go +++ /dev/null @@ -1,61 +0,0 @@ -/* -Copyright IBM Corp. All Rights Reserved. - -SPDX-License-Identifier: Apache-2.0 -*/ -/* -Notice: This file has been modified for Hyperledger Fabric SDK Go usage. -Please review third_party pinning scripts and patches for more details. -*/ - -package peerext - -import ( - "fmt" - - "github.com/golang/protobuf/proto" - "github.com/hyperledger/fabric-protos-go/ledger/rwset" - "github.com/hyperledger/fabric-protos-go/peer" -) - -type ChaincodeProposalPayload struct { - *peer.ChaincodeProposalPayload -} - -func (cpp *ChaincodeProposalPayload) Underlying() proto.Message { - return cpp.ChaincodeProposalPayload -} - -func (cpp *ChaincodeProposalPayload) StaticallyOpaqueFields() []string { - return []string{"input"} -} - -func (cpp *ChaincodeProposalPayload) StaticallyOpaqueFieldProto(name string) (proto.Message, error) { - if name != cpp.StaticallyOpaqueFields()[0] { - return nil, fmt.Errorf("not a marshaled field: %s", name) - } - return &peer.ChaincodeInvocationSpec{}, nil -} - -type ChaincodeAction struct { - *peer.ChaincodeAction -} - -func (ca *ChaincodeAction) Underlying() proto.Message { - return ca.ChaincodeAction -} - -func (ca *ChaincodeAction) StaticallyOpaqueFields() []string { - return []string{"results", "events"} -} - -func (ca *ChaincodeAction) StaticallyOpaqueFieldProto(name string) (proto.Message, error) { - switch name { - case "results": - return &rwset.TxReadWriteSet{}, nil - case "events": - return &peer.ChaincodeEvent{}, nil - default: - return nil, fmt.Errorf("not a marshaled field: %s", name) - } -} diff --git a/internal/github.com/hyperledger/fabric/common/tools/protolator/protoext/peerext/proposal_response.go b/internal/github.com/hyperledger/fabric/common/tools/protolator/protoext/peerext/proposal_response.go deleted file mode 100644 index 7592970e62..0000000000 --- a/internal/github.com/hyperledger/fabric/common/tools/protolator/protoext/peerext/proposal_response.go +++ /dev/null @@ -1,37 +0,0 @@ -/* -Copyright IBM Corp. All Rights Reserved. - -SPDX-License-Identifier: Apache-2.0 -*/ -/* -Notice: This file has been modified for Hyperledger Fabric SDK Go usage. -Please review third_party pinning scripts and patches for more details. -*/ - -package peerext - -import ( - "fmt" - - "github.com/golang/protobuf/proto" - "github.com/hyperledger/fabric-protos-go/peer" -) - -type ProposalResponsePayload struct { - *peer.ProposalResponsePayload -} - -func (ppr *ProposalResponsePayload) Underlying() proto.Message { - return ppr.ProposalResponsePayload -} - -func (ppr *ProposalResponsePayload) StaticallyOpaqueFields() []string { - return []string{"extension"} -} - -func (ppr *ProposalResponsePayload) StaticallyOpaqueFieldProto(name string) (proto.Message, error) { - if name != ppr.StaticallyOpaqueFields()[0] { - return nil, fmt.Errorf("not a marshaled field: %s", name) - } - return &peer.ChaincodeAction{}, nil -} diff --git a/internal/github.com/hyperledger/fabric/common/tools/protolator/protoext/peerext/transaction.go b/internal/github.com/hyperledger/fabric/common/tools/protolator/protoext/peerext/transaction.go deleted file mode 100644 index f61aba0654..0000000000 --- a/internal/github.com/hyperledger/fabric/common/tools/protolator/protoext/peerext/transaction.go +++ /dev/null @@ -1,80 +0,0 @@ -/* -Copyright IBM Corp. All Rights Reserved. - -SPDX-License-Identifier: Apache-2.0 -*/ -/* -Notice: This file has been modified for Hyperledger Fabric SDK Go usage. -Please review third_party pinning scripts and patches for more details. -*/ - -package peerext - -import ( - "fmt" - - "github.com/golang/protobuf/proto" - "github.com/hyperledger/fabric-protos-go/common" - "github.com/hyperledger/fabric-protos-go/peer" -) - -type TransactionAction struct { // nothing was testing this - *peer.TransactionAction -} - -func (ta *TransactionAction) Underlying() proto.Message { - return ta.TransactionAction -} - -func (ta *TransactionAction) StaticallyOpaqueFields() []string { - return []string{"header", "payload"} -} - -func (ta *TransactionAction) StaticallyOpaqueFieldProto(name string) (proto.Message, error) { - switch name { - case ta.StaticallyOpaqueFields()[0]: - return &common.SignatureHeader{}, nil - case ta.StaticallyOpaqueFields()[1]: - return &peer.ChaincodeActionPayload{}, nil - default: - return nil, fmt.Errorf("not a marshaled field: %s", name) - } -} - -type ChaincodeActionPayload struct { - *peer.ChaincodeActionPayload -} - -func (cap *ChaincodeActionPayload) Underlying() proto.Message { - return cap.ChaincodeActionPayload -} - -func (cap *ChaincodeActionPayload) StaticallyOpaqueFields() []string { - return []string{"chaincode_proposal_payload"} -} - -func (cap *ChaincodeActionPayload) StaticallyOpaqueFieldProto(name string) (proto.Message, error) { - if name != cap.StaticallyOpaqueFields()[0] { - return nil, fmt.Errorf("not a marshaled field: %s", name) - } - return &peer.ChaincodeProposalPayload{}, nil -} - -type ChaincodeEndorsedAction struct { - *peer.ChaincodeEndorsedAction -} - -func (cae *ChaincodeEndorsedAction) Underlying() proto.Message { - return cae.ChaincodeEndorsedAction -} - -func (cae *ChaincodeEndorsedAction) StaticallyOpaqueFields() []string { - return []string{"proposal_response_payload"} -} - -func (cae *ChaincodeEndorsedAction) StaticallyOpaqueFieldProto(name string) (proto.Message, error) { - if name != cae.StaticallyOpaqueFields()[0] { - return nil, fmt.Errorf("not a marshaled field: %s", name) - } - return &peer.ProposalResponsePayload{}, nil -} diff --git a/internal/github.com/hyperledger/fabric/common/tools/protolator/statically_opaque.go b/internal/github.com/hyperledger/fabric/common/tools/protolator/statically_opaque.go deleted file mode 100644 index 27cd779734..0000000000 --- a/internal/github.com/hyperledger/fabric/common/tools/protolator/statically_opaque.go +++ /dev/null @@ -1,156 +0,0 @@ -/* -Copyright IBM Corp. 2017 All Rights Reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ -/* -Notice: This file has been modified for Hyperledger Fabric SDK Go usage. -Please review third_party pinning scripts and patches for more details. -*/ - -package protolator - -import ( - "reflect" - - "github.com/golang/protobuf/proto" -) - -func opaqueFrom(opaqueType func() (proto.Message, error), value interface{}, destType reflect.Type) (reflect.Value, error) { - tree := value.(map[string]interface{}) // Safe, already checked - nMsg, err := opaqueType() - if err != nil { - return reflect.Value{}, err - } - if err := recursivelyPopulateMessageFromTree(tree, nMsg); err != nil { - return reflect.Value{}, err - } - mMsg, err := MostlyDeterministicMarshal(nMsg) - if err != nil { - return reflect.Value{}, err - } - return reflect.ValueOf(mMsg), nil -} - -func opaqueTo(opaqueType func() (proto.Message, error), value reflect.Value) (interface{}, error) { - nMsg, err := opaqueType() - if err != nil { - return nil, err - } - mMsg := value.Interface().([]byte) // Safe, already checked - if err = proto.Unmarshal(mMsg, nMsg); err != nil { - return nil, err - } - return recursivelyCreateTreeFromMessage(nMsg) -} - -type staticallyOpaqueFieldFactory struct{} - -func (soff staticallyOpaqueFieldFactory) Handles(msg proto.Message, fieldName string, fieldType reflect.Type, fieldValue reflect.Value) bool { - opaqueProto, ok := msg.(StaticallyOpaqueFieldProto) - if !ok { - return false - } - - return stringInSlice(fieldName, opaqueProto.StaticallyOpaqueFields()) -} - -func (soff staticallyOpaqueFieldFactory) NewProtoField(msg proto.Message, fieldName string, fieldType reflect.Type, fieldValue reflect.Value) (protoField, error) { - opaqueProto := msg.(StaticallyOpaqueFieldProto) // Type checked in Handles - - return &plainField{ - baseField: baseField{ - msg: msg, - name: fieldName, - fType: mapStringInterfaceType, - vType: bytesType, - value: fieldValue, - }, - populateFrom: func(v interface{}, dT reflect.Type) (reflect.Value, error) { - return opaqueFrom(func() (proto.Message, error) { return opaqueProto.StaticallyOpaqueFieldProto(fieldName) }, v, dT) - }, - populateTo: func(v reflect.Value) (interface{}, error) { - return opaqueTo(func() (proto.Message, error) { return opaqueProto.StaticallyOpaqueFieldProto(fieldName) }, v) - }, - }, nil -} - -type staticallyOpaqueMapFieldFactory struct{} - -func (soff staticallyOpaqueMapFieldFactory) Handles(msg proto.Message, fieldName string, fieldType reflect.Type, fieldValue reflect.Value) bool { - opaqueProto, ok := msg.(StaticallyOpaqueMapFieldProto) - if !ok { - return false - } - - return stringInSlice(fieldName, opaqueProto.StaticallyOpaqueMapFields()) -} - -func (soff staticallyOpaqueMapFieldFactory) NewProtoField(msg proto.Message, fieldName string, fieldType reflect.Type, fieldValue reflect.Value) (protoField, error) { - opaqueProto := msg.(StaticallyOpaqueMapFieldProto) // Type checked in Handles - - return &mapField{ - baseField: baseField{ - msg: msg, - name: fieldName, - fType: mapStringInterfaceType, - vType: fieldType, - value: fieldValue, - }, - populateFrom: func(key string, v interface{}, dT reflect.Type) (reflect.Value, error) { - return opaqueFrom(func() (proto.Message, error) { - return opaqueProto.StaticallyOpaqueMapFieldProto(fieldName, key) - }, v, dT) - }, - populateTo: func(key string, v reflect.Value) (interface{}, error) { - return opaqueTo(func() (proto.Message, error) { - return opaqueProto.StaticallyOpaqueMapFieldProto(fieldName, key) - }, v) - }, - }, nil -} - -type staticallyOpaqueSliceFieldFactory struct{} - -func (soff staticallyOpaqueSliceFieldFactory) Handles(msg proto.Message, fieldName string, fieldType reflect.Type, fieldValue reflect.Value) bool { - opaqueProto, ok := msg.(StaticallyOpaqueSliceFieldProto) - if !ok { - return false - } - - return stringInSlice(fieldName, opaqueProto.StaticallyOpaqueSliceFields()) -} - -func (soff staticallyOpaqueSliceFieldFactory) NewProtoField(msg proto.Message, fieldName string, fieldType reflect.Type, fieldValue reflect.Value) (protoField, error) { - opaqueProto := msg.(StaticallyOpaqueSliceFieldProto) // Type checked in Handles - - return &sliceField{ - baseField: baseField{ - msg: msg, - name: fieldName, - fType: mapStringInterfaceType, - vType: fieldType, - value: fieldValue, - }, - populateFrom: func(index int, v interface{}, dT reflect.Type) (reflect.Value, error) { - return opaqueFrom(func() (proto.Message, error) { - return opaqueProto.StaticallyOpaqueSliceFieldProto(fieldName, index) - }, v, dT) - }, - populateTo: func(index int, v reflect.Value) (interface{}, error) { - return opaqueTo(func() (proto.Message, error) { - return opaqueProto.StaticallyOpaqueSliceFieldProto(fieldName, index) - }, v) - }, - }, nil -} diff --git a/internal/github.com/hyperledger/fabric/common/tools/protolator/variably_opaque.go b/internal/github.com/hyperledger/fabric/common/tools/protolator/variably_opaque.go deleted file mode 100644 index e65f13bf9c..0000000000 --- a/internal/github.com/hyperledger/fabric/common/tools/protolator/variably_opaque.go +++ /dev/null @@ -1,128 +0,0 @@ -/* -Copyright IBM Corp. 2017 All Rights Reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ -/* -Notice: This file has been modified for Hyperledger Fabric SDK Go usage. -Please review third_party pinning scripts and patches for more details. -*/ - -package protolator - -import ( - "reflect" - - "github.com/golang/protobuf/proto" -) - -type variablyOpaqueFieldFactory struct{} - -func (soff variablyOpaqueFieldFactory) Handles(msg proto.Message, fieldName string, fieldType reflect.Type, fieldValue reflect.Value) bool { - opaqueProto, ok := msg.(VariablyOpaqueFieldProto) - if !ok { - return false - } - - return stringInSlice(fieldName, opaqueProto.VariablyOpaqueFields()) -} - -func (soff variablyOpaqueFieldFactory) NewProtoField(msg proto.Message, fieldName string, fieldType reflect.Type, fieldValue reflect.Value) (protoField, error) { - opaqueProto := msg.(VariablyOpaqueFieldProto) // Type checked in Handles - - return &plainField{ - baseField: baseField{ - msg: msg, - name: fieldName, - fType: mapStringInterfaceType, - vType: bytesType, - value: fieldValue, - }, - populateFrom: func(v interface{}, dT reflect.Type) (reflect.Value, error) { - return opaqueFrom(func() (proto.Message, error) { return opaqueProto.VariablyOpaqueFieldProto(fieldName) }, v, dT) - }, - populateTo: func(v reflect.Value) (interface{}, error) { - return opaqueTo(func() (proto.Message, error) { return opaqueProto.VariablyOpaqueFieldProto(fieldName) }, v) - }, - }, nil -} - -type variablyOpaqueMapFieldFactory struct{} - -func (soff variablyOpaqueMapFieldFactory) Handles(msg proto.Message, fieldName string, fieldType reflect.Type, fieldValue reflect.Value) bool { - opaqueProto, ok := msg.(VariablyOpaqueMapFieldProto) - if !ok { - return false - } - - return stringInSlice(fieldName, opaqueProto.VariablyOpaqueMapFields()) -} - -func (soff variablyOpaqueMapFieldFactory) NewProtoField(msg proto.Message, fieldName string, fieldType reflect.Type, fieldValue reflect.Value) (protoField, error) { - opaqueProto := msg.(VariablyOpaqueMapFieldProto) // Type checked in Handles - - return &mapField{ - baseField: baseField{ - msg: msg, - name: fieldName, - fType: mapStringInterfaceType, - vType: fieldType, - value: fieldValue, - }, - populateFrom: func(key string, v interface{}, dT reflect.Type) (reflect.Value, error) { - return opaqueFrom(func() (proto.Message, error) { - return opaqueProto.VariablyOpaqueMapFieldProto(fieldName, key) - }, v, dT) - }, - populateTo: func(key string, v reflect.Value) (interface{}, error) { - return opaqueTo(func() (proto.Message, error) { - return opaqueProto.VariablyOpaqueMapFieldProto(fieldName, key) - }, v) - }, - }, nil -} - -type variablyOpaqueSliceFieldFactory struct{} - -func (soff variablyOpaqueSliceFieldFactory) Handles(msg proto.Message, fieldName string, fieldType reflect.Type, fieldValue reflect.Value) bool { - opaqueProto, ok := msg.(VariablyOpaqueSliceFieldProto) - if !ok { - return false - } - - return stringInSlice(fieldName, opaqueProto.VariablyOpaqueSliceFields()) -} - -func (soff variablyOpaqueSliceFieldFactory) NewProtoField(msg proto.Message, fieldName string, fieldType reflect.Type, fieldValue reflect.Value) (protoField, error) { - opaqueProto := msg.(VariablyOpaqueSliceFieldProto) // Type checked in Handles - - return &sliceField{ - baseField: baseField{ - msg: msg, - name: fieldName, - fType: mapStringInterfaceType, - vType: fieldType, - value: fieldValue, - }, - populateFrom: func(index int, v interface{}, dT reflect.Type) (reflect.Value, error) { - return opaqueFrom(func() (proto.Message, error) { - return opaqueProto.VariablyOpaqueSliceFieldProto(fieldName, index) - }, v, dT) - }, - populateTo: func(index int, v reflect.Value) (interface{}, error) { - return opaqueTo(func() (proto.Message, error) { - return opaqueProto.VariablyOpaqueSliceFieldProto(fieldName, index) - }, v) - }, - }, nil -} diff --git a/pkg/fab/resource/configtx.go b/pkg/fab/resource/configtx.go index a79fc06912..d731a0a567 100644 --- a/pkg/fab/resource/configtx.go +++ b/pkg/fab/resource/configtx.go @@ -14,7 +14,6 @@ import ( "github.com/golang/protobuf/proto" "github.com/hyperledger/fabric-sdk-go/internal/github.com/hyperledger/fabric/common/channelconfig" - "github.com/hyperledger/fabric-sdk-go/internal/github.com/hyperledger/fabric/common/tools/protolator" "github.com/hyperledger/fabric-sdk-go/internal/github.com/hyperledger/fabric/protoutil" "github.com/hyperledger/fabric-sdk-go/internal/github.com/hyperledger/fabric/sdkinternal/configtxgen/encoder" "github.com/hyperledger/fabric-sdk-go/internal/github.com/hyperledger/fabric/sdkinternal/configtxlator/update" @@ -22,6 +21,7 @@ import ( localconfig "github.com/hyperledger/fabric-sdk-go/internal/github.com/hyperledger/fabric/sdkinternal/configtxgen/genesisconfig" + "github.com/hyperledger/fabric-config/protolator" "github.com/hyperledger/fabric-protos-go/common" cb "github.com/hyperledger/fabric-protos-go/common" "github.com/hyperledger/fabric-sdk-go/pkg/fab/resource/genesisconfig" diff --git a/pkg/util/protolator/json.go b/pkg/util/protolator/json.go deleted file mode 100644 index 9d06e4e1b7..0000000000 --- a/pkg/util/protolator/json.go +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright SecureKey Technologies Inc. All Rights Reserved. -// -// SPDX-License-Identifier: Apache-2.0 - -package protolator - -import ( - "io" - - "github.com/golang/protobuf/proto" - plator "github.com/hyperledger/fabric-sdk-go/internal/github.com/hyperledger/fabric/common/tools/protolator" -) - -// DeepMarshalJSON marshals msg to w as JSON, but instead of marshaling bytes fields which contain nested -// marshaled messages as base64 (like the standard proto encoding), these nested messages are remarshaled -// as the JSON representation of those messages. This is done so that the JSON representation is as non-binary -// and human readable as possible. -func DeepMarshalJSON(w io.Writer, msg proto.Message) error { - return plator.DeepMarshalJSON(w, msg) -} - -// DeepUnmarshalJSON takes JSON output as generated by DeepMarshalJSON and decodes it into msg -// This includes re-marshaling the expanded nested elements to binary form -func DeepUnmarshalJSON(r io.Reader, msg proto.Message) error { - return plator.DeepUnmarshalJSON(r, msg) -} diff --git a/pkg/util/protolator/json_test.go b/pkg/util/protolator/json_test.go deleted file mode 100644 index 8393b5e5cf..0000000000 --- a/pkg/util/protolator/json_test.go +++ /dev/null @@ -1,66 +0,0 @@ -// Copyright SecureKey Technologies Inc. All Rights Reserved. -// -// SPDX-License-Identifier: Apache-2.0 - -package protolator - -import ( - "bytes" - "testing" - - "github.com/hyperledger/fabric-sdk-go/pkg/common/providers/fab" - "github.com/hyperledger/fabric-sdk-go/pkg/fab/mocks" - "github.com/hyperledger/fabric-protos-go/common" - - "github.com/stretchr/testify/assert" -) - -var cert = `-----BEGIN CERTIFICATE----- -MIICYjCCAgmgAwIBAgIUB3CTDOU47sUC5K4kn/Caqnh114YwCgYIKoZIzj0EAwIw -fzELMAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNh -biBGcmFuY2lzY28xHzAdBgNVBAoTFkludGVybmV0IFdpZGdldHMsIEluYy4xDDAK -BgNVBAsTA1dXVzEUMBIGA1UEAxMLZXhhbXBsZS5jb20wHhcNMTYxMDEyMTkzMTAw -WhcNMjExMDExMTkzMTAwWjB/MQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZv -cm5pYTEWMBQGA1UEBxMNU2FuIEZyYW5jaXNjbzEfMB0GA1UEChMWSW50ZXJuZXQg -V2lkZ2V0cywgSW5jLjEMMAoGA1UECxMDV1dXMRQwEgYDVQQDEwtleGFtcGxlLmNv -bTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABKIH5b2JaSmqiQXHyqC+cmknICcF -i5AddVjsQizDV6uZ4v6s+PWiJyzfA/rTtMvYAPq/yeEHpBUB1j053mxnpMujYzBh -MA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBQXZ0I9 -qp6CP8TFHZ9bw5nRtZxIEDAfBgNVHSMEGDAWgBQXZ0I9qp6CP8TFHZ9bw5nRtZxI -EDAKBggqhkjOPQQDAgNHADBEAiAHp5Rbp9Em1G/UmKn8WsCbqDfWecVbZPQj3RK4 -oG5kQQIgQAe4OOKYhJdh3f7URaKfGTf492/nmRmtK+ySKjpHSrU= ------END CERTIFICATE----- -` - -func TestMarshalBlock(t *testing.T) { - - capability1 := "V1_1_PVTDATA_EXPERIMENTAL" - v2_0Capability := "V2_0" - - builder := &mocks.MockConfigBlockBuilder{ - MockConfigGroupBuilder: mocks.MockConfigGroupBuilder{ - ModPolicy: "Admins", - MSPNames: []string{ - "Org1MSP", - "Org2MSP", - }, - OrdererAddress: "localhost:9999", - RootCA: cert, - ChannelCapabilities: []string{fab.V1_1Capability}, - OrdererCapabilities: []string{fab.V1_1Capability, v2_0Capability}, - ApplicationCapabilities: []string{fab.V1_2Capability, capability1}, - }, - Index: 0, - LastConfigIndex: 0, - } - - block := builder.Build() - var buf bytes.Buffer - err := DeepMarshalJSON(&buf, block) - assert.Nil(t, err, "Error marshalling block") - - newBlock := &common.Block{} - newBlock.Reset() - err = DeepUnmarshalJSON(bytes.NewReader(buf.Bytes()), newBlock) - assert.Nil(t, err, "Error unmarshalling block") -} diff --git a/scripts/third_party_pins/fabric/apply_fabric_client_utils.sh b/scripts/third_party_pins/fabric/apply_fabric_client_utils.sh index 58a31ea20e..a8a1528d59 100755 --- a/scripts/third_party_pins/fabric/apply_fabric_client_utils.sh +++ b/scripts/third_party_pins/fabric/apply_fabric_client_utils.sh @@ -108,26 +108,6 @@ declare -a FILES=( "common/metrics/statsd/goruntime/metrics.go" "common/metrics/statsd/provider.go" - "common/tools/protolator/api.go" - "common/tools/protolator/dynamic.go" - "common/tools/protolator/json.go" - "common/tools/protolator/nested.go" - "common/tools/protolator/statically_opaque.go" - "common/tools/protolator/variably_opaque.go" - "common/tools/protolator/protoext/decorate.go" - "common/tools/protolator/protoext/commonext/common.go" - "common/tools/protolator/protoext/commonext/configtx.go" - "common/tools/protolator/protoext/commonext/configuration.go" - "common/tools/protolator/protoext/commonext/policies.go" - "common/tools/protolator/protoext/ledger/rwsetext/rwset.go" - "common/tools/protolator/protoext/mspext/msp_config.go" - "common/tools/protolator/protoext/mspext/msp_principal.go" - "common/tools/protolator/protoext/ordererext/configuration.go" - "common/tools/protolator/protoext/peerext/configuration.go" - "common/tools/protolator/protoext/peerext/proposal.go" - "common/tools/protolator/protoext/peerext/proposal_response.go" - "common/tools/protolator/protoext/peerext/transaction.go" - "core/middleware/chain.go" "core/middleware/request_id.go" "core/middleware/require_cert.go" diff --git a/test/integration/e2e/orgs/multi_orgs_ch_update_signatures_test.go b/test/integration/e2e/orgs/multi_orgs_ch_update_signatures_test.go index d2598bb73a..d9e00d3e74 100644 --- a/test/integration/e2e/orgs/multi_orgs_ch_update_signatures_test.go +++ b/test/integration/e2e/orgs/multi_orgs_ch_update_signatures_test.go @@ -21,14 +21,11 @@ import ( "time" "github.com/golang/protobuf/proto" - - "github.com/hyperledger/fabric-sdk-go/pkg/util/protolator" - - "github.com/hyperledger/fabric-sdk-go/pkg/util/test" - - "github.com/hyperledger/fabric-sdk-go/pkg/fab/resource" - + "github.com/hyperledger/fabric-config/protolator" "github.com/hyperledger/fabric-protos-go/common" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + "github.com/hyperledger/fabric-sdk-go/internal/github.com/hyperledger/fabric/bccsp/utils" "github.com/hyperledger/fabric-sdk-go/pkg/client/channel" "github.com/hyperledger/fabric-sdk-go/pkg/client/common/discovery/dynamicdiscovery" @@ -43,12 +40,12 @@ import ( "github.com/hyperledger/fabric-sdk-go/pkg/core/config/lookup" "github.com/hyperledger/fabric-sdk-go/pkg/core/mocks" fabImpl "github.com/hyperledger/fabric-sdk-go/pkg/fab" + "github.com/hyperledger/fabric-sdk-go/pkg/fab/resource" "github.com/hyperledger/fabric-sdk-go/pkg/fabsdk" "github.com/hyperledger/fabric-sdk-go/pkg/fabsdk/factory/defsvc" "github.com/hyperledger/fabric-sdk-go/pkg/fabsdk/provider/chpvdr" + "github.com/hyperledger/fabric-sdk-go/pkg/util/test" "github.com/hyperledger/fabric-sdk-go/test/integration" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" ) const ( diff --git a/test/integration/go.mod b/test/integration/go.mod index 6217a2ad58..7dece05c2b 100644 --- a/test/integration/go.mod +++ b/test/integration/go.mod @@ -7,9 +7,9 @@ module github.com/hyperledger/fabric-sdk-go/test/integration replace github.com/hyperledger/fabric-sdk-go => ../../ require ( - github.com/golang/protobuf v1.3.2 - github.com/hyperledger/fabric v1.4.4 // indirect - github.com/hyperledger/fabric-protos-go v0.0.0-20191121202242-f5500d5e3e85 + github.com/golang/protobuf v1.3.3 + github.com/hyperledger/fabric-config v0.0.6 + github.com/hyperledger/fabric-protos-go v0.0.0-20200424173316-dd554ba3746e github.com/hyperledger/fabric-sdk-go v0.0.0-00010101000000-000000000000 github.com/pkg/errors v0.8.1 github.com/stretchr/testify v1.3.0 diff --git a/test/integration/go.sum b/test/integration/go.sum index 8a8eb6115a..fa81a31b0e 100644 --- a/test/integration/go.sum +++ b/test/integration/go.sum @@ -32,6 +32,8 @@ github.com/golang/protobuf v1.2.0 h1:P3YflyNX/ehuJFLhxviNdFxQPkGK5cDcApsge1SqnvM github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.2 h1:6nsPYzhq5kReh6QImI3k5qWzO4PEbvbIW2cwSfR/6xs= github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.3 h1:gyjaxf+svBWX08ZjK86iN9geUJF0H6gp2IRKX6Nf6/I= +github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= github.com/google/certificate-transparency-go v0.0.0-20180222191210-5ab67e519c93 h1:qdfmdGwtm13OVx+AxguOWUTbgmXGn2TbdUHipo3chMg= github.com/google/certificate-transparency-go v0.0.0-20180222191210-5ab67e519c93/go.mod h1:QeJfpSbVSfYc7RgB3gJFj9cbuQMMchQxrWXz8Ruopmg= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= @@ -39,12 +41,12 @@ github.com/hashicorp/hcl v0.0.0-20180404174102-ef8a98b0bbce h1:xdsDDbiBDQTKASoGE github.com/hashicorp/hcl v0.0.0-20180404174102-ef8a98b0bbce/go.mod h1:oZtUIOe8dh44I2q6ScRibXws4Ajl+d+nod3AaR9vL5w= github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= -github.com/hyperledger/fabric v1.4.4 h1:2m+tDXB5QWyZL1UTyYs3fxUhkgvKD88yVE6sIwYf1KM= -github.com/hyperledger/fabric v1.4.4/go.mod h1:tGFAOCT696D3rG0Vofd2dyWYLySHlh0aQjf7Q1HAju0= +github.com/hyperledger/fabric-config v0.0.6 h1:7Xblwtpb82j+QZCIFfqlHPBS4MMmHzNtuA1W7aokdXg= +github.com/hyperledger/fabric-config v0.0.6/go.mod h1:aeDZ0moG/qKvwLjddcqYr8+58/oNaJy3HE0tI01546c= github.com/hyperledger/fabric-lib-go v1.0.0 h1:UL1w7c9LvHZUSkIvHTDGklxFv2kTeva1QI2emOVc324= github.com/hyperledger/fabric-lib-go v1.0.0/go.mod h1:H362nMlunurmHwkYqR5uHL2UDWbQdbfz74n8kbCFsqc= -github.com/hyperledger/fabric-protos-go v0.0.0-20191121202242-f5500d5e3e85 h1:bNgEcCg5NVRWs/T+VUEfhgh5Olx/N4VB+0+ybW+oSuA= -github.com/hyperledger/fabric-protos-go v0.0.0-20191121202242-f5500d5e3e85/go.mod h1:xVYTjK4DtZRBxZ2D9aE4y6AbLaPwue2o/criQyQbVD0= +github.com/hyperledger/fabric-protos-go v0.0.0-20200424173316-dd554ba3746e h1:9PS5iezHk/j7XriSlNuSQILyCOfcZ9wZ3/PiucmSE8E= +github.com/hyperledger/fabric-protos-go v0.0.0-20200424173316-dd554ba3746e/go.mod h1:xVYTjK4DtZRBxZ2D9aE4y6AbLaPwue2o/criQyQbVD0= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515 h1:T+h1c/A9Gawja4Y9mFVWj2vyii2bbUNDw3kt9VxK2EY= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= @@ -62,8 +64,8 @@ github.com/mitchellh/mapstructure v0.0.0-20180220230111-00c29f56e238 h1:+MZW2uvH github.com/mitchellh/mapstructure v0.0.0-20180220230111-00c29f56e238/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/onsi/ginkgo v1.6.0 h1:Ix8l273rp3QzYgXSR+c8d1fTG7UPgYkOSELPhiY/YGw= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/gomega v1.4.2 h1:3mYCb7aPxS/RU7TI1y4rkEn1oKmPRjNJLNEXgw7MH2I= -github.com/onsi/gomega v1.4.2/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= +github.com/onsi/gomega v1.9.0 h1:R1uwffexN6Pr340GtYRIdZmAiN4J+iw6WG4wog1DUXg= +github.com/onsi/gomega v1.9.0/go.mod h1:Ho0h+IUsWyvy1OpqCwxlQ/21gkhVunqlU8fDGcoTdcA= github.com/pelletier/go-toml v1.1.0 h1:cmiOvKzEunMsAxyhXSzpL5Q1CRKpVv0KQsnAIcSEVYM= github.com/pelletier/go-toml v1.1.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I= @@ -120,6 +122,8 @@ golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGm golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7 h1:9zdDQZ7Thm29KFXgAX/+yaf3eVbP7djjWp/dXAppNCc= +golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= @@ -136,7 +140,7 @@ gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= -gopkg.in/yaml.v2 v2.2.1 h1:mUhvW9EsL+naU5Q3cakzfE91YhliOondGd6ZrsDBHQE= -gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.4 h1:/eiJrUcujPVeJ3xlSWaiNi3uSVmDGBK1pDHUHAnao1I= +gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= diff --git a/test/performance/go.mod b/test/performance/go.mod index beb4115db2..45fef9ae1f 100644 --- a/test/performance/go.mod +++ b/test/performance/go.mod @@ -7,10 +7,9 @@ module github.com/hyperledger/fabric-sdk-go/test/performance replace github.com/hyperledger/fabric-sdk-go => ../../ require ( - github.com/golang/protobuf v1.3.2 - github.com/hyperledger/fabric-protos-go v0.0.0-20191121202242-f5500d5e3e85 + github.com/golang/protobuf v1.3.3 + github.com/hyperledger/fabric-protos-go v0.0.0-20200424173316-dd554ba3746e github.com/hyperledger/fabric-sdk-go v0.0.0-00010101000000-000000000000 - github.com/hyperledger/fabric-sdk-go/test/integration v0.0.0-20200228123703-4919c923071f // indirect github.com/pkg/errors v0.8.1 github.com/stretchr/testify v1.3.0 golang.org/x/net v0.0.0-20190311183353-d8887717615a diff --git a/test/performance/go.sum b/test/performance/go.sum index 9607f6d297..69e4f9d5bc 100644 --- a/test/performance/go.sum +++ b/test/performance/go.sum @@ -32,6 +32,8 @@ github.com/golang/protobuf v1.2.0 h1:P3YflyNX/ehuJFLhxviNdFxQPkGK5cDcApsge1SqnvM github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.2 h1:6nsPYzhq5kReh6QImI3k5qWzO4PEbvbIW2cwSfR/6xs= github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.3 h1:gyjaxf+svBWX08ZjK86iN9geUJF0H6gp2IRKX6Nf6/I= +github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= github.com/google/certificate-transparency-go v0.0.0-20180222191210-5ab67e519c93 h1:qdfmdGwtm13OVx+AxguOWUTbgmXGn2TbdUHipo3chMg= github.com/google/certificate-transparency-go v0.0.0-20180222191210-5ab67e519c93/go.mod h1:QeJfpSbVSfYc7RgB3gJFj9cbuQMMchQxrWXz8Ruopmg= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= @@ -39,13 +41,12 @@ github.com/hashicorp/hcl v0.0.0-20180404174102-ef8a98b0bbce h1:xdsDDbiBDQTKASoGE github.com/hashicorp/hcl v0.0.0-20180404174102-ef8a98b0bbce/go.mod h1:oZtUIOe8dh44I2q6ScRibXws4Ajl+d+nod3AaR9vL5w= github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= -github.com/hyperledger/fabric v1.4.4/go.mod h1:tGFAOCT696D3rG0Vofd2dyWYLySHlh0aQjf7Q1HAju0= +github.com/hyperledger/fabric-config v0.0.6 h1:7Xblwtpb82j+QZCIFfqlHPBS4MMmHzNtuA1W7aokdXg= +github.com/hyperledger/fabric-config v0.0.6/go.mod h1:aeDZ0moG/qKvwLjddcqYr8+58/oNaJy3HE0tI01546c= github.com/hyperledger/fabric-lib-go v1.0.0 h1:UL1w7c9LvHZUSkIvHTDGklxFv2kTeva1QI2emOVc324= github.com/hyperledger/fabric-lib-go v1.0.0/go.mod h1:H362nMlunurmHwkYqR5uHL2UDWbQdbfz74n8kbCFsqc= -github.com/hyperledger/fabric-protos-go v0.0.0-20191121202242-f5500d5e3e85 h1:bNgEcCg5NVRWs/T+VUEfhgh5Olx/N4VB+0+ybW+oSuA= -github.com/hyperledger/fabric-protos-go v0.0.0-20191121202242-f5500d5e3e85/go.mod h1:xVYTjK4DtZRBxZ2D9aE4y6AbLaPwue2o/criQyQbVD0= -github.com/hyperledger/fabric-sdk-go/test/integration v0.0.0-20200228123703-4919c923071f h1:cA0f82vWHAWZIpePsMg+SEEn9VWJxIynUjzPp5EQMJ8= -github.com/hyperledger/fabric-sdk-go/test/integration v0.0.0-20200228123703-4919c923071f/go.mod h1:1w9LomcqM0GogJJCXHySnntqGUtLK2cEk2ou81/haMU= +github.com/hyperledger/fabric-protos-go v0.0.0-20200424173316-dd554ba3746e h1:9PS5iezHk/j7XriSlNuSQILyCOfcZ9wZ3/PiucmSE8E= +github.com/hyperledger/fabric-protos-go v0.0.0-20200424173316-dd554ba3746e/go.mod h1:xVYTjK4DtZRBxZ2D9aE4y6AbLaPwue2o/criQyQbVD0= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515 h1:T+h1c/A9Gawja4Y9mFVWj2vyii2bbUNDw3kt9VxK2EY= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= @@ -62,8 +63,8 @@ github.com/mitchellh/mapstructure v0.0.0-20180220230111-00c29f56e238 h1:+MZW2uvH github.com/mitchellh/mapstructure v0.0.0-20180220230111-00c29f56e238/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/onsi/ginkgo v1.6.0 h1:Ix8l273rp3QzYgXSR+c8d1fTG7UPgYkOSELPhiY/YGw= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/gomega v1.4.2 h1:3mYCb7aPxS/RU7TI1y4rkEn1oKmPRjNJLNEXgw7MH2I= -github.com/onsi/gomega v1.4.2/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= +github.com/onsi/gomega v1.9.0 h1:R1uwffexN6Pr340GtYRIdZmAiN4J+iw6WG4wog1DUXg= +github.com/onsi/gomega v1.9.0/go.mod h1:Ho0h+IUsWyvy1OpqCwxlQ/21gkhVunqlU8fDGcoTdcA= github.com/pelletier/go-toml v1.1.0 h1:cmiOvKzEunMsAxyhXSzpL5Q1CRKpVv0KQsnAIcSEVYM= github.com/pelletier/go-toml v1.1.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I= @@ -120,6 +121,8 @@ golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGm golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7 h1:9zdDQZ7Thm29KFXgAX/+yaf3eVbP7djjWp/dXAppNCc= +golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= @@ -136,7 +139,7 @@ gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= -gopkg.in/yaml.v2 v2.2.1 h1:mUhvW9EsL+naU5Q3cakzfE91YhliOondGd6ZrsDBHQE= -gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.4 h1:/eiJrUcujPVeJ3xlSWaiNi3uSVmDGBK1pDHUHAnao1I= +gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=