{"record":{"id":"a1f60582cd4a8576","repo":"hyperledger/fabric","slug":"plugin-with-name-s-wasn-t-found","errorCode":null,"errorMessage":"plugin with name %s wasn't found","messagePattern":"plugin with name (.+?) wasn't found","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"core/committer/txvalidator/v14/plugin_validator.go","lineNumber":127,"sourceCode":"\tplugin, err := pv.getOrCreatePlugin(ctx)\n\tif err != nil {\n\t\treturn &validation.ExecutionFailureError{\n\t\t\tReason: fmt.Sprintf(\"plugin with name %s couldn't be used: %v\", ctx.VSCCName, err),\n\t\t}\n\t}\n\terr = plugin.Validate(ctx.Block, ctx.Namespace, ctx.Seq, 0, vp.SerializedPolicy(ctx.Policy))\n\tvalidityStatus := \"valid\"\n\tif err != nil {\n\t\tvalidityStatus = fmt.Sprintf(\"invalid: %v\", err)\n\t}\n\tlogger.Debug(\"Transaction\", ctx.TxID, \"appears to be\", validityStatus)\n\treturn err\n}\n\nfunc (pv *PluginValidator) getOrCreatePlugin(ctx *Context) (validation.Plugin, error) {\n\tpluginFactory := pv.FactoryByName(vp.Name(ctx.VSCCName))\n\tif pluginFactory == nil {\n\t\treturn nil, errors.Errorf(\"plugin with name %s wasn't found\", ctx.VSCCName)\n\t}\n\n\tpluginsByChannel := pv.getOrCreatePluginChannelMapping(vp.Name(ctx.VSCCName), pluginFactory)\n\treturn pluginsByChannel.createPluginIfAbsent(ctx.Channel)\n}\n\nfunc (pv *PluginValidator) getOrCreatePluginChannelMapping(plugin vp.Name, pf validation.PluginFactory) *pluginsByChannel {\n\tpv.Lock()\n\tdefer pv.Unlock()\n\tendorserChannelMapping, exists := pv.pluginChannelMapping[plugin]\n\tif !exists {\n\t\tendorserChannelMapping = &pluginsByChannel{\n\t\t\tpluginFactory:    pf,\n\t\t\tchannels2Plugins: make(map[string]validation.Plugin),\n\t\t\tpv:               pv,\n\t\t}\n\t\tpv.pluginChannelMapping[plugin] = endorserChannelMapping\n\t}","sourceCodeStart":109,"sourceCodeEnd":145,"githubUrl":"https://github.com/hyperledger/fabric/blob/2736b63f8fd5932511d56fe68b7039d15977f7f6/core/committer/txvalidator/v14/plugin_validator.go#L109-L145","documentation":"The plugin validator looks up a validation (VSCC) plugin factory by the name in the chaincode's validation parameter. No registered plugin factory matches that name, so validation cannot proceed and the transaction/channel validation fails.","triggerScenarios":"getOrCreatePlugin is called with ctx.VSCCName whose vp.Name has no entry in the peer's plugin registry — the VSCC name in the channel's chaincode (e.g., after upgrade/ manual config) isn't one of \"vscc\" or a registered custom plugin name.","commonSituations":"Custom validation plugin not configured in core.yaml handlers.validators; typo in the VSCC name in the ledger's validation parameter; channel created/updated on a newer Fabric version using a plugin name the peer doesn't know; peer started without the plugin built-in.","solutions":["Ensure the validation plugin is registered in core.yaml under handlers: validators with a matching name","Verify the VSCC name recorded in the channel config / chaincode data is correct (usually \"vscc\")","Rebuild the peer including the custom plugin library and restart","Align peer Fabric version with the one that created the channel data"],"exampleFix":"// before\n// core.yaml: handlers: validators: (plugin missing)\n// after\nhandlers:\n  validators:\n    - name: mycustomvscc\n      library: /etc/hyperledger/fabric/plugins/mycustomvscc.so","handlingStrategy":"validation","validationCode":"// peer config check before starting validation work\n// read core.yaml handlers.validators and confirm the VSCC name is registered\nif !registeredValidators.Contains(vsccName) { return fmt.Errorf(\"validator %s not configured\", vsccName) }","typeGuard":"func isKnownVSCC(name string) bool { return name == \"vscc\" || registeredCustomValidators[name] }","tryCatchPattern":"if _, err := pv.getOrCreatePlugin(ctx); err != nil && strings.Contains(err.Error(), \"wasn't found\") {\n    // fix core.yaml handlers or correct the VSCC name in channel config\n}","preventionTips":["Register every custom validator in core.yaml handlers section","Use the standard \"vscc\" name unless a custom plugin is intentional","Keep peer Fabric version aligned with channel creators","Lint channel config for unknown validation parameters"],"tags":["plugin","validation","configuration"],"backgroundTag":"plugin-not-found","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"}