Euro 7 binds 29 Nov 2026 · circularity passport 2032

Prove what a vehicle is. Reveal only what the asker is entitled to see.

From 29 November 2026, Euro 7 obliges manufacturers to issue a tamper resistant digital passport with every new M1 and N1 type, readable by QR code. VINPassport is that record, built on Midnight's zero-knowledge blockchain: anchored once, then shown to each party, whether buyer, recycler or border authority, exactly as far as they are entitled and provably no further.

SEE A LIVE PASSPORT READ THE CONTRACT

No wallet. No account. No login. A buyer scans a QR code and sees a verdict; VINPassport pays every transaction fee.

The four buyer questions
01Has it ever been written off?≤ 0
02Any reported accidents?≤ 0
03One keeper from new?≤ 1
04Mileage under 150,000 km?≤ 150k

Each is answered yes, or the transaction fails. The value that satisfied the bound is never published, and “not proven” is rendered as exactly that: no claim, never a quiet no.

VINPassport contract data Compact 0.31.1 Ledger 8 Sheet 01 of 01
01 Circuits in the contract 11 8 provable, one prover key each; 3 pure helpers
02 Contract tests passing 129 Every guard mutation-checked, 32 of 32
03 Provable field slots 32 26 in use, 6 reserved. Depth 5, width permanent
04 Private values on the ledger 0 Asserted by test, not by this sentence

Pre-alpha, under active development. The contract is written, compiles and is covered by tests; the application layer around it is being built.

The passport, explained
02 · How privacy is achieved

A commitment per field

The ledger stores persistentCommit(value, salt), never the value and never the salt. Each field also carries an integrity rule, written once at creation, so a caller cannot pick the flattering rule at the moment they need it.

Rules that only point one way

Mileage, accidents, keepers, services and write-off category may never fall. To write a new value the caller must prove, inside the circuit, that they know the current one and that the change respects the rule. A rollback by one kilometre is refused.

Claims that expire honestly

A recorded claim names the commitment its proof opened. Record a new reading and the old claim no longer matches the field, so a verifier can see it is superseded without being told.

03 · Three surfaces, one ledger
/console/

Intake

For a registrar

Fill in the fields, submit, and watch the compiled circuits accept and refuse. A rollback update aborts in-circuit, is shown as refused, and writes nothing.

Open the console →
/proofs/

Proof explorer

For an auditor

Every claim on the ledger, grouped by vehicle and marked current or superseded. Nothing here requires trusting VINPassport. Every row is a claim anyone can check.

Open the explorer →
/

Verification

For a buyer

Scan the QR code on a vehicle or its listing and this page opens on its passport. The page never sees a VIN, only its hash.

See a verdict →

New to this? The guide walks both journeys step by step: creating a record, and checking one, with the real screens and the reason behind each step.

04 · Why this exists

A mandate with a conflict inside it

A vehicle passport has to be verifiable by strangers and confidential at the same time. A full history is commercially sensitive to a dealer and personally identifying to an owner. Publishing the record solves the first and destroys the second. Keeping it private leaves the first where it is today: trust the seller.

Read the regulation in full on its own page

13 AUG 2026 Regulation (EU) 2026/1738 enters into force
FEB 2027 EV battery passport becomes mandatory under Reg (EU) 2023/1542. Slot 29 is the link out to it
1 SEP 2028 The regulation generally applies. Manufacturer circularity strategies follow a year later
1 SEP 2032 Every vehicle placed on the EU market must carry a Digital Circularity Vehicle Passport
TODAY Title washing, undisclosed accident history, fabricated service records, mileage fraud
05 · What this does not prove

A producer who commits a false value produces a cryptographically valid proof of a false fact.

It is the first question a serious buyer asks, so the answer belongs beside the admission. VINPassport proves a reading is the one that was committed and that it satisfies a bound. It does not prove the reading matched the world. Three things in the deployed contract narrow that to the first write, and none of them are roadmap.

01The writer is named. A value is bound in-circuit to one identity out of a set fixed when the contract was deployed, and no circuit adds to that set. A false value is never anonymous: it carries the registrar that wrote it for as long as the ledger exists.
02The rule comes before the value. A field's integrity rule is written when the field is created and cannot be rewritten afterwards, so nobody picks the flattering rule on the day they need it.
03The second version is refused. Under neverFalls a later, lower reading fails in-circuit. Rolling a number back is not something we decline to do; it is a transaction that does not complete.

What stays open is the first write for a vehicle that joins mid-life, and that is why the first customer is the manufacturer: Euro 7 obliges them from 29 November 2026, and a passport opened on the production line has no earlier history to misstate. A reading signed at the sensor is Phase 2, scoped in docs/ARCHITECTURE.md rather than pretended away.

06 · Built on
The platform Midnight Network

The zero-knowledge chain the passport lives on, at ledger 8. The contract, its eleven circuits and three integrity rules are ours, written in Compact and covered by our own tests.

Two libraries, narrow jobs
@odatano/dpp-sdk
Used for one thing: the salted-Merkle field panel that holds the 32 commitments.
@odatano/nightgate-tx
Used for one thing: building and proving our transactions locally, against our own key. The hosted NIGHTGATE service pays and submits them.

Nothing about the passport logic is delegated. Every transaction is assembled, proven and signed locally before it leaves the machine, so the submission service pays a fee it cannot read and never sees a witness.

07 · Try it

Run the whole thing locally in one command

Node 22+. No Docker, no wallet, no network access, no API keys. Three surfaces and the real compiled circuits, in-process.

$npm install && npm run app→ localhost:8790
VIEW ON GITHUB WATCH THE EXPLAINER