hyperledger/fabric · error
could not convert message to signedData: %s
Error message
could not convert message to signedData: %s
What it means
SigFilter.Apply wraps a failure of protoutil.EnvelopeAsSignedData: the broadcast message envelope could not be decomposed into signature data (nil/short payload, missing signature or data bytes). Without signed data the Writers/Writers-maintenance policy cannot be evaluated, so the message is rejected.
Source
Thrown at orderer/common/msgprocessor/sigfilter.go:58
// maintenancePolicyName is applied when Orderer/ConsensusType.State = MAINTENANCE
func NewSigFilter(normalPolicyName, maintenancePolicyName string, support SigFilterSupport) *SigFilter {
return &SigFilter{
normalPolicyName: normalPolicyName,
maintenancePolicyName: maintenancePolicyName,
support: support,
}
}
// Apply applies the policy given, resulting in Reject or Forward, never Accept
func (sf *SigFilter) Apply(message *cb.Envelope) error {
ordererConf, ok := sf.support.OrdererConfig()
if !ok {
logger.Panic("Programming error: orderer config not found")
}
signedData, err := protoutil.EnvelopeAsSignedData(message)
if err != nil {
return fmt.Errorf("could not convert message to signedData: %s", err)
}
// In maintenance mode, we typically require the signature of /Channel/Orderer/Writers.
// This will filter out configuration changes that are not related to consensus-type migration
// (e.g on /Channel/Application), and will block Deliver requests from peers (which are normally /Channel/Readers).
policyName := sf.normalPolicyName
if ordererConf.ConsensusState() == orderer.ConsensusType_STATE_MAINTENANCE {
policyName = sf.maintenancePolicyName
}
policy, ok := sf.support.PolicyManager().GetPolicy(policyName)
if !ok {
return fmt.Errorf("could not find policy %s", policyName)
}
err = policy.EvaluateSignedData(signedData)
if err != nil {
logger.Warnw("SigFilter evaluation failed", "error", err.Error(), "ConsensusState", ordererConf.ConsensusState(), "policyName", policyName, "signingIdentity", protoutil.LogMessageForSerializedIdentities(signedData))View on GitHub (pinned to 2736b63f8f)
Solutions
- Fix the client to broadcast a well-formed signed envelope
- Verify the envelope was not truncated before reaching the orderer
Defensive patterns
Strategy: try-catch
When it happens
Trigger: Thrown at orderer/common/msgprocessor/sigfilter.go:58 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of hyperledger/fabric@2736b63f8f (2026-09-04).
Data as JSON: /api/errors/715e67f85f7f66c6.
Report an issue: GitHub.