ODP Object ID Compatibility Profile · v0.5 draft
Optional profile. Normative core rules remain in SPEC.md.
Purpose
This profile makes an ODP passport serve two complementary goals with one document:
- Authenticity (ODP core): is the object in front of you the registered original?
Answered by on-chain anchors —
dataHash,fileHash, image hashes, seal verification (SPEC §10–§11) — plus institutional proofs (submitProof). - Theft documentation and recovery (Object ID): if the object is lost or stolen, is there a description good enough for police, customs, insurers, and databases such as INTERPOL's stolen-art registry? Answered by the Object ID checklist data captured below, cryptographically timestamped at mint.
The two goals reinforce each other: the same distinguishing features that let an investigator identify a recovered painting also let an expert distinguish an original from a physical copy. A counterfeit may carry a cloned label or a copied QR code — it will not carry the original's repaired 3 cm tear, its stretcher inscription, or its exact craquelure pattern, and those facts are hash-anchored on-chain with a mint timestamp that predates the dispute.
Relationship to the Object ID standard
Object ID is an international documentation standard for cultural goods: nine information categories plus four steps (photograph → identify categories → write description → store securely). Rights are held by ICOM (International Council of Museums).
Trademark note: this profile is compatible with the Object ID checklist. It is not affiliated with, endorsed by, or certified by ICOM or the J. Paul Getty Trust. Implementations MUST NOT present ODP passports as official Object ID records.
Category mapping
| Object ID category | passport.json v0.5 field | Profile requirement |
|---|---|---|
| 1. Type of object | domain, physical.category |
required |
| 2. Materials & techniques | physical.medium, physical.materials |
required |
| 3. Measurements | physical.dimensions (and physical.weight when meaningful) |
required |
| 4. Inscriptions & markings | physical.marks |
required when present on the object |
| 5. Distinguishing features | objectId.distinguishingFeatures (new) |
required |
| 6. Title | title |
required (core) |
| 7. Subject | objectId.subject (new) |
required |
| 8. Date or period | creationDate (+ objectYear when it differs from mint year) |
required |
| 9. Maker | authorship.author |
required (core) |
| Step 1: Photograph | image (+ on-chain imageHash) |
required for physical/mixed |
| Step 3: Description | description |
required |
| Step 4: Secure storage | .odpass retention; see Privacy below |
required practice |
New fields (objectId block)
"objectId": {
"subject": "Winter landscape: frozen canal, windmill at right, two skaters in foreground",
"distinguishingFeatures": [
"Repaired 3 cm tear lower right quadrant, visible under raking light",
"Blue chalk inventory number 47-B on stretcher, upper bar"
]
}
subject— what is depicted or represented. Free text, one string.distinguishingFeatures— array of specific, verifiable observations: damage, repairs, manufacturing defects, irregularities. Write each feature so a third party could check it on the physical object. Avoid generic statements ("good condition") — they identify nothing.
Both fields are part of the canonical document and are covered by dataHash:
after mint they cannot be edited without the change being detectable (SPEC §10).
Machine-readable validation: schema/passport-0.5.schema.json
(the objectId block and its conditional requirements are enforced there).
Profile conformance rules
A passport conforms to this profile when:
- The
objectIdblock is present with both fields non-empty. - For
objectTypephysicalormixed:image,description, andcreationDateare present, and the on-chainimageHashis non-zero (photograph is not optional in Object ID). - All applicable category-mapping rows above are filled.
- The issuer retains the canonical
.odpassbundle (Object ID step 4).
Privacy: publish-on-incident model (important)
Object ID practice is to keep documentation confidential until an incident, then release it to investigators. ODP supports this natively:
- Mint with empty
dataUrl: only hashes go on-chain; the.odpass(photos, features, inscriptions) stays with the owner. Nothing about the object's appearance or location is public. - After a theft, the owner releases the
.odpass(to police, registries, or publicly viaupdatePassportUrls). Anyone can then verify the released documentation against the pre-incident on-chain hashes and mint timestamp — the description provably was not written after the fact. - Do not put precise storage locations in on-chain mutable state.
currentState.locationon a public chain is readable by anyone, forever. Use coarse values ("in storage", "on loan") or keep location off-chain entirely.
Lost / stolen signaling (roadmap, not in v0.5 bytecode)
The v0.5 reference line has no on-chain lost/stolen flag. Interim practice and planned direction:
- Interim: the owner updates off-chain channels and, where an institution is involved,
a
P/Mprofile may record a concern via the existingODPCounterfeitConcernsatellite. Its semantics do not fully match (it asserts "possible counterfeit", not "reported stolen") — use thereasonHash-anchored document to state the actual claim. - Planned (v0.7 candidate): a dedicated owner-raised
reported lost/stolenstate (satellite or main-registry field), surfaced prominently by verifiers at scan time, with an auditable raise/clear history. This turns every verifier into a passive recovery checkpoint: scanning a stolen object anywhere surfaces the report.
Verifier guidance
Verifiers implementing this profile SHOULD:
- Render the nine categories as a structured "Object ID datasheet" view.
- Offer a printable export of that view for police / insurance / customs workflows.
- Display
distinguishingFeaturesalongside seal and hash results during physical inspection — they are the human-expertise complement to cryptographic checks. - Show the lost/stolen signal (when the planned mechanism ships) before any authenticity result.