{"record":{"id":"92eeaf1eeaf04080","repo":"hyperledger/fabric","slug":"signed-proposal-must-not-be-nil-from-caller-s","errorCode":null,"errorMessage":"signed proposal must not be nil from caller [%s]","messagePattern":"signed proposal must not be nil from caller \\[(.+?)\\]","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"core/chaincode/handler.go","lineNumber":390,"sourceCode":"\t}()\n}\n\n// Check if the transactor is allow to call this chaincode on this channel\nfunc (h *Handler) checkACL(signedProp *pb.SignedProposal, proposal *pb.Proposal, ccIns *sysccprovider.ChaincodeInstance) error {\n\t// if we are here, all we know is that the invoked chaincode is either\n\t// - a system chaincode that *is* invokable through a cc2cc\n\t//   (but we may still have to determine whether the invoker can perform this invocation)\n\t// - an application chaincode\n\t//   (and we still need to determine whether the invoker can invoke it)\n\n\tif h.BuiltinSCCs.IsSysCC(ccIns.ChaincodeName) {\n\t\t// Allow this call\n\t\treturn nil\n\t}\n\n\t// A Nil signedProp will be rejected for non-system chaincodes\n\tif signedProp == nil {\n\t\treturn errors.Errorf(\"signed proposal must not be nil from caller [%s]\", ccIns.String())\n\t}\n\n\treturn h.ACLProvider.CheckACL(resources.Peer_ChaincodeToChaincode, ccIns.ChannelID, signedProp)\n}\n\nfunc (h *Handler) deregister() {\n\th.Registry.Deregister(h.chaincodeID)\n}\n\nfunc (h *Handler) streamDone() <-chan struct{} {\n\th.mutex.Lock()\n\tdefer h.mutex.Unlock()\n\treturn h.streamDoneChan\n}\n\nfunc (h *Handler) ProcessStream(stream ccintf.ChaincodeStream) error {\n\tdefer h.deregister()\n","sourceCodeStart":372,"sourceCodeEnd":408,"githubUrl":"https://github.com/hyperledger/fabric/blob/2736b63f8fd5932511d56fe68b7039d15977f7f6/core/chaincode/handler.go#L372-L408","documentation":"Returned by the chaincode Handler's checkACL when the signed proposal is nil while validating a chaincode-to-chaincode invocation. The ACL check needs the caller's signed proposal to authenticate the invoker; a nil one means the calling chaincode shim sent an incomplete invocation context.","triggerScenarios":"Thrown at core/chaincode/handler.go:390 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Ensure clients submit a properly signed proposal for chaincode-to-chaincode invocations","Fix the client SDK/proxy that dropped the signed proposal before submission"],"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"}