hyperledger/fabric · error

failed to deserialize values

Error message

failed to deserialize values

What it means

NewOrganizationConfig calls DeserializeProtoValuesFromGroup to unmarshal each org config Value into its expected proto (e.g. MSPConfig). If a value is missing, unexpected, or fails proto unmarshalling, the error is wrapped as "failed to deserialize values". The root cause is malformed or mismatched config values in the org group.

Source

Thrown at common/channelconfig/organization.go:51

	msp              msp.MSP
	mspID            string
	name             string
}

// NewOrganizationConfig creates a new config for an organization
func NewOrganizationConfig(name string, orgGroup *cb.ConfigGroup, mspConfigHandler *MSPConfigHandler) (*OrganizationConfig, error) {
	if len(orgGroup.Groups) > 0 {
		return nil, fmt.Errorf("organizations do not support sub-groups")
	}

	oc := &OrganizationConfig{
		protos:           &OrganizationProtos{},
		name:             name,
		mspConfigHandler: mspConfigHandler,
	}

	if err := DeserializeProtoValuesFromGroup(orgGroup, oc.protos); err != nil {
		return nil, errors.Wrap(err, "failed to deserialize values")
	}

	if err := oc.Validate(); err != nil {
		return nil, err
	}

	return oc, nil
}

// Name returns the name this org is referred to in config
func (oc *OrganizationConfig) Name() string {
	return oc.name
}

// MSPID returns the MSP ID associated with this org
func (oc *OrganizationConfig) MSPID() string {
	return oc.mspID
}

View on GitHub (pinned to 2736b63f8f)

Solutions

  1. Ensure the org group contains a valid MSP value with correctly serialized FabricMSPConfig bytes
  2. Inspect the wrapped underlying error (errors.Wrap) for the exact value key that failed
  3. Regenerate the org config with configtxgen rather than hand-crafting proto bytes

Example fix

// before: double-encoded value
value := []byte(base64.StdEncoding.EncodeToString(mspConfigBytes))
// after: raw proto bytes
value := mspConfigBytes
Defensive patterns

Strategy: validation

Validate before calling

// ensure the org group has a parseable MSP value before calling NewOrganizationConfig
var mspValue *mb.MSPConfig
if v, ok := orgGroup.Values["MSP"]; !ok {
	return fmt.Errorf("org group missing MSP value")
} else if err := proto.Unmarshal(v.Value, mspValue); err != nil {
	return fmt.Errorf("org MSP value is not valid proto bytes: %w", err)
}

Try / catch

oc, err := channelconfig.NewOrganizationConfig(name, orgGroup, mspHandler)
if err != nil && strings.Contains(err.Error(), "failed to deserialize values") {
	return fmt.Errorf("check org config value bytes (no base64 double-encoding, valid protos): %w", err)
}

Prevention

When it happens

Trigger: An org ConfigGroup whose Values don't match the expected proto schema — e.g. the MSP value bytes are not a valid serialized FabricMSPConfig, a required value key (like MSP) is missing from the lookup, or bytes were double-encoded (base64 string instead of raw bytes).

Common situations: Manually assembling config updates with hand-marshaled protos; converting configs between formats (JSON/YAML) and base64-encoding bytes that should stay raw; version mismatches where a newer Fabric writes values an older parser can't unmarshal.

Related errors


AI-assisted analysis of hyperledger/fabric@2736b63f8f (2026-09-04). Data as JSON: /api/errors/100316413e894679. Report an issue: GitHub.