{"record":{"id":"bfe29d73bdd03c23","repo":"hyperledger/fabric","slug":"consortium-s-org-s-attempted-to-change-msp-id-fr","errorCode":null,"errorMessage":"consortium %s org %s attempted to change MSP ID from %s to %s","messagePattern":"consortium (.+?) org (.+?) attempted to change MSP ID from (.+?) to (.+?)","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"common/channelconfig/bundle.go","lineNumber":156,"sourceCode":"\t\tncc, ok := nb.ConsortiumsConfig()\n\t\tif !ok {\n\t\t\treturn errors.Errorf(\"current config has consortiums section, but new config does not\")\n\t\t}\n\n\t\tfor consortiumName, consortium := range cc.Consortiums() {\n\t\t\tnconsortium, ok := ncc.Consortiums()[consortiumName]\n\t\t\tif !ok {\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tfor orgName, org := range consortium.Organizations() {\n\t\t\t\tnorg, ok := nconsortium.Organizations()[orgName]\n\t\t\t\tif !ok {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tmspID := org.MSPID()\n\t\t\t\tif mspID != norg.MSPID() {\n\t\t\t\t\treturn errors.Errorf(\"consortium %s org %s attempted to change MSP ID from %s to %s\", consortiumName, orgName, mspID, norg.MSPID())\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} else if _, okNew := nb.ConsortiumsConfig(); okNew {\n\t\treturn errors.Errorf(\"current config has no consortiums section, but new config does\")\n\t}\n\n\treturn nil\n}\n\n// NewBundleFromEnvelope wraps the NewBundle function, extracting the needed\n// information from a full configtx\nfunc NewBundleFromEnvelope(env *cb.Envelope, bccsp bccsp.BCCSP) (*Bundle, error) {\n\tpayload, err := protoutil.UnmarshalPayload(env.Payload)\n\tif err != nil {\n\t\treturn nil, errors.Wrap(err, \"failed to unmarshal payload from envelope\")\n\t}\n","sourceCodeStart":138,"sourceCodeEnd":174,"githubUrl":"https://github.com/hyperledger/fabric/blob/2736b63f8fd5932511d56fe68b7039d15977f7f6/common/channelconfig/bundle.go#L138-L174","documentation":"Returned by Bundle.ValidateNew during a config update when an org that exists in both the old and new consortium definitions changed its MSP identifier. MSP IDs are immutable per org name across config updates; this guards against a config that would silently re-alias an organization's identity.","triggerScenarios":"Thrown at common/channelconfig/bundle.go:156 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Keep the org's original MSP ID in the config update","If a new MSP identity is required, add it as a new organization and remove the old one in separate steps"],"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"}