% RFC: SCP Canonical Data Model % Version 0.3.2 % 2026-02-26
RFC: SCP Canonical Data Model Specification v0.3.2
Status: Standards Track
Category: Core Protocol Layer
Normative keywords MUST, MUST NOT, REQUIRED, SHALL, SHALL NOT, SHOULD, SHOULD NOT, MAY are interpreted as described in RFC 2119.
1. Abstract
This document defines the Canonical Data Model used in SCP v0.3.2.
The Canonical Model ensures:
- Deterministic data structure
- Cross-Vault semantic consistency
- Compatibility with Multi-Layer Registry
- Compatibility with OEV (Optimal Economic Verification)
- Commitment integrity for fraud detection
All Vault implementations MUST comply with this specification.
2. Design Principles
The Canonical Data Model MUST satisfy:
- Deterministic serialization\
- Stable attribute ordering\
- Versioned schema definition\
- Unit normalization\
- Registry-bound attribute resolution\
- Commitment reproducibility
Canonicalization MUST occur inside the Vault boundary.
3. Canonical Record Structure
struct CanonicalRecord { schema_version: string, vault_id: bytes, timestamp: u64, attributes: Vec<CanonicalAttributeValue>, }
Where:
struct CanonicalAttributeValue { attribute_id: u64, value_type: enum, value: bytes, }
4. Attribute Resolution
Raw fields MUST be mapped to Registry attributes using:
- Rule-based mapping\
- Semantic similarity matching\
- Local attribute creation (if no match)
attribute_id MUST come from:
- Domain Registry OR
- Global Registry
Local attributes MUST NOT receive global attribute_id.
5. Data Normalization
5.1 Units
All numeric values MUST be converted to base unit defined by Registry.
5.2 Enumerations
String enumerations MUST be converted to integer enum codes.
5.3 Time
Time MUST be normalized to UTC Unix timestamp.
6. Attribute Ordering
attributes MUST be sorted in ascending order by attribute_id before serialization.
Failure to sort MUST invalidate commitment.
7. Deterministic Serialization
CanonicalRecord MUST be serialized using:
- UTF-8 encoding
- Fixed field ordering
- Deterministic binary format
JSON text format MAY be used for debugging but MUST NOT be used for commitment generation.
8. Commitment Generation
commitment = SHA256(deterministic_serialized_bytes)
Commitment MUST be immutable and reproducible across nodes.
9. Encryption Requirements
After commitment generation:
- CanonicalRecord MUST be encrypted using AEAD (e.g., AES-GCM)
- Commitment MUST reference plaintext canonical record
10. Interaction with OEV
Commitment is REQUIRED for:
- Random sampling verification
- Fraud proof submission
- Stake slashing validation
11. Interaction with Registry
Canonicalization MUST use current registry snapshot and semantic_version.
12. Hosted + TEE Mode
If Vault is hosted:
- Canonicalization MUST execute inside trusted boundary
- Commitment MUST be signed by Vault identity
TEE mode MAY provide remote attestation.
13. Error Handling
Canonicalization MUST fail if:
- Attribute cannot be resolved deterministically
- Unit conversion undefined
- Duplicate attribute_id present
14. Security Considerations
Threats addressed:
- Field tampering
- Ordering manipulation
- Unit inconsistency
- Commitment forgery
15. Versioning
schema_version MUST be included.
Breaking changes MUST increment major version.
16. Conclusion
All SCP-compliant Vault implementations MUST follow this Canonical Data Model.
End of RFC.