Skip to content

Latest commit

Β 

History

383 Commits

Folders and files

NameName
Last commit message
Last commit date
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Object Digital Passport

Object Digital Passport

A free, open digital passport for real things β€” art, limited editions, archives β€” that anyone can verify. Forever.

MIT License Spec v0.7 alpha CI Live demo Wiki Discussions

πŸ‡¬πŸ‡§ English Β· πŸ‡·πŸ‡Ί Русский β€” want another language? Tell us in Discussions


What is this?

Object Digital Passport (ODP) gives a physical or digital object a passport that proves three things:

  1. When it was registered β€” a blockchain timestamp nobody can backdate;
  2. Who registered it β€” a public profile ID you can cross-check on the issuer's own website;
  3. That its description hasn't changed since β€” cryptographic fingerprints of every photo, measurement, and distinguishing feature.

No company in the middle. No subscription. Verifying is always free and will still work in 50, 100, or 250 years β€” because the registry lives on a public blockchain (Polygon), not on anyone's server. What that promise is: a registry, once deployed, keeps answering for as long as the chain does. What it is not: a promise that one address serves every generation β€” each v0.x line is a separate registry and passports do not migrate between them, so a passport verifies forever against its own line (SPEC.md Β§7). Registering costs only the network fee (~$0.01–0.03). The protocol itself charges nothing, ever. MIT-licensed, end to end.

The goal: make faking an object's history as hard as possible β€” for pennies.

🟒 v0.7 is live on Polygon mainnet since 25 September 2026 β€” release note, addresses, source code of all ten contracts verified on Polygonscan. The check page and the demo below still read the previous registry (v0.6) until they are moved.

⚠️ Alpha status: the contract may still change between 0.x versions, which can affect early passports and accounts. For long-term use, wait for the stable release β€” target: January 2027.


πŸ™‹ We're looking for people β€” yes, you

Here's the honest part. I'm Andrei Chernikov β€” a contemporary artist, entrepreneur, and family-history archivist. I build this project completely alone and without a programming background: it's all vibecoding, AI-assisted coding steered by product vision rather than an engineering degree.

That's exactly why the project needs real people: developers to review and harden what exists, testers to break it, designers, translators, artists and collectors to try it on real objects β€” and skeptics to tell us where we're wrong.

You don't need to be a blockchain expert. If this page made you curious, there is a task for you: start in Discussions β†’ "We need your help!", or just open an issue.

Object Digital Passport is for people and by people. With a real community around it, we can make the world just a little bit harder to counterfeit.


Try it in 2 minutes

  • Verify an object β€” open the Verify page, enter a Passport ID or drop an .odpass file. No wallet, no cost.
  • Create your first passport β€” the Quick Start walks you through it (a throwaway wallet and a few cents of POL is all it takes).
  • Just look around β€” the live demo runs the full UI in your browser.

The check page, the Quick Start and the demo still work on the previous registry (v0.6) and the older ones. Moving them to v0.7 is the next step.


How it works β€” in plain words

When you register, you get a public profile ID (like C-482-930-174-005). You publish it, together with your wallet address, on your own website or social profile β€” that's how people know the ID is really you. This is not a suggestion; the whole trust model depends on it, so v0.7 requires it of every issuer.

When you passport an object, you describe it the way museums and police describe objects for identification (the Object ID principle): photos, dimensions, materials, and the distinguishing features a forger can't easily copy β€” that repaired tear, that chalk mark on the stretcher. In v0.7:

  • a small readable card (title, author, short description) lives directly on-chain and never changes β€” the object is legible even without its file;
  • all identification facts live in one anchors[] block, fingerprinted on-chain β€” and a passport won't register at all without the hard minimum (photo + dimensions + materials + distinguishing features);
  • the passport is a registration fact, not a diary: the registry records who registered what, and when. Corrections, expert opinions and concerns are separate signed statements next to it β€” added, never rewritten;
  • a mistake can be withdrawn only for a short time β€” 72 hours for individuals, 24 for brands, experts and museums β€” and the issuer closes that window for good before a label goes to print;
  • you can publish a lighter copy of the main photo (no location data) so anyone can see it and check it against the registry, while the full-size original stays in your file;
  • a brand can cover a whole production run with one registration, each item carrying its own key under a scratch layer.

The full description travels in a portable .odpass file that you keep and share; the blockchain stores its fingerprints. Change one comma β€” the fingerprint stops matching, and every verifier sees it.

ODP shows separate results, never a single stamp of "genuine": files intact, registered in the registry, who the issuer is (compare their profile ID with what they publish themselves), whether it was withdrawn, statements from experts. A real label can be moved onto a fake object, so ODP always asks you to compare the object with its photo and description. ODP is a tool in human hands, not a magic wand: it makes forgery expensive and detectable, and it gives experts, buyers, and institutions the same tamper-proof facts to reason from.

What a check actually does

flowchart LR
    ID["Passport ID<br/>(QR or typed)"] --> CHAIN["Read the registry<br/>card Β· hashes Β· status"]
    CHAIN -->|not found| NOT(["Not an ODP passport"])
    CHAIN --> FILES["Open the .odpass file<br/>or fetch the files"]
    FILES -->|unavailable| LIM(["Registration is shown<br/>files are not checked"])
    FILES --> HASH["Recompute SHA-256<br/>document Β· anchors Β· photos"]
    HASH --> RES(["Separate results<br/>files intact Β· registered Β· issuer<br/>withdrawn? Β· statements"])
Loading

Every step is read-only and free: no wallet, no account, no permission from us. Full algorithm: SPEC.md Β§11; what apps must show: Β§22.16.


Under the hood

The registry has nobody in charge: no administrator, no off switch, no owner. The core only records registrations. Everything optional lives in nine satellites β€” separate contracts that read the core and can never write to it.

flowchart TB
    subgraph core["Core β€” the passports themselves"]
        REG["ObjectDigitalPassport<br/><i>card Β· hashes Β· withdrawal window</i>"]
    end
    subgraph sat["Satellites β€” read the core, cannot change it"]
        ED["ODPEditionUnits<br/><i>production runs, activation</i>"]
        PROOF["ODPPassportProofRegistry<br/><i>expert and museum statements</i>"]
        JOUR["ODPStatementJournal<br/><i>corrections, declarations</i>"]
        CON["ODPPassportConcerns<br/><i>concerns raised by institutions</i>"]
        AUTH["ODPAuthorAttestation<br/><i>author key signature</i>"]
        REL["ODPRegistryRelations<br/><i>affiliation</i>"]
        HOST["ODPHosting<br/><i>where the files live</i>"]
        DIR["ODPProfileDirectory<br/><i>declared domain</i>"]
        DOC["ODPWalletDocumentAnchor<br/><i>file hash anchoring</i>"]
    end
    ISSUER(["Creator Β· Brand Β· Institution"]) -->|register, issue| REG
    ISSUER -->|statements| sat
    sat -.->|read| REG
    VERIFIER(["Anyone verifying"]) -->|read-only| REG
    VERIFIER -->|read-only| sat
Loading

Registry on Polygon mainnet: 0x3281492981DCD492cc2F7c17398134e1D3B5CA1F. All ten addresses: docs/GUIDE.md β†’ Current Release.


Run it locally

The contracts and the reference tools:

cd chain && npm ci && npx hardhat clean && npm run check

This compiles with Solidity 0.8.20, enforces the contract size limit, checks the conformance vectors and runs the local tests. The reference website is a separate repository: object-digital-passport.github.io.


Who is it for?

Prefix Account type Who
C Creator Individual artists, photographers, makers β€” one-of-a-kind objects
B Brand Studios and brands releasing products β€” the only type that can issue a whole production run
P Proof institution Galleries, auction houses, expert bodies that publish statements about objects
M Museum Museums and large collections, incl. works by deceased artists

The type is self-declared, not accredited β€” anyone can pick any of them. So look for who stands behind a profile ID on the issuer's own channels: a "museum" account passporting a living artist's new work is your first red flag 🚩


FAQ

Why should I bother? To protect your works from counterfeits β€” and to build an "indestructible" catalogue of what you've made, with proof of when.

Do I need to understand crypto? Only the basics: install your own wallet (ODP apps never create or hold one for you), keep its recovery phrase safe β€” nobody, including us, can restore it β€” and top it up with a little POL for network fees. Use a dedicated wallet for ODP, not the one with your savings. Checking a passport needs no wallet at all.

What if the project's website disappears? Your passports survive. The registry is on a public blockchain and the code is MIT β€” anyone can host a verifier. That independence is the whole point.

Can I edit a passport later? The card β€” never. That's what makes it trustworthy. A mistake can be withdrawn within 72 hours (individuals) or 24 hours (organizations), unless the issuer already marked the passport for print. After that, a correction is a new passport or a signed statement next to the old one. Nothing is rewritten.

What does it cost? A small network fee in POL for each registration or passport, set by the Polygon network, not by us. Verification is free. The standard itself takes no commission β€” by design, forever.

Where's the technical meat? Start at the Wiki for friendly explanations, then go normative: SPEC.md.


πŸ“š Learn more

Where What
Wiki Friendly guides: Quick Start, how verification works, NFC seals, Object ID, FAQ β€” πŸ‡¬πŸ‡§/πŸ‡·πŸ‡Ί
SPEC.md The full protocol specification (normative, English)
docs/GUIDE.md The detailed long-form guide
docs/releases/v0.7.md What's new in v0.7 β€” the release note
CHANGELOG.md Notable changes across protocol lines
docs/SECURITY.md Threat model and security recommendations
docs/CONTRIBUTING.md How to contribute
Live demo β†’ Try everything online (still on the v0.6 registry)

Repository layout: SPEC.md β€” the standard Β· chain/ β€” contracts & tests Β· schema/ β€” JSON Schema & vectors Β· docs/ β€” documentation Β· review/ β€” audit evidence and the approved release bundle. The reference website is a separate repository: object-digital-passport.github.io.


πŸ’¬ Join the Discussion β€” head to "We need your help!" and we'll find the task where you can contribute most.

Thanks for reading this far. If you want to help β€” or know someone who might β€” we're waiting for you!

Releases

Used by

Contributors

Languages