hyperledger/fabric · error
failed to retrieve last config block
Error message
failed to retrieve last config block
What it means
createBFTDeliverer wraps a failure of cluster.LastConfigBlock: reading the last config block number from the local block (metadata) and fetching that block from the ledger failed, so the synchronizer cannot build the block verification assistant needed to pull blocks.
Source
Thrown at orderer/consensus/smartbft/synchronizer_bft.go:186
f := uint64(clusterSize-1) / 3 // The number of tolerated byzantine faults
lenH := uint64(len(heights))
s.Logger.Debugf("Cluster size: %d, F: %d, Heights: %v", clusterSize, f, heights)
if lenH < f+1 {
s.Logger.Debugf("Returning %d", heights[int(lenH)-1])
return heights[int(lenH)-1]
}
s.Logger.Debugf("Returning %d", heights[f])
return heights[f]
}
// createBFTDeliverer creates and initializes the BFT block deliverer.
func (s *BFTSynchronizer) createBFTDeliverer(startHeight uint64, myEndpoint string) (BFTBlockDeliverer, error) {
lastBlock := s.Support.Block(startHeight - 1)
lastConfigBlock, err := cluster.LastConfigBlock(lastBlock, s.Support)
if err != nil {
return nil, errors.Wrapf(err, "failed to retrieve last config block")
}
lastConfigEnv, err := deliverclient.ConfigFromBlock(lastConfigBlock)
if err != nil {
return nil, errors.Wrapf(err, "failed to retrieve last config envelope")
}
var updatableVerifier deliverclient.CloneableUpdatableBlockVerifier
updatableVerifier, err = s.VerifierFactory.CreateBlockVerifier(lastConfigBlock, lastBlock, s.CryptoProvider, s.Logger)
if err != nil {
return nil, errors.Wrapf(err, "failed to create BlockVerificationAssistant")
}
clientConfig := s.ClusterDialer.Config // The cluster and block puller use slightly different options
clientConfig.AsyncConnect = false
clientConfig.SecOpts.VerifyCertificate = nil
// The maximal amount of time to wait before retrying to connect.
maxRetryInterval := s.LocalConfigCluster.ReplicationRetryTimeoutView on GitHub (pinned to 2736b63f8f)
Solutions
- Check local ledger integrity (the last block and its metadata)
- Restore the ledger from a backup or rejoin the node
Defensive patterns
Strategy: try-catch
When it happens
Trigger: Thrown at orderer/consensus/smartbft/synchronizer_bft.go:186 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of hyperledger/fabric@2736b63f8f (2026-09-04).
Data as JSON: /api/errors/9a7b67e8098773ac.
Report an issue: GitHub.