@@ -63,6 +63,7 @@ type ChannelConfig struct {
6363// ChannelCfg contains channel configuration
6464type ChannelCfg struct {
6565 id string
66+ blockNumber uint64
6667 msps []* mb.MSPConfig
6768 anchorPeers []* fab.OrgAnchorPeer
6869 orderers []string
@@ -80,6 +81,11 @@ func (cfg *ChannelCfg) ID() string {
8081 return cfg .id
8182}
8283
84+ // BlockNumber returns the channel config block number
85+ func (cfg * ChannelCfg ) BlockNumber () uint64 {
86+ return cfg .blockNumber
87+ }
88+
8389// MSPs returns msps
8490func (cfg * ChannelCfg ) MSPs () []* mb.MSPConfig {
8591 return cfg .msps
@@ -157,22 +163,22 @@ func (c *ChannelConfig) queryPeers(reqCtx reqContext.Context) (*ChannelCfg, erro
157163 targets = peersToTxnProcessors (c .opts .Targets )
158164 }
159165
160- configEnvelope , err := l .QueryConfigBlock (reqCtx , targets , & channel.TransactionProposalResponseVerifier {MinResponses : minResponses })
166+ block , err := l .QueryConfigBlock (reqCtx , targets , & channel.TransactionProposalResponseVerifier {MinResponses : minResponses })
161167 if err != nil {
162168 return nil , errors .WithMessage (err , "QueryBlockConfig failed" )
163169 }
164170
165- return extractConfig (c .channelID , configEnvelope )
171+ return extractConfig (c .channelID , block )
166172}
167173
168174func (c * ChannelConfig ) queryOrderer (reqCtx reqContext.Context ) (* ChannelCfg , error ) {
169175
170- configEnvelope , err := resource .LastConfigFromOrderer (reqCtx , c .channelID , c .opts .Orderer )
176+ block , err := resource .LastConfigFromOrderer (reqCtx , c .channelID , c .opts .Orderer )
171177 if err != nil {
172178 return nil , errors .WithMessage (err , "LastConfigFromOrderer failed" )
173179 }
174180
175- return extractConfig (c .channelID , configEnvelope )
181+ return extractConfig (c .channelID , block )
176182}
177183
178184func (c * ChannelConfig ) getLimitOpts (ctx context.Client ) (int , int ) {
@@ -251,7 +257,15 @@ func prepareOpts(options ...Option) (Opts, error) {
251257 return opts , nil
252258}
253259
254- func extractConfig (channelID string , configEnvelope * common.ConfigEnvelope ) (* ChannelCfg , error ) {
260+ func extractConfig (channelID string , block * common.Block ) (* ChannelCfg , error ) {
261+ if block .Header == nil {
262+ return nil , errors .New ("expected header in block" )
263+ }
264+
265+ configEnvelope , err := resource .CreateConfigEnvelope (block .Data .Data [0 ])
266+ if err != nil {
267+ return nil , err
268+ }
255269
256270 group := configEnvelope .Config .ChannelGroup
257271
@@ -261,13 +275,14 @@ func extractConfig(channelID string, configEnvelope *common.ConfigEnvelope) (*Ch
261275
262276 config := & ChannelCfg {
263277 id : channelID ,
278+ blockNumber : block .Header .Number ,
264279 msps : []* mb.MSPConfig {},
265280 anchorPeers : []* fab.OrgAnchorPeer {},
266281 orderers : []string {},
267282 versions : versions ,
268283 }
269284
270- err : = loadConfig (config , config .versions .Channel , group , "base" , "" , true )
285+ err = loadConfig (config , config .versions .Channel , group , "base" , "" , true )
271286 if err != nil {
272287 return nil , errors .WithMessage (err , "load config items from config group failed" )
273288 }
0 commit comments