hyperledger/fabric · error
no policies in config block
Error message
no policies in config block
What it means
After loading the channel bundle, the registrar looks up the BlockValidation policy (/Channel/Orderer/BlockValidation) in the channel's policy manager. A valid config block must define this policy because it is used to verify block signatures; if it is absent the channel cannot be validated and the ledger resources are not created.
Source
Thrown at orderer/common/multichannel/registrar.go:401
bundle, err := channelconfig.NewBundle(chdr.ChannelId, configEnvelope.Config, r.bccsp)
if err != nil {
return nil, errors.WithMessage(err, "error creating channelconfig bundle")
}
err = checkResources(bundle)
if err != nil {
return nil, errors.WithMessagef(err, "error checking bundle for channel: %s", chdr.ChannelId)
}
ledger, err := r.ledgerFactory.GetOrCreate(chdr.ChannelId)
if err != nil {
return nil, errors.WithMessagef(err, "error getting ledger for channel: %s", chdr.ChannelId)
}
policy, exists := bundle.PolicyManager().GetPolicy(policies.BlockValidation)
if !exists {
return nil, errors.New("no policies in config block")
}
bftEnabled := bundle.ChannelConfig().Capabilities().ConsensusTypeBFT()
var consenters []*cb.Consenter
if bftEnabled {
cfg, ok := bundle.OrdererConfig()
if !ok {
return nil, errors.New("no orderer section in config block")
}
consenters = cfg.Consenters()
}
signatureVerifier := protoutil.BlockSignatureVerifier(bftEnabled, consenters, policy)
return &ledgerResources{
configResources: &configResources{
mutableResources: channelconfig.NewBundleSource(bundle, r.callbacks...),
bccsp: r.bccsp,View on GitHub (pinned to 2736b63f8f)
Solutions
- Add the Orderer-group policies (including BlockValidation) to the configtx.yaml profile and regenerate the genesis/join block
- Use the stock sample config (first-network / test-network profiles) as a template for the Orderer group policies
- Re-create the channel from a correct config block; an existing bad block cannot be patched in place
Example fix
# before: configtx.yaml Orderer group without policies
Orderer:
OrdererType: etcdraft
# after
Orderer:
OrdererType: etcdraft
Policies:
Readers:
Type: ImplicitMeta
Rule: "ANY Readers"
Writers:
Type: ImplicitMeta
Rule: "ANY Writers"
Admins:
Type: ImplicitMeta
Rule: "MAJORITY Admins"
BlockValidation:
Type: ImplicitMeta
Rule: "ANY Writers" Defensive patterns
Strategy: validation
Validate before calling
# validate channel config before use with configtxlator curl -s -X POST --data-binary @config_block.proto \ http://configtxlator:7059/protolator/decode/common.ConfigBlock # ensure Orderer group contains Policies.BlockValidation
Type guard
func hasBlockValidationPolicy(bundle channelconfig.Resources) bool {
_, ok := bundle.PolicyManager().GetPolicy(policies.BlockValidation)
return ok
} Try / catch
if err := joinChannel(...); err != nil {
if strings.Contains(err.Error(), "no policies in config block") {
// regenerate genesis block from a profile with full Orderer policies
return regenerateGenesisBlock(profile)
}
return err
} Prevention
- Base custom profiles on the stock sample configtx.yaml which includes Readers/Writers/Admins/BlockValidation
- Decode the genesis block with configtxlator and diff policies against a known-good block
- Never hand-edit channel config JSON without re-validating policy groups
When it happens
Trigger: A channel config block (genesis or join block) whose Orderer group lacks the BlockValidation policy, e.g. a configtx.yaml profile that omits Policies for the Orderer group, or a channel created from a custom/legacy config template.
Common situations: Custom genesis profiles missing the default Orderer policies (Readers/Writers/Admins/BlockValidation), config generated by old tooling then imported into newer Fabric, or hand-edited channel config stripped of policy entries.
Related errors
- OrdererOrg config does not allow sub-groups
- [channel %s] cannot create channel because ChannelConfig is
- no orderer section in channel config for channel [%s].
- no orderer section in config block
- no orderer config in bundle
AI-assisted analysis of hyperledger/fabric@2736b63f8f (2026-09-04).
Data as JSON: /api/errors/38f777ec7a0800f7.
Report an issue: GitHub.