@@ -19,7 +19,6 @@ package peer
1919import (
2020 "errors"
2121 "fmt"
22- "math"
2322 "net"
2423 "sync"
2524
@@ -145,41 +144,32 @@ func InitChain(cid string) {
145144}
146145
147146func getCurrConfigBlockFromLedger (ledger ledger.PeerLedger ) (* common.Block , error ) {
148- // Config blocks contain only 1 transaction, so we look for 1-tx
149- // blocks and check the transaction type
150- var envelope * common.Envelope
151- var tx * common.Payload
152- var block * common.Block
153- var err error
154- var currBlockNumber uint64 = math .MaxUint64
155- for currBlockNumber >= 0 {
156- if block , err = ledger .GetBlockByNumber (currBlockNumber ); err != nil {
157- return nil , err
158- }
159- if block .Data != nil && len (block .Data .Data ) == 1 {
160- if envelope , err = utils .ExtractEnvelope (block , 0 ); err != nil {
161- peerLogger .Warning ("Failed to get Envelope from Block %d." , block .Header .Number )
162- currBlockNumber = block .Header .Number - 1
163- continue
164- }
165- if tx , err = utils .ExtractPayload (envelope ); err != nil {
166- peerLogger .Warning ("Failed to get Payload from Block %d." , block .Header .Number )
167- currBlockNumber = block .Header .Number - 1
168- continue
169- }
170- chdr , err := utils .UnmarshalChannelHeader (tx .Header .ChannelHeader )
171- if err != nil {
172- peerLogger .Warning ("Failed to get ChannelHeader from Block %d, error %s." , block .Header .Number , err )
173- currBlockNumber = block .Header .Number - 1
174- continue
175- }
176- if chdr .Type == int32 (common .HeaderType_CONFIG ) {
177- return block , nil
178- }
179- }
180- currBlockNumber = block .Header .Number - 1
147+ peerLogger .Debugf ("Getting config block" )
148+
149+ // get last block. Last block number is Height-1
150+ blockchainInfo , err := ledger .GetBlockchainInfo ()
151+ if err != nil {
152+ return nil , err
181153 }
182- return nil , fmt .Errorf ("Failed to find config block." )
154+ lastBlock , err := ledger .GetBlockByNumber (blockchainInfo .Height - 1 )
155+ if err != nil {
156+ return nil , err
157+ }
158+
159+ // get most recent config block location from last block metadata
160+ configBlockIndex , err := utils .GetLastConfigIndexFromBlock (lastBlock )
161+ if err != nil {
162+ return nil , err
163+ }
164+
165+ // get most recent config block
166+ configBlock , err := ledger .GetBlockByNumber (configBlockIndex )
167+ if err != nil {
168+ return nil , err
169+ }
170+
171+ peerLogger .Debugf ("Got config block[%d]" , configBlockIndex )
172+ return configBlock , nil
183173}
184174
185175// createChain creates a new chain object and insert it into the chains
0 commit comments