hyperledger/fabric · error

error unmarshalling metadata for key %s

Error message

error unmarshalling metadata for key %s

What it means

Returned by Serializer.DeserializeAllMetadata when an entry in the metadata keyspace fails to proto-unmarshal into StateMetadata while scanning the whole namespace. One corrupt key aborts the range scan for all chaincode metadata under that namespace.

Source

Thrown at core/chaincode/lifecycle/serializer.go:485

	if !ok {
		return 0, errors.Errorf("expected key %s to encode a value of type Int64, but was %T", FieldKey(namespace, name, field), value.Type)
	}
	return oneOf.Int64, nil
}

func (s *Serializer) DeserializeAllMetadata(namespace string, state RangeableState) (map[string]*lb.StateMetadata, error) {
	prefix := fmt.Sprintf("%s/%s/", namespace, MetadataInfix)
	kvs, err := state.GetStateRange(prefix)
	if err != nil {
		return nil, errors.WithMessagef(err, "could not get state range for namespace %s", namespace)
	}
	result := map[string]*lb.StateMetadata{}
	for key, value := range kvs {
		name := key[len(prefix):]
		metadata := &lb.StateMetadata{}
		err = proto.Unmarshal(value, metadata)
		if err != nil {
			return nil, errors.Wrapf(err, "error unmarshalling metadata for key %s", key)
		}
		result[name] = metadata
	}
	return result, nil
}

View on GitHub (pinned to 2736b63f8f)

Solutions

  1. Identify the offending key from the wrapped error and repair/overwrite it
  2. Re-commit lifecycle definitions to rewrite well-formed metadata
Defensive patterns

Strategy: try-catch

When it happens

Trigger: Thrown at core/chaincode/lifecycle/serializer.go:485 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/0963da8118052e2b. Report an issue: GitHub.