{"record":{"id":"81e1fecb87de62ce","repo":"hyperledger/fabric","slug":"block-validation-policy-is-not-found-in-the-polici","errorCode":null,"errorMessage":"block validation policy is not found in the policies of 'Orderer' group","messagePattern":"block validation policy is not found in the policies of 'Orderer' group","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"orderer/consensus/smartbft/configverifier.go","lineNumber":160,"sourceCode":"\t}\n\n\tquorumSize := policies.ComputeBFTQuorum(n, f)\n\tsp := &common.SignaturePolicyEnvelope{\n\t\tRule:       policydsl.NOutOf(int32(quorumSize), pols),\n\t\tIdentities: identities,\n\t}\n\n\texpectedConfigPol := &common.Policy{\n\t\tType:  int32(common.Policy_SIGNATURE),\n\t\tValue: protoutil.MarshalOrPanic(sp),\n\t}\n\n\tif len(conf.ChannelGroup.Groups[\"Orderer\"].Policies) == 0 {\n\t\treturn fmt.Errorf(\"empty policies in 'Orderer' group\")\n\t}\n\n\tif conf.ChannelGroup.Groups[\"Orderer\"].Policies[\"BlockValidation\"] == nil {\n\t\treturn fmt.Errorf(\"block validation policy is not found in the policies of 'Orderer' group\")\n\t}\n\n\tactualPolicy := conf.ChannelGroup.Groups[\"Orderer\"].Policies[\"BlockValidation\"].Policy\n\n\tif !proto.Equal(expectedConfigPol, actualPolicy) {\n\t\treturn fmt.Errorf(\"block validation policy should be a signature policy: %v but it is %v instead\", expectedConfigPol, actualPolicy)\n\t}\n\n\tconsensusTypeConfigValue := conf.ChannelGroup.Groups[\"Orderer\"].Values[\"ConsensusType\"]\n\n\tif consensusTypeConfigValue == nil {\n\t\treturn fmt.Errorf(\"missing consensus type property in config\")\n\t}\n\n\tconsensusTypeValue := &protosorderer.ConsensusType{}\n\tif err := proto.Unmarshal(consensusTypeConfigValue.Value, consensusTypeValue); err != nil {\n\t\treturn fmt.Errorf(\"invalid consensus type property in config: %v\", err)\n\t}","sourceCodeStart":142,"sourceCodeEnd":178,"githubUrl":"https://github.com/hyperledger/fabric/blob/2736b63f8fd5932511d56fe68b7039d15977f7f6/orderer/consensus/smartbft/configverifier.go#L142-L178","documentation":"checkConsentersMatchPolicy guard: the Orderer group's Policies map has no 'BlockValidation' entry. The verifier recomputes the expected BlockValidation policy from the consenter mapping and needs to compare it against the configured one; its absence is a malformed orderer config.","triggerScenarios":"Thrown at orderer/consensus/smartbft/configverifier.go:160 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Restore the BlockValidation policy in the Orderer group","Re-create the config update without deleting orderer policies"],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"2736b63f8fd5932511d56fe68b7039d15977f7f6","analyzedAt":"2026-09-04T08:52:36.465Z","contentChangedAt":"2026-09-04T08:52:36.465Z","schemaVersion":2},"datasetVersion":"2026-09-08T10:18:20.063Z"}