@@ -19,7 +19,6 @@ package peer
19
19
import (
20
20
"errors"
21
21
"fmt"
22
- "math"
23
22
"net"
24
23
"sync"
25
24
@@ -145,41 +144,32 @@ func InitChain(cid string) {
145
144
}
146
145
147
146
func 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
181
153
}
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
183
173
}
184
174
185
175
// createChain creates a new chain object and insert it into the chains
0 commit comments