@@ -28,11 +28,16 @@ import (
28
28
configvaluesmsp "github.com/hyperledger/fabric/common/configvalues/msp"
29
29
"github.com/hyperledger/fabric/common/genesis"
30
30
"github.com/hyperledger/fabric/common/policies"
31
+ "github.com/hyperledger/fabric/msp"
31
32
"github.com/hyperledger/fabric/orderer/common/bootstrap"
32
33
cb "github.com/hyperledger/fabric/protos/common"
33
34
ab "github.com/hyperledger/fabric/protos/orderer"
35
+
36
+ logging "github.com/op/go-logging"
34
37
)
35
38
39
+ var logger = logging .MustGetLogger ("common/configtx/tool/provisional" )
40
+
36
41
// Generator can either create an orderer genesis block or config template
37
42
type Generator interface {
38
43
bootstrap.Helper
@@ -63,19 +68,33 @@ const (
63
68
var DefaultChainCreationPolicyNames = []string {AcceptAllPolicyKey }
64
69
65
70
type bootstrapper struct {
66
- minimalGroups []* cb.ConfigGroup
67
- systemChainGroups []* cb.ConfigGroup
71
+ channelGroups []* cb.ConfigGroup
72
+ ordererGroups []* cb.ConfigGroup
73
+ applicationGroups []* cb.ConfigGroup
74
+ ordererSystemChannelGroups []* cb.ConfigGroup
68
75
}
69
76
70
77
// New returns a new provisional bootstrap helper.
71
- func New (conf * genesisconfig.TopLevel ) Generator {
78
+ func New (conf * genesisconfig.Profile ) Generator {
72
79
bs := & bootstrapper {
73
- minimalGroups : []* cb.ConfigGroup {
80
+ channelGroups : []* cb.ConfigGroup {
74
81
// Chain Config Types
75
82
configtxchannel .DefaultHashingAlgorithm (),
76
83
configtxchannel .DefaultBlockDataHashingStructure (),
77
- configtxchannel .TemplateOrdererAddresses (conf .Orderer .Addresses ),
84
+ configtxchannel .TemplateOrdererAddresses (conf .Orderer .Addresses ), // TODO, move to conf.Channel when it exists
78
85
86
+ // Default policies
87
+ policies .TemplateImplicitMetaAnyPolicy ([]string {}, configvaluesmsp .ReadersPolicyKey ),
88
+ policies .TemplateImplicitMetaAnyPolicy ([]string {}, configvaluesmsp .WritersPolicyKey ),
89
+ policies .TemplateImplicitMetaMajorityPolicy ([]string {}, configvaluesmsp .AdminsPolicyKey ),
90
+
91
+ // Temporary AcceptAllPolicy XXX, remove
92
+ cauthdsl .TemplatePolicy (AcceptAllPolicyKey , cauthdsl .AcceptAllPolicy ),
93
+ },
94
+ }
95
+
96
+ if conf .Orderer != nil {
97
+ bs .ordererGroups = []* cb.ConfigGroup {
79
98
// Orderer Config Types
80
99
configtxorderer .TemplateConsensusType (conf .Orderer .OrdererType ),
81
100
configtxorderer .TemplateBatchSize (& ab.BatchSize {
@@ -87,49 +106,67 @@ func New(conf *genesisconfig.TopLevel) Generator {
87
106
configtxorderer .TemplateIngressPolicyNames ([]string {AcceptAllPolicyKey }),
88
107
configtxorderer .TemplateEgressPolicyNames ([]string {AcceptAllPolicyKey }),
89
108
90
- // Policies
91
- cauthdsl .TemplatePolicy (AcceptAllPolicyKey , cauthdsl .AcceptAllPolicy ),
92
-
93
- // Initialize the default Reader/Writer/Admins channel policies
94
- policies .TemplateImplicitMetaAnyPolicy ([]string {}, configvaluesmsp .ReadersPolicyKey ),
95
- policies .TemplateImplicitMetaAnyPolicy ([]string {}, configvaluesmsp .WritersPolicyKey ),
96
- policies .TemplateImplicitMetaMajorityPolicy ([]string {}, configvaluesmsp .AdminsPolicyKey ),
97
-
98
109
// Initialize the default Reader/Writer/Admins orderer policies
99
110
policies .TemplateImplicitMetaAnyPolicy ([]string {configtxorderer .GroupKey }, configvaluesmsp .ReadersPolicyKey ),
100
111
policies .TemplateImplicitMetaAnyPolicy ([]string {configtxorderer .GroupKey }, configvaluesmsp .WritersPolicyKey ),
101
112
policies .TemplateImplicitMetaMajorityPolicy ([]string {configtxorderer .GroupKey }, configvaluesmsp .AdminsPolicyKey ),
113
+ }
114
+
115
+ for _ , org := range conf .Orderer .Organizations {
116
+ mspConfig , err := msp .GetLocalMspConfig (org .MSPDir , org .ID )
117
+ if err != nil {
118
+ logger .Panicf ("Error loading MSP configuration for org %s: %s" , org .Name , err )
119
+ }
120
+ bs .ordererGroups = append (bs .ordererGroups , configvaluesmsp .TemplateGroupMSP ([]string {configtxorderer .GroupKey , org .Name }, mspConfig ))
121
+ }
122
+
123
+ switch conf .Orderer .OrdererType {
124
+ case ConsensusTypeSolo , ConsensusTypeSbft :
125
+ case ConsensusTypeKafka :
126
+ bs .ordererGroups = append (bs .ordererGroups , configtxorderer .TemplateKafkaBrokers (conf .Orderer .Kafka .Brokers ))
127
+ default :
128
+ panic (fmt .Errorf ("Wrong consenter type value given: %s" , conf .Orderer .OrdererType ))
129
+ }
130
+
131
+ bs .ordererSystemChannelGroups = []* cb.ConfigGroup {
132
+ // Policies
133
+ configtxorderer .TemplateChainCreationPolicyNames (DefaultChainCreationPolicyNames ),
134
+ }
135
+ }
102
136
137
+ if conf .Application != nil {
138
+
139
+ bs .applicationGroups = []* cb.ConfigGroup {
103
140
// Initialize the default Reader/Writer/Admins application policies
104
141
policies .TemplateImplicitMetaAnyPolicy ([]string {configtxapplication .GroupKey }, configvaluesmsp .ReadersPolicyKey ),
105
142
policies .TemplateImplicitMetaAnyPolicy ([]string {configtxapplication .GroupKey }, configvaluesmsp .WritersPolicyKey ),
106
143
policies .TemplateImplicitMetaMajorityPolicy ([]string {configtxapplication .GroupKey }, configvaluesmsp .AdminsPolicyKey ),
107
- },
108
-
109
- systemChainGroups : []* cb.ConfigGroup {
110
- configtxorderer .TemplateChainCreationPolicyNames (DefaultChainCreationPolicyNames ),
111
- },
112
- }
144
+ }
145
+ for _ , org := range conf .Application .Organizations {
146
+ mspConfig , err := msp .GetLocalMspConfig (org .MSPDir , org .ID )
147
+ if err != nil {
148
+ logger .Panicf ("Error loading MSP configuration for org %s: %s" , org .Name , err )
149
+ }
150
+ bs .ordererGroups = append (bs .ordererGroups , configvaluesmsp .TemplateGroupMSP ([]string {configtxapplication .GroupKey , org .Name }, mspConfig ))
151
+ }
113
152
114
- switch conf .Orderer .OrdererType {
115
- case ConsensusTypeSolo , ConsensusTypeSbft :
116
- case ConsensusTypeKafka :
117
- bs .minimalGroups = append (bs .minimalGroups , configtxorderer .TemplateKafkaBrokers (conf .Orderer .Kafka .Brokers ))
118
- default :
119
- panic (fmt .Errorf ("Wrong consenter type value given: %s" , conf .Orderer .OrdererType ))
120
153
}
121
154
122
155
return bs
123
156
}
124
157
125
158
func (bs * bootstrapper ) ChannelTemplate () configtx.Template {
126
- return configtx .NewSimpleTemplate (bs .minimalGroups ... )
159
+ return configtx .NewCompositeTemplate (
160
+ configtx .NewSimpleTemplate (bs .channelGroups ... ),
161
+ configtx .NewSimpleTemplate (bs .ordererGroups ... ),
162
+ configtx .NewSimpleTemplate (bs .applicationGroups ... ),
163
+ )
127
164
}
128
165
129
166
func (bs * bootstrapper ) GenesisBlock () * cb.Block {
130
167
block , err := genesis .NewFactoryImpl (
131
168
configtx .NewCompositeTemplate (
132
- configtx .NewSimpleTemplate (bs .systemChainGroups ... ),
169
+ configtx .NewSimpleTemplate (bs .ordererSystemChannelGroups ... ),
133
170
bs .ChannelTemplate (),
134
171
),
135
172
).Block (TestChainID )
0 commit comments