{"record":{"id":"514c8765405923ec","repo":"hyperledger/fabric","slug":"orderer-endpoints-for-organization-s-are-missing","errorCode":null,"errorMessage":"orderer endpoints for organization %s are missing and must be configured when capability V3_0 is enabled","messagePattern":"orderer endpoints for organization (.+?) are missing and must be configured when capability V3_0 is enabled","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"internal/configtxgen/encoder/encoder.go","lineNumber":338,"sourceCode":"\tif conf.SkipAsForeign {\n\t\treturn ordererOrgGroup, nil\n\t}\n\n\tmspConfig, err := msp.GetVerifyingMspConfig(conf.MSPDir, conf.ID, conf.MSPType)\n\tif err != nil {\n\t\treturn nil, errors.Wrapf(err, \"1 - Error loading MSP configuration for org: %s\", conf.Name)\n\t}\n\n\tif err := AddPolicies(ordererOrgGroup, conf.Policies, channelconfig.AdminsPolicyKey); err != nil {\n\t\treturn nil, errors.Wrapf(err, \"error adding policies to orderer org group '%s'\", conf.Name)\n\t}\n\n\taddValue(ordererOrgGroup, channelconfig.MSPValue(mspConfig), channelconfig.AdminsPolicyKey)\n\n\tif len(conf.OrdererEndpoints) > 0 {\n\t\taddValue(ordererOrgGroup, channelconfig.EndpointsValue(conf.OrdererEndpoints), channelconfig.AdminsPolicyKey)\n\t} else if channelCapabilities[\"V3_0\"] {\n\t\treturn nil, errors.Errorf(\"orderer endpoints for organization %s are missing and must be configured when capability V3_0 is enabled\", conf.Name)\n\t}\n\n\treturn ordererOrgGroup, nil\n}\n\n// NewApplicationGroup returns the application component of the channel configuration.  It defines the organizations which are involved\n// in application logic like chaincodes, and how these members may interact with the orderer.  It sets the mod_policy of all elements to \"Admins\".\nfunc NewApplicationGroup(conf *genesisconfig.Application) (*cb.ConfigGroup, error) {\n\tapplicationGroup := protoutil.NewConfigGroup()\n\tif err := AddPolicies(applicationGroup, conf.Policies, channelconfig.AdminsPolicyKey); err != nil {\n\t\treturn nil, errors.Wrapf(err, \"error adding policies to application group\")\n\t}\n\n\tif len(conf.ACLs) > 0 {\n\t\taddValue(applicationGroup, channelconfig.ACLValues(conf.ACLs), channelconfig.AdminsPolicyKey)\n\t}\n\n\tif len(conf.Capabilities) > 0 {","sourceCodeStart":320,"sourceCodeEnd":356,"githubUrl":"https://github.com/hyperledger/fabric/blob/2736b63f8fd5932511d56fe68b7039d15977f7f6/internal/configtxgen/encoder/encoder.go#L320-L356","documentation":"Capability check in NewOrdererOrgGroup: the profile enables the V3_0 channel capability, which requires every orderer organization to declare OrdererEndpoints, but conf.OrdererEndpoints is empty for this organization (%s). Without per-org endpoints the orderer addressing cannot be encoded in the new config style.","triggerScenarios":"Thrown at internal/configtxgen/encoder/encoder.go:338 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Add OrdererEndpoints to the organization's definition in configtx.yaml, e.g. OrdererEndpoints: [\"host:7050\"]","Alternatively disable the V3_0 capability if legacy global OrdererAddresses should be used","Ensure the endpoint list is populated for every org under Orderer: Organizations"],"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"}