{"record":{"id":"0e5e85ffe7ee8a44","repo":"hyperledger/fabric","slug":"nil-block-0e5e85","errorCode":null,"errorMessage":"nil block","messagePattern":"nil block","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"orderer/consensus/etcdraft/consenter.go","lineNumber":232,"sourceCode":"\thaltCallback := func() { c.ChainManager.SwitchChainToFollower(support.ChannelID()) }\n\n\treturn NewChain(\n\t\tsupport,\n\t\topts,\n\t\tc.Communication,\n\t\trpc,\n\t\tc.BCCSP,\n\t\tfunc() (BlockPuller, error) {\n\t\t\treturn NewBlockPuller(support, c.Dialer, c.OrdererConfig.General.Cluster, c.BCCSP)\n\t\t},\n\t\thaltCallback,\n\t\tnil,\n\t)\n}\n\nfunc (c *Consenter) IsChannelMember(joinBlock *common.Block) (bool, error) {\n\tif joinBlock == nil {\n\t\treturn false, errors.New(\"nil block\")\n\t}\n\tenvelopeConfig, err := protoutil.ExtractEnvelope(joinBlock, 0)\n\tif err != nil {\n\t\treturn false, err\n\t}\n\tbundle, err := channelconfig.NewBundleFromEnvelope(envelopeConfig, c.BCCSP)\n\tif err != nil {\n\t\treturn false, err\n\t}\n\toc, exists := bundle.OrdererConfig()\n\tif !exists {\n\t\treturn false, errors.New(\"no orderer config in bundle\")\n\t}\n\tconfigMetadata := &etcdraft.ConfigMetadata{}\n\tif err := proto.Unmarshal(oc.ConsensusMetadata(), configMetadata); err != nil {\n\t\treturn false, err\n\t}\n","sourceCodeStart":214,"sourceCodeEnd":250,"githubUrl":"https://github.com/hyperledger/fabric/blob/2736b63f8fd5932511d56fe68b7039d15977f7f6/orderer/consensus/etcdraft/consenter.go#L214-L250","documentation":"Consenter.IsChannelMember guard: the join block passed in (used to decide whether this orderer is a member of the channel) is nil. The caller must supply the channel's config block; nothing can be inferred from a nil block.","triggerScenarios":"Thrown at orderer/consensus/etcdraft/consenter.go:232 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Pass the non-nil join/config block obtained from the channel participation API","Check the caller (e.g. HandleChain) for why the join block was not provided"],"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"}