From 0c5bbd0bb308acf4ad89f59df0696576a13e4c97 Mon Sep 17 00:00:00 2001 From: LKSNDRTMLKV Date: Thu, 17 Sep 2026 04:13:57 +0200 Subject: [PATCH 1/2] docs(engine): tell retirement and archiving apart --- site/dpp-docs/src/content/docs/core/overview.mdx | 2 +- .../dpp-docs/src/content/docs/engine/retention.mdx | 14 ++++++++++---- .../content/docs/regulatory/central-registry.mdx | 2 +- 3 files changed, 12 insertions(+), 6 deletions(-) diff --git a/site/dpp-docs/src/content/docs/core/overview.mdx b/site/dpp-docs/src/content/docs/core/overview.mdx index 833018f..076fbed 100644 --- a/site/dpp-docs/src/content/docs/core/overview.mdx +++ b/site/dpp-docs/src/content/docs/core/overview.mdx @@ -10,7 +10,7 @@ The core is the regulatory standard expressed in code: the rules a compliant Dig - **A definition of a passport** — its identity, who issued it, what it's made of, the sector-specific data the regulation requires, and the lifecycle it moves through. (The exact shape lives in the [code](https://github.com/odal-node/dpp-core), which is the authoritative reference.) - **Validation** — a passport is checked against its sector's versioned schema. This is a pure, local operation: no network, no services, nothing leaves the machine. - **Signing and verification** — a valid passport is signed with the issuer's own key, binding it to their published identity. Anyone can then verify it on their own, without the issuer's systems and without Odal. -- **A lifecycle** — draft, published, suspended, archived. The transitions are one-directional and recorded, so a passport's history can't be quietly rewritten. +- **A lifecycle** — draft, published, suspended, retired. The transitions are one-directional and recorded, so a passport's history can't be quietly rewritten. ## Why it has no infrastructure diff --git a/site/dpp-docs/src/content/docs/engine/retention.mdx b/site/dpp-docs/src/content/docs/engine/retention.mdx index cd1be88..97b57ff 100644 --- a/site/dpp-docs/src/content/docs/engine/retention.mdx +++ b/site/dpp-docs/src/content/docs/engine/retention.mdx @@ -11,7 +11,7 @@ Retention has two directions that are easy to conflate, so state them plainly: t ## Publishing locks a passport -The moment a passport is published, a retention lock is set on it — and it is never cleared. A locked passport can still change *state*: it can be suspended during a recall, or archived at end-of-life. But its *content* can no longer be edited. Only a draft is mutable; once a passport becomes a signed, published proof, it is fixed. +The moment a passport is published, a retention lock is set on it — and it is never cleared. A locked passport can still change *state*: it can be suspended during a recall, or retired once its retention period has run. But its *content* can no longer be edited. Only a draft is mutable; once a passport becomes a signed, published proof, it is fixed. ## There is no delete @@ -19,11 +19,17 @@ The node's storage interface has no delete operation at all. This is a structura ## History is append-only -Every transition — created, published, suspended, archived — is written to an audit trail as it happens. Entries are only ever added; they are never rewritten or deleted. A passport's provenance can therefore be examined years later and trusted to reflect what actually occurred, in the order it occurred. +Every transition — created, published, suspended, retired — is written to an audit trail as it happens. Entries are only ever added; they are never rewritten or deleted. A passport's provenance can therefore be examined years later and trusted to reflect what actually occurred, in the order it occurred. -## Archival is a state, not an ending +## Retirement is a state, not an ending -When a product reaches end-of-life, its passport moves to *archived* — read-only, but still resolvable. The regulation's record-keeping window outlives the product itself, and archival keeps the passport readable for that entire window instead of removing it. End-of-life is a lifecycle state, never a deletion. +Once the record-keeping window has run, a passport moves to *retired* — read-only, but still resolvable. The regulation's window outlives the product itself, and retirement keeps the passport readable instead of removing it. It is a lifecycle state, never a deletion. + +## Archiving is a different thing, and it runs the whole time + +*Retired* is where a passport's publication life ends. *Archiving* is what happens to a passport that is still very much alive: every time its content changes, the version it replaces is kept, whole, for as long as the passport exists. Anyone entitled to read the current passport can ask what it said at an earlier moment and get that version back, under the same access rules. + +This is EN 18221:2026 clause 4.2, one of the six standards the Commission cited in Implementing Decision (EU) 2026/1736. The two words were once the same word here, which made the difference easy to miss: a system can retire records faithfully and still keep no history at all. Odal does both, and calls them by different names so nobody has to guess which one they are looking at. ## The address stays stable diff --git a/site/dpp-docs/src/content/docs/regulatory/central-registry.mdx b/site/dpp-docs/src/content/docs/regulatory/central-registry.mdx index 1c43ce7..d0044c3 100644 --- a/site/dpp-docs/src/content/docs/regulatory/central-registry.mdx +++ b/site/dpp-docs/src/content/docs/regulatory/central-registry.mdx @@ -15,7 +15,7 @@ This design is the right one because it lets the regulation centralise discovery ## What the registry requires of implementations -The registry went live on **20 July 2026**, meeting the Commission's own Art. 13 deadline, and the implementing act adopted under Art. 13(5) sets out how registration works. So the requirements are no longer expectations: a published passport is registered with its unique identifier, the registration carries the resolver endpoint, and the registering platform keeps it in sync as passports are suspended or archived. +The registry went live on **20 July 2026**, meeting the Commission's own Art. 13 deadline, and the implementing act adopted under Art. 13(5) sets out how registration works. So the requirements are no longer expectations: a published passport is registered with its unique identifier, the registration carries the resolver endpoint, and the registering platform keeps it in sync as passports are suspended or retired. Odal has prepared for this beyond modelling the interface: **every published passport already commits its registration intent to a durable outbox, in the same database transaction as the publish itself.** A background worker drains that outbox with retry and backoff. The practical consequence: publishing never blocks on the registry, a crash never loses a registration, and a backlog accumulated during an outage drains without a single passport falling through. From 9b90c97c80e23f731a0f3c4128b924414f2373ec Mon Sep 17 00:00:00 2001 From: LKSNDRTMLKV Date: Wed, 30 Sep 2026 14:03:57 +0200 Subject: [PATCH 2/2] chore(web): sync the engine API spec, demo dossiers and example passport to engine main after #358 --- site/dpp-docs/openapi-source.json | 2 +- site/dpp-docs/public/openapi.yaml | 195 +++++++++++------- .../src/content/docs/engine/upgrading.mdx | 10 + .../verify/examples/01-valid-simple.json | 54 +++-- .../examples/02-valid-with-transfer.json | 62 +++--- .../verify/examples/03-valid-with-eol.json | 58 ++++-- .../examples/04-valid-full-lifecycle.json | 66 +++--- .../examples/05-tampered-signature.json | 66 +++--- .../examples/06-tampered-audit-entry.json | 66 +++--- .../07-tampered-transfer-signature.json | 66 +++--- .../examples/08-hidden-field-injection.json | 66 +++--- .../examples/09-unknown-top-level-field.json | 66 +++--- .../examples/11-canonicalisation-vectors.json | 4 +- .../src/data/example-passport.json | 4 +- site/dpp-landing/tests/verify-expected.json | 2 +- site/dpp-landing/tests/verify.test.ts | 2 +- 16 files changed, 491 insertions(+), 298 deletions(-) diff --git a/site/dpp-docs/openapi-source.json b/site/dpp-docs/openapi-source.json index 05fc173..81c1878 100644 --- a/site/dpp-docs/openapi-source.json +++ b/site/dpp-docs/openapi-source.json @@ -3,5 +3,5 @@ "_path_comment": "MUST be the bundled single-file spec, never api/openapi.yaml. The engine authors its description as a tree (a root of $refs plus paths/ and components/) and commits api/openapi.bundled.yaml as the single-file form every consumer reads — committed precisely so this vendoring step can read one blob out of git history. This pin still named the root after that split, so a sync would have copied 278 lines of relative `$ref: paths/...` pointers over the vendored spec; nothing here resolves them, and the rendered docs would have lost every endpoint and schema.", "repository": "odal-node/dpp-engine", "path": "api/openapi.bundled.yaml", - "commit": "5e43ab60a716ccabcb57cb7e55c8a3922d45fcaa" + "commit": "04f1a527d3cfba3ff25e45c171b9d16558366a46" } diff --git a/site/dpp-docs/public/openapi.yaml b/site/dpp-docs/public/openapi.yaml index 3168086..3b830cf 100644 --- a/site/dpp-docs/public/openapi.yaml +++ b/site/dpp-docs/public/openapi.yaml @@ -43,7 +43,7 @@ tags: - name: DPP Management description: Create, read, update, list, and audit Digital Product Passports. - name: DPP Lifecycle - description: Lifecycle transitions — publish, suspend, archive, end-of-life, and transfer of responsibility. + description: Lifecycle transitions — publish, suspend, retire, end-of-life, and transfer of responsibility. - name: Evidence Dossiers description: Signed, self-contained evidence dossiers — generate, fetch, and verify (stored or uploaded) offline, with zero trust in the issuing node. - name: Registry @@ -117,7 +117,9 @@ paths: batchId: BATCH-2026-04-001 productGroupData: productGroup: battery - gtin: '09506000134352' + productIdentifier: + scheme: gs1 + gtin: '09506000134352' batteryChemistry: LFP nominalVoltageV: 48 nominalCapacityAh: 100 @@ -255,10 +257,10 @@ paths: operationId: findDppByIdentity summary: Find a DPP by exact compound identity description: | - Look up a passport by exact (product group, GTIN, batch) match, across - `draft` and `active` statuses. Backs the import delta-matcher — - not intended as a general-purpose search (use `GET /dpps` for that). - `batchId` omitted matches only passports with no batch set. + Look up a passport by exact (product group, product identifier, batch) + match, across `draft` and `active` statuses. Backs the import + delta-matcher — not intended as a general-purpose search (use `GET /dpps` + for that). `batchId` omitted matches only passports with no batch set. tags: - DPP Management security: @@ -271,11 +273,16 @@ paths: schema: type: string example: battery - - name: gtin + - name: identifier in: query required: true + description: | + The product identifier's value under whichever EN 18219 clause 5 + scheme issued it: the 14-digit GTIN for scheme 1, the identification + link for scheme 2, the DID for scheme 3. schema: type: string + example: '09506000134352' - name: batchId in: query required: false @@ -331,7 +338,7 @@ paths: JSON merge-patch on a `draft` or `active` DPP. The request body is a free-form JSON object; only supplied fields are changed. Returns `409 Conflict` if the DPP is - `suspended` or `archived`. + `suspended` or `retired`. tags: - DPP Management security: @@ -411,11 +418,11 @@ paths: Returns every archived version of a passport, oldest first — or, with `asOf`, the single version that was current at that instant. - ✅ EN 18221:2026 clause 4.2: *"the archived version corresponding to a given - point in time shall be retrievable by authenticated and authorized actors"*. + ✅ EN 18221:2026 clause 4.2: an authenticated, authorised reader can + retrieve the passport as it stood at any given moment. - 🚨 **Not `POST /dpp/{dppId}/archive`.** That moves a passport to the terminal - `archived` lifecycle status after its retention period has elapsed. This is + 🚨 **Not `POST /dpp/{dppId}/retire`.** That moves a passport to the terminal + `retired` lifecycle status after its retention period has elapsed. This is the standard's sense of the word — historical versions of a passport that is still live — and the two are unrelated. @@ -841,7 +848,7 @@ paths: its seal, and reports `superseded` as its status. Only an `active` DPP can be amended. A draft is edited in place with - `PUT /vault/api/v1/dpp/{dppId}`; a suspended, archived, superseded or + `PUT /vault/api/v1/dpp/{dppId}`; a suspended, retired, superseded or deactivated DPP cannot be superseded. The schema version is **inherited**, not advanced to the product group's @@ -919,7 +926,7 @@ paths: It keeps serving on the public tier. Superseding replaces the *record*, not the goods: products made under the old specification are still in the field - carrying data carriers that resolve to it, and ESPR Art. 10(4)(i) asks the + carrying data carriers that resolve to it, and ESPR Art. 9(2)(i) asks the passport to remain available for at least the product's expected lifetime. tags: - DPP Lifecycle @@ -1001,14 +1008,18 @@ paths: $ref: '#/components/responses/NotFound' '409': $ref: '#/components/responses/Conflict' - /vault/api/v1/dpp/{dppId}/archive: + /vault/api/v1/dpp/{dppId}/retire: post: - operationId: archiveDpp - summary: Archive a DPP + operationId: retireDpp + summary: Retire a DPP description: | - Transition a DPP to `archived`. This is irreversible. - Archived DPPs are immutable and retained for regulatory record-keeping. + Transition a DPP to `retired`. This is irreversible. + Retired DPPs are immutable and retained for regulatory record-keeping. No request body is required. + + 🚨 **Not archiving.** EN 18221 clause 4.2 archiving is the retention of + historical versions of a passport that is still live, and it is served by + `GET /dpp/{dppId}/versions`. This route ends a record's publication life. tags: - DPP Lifecycle security: @@ -1022,7 +1033,7 @@ paths: $ref: '#/components/schemas/DppId' responses: '200': - description: DPP archived. Returns the full passport record. + description: DPP retired. Returns the full passport record. content: application/json: schema: @@ -2657,15 +2668,29 @@ paths: /vault/public/dpp/by-gtin/{gtin}: get: operationId: publicGetDppByGtin - summary: Public read of a published DPP by GTIN + summary: Public read of a published DPP by its printed GS1 label description: | - Unauthenticated read of the published passport for a GS1 GTIN-14 — the - same signed public view the by-id route serves, found by trade item - instead of by passport id. + Unauthenticated read of the published passport a GS1 label names — the + same signed public view the by-id route serves, found by the label printed + on the product instead of by passport id. The resolver's + `/01/{gtin}[/10/{batch}][/21/{serial}]` routes forward the label here. + + **The label's qualifiers select the passport.** One GTIN can have a + passport for the model, one per batch and one per unit, so the GTIN alone + does not name one: + + - `serial` (AI 21) names the passport whose carrier serial it is, at any + level. `batch` is not consulted once a serial is given. + - `batch` (AI 10) alone names the batch-level passport for that lot. + - Neither names the model-level passport, or a passport with no batch and + no serial. + + A label keeps working after its passport is amended: the successor is + served, not the superseded record. **A withdrawn passport answers `410`, not `404`.** That distinction is the point of this route rather than a detail of it: `404` means no passport for - this GTIN was ever published here, while `410` means one was and has since + this label was ever published here, while `410` means one was and has since been suspended. Only the second is a recall signal, and a consumer who scanned a product needs to be able to tell them apart. `422` is a structurally invalid GTIN-14 — a bad check digit or wrong length — which is @@ -2685,6 +2710,20 @@ paths: type: string description: GS1 GTIN-14 (14 digits, mod-10 check digit). example: '09506000134352' + - name: batch + in: query + required: false + description: The label's AI 10 value, the batch or lot. + schema: + type: string + example: LOT-2026-A + - name: serial + in: query + required: false + description: The label's AI 21 value, the serial. + schema: + type: string + example: 3a9c1e0b7d2f4a6c8e10 - name: schema_view in: query required: false @@ -2704,7 +2743,7 @@ paths: '410': $ref: '#/components/responses/Gone' '422': - description: The requested `schema_view` is unavailable. + description: The GTIN is not a valid GTIN-14, or the requested `schema_view` is unavailable. content: application/problem+json: schema: @@ -3580,7 +3619,8 @@ paths: operationId: resolveByGtin summary: GS1 Digital Link resolver description: | - GS1-conformant resolver (GS1-CRSV1) keyed by GTIN-14. Behaviour depends + GS1-conformant resolver (GS1-CRSV1) keyed by GTIN-14 — the carrier this node + prints for a model-level passport. Behaviour depends on the `linkType` query / `Accept` header: - default → `307` redirect to the HTML DPP page - `?linkType=gs1:pip` / `gs1:dpp` (and related) → `307` redirect to the DPP @@ -3626,12 +3666,12 @@ paths: operationId: resolveByGtinSerial summary: GS1 Digital Link resolver — GTIN + serial description: | - A printed carrier may encode more than the GTIN — this node's own - publisher emits `/01/{gtin}/21/{serial}` for a serialised trade item. - **Resolution is keyed on the GTIN alone**: `serial` is accepted so no - conformant carrier 404s for carrying more precision than the resolver - indexes, but it is not looked up. Same behaviour as `/01/{gtin}` - otherwise (`linkType` / `Accept` negotiation). + The carrier this node prints for an item-level passport, and for one + whose level is not stated. **The serial is the resolution key**: it is the + passport's carrier serial, and it names one passport whatever its level. + An amended passport's successor carries its predecessor's serial, so the + label keeps resolving, to the current record. Same behaviour as + `/01/{gtin}` otherwise (`linkType` / `Accept` negotiation). tags: - Public Resolver security: [] @@ -3647,7 +3687,7 @@ paths: required: true schema: type: string - description: Accepted and ignored — not a resolution key. + description: AI 21, the carrier serial. Selects the passport. - name: linkType in: query required: false @@ -3678,10 +3718,11 @@ paths: operationId: resolveByGtinBatch summary: GS1 Digital Link resolver — GTIN + batch/lot description: | - Accepts the batch/lot segment (AI 10) a carrier may include. - **Resolution is keyed on the GTIN alone**: `batch` is accepted and - ignored, not looked up. Same behaviour as `/01/{gtin}` otherwise - (`linkType` / `Accept` negotiation). + The carrier this node prints for a batch-level passport. **The batch is a + resolution key**: it resolves to the batch-level passport for that lot, + which the GTIN alone cannot name once a product has a passport per batch. + Same behaviour as `/01/{gtin}` otherwise (`linkType` / `Accept` + negotiation). tags: - Public Resolver security: [] @@ -3697,7 +3738,7 @@ paths: required: true schema: type: string - description: Accepted and ignored — not a resolution key. + description: AI 10, the batch or lot. Selects the batch-level passport. - name: linkType in: query required: false @@ -3728,9 +3769,10 @@ paths: operationId: resolveByGtinBatchSerial summary: GS1 Digital Link resolver — GTIN + batch/lot + serial description: | - The full shape this node's own carrier emits for a batched, - serialised trade item. **Resolution is keyed on the GTIN alone**: - `batch` and `serial` are accepted and ignored. Same behaviour as + The shape this node printed for a batched passport before its carrier + followed the passport's stated level, and one any conformant label may + carry. **The serial is the resolution key**: it names one passport + whatever its level, so the batch is not consulted. Same behaviour as `/01/{gtin}` otherwise (`linkType` / `Accept` negotiation). tags: - Public Resolver @@ -3747,13 +3789,13 @@ paths: required: true schema: type: string - description: Accepted and ignored — not a resolution key. + description: AI 10. Not consulted once a serial is present. - name: serial in: path required: true schema: type: string - description: Accepted and ignored — not a resolution key. + description: AI 21, the carrier serial. Selects the passport. - name: linkType in: query required: false @@ -4164,7 +4206,10 @@ components: - string - 'null' format: uri - description: 'GS1 Digital Link the carrier (QR) encodes, set on publish: {resolverBase}/01/{gtin}/21/{serial} for a trade item, else {resolverBase}/dpp/{id}. resolverBase is per-deployment (RESOLVER_BASE_URL, required, no default).' + description: 'The link the data carrier (QR) encodes, set on publish. For a GS1 identifier it is a GS1 Digital Link at the level the passport states: {resolverBase}/01/{gtin} for a model, {resolverBase}/01/{gtin}/10/{batch} for a batch, and {resolverBase}/01/{gtin}/21/{carrierSerial} for an item or an unstated level. Otherwise {resolverBase}/dpp/{id}. resolverBase is per-deployment (RESOLVER_BASE_URL, required, no default).' + carrierSerial: + type: string + description: The serial printed in AI 21 of the passport's GS1 carrier, where one was attributed. Absent means the default, derived from the passport id. An amended passport carries its predecessor's, so the label on the object keeps resolving. Printed on the label, so public. jwsSignature: type: - string @@ -4267,7 +4312,7 @@ components: - draft - active - suspended - - archived + - retired - superseded - deactivated description: | @@ -4276,19 +4321,24 @@ components: - `draft`: under construction; not publicly resolvable - `active`: published and signed; publicly resolvable via QR - `suspended`: temporarily hidden (recall, dispute); JWS preserved - - `archived`: end-of-life; immutable; retained for regulatory record-keeping + - `retired`: post-retention; immutable; retained for regulatory record-keeping. + Not archiving — see `GET /dpp/{dppId}/versions` for EN 18221 clause 4.2 - `superseded`: replaced by a newer passport version; terminal - `deactivated`: end-of-life declared (recycled, destroyed under a derogation, exported, or lost); terminal. The typed reason is carried by the EOL event, not this field Valid transitions: - draft → active, draft → archived, - active → suspended, active → archived, active → superseded, + draft → active, draft → retired, + active → suspended, active → retired, active → superseded, active → deactivated, - suspended → active, suspended → archived, suspended → deactivated. + suspended → active, suspended → retired, suspended → deactivated. + + `retired`, `superseded` and `deactivated` are terminal. - `archived`, `superseded` and `deactivated` are terminal. + `archived` is refused on input. It was this status's wire value and now names + only what EN 18221 clause 4.2 means by it — the retention of historical + versions of a passport that is still live. Granularity: type: string enum: @@ -4404,7 +4454,7 @@ components: description: | Product group-specific data, **internally tagged** by a `productGroup` discriminator — e.g. - `{ "productGroup": "battery", "gtin": "…", "batteryChemistry": "LFP", … }`. + `{ "productGroup": "battery", "productIdentifier": { "scheme": "gs1", "gtin": "…" }, "batteryChemistry": "LFP", … }`. The remaining fields are product group-specific and validated against the product group's versioned JSON schema. Product groups include `battery`, `textile`, `steel`, `aluminium`, `tyre`, `electronics`, and others. @@ -4425,7 +4475,9 @@ components: additionalProperties: true example: productGroup: battery - gtin: '09506000134352' + productIdentifier: + scheme: gs1 + gtin: '09506000134352' batteryChemistry: LFP nominalVoltageV: 48 nominalCapacityAh: 100 @@ -6994,11 +7046,7 @@ components: type: boolean description: True once the operator identity is complete enough to publish. profile: - type: string - enum: - - development - - staging - - production + $ref: '#/components/schemas/NodeProfile' description: | The node's deployment profile. Absent on a standalone vault, which has no composition root to resolve one. @@ -7031,6 +7079,13 @@ components: the rules a passport was checked under are observable. Absent on a standalone vault. example: baseline + NodeProfile: + type: string + description: 'The deployment profile a node was started under (`NODE_PROFILE`), which decides the trust tiers it will boot on. `development` boots on any tier, placeholders included, and is what an unset or unrecognised value means. `sandbox` is a real deployment against test authorities: it refuses a placeholder on a required trust port and accepts a sandbox tier. `production` accepts only live tiers on required ports.' + enum: + - development + - sandbox + - production WhoamiResponse: type: object description: What the presented credential is. Reports only what the caller already sent — it reveals nothing about any other key, and the key's secret is never stored in a recoverable form. @@ -7604,7 +7659,7 @@ components: ✅ EN 18221:2026 clause 4.2 (archiving), one of the six standards cited by Commission Implementing Decision (EU) 2026/1736. - 🚨 **Not the `archived` lifecycle status**, which is a terminal state reached after the ESPR retention period and says the record has stopped changing. This is the standard's sense of the word — historical versions of a passport that is still live — and the two are unrelated. + 🚨 **Not the `retired` lifecycle status**, which is a terminal state reached after the ESPR retention period and says the record has stopped changing. This is the standard's sense of the word — historical versions of a passport that is still live — and the two are unrelated. required: - id - passportId @@ -7666,10 +7721,10 @@ components: Portable and SLI batteries bear no passport obligation, so a passport for one is the operator's own artefact rather than a discharged duty. - Reported **beside** the gates, never instead of them. This node applies the - category content gate whatever this says, and for a passport outside the - article that makes it stricter than the law requires — which the `note` admits - rather than hides. + Reported **beside** the gates, never instead of them. The category content + gate follows the same answer: a record the article does not reach + (`notCovered`, `belowThreshold`, `notYetBinding`) is not held to it, and one + it does or may reach (`required`, `capacityUnknown`) is. Two details the article turns on: the threshold is **energy** (kWh), not the ampere-hour "rated capacity" defined for the purposes of an annex; and unlike @@ -7720,8 +7775,8 @@ components: type: string description: | Present when the answer needs justifying — an industrial battery that - declares no `ratedCapacityKwh`, a record the article does not reach, or a - passport this node nonetheless gates. + declares no `ratedCapacityKwh`, or a record the article does not reach and + the content gate therefore does not apply to. PublishReadiness: type: object description: | @@ -7735,8 +7790,8 @@ components: gates pass", not "publish will certainly succeed". The mandatory-content half is the reason this exists. It is the gate that most - often refuses a battery — 46 data points for an electric-vehicle one, 45 for - an LMT battery, 38 for an industrial one — and it could not previously be + often refuses a battery — 45 data points for an electric-vehicle one, 44 for + an LMT battery, 37 for an industrial one — and it could not previously be previewed anywhere: it is reachable only from a stored passport, and the only dry-run the API offered takes an unsaved request body. required: @@ -8289,7 +8344,9 @@ components: example: productName: Model X Battery Pack (rev B) productGroupData: - gtin: '01234567890128' + productIdentifier: + scheme: gs1 + gtin: '01234567890128' batteryType: industrial reason: type: string @@ -8478,7 +8535,7 @@ components: Conflict: description: | State conflict — e.g. attempting to publish an already-published DPP - or updating an archived DPP. + or updating a retired DPP. content: application/problem+json: schema: diff --git a/site/dpp-docs/src/content/docs/engine/upgrading.mdx b/site/dpp-docs/src/content/docs/engine/upgrading.mdx index a1fefde..f835b77 100644 --- a/site/dpp-docs/src/content/docs/engine/upgrading.mdx +++ b/site/dpp-docs/src/content/docs/engine/upgrading.mdx @@ -20,6 +20,16 @@ The signing key, the DID document and every published passport stay as they are. ## Changes that need action +### Next release + +These are on the engine's main branch and ship with its next tagged release. The rest of this documentation already describes them. + +- **Retire replaces archive.** `POST /dpp/{dppId}/archive` is now `POST /dpp/{dppId}/retire`, the status it sets is `"retired"` and the event is `dpp.passport.retired`. `odal passport archive` is now `odal passport retire`, and `trustMode.archive` on `/vault/api/v1/node/state` is `trustMode.backup`. `"archived"` is refused, not aliased: update clients, and resubscribe webhooks and NATS consumers that filter on `dpp.passport.archived`. A migration rewrites stored statuses on upgrade. +- **Rename `ARCHIVE_S3_*` to `BACKUP_S3_*`.** The variables are otherwise unchanged; see [Configuration reference](/engine/configuration). +- **Product group data carries a `productIdentifier`, not a `gtin`.** `"gtin": "09506000134352"` becomes `"productIdentifier": { "scheme": "gs1", "gtin": "09506000134352" }`, and an identification link or a DID is accepted where a GTIN was required. `GET /vault/api/v1/dpp/by-identity` takes `identifier` instead of `gtin`. Stored passports are not rewritten. +- **The printed carrier follows the passport's stated level.** A model-level passport prints `/01/{gtin}`, a batch-level one `/01/{gtin}/10/{batch}`, and an item-level one, or one that states no level, `/01/{gtin}/21/{serial}`. Anything that parses `qrCodeUrl` should expect all three. +- **A production or sandbox node refuses `ALLOW_UNSIGNED_PLUGINS=true`.** Remove the variable and set `PLUGIN_SIGNING_KEY` to the plugin publisher's Ed25519 public key. + ### v0.14.0 - **`RESOLVER_BASE_URL` is required** by the node and the resolver, with no default. Set it to your resolver's public address before starting the new version. diff --git a/site/dpp-landing/public/verify/examples/01-valid-simple.json b/site/dpp-landing/public/verify/examples/01-valid-simple.json index 8978f89..4b2e95e 100644 --- a/site/dpp-landing/public/verify/examples/01-valid-simple.json +++ b/site/dpp-landing/public/verify/examples/01-valid-simple.json @@ -16,7 +16,7 @@ { "action": "published", "actor": "api-key", - "entryHash": "4e81bf531274f21aa02339144c34711eac79af7fb22ebf10a18982adc3f075a3", + "entryHash": "2934a67be97238b4f38ff4ee4d53464a0c197cec343297b25124f894b942c2f2", "id": "0199a3c2-7b10-7e4a-9c3d-000000000002", "metadata": { "fullViewPayload": { @@ -142,7 +142,6 @@ "euDeclarationOfConformity": "EU-DoC ACME-2026-LMT-0901, per Regulation (EU) 2023/1542 Art. 18", "expectedLifetimeCycles": 1200, "expectedLifetimeReferenceTest": "EN 50604-1:2016, 25 degC, 100% DoD", - "gtin": "09506000134352", "hazardousSubstances": [ { "casNumber": "21324-40-3", @@ -169,6 +168,10 @@ "powerLimitMaxW": 1500.0, "powerLimitMinW": 20.0, "productGroup": "battery", + "productIdentifier": { + "gtin": "09506000134352", + "scheme": "gs1" + }, "ratedCapacityKwh": null, "recycledContentCobaltPct": 12.0, "recycledContentLeadPct": 0.0, @@ -194,16 +197,17 @@ }, "productName": "Acme LMT 48V 20Ah battery pack", "publishedAt": "2026-09-01T09:05:00Z", - "qrCodeUrl": "https://dpp.acme.example/01/09506000134352/10/ACME-LMT-2026-09/21/7e4a9c3d2f1e8b6a5d40", + "qrCodeUrl": "https://dpp.acme.example/01/09506000134352/21/7e4a9c3d2f1e8b6a5d40", "repairabilityScore": null, "retentionLocked": true, "retentionUntil": "2036-08-29T09:05:00Z", - "schemaVersion": "2.6.0", + "schemaVersion": "2.7.0", "status": "active", "updatedAt": "2026-09-01T09:05:00Z", "version": 1 }, "publicViewPayload": { + "batchId": "ACME-LMT-2026-09", "co2ePerUnit": null, "commodityCode": "85076000", "createdAt": "2026-09-01T09:00:00Z", @@ -264,7 +268,6 @@ "euDeclarationOfConformity": "EU-DoC ACME-2026-LMT-0901, per Regulation (EU) 2023/1542 Art. 18", "expectedLifetimeCycles": 1200, "expectedLifetimeReferenceTest": "EN 50604-1:2016, 25 degC, 100% DoD", - "gtin": "09506000134352", "hazardousSubstances": [ { "casNumber": "21324-40-3", @@ -291,6 +294,10 @@ "powerLimitMaxW": 1500.0, "powerLimitMinW": 20.0, "productGroup": "battery", + "productIdentifier": { + "gtin": "09506000134352", + "scheme": "gs1" + }, "ratedCapacityKwh": null, "recycledContentCobaltPct": 12.0, "recycledContentLeadPct": 0.0, @@ -303,10 +310,10 @@ }, "productName": "Acme LMT 48V 20Ah battery pack", "publishedAt": "2026-09-01T09:05:00Z", - "qrCodeUrl": "https://dpp.acme.example/01/09506000134352/10/ACME-LMT-2026-09/21/7e4a9c3d2f1e8b6a5d40", + "qrCodeUrl": "https://dpp.acme.example/01/09506000134352/21/7e4a9c3d2f1e8b6a5d40", "repairabilityScore": null, "retentionUntil": "2036-08-29T09:05:00Z", - "schemaVersion": "2.6.0", + "schemaVersion": "2.7.0", "status": "active", "updatedAt": "2026-09-01T09:05:00Z", "version": 1 @@ -344,7 +351,7 @@ } }, "fullView": { - "jws": "eyJhbGciOiJFZERTQSIsImtpZCI6ImZlODEyYzEyZjNhYjRjZTZhYzVkYjY5YWMzNTJmOTA2Y2IxYjExZWY0M2ZiMzNlMjUyZWY3ZmY1NTIyNjM4ODkifQ.eyJiYXRjaElkIjoiQUNNRS1MTVQtMjAyNi0wOSIsImNvMmVQZXJVbml0IjpudWxsLCJjb21tb2RpdHlDb2RlIjoiODUwNzYwMDAiLCJjcmVhdGVkQXQiOiIyMDI2LTA5LTAxVDA5OjAwOjAwWiIsImlkIjoiMDE5OWEzYzItN2IxMC03ZTRhLTljM2QtMmYxZThiNmE1ZDQwIiwiandzU2lnbmF0dXJlIjpudWxsLCJtYW51ZmFjdHVyZXIiOnsiYWRkcmVzcyI6Ik11c3RlcnN0cmFzc2UgMSwgODAzMzEgTcO8bmNoZW4sIERFIiwiY291bnRyeSI6bnVsbCwiZGlkV2ViVXJsIjoiaHR0cHM6Ly9ub2RlLmFjbWUuZXhhbXBsZS8ud2VsbC1rbm93bi9kaWQuanNvbiIsIm5hbWUiOiJBY21lIFplbGxlbiBHbWJIIn0sIm1hdGVyaWFscyI6W3siY291bnRyeU9mT3JpZ2luIjoiREUiLCJuYW1lIjoiTk1DIDgxMSBjYXRob2RlIGFjdGl2ZSBtYXRlcmlhbCIsInJlY3ljbGVkUGN0Ijo4LCJ3ZWlnaHRLZyI6My4xfSx7ImNvdW50cnlPZk9yaWdpbiI6IkRFIiwibmFtZSI6IkdyYXBoaXRlIGFub2RlIGFjdGl2ZSBtYXRlcmlhbCIsInJlY3ljbGVkUGN0Ijo0LCJ3ZWlnaHRLZyI6MS45fSx7ImNvdW50cnlPZk9yaWdpbiI6IkRFIiwibmFtZSI6IkFsdW1pbml1bSBwYWNrIGhvdXNpbmciLCJyZWN5Y2xlZFBjdCI6NjAsIndlaWdodEtnIjoyLjJ9XSwicGxhY2VkT25NYXJrZXREYXRlIjoiMjAyNi0wOS0wMSIsInByb2R1Y3RHcm91cCI6ImJhdHRlcnkiLCJwcm9kdWN0R3JvdXBEYXRhIjp7ImFub2RlTWF0ZXJpYWwiOlt7ImNhc051bWJlciI6Ijc3ODItNDItNSIsIm5hbWUiOiJHcmFwaGl0ZSIsIndlaWdodFBjdCI6OTZ9LHsiY2FzTnVtYmVyIjoiOTAwMy01NS04IiwibmFtZSI6IlNCUi9DTUMgYmluZGVyIiwid2VpZ2h0UGN0Ijo0fV0sImJhdHRlcnlDaGVtaXN0cnkiOiJOTUMiLCJiYXR0ZXJ5TW9kZWxJZCI6IkFDTUUtTE1ULTQ4ViIsImJhdHRlcnlQYXNzcG9ydE51bWJlciI6IlVSTjpPREw6QkFUVDowOTUwNjAwMDEzNDM1MjpBQ01FLUxNVC0yMDI2LTA5IiwiYmF0dGVyeVN0YXR1cyI6Im9yaWdpbmFsIiwiYmF0dGVyeVR5cGUiOiJsbXQiLCJiYXR0ZXJ5V2VpZ2h0S2ciOjEyLjQsImNhdGhvZGVNYXRlcmlhbCI6W3siY2FzTnVtYmVyIjoiMzQ2NDE3LTk3LTgiLCJuYW1lIjoiTGlOaTAuOE1uMC4xQ28wLjFPMiIsIndlaWdodFBjdCI6OTZ9LHsiY2FzTnVtYmVyIjoiMjQ5MzctNzktOSIsIm5hbWUiOiJQVkRGIGJpbmRlciIsIndlaWdodFBjdCI6Mn0seyJjYXNOdW1iZXIiOiIxMzMzLTg2LTQiLCJuYW1lIjoiQ29uZHVjdGl2ZSBjYXJib24gYmxhY2siLCJ3ZWlnaHRQY3QiOjJ9XSwiY28yZVBlclVuaXRLZyI6ODYuNCwiY29tcG9uZW50UGFydE51bWJlcnMiOlsiQUNNRS1DRUxMLTIxNzAwLU5NQyIsIkFDTUUtQk1TLTEzUy1WMSIsIkFDTUUtTE1ULUVOQ0wtNDgiXSwiY3JpdGljYWxSYXdNYXRlcmlhbHMiOlt7ImNhc051bWJlciI6Ijc0NDAtNDgtNCIsIm5hbWUiOiJDb2JhbHQiLCJ3ZWlnaHRHcmFtcyI6MzEwfSx7ImNhc051bWJlciI6Ijc0MzktOTMtMiIsIm5hbWUiOiJMaXRoaXVtIiwid2VpZ2h0R3JhbXMiOjQyMH0seyJjYXNOdW1iZXIiOiI3NzgyLTQyLTUiLCJuYW1lIjoiTmF0dXJhbCBncmFwaGl0ZSIsIndlaWdodEdyYW1zIjoxODAwfV0sImN5Y2xlTGlmZVRlc3RDUmF0ZSI6MSwiZGlzYXNzZW1ibHlJbnN0cnVjdGlvbnNVcmwiOiJodHRwczovL2FjbWUuZXhhbXBsZS9zZXJ2aWNlL2xtdC00OC9kaXNhc3NlbWJseSIsImR5bmFtaWNQZXJmb3JtYW5jZSI6eyJjYXBhY2l0eUZhZGVQY3QiOjAuNSwiZXhwZWN0ZWRMaWZldGltZUN5Y2xlcyI6MTE5NSwiaW50ZXJuYWxSZXNpc3RhbmNlTW9obSI6MTEwLjQsInJhdGVkQ2FwYWNpdHlBaCI6MTkuOSwicm91bmRUcmlwRWZmaWNpZW5jeVBjdCI6OTQuOH0sImVsZWN0cm9seXRlTWF0ZXJpYWwiOlt7ImNhc051bWJlciI6Ijk2LTQ5LTEiLCJuYW1lIjoiRXRoeWxlbmUgY2FyYm9uYXRlIiwid2VpZ2h0UGN0IjozOH0seyJjYXNOdW1iZXIiOiI2MTYtMzgtNiIsIm5hbWUiOiJEaW1ldGh5bCBjYXJib25hdGUiLCJ3ZWlnaHRQY3QiOjQ5fSx7ImNhc051bWJlciI6IjIxMzI0LTQwLTMiLCJuYW1lIjoiTGl0aGl1bSBoZXhhZmx1b3JvcGhvc3BoYXRlIiwid2VpZ2h0UGN0IjoxM31dLCJldURlY2xhcmF0aW9uT2ZDb25mb3JtaXR5IjoiRVUtRG9DIEFDTUUtMjAyNi1MTVQtMDkwMSwgcGVyIFJlZ3VsYXRpb24gKEVVKSAyMDIzLzE1NDIgQXJ0LiAxOCIsImV4cGVjdGVkTGlmZXRpbWVDeWNsZXMiOjEyMDAsImV4cGVjdGVkTGlmZXRpbWVSZWZlcmVuY2VUZXN0IjoiRU4gNTA2MDQtMToyMDE2LCAyNSBkZWdDLCAxMDAlIERvRCIsImd0aW4iOiIwOTUwNjAwMDEzNDM1MiIsImhhemFyZG91c1N1YnN0YW5jZXMiOlt7ImNhc051bWJlciI6IjIxMzI0LTQwLTMiLCJjb25jZW50cmF0aW9uUGN0IjowLjgsIm5hbWUiOiJMaXRoaXVtIGhleGFmbHVvcm9waG9zcGhhdGUifV0sImluaXRpYWxSb3VuZFRyaXBFZmZpY2llbmN5UGN0Ijo5NSwiaW50ZXJuYWxDZWxsUmVzaXN0YW5jZU1vaG0iOjE0LCJpbnRlcm5hbFBhY2tSZXNpc3RhbmNlTW9obSI6MTEwLCJtYW51ZmFjdHVyaW5nRGF0ZSI6IjIwMjYtMDgtMThUMDA6MDA6MDBaIiwibWFudWZhY3R1cmluZ1BsYWNlIjoiTcO8bmNoZW4sIERFIiwibWFya2luZ0luZm9ybWF0aW9uIjoiU2VwYXJhdGUtY29sbGVjdGlvbiBzeW1ib2wgcGVyIEFydC4gMTMoNCk7IGNhcGFjaXR5IDIwIEFoIC8gOTYwIFdoOyA0OCBWIExNVCIsIm1heGltdW1Wb2x0YWdlViI6NTQuNiwibWluaW1hbFZvbHRhZ2VWIjozOSwibm9taW5hbENhcGFjaXR5QWgiOjIwLCJub21pbmFsVm9sdGFnZVYiOjQ4LCJub3RJblVzZVRlbXBlcmF0dXJlUmFuZ2UiOnsibWF4QyI6NDUsIm1pbkMiOi0xMH0sIm5vdEluVXNlVGVtcGVyYXR1cmVSZWZlcmVuY2VUZXN0IjoiRU4gNTA2MDQtMToyMDE2IHN0b3JhZ2UgY2xhdXNlIiwib3JpZ2luYWxQb3dlckNhcGFiaWxpdHlXIjo5NjAsInBvd2VyTGltaXRNYXhXIjoxNTAwLCJwb3dlckxpbWl0TWluVyI6MjAsInByb2R1Y3RHcm91cCI6ImJhdHRlcnkiLCJyYXRlZENhcGFjaXR5S3doIjpudWxsLCJyZWN5Y2xlZENvbnRlbnRDb2JhbHRQY3QiOjEyLCJyZWN5Y2xlZENvbnRlbnRMZWFkUGN0IjowLCJyZWN5Y2xlZENvbnRlbnRMaXRoaXVtUGN0Ijo2LCJyZWN5Y2xlZENvbnRlbnROaWNrZWxQY3QiOjgsInJlbmV3YWJsZUNvbnRlbnRQY3QiOjE0LCJyb3VuZFRyaXBFZmZpY2llbmN5QXRIYWxmQ3ljbGVMaWZlUGN0Ijo5MSwic2FmZXR5TWVhc3VyZXMiOiJEbyBub3Qgb3BlbiB0aGUgcGFjay4gUmVwbGFjZSBpdCB0aHJvdWdoIGFuIGF1dGhvcmlzZWQgZGVhbGVyLiBLZWVwIGl0IGF3YXkgZnJvbSBoZWF0IGFib3ZlIDYwIGRlZ0MuIiwic3BhcmVQYXJ0c0NvbnRhY3RzIjoic3BhcmVzQGFjbWUuZXhhbXBsZSIsInN0YXRlT2ZIZWFsdGgiOnsicGFyYW1ldGVyU2V0Ijoic3RhdGlvbmFyeU9yTG10IiwicmVtYWluaW5nQ2FwYWNpdHlQY3QiOjk5LjUsInJlbWFpbmluZ1Bvd2VyQ2FwYWJpbGl0eVBjdCI6OTkuMSwic2VsZkRpc2NoYXJnZVJhdGVQY3RQZXJNb250aCI6Mn0sInN0YXRlT2ZIZWFsdGhQY3QiOm51bGwsInRlc3RSZXBvcnRSZXN1bHRzIjoiRU4gNTA2MDQtMToyMDE2IHBhc3M7IFVOIDM4LjMgcGFzczsgcmVwb3J0IEFDTUUtVFItMjAyNi0wODE1IiwidXNhYmxlRXh0aW5ndWlzaGluZ0FnZW50IjoiV2F0ZXI7IGNvb2wgYSBidXJuaW5nIHBhY2sgd2l0aCBsYXJnZSB2b2x1bWVzIG9mIHdhdGVyIiwidXNhZ2VIaXN0b3J5Ijp7ImNoYXJnZURpc2NoYXJnZUN5Y2xlcyI6NH0sIndhc3RlQmF0dGVyeUluZm9ybWF0aW9uIjoiUmV0dXJuIHRoZSBiYXR0ZXJ5IHRvIGEgYmljeWNsZSByZXRhaWxlciBvciBhIG11bmljaXBhbCBjb2xsZWN0aW9uIHBvaW50LiBEbyBub3QgcGxhY2UgaXQgaW4gaG91c2Vob2xkIHdhc3RlLiJ9LCJwcm9kdWN0TmFtZSI6IkFjbWUgTE1UIDQ4ViAyMEFoIGJhdHRlcnkgcGFjayIsInB1Ymxpc2hlZEF0IjoiMjAyNi0wOS0wMVQwOTowNTowMFoiLCJxckNvZGVVcmwiOiJodHRwczovL2RwcC5hY21lLmV4YW1wbGUvMDEvMDk1MDYwMDAxMzQzNTIvMTAvQUNNRS1MTVQtMjAyNi0wOS8yMS83ZTRhOWMzZDJmMWU4YjZhNWQ0MCIsInJlcGFpcmFiaWxpdHlTY29yZSI6bnVsbCwicmV0ZW50aW9uTG9ja2VkIjp0cnVlLCJyZXRlbnRpb25VbnRpbCI6IjIwMzYtMDgtMjlUMDk6MDU6MDBaIiwic2NoZW1hVmVyc2lvbiI6IjIuNi4wIiwic3RhdHVzIjoiYWN0aXZlIiwidXBkYXRlZEF0IjoiMjAyNi0wOS0wMVQwOTowNTowMFoiLCJ2ZXJzaW9uIjoxfQ.WlMDfygpDjYk8xHRQjpQgppwhVkUgYhyj_9iiPH_IXvXb8IKcD0cA2lFJCznB1B6llfW5Q3qiZcfRAdB78nDBw", + "jws": "eyJhbGciOiJFZERTQSIsImtpZCI6ImZlODEyYzEyZjNhYjRjZTZhYzVkYjY5YWMzNTJmOTA2Y2IxYjExZWY0M2ZiMzNlMjUyZWY3ZmY1NTIyNjM4ODkifQ.eyJiYXRjaElkIjoiQUNNRS1MTVQtMjAyNi0wOSIsImNvMmVQZXJVbml0IjpudWxsLCJjb21tb2RpdHlDb2RlIjoiODUwNzYwMDAiLCJjcmVhdGVkQXQiOiIyMDI2LTA5LTAxVDA5OjAwOjAwWiIsImlkIjoiMDE5OWEzYzItN2IxMC03ZTRhLTljM2QtMmYxZThiNmE1ZDQwIiwiandzU2lnbmF0dXJlIjpudWxsLCJtYW51ZmFjdHVyZXIiOnsiYWRkcmVzcyI6Ik11c3RlcnN0cmFzc2UgMSwgODAzMzEgTcO8bmNoZW4sIERFIiwiY291bnRyeSI6bnVsbCwiZGlkV2ViVXJsIjoiaHR0cHM6Ly9ub2RlLmFjbWUuZXhhbXBsZS8ud2VsbC1rbm93bi9kaWQuanNvbiIsIm5hbWUiOiJBY21lIFplbGxlbiBHbWJIIn0sIm1hdGVyaWFscyI6W3siY291bnRyeU9mT3JpZ2luIjoiREUiLCJuYW1lIjoiTk1DIDgxMSBjYXRob2RlIGFjdGl2ZSBtYXRlcmlhbCIsInJlY3ljbGVkUGN0Ijo4LCJ3ZWlnaHRLZyI6My4xfSx7ImNvdW50cnlPZk9yaWdpbiI6IkRFIiwibmFtZSI6IkdyYXBoaXRlIGFub2RlIGFjdGl2ZSBtYXRlcmlhbCIsInJlY3ljbGVkUGN0Ijo0LCJ3ZWlnaHRLZyI6MS45fSx7ImNvdW50cnlPZk9yaWdpbiI6IkRFIiwibmFtZSI6IkFsdW1pbml1bSBwYWNrIGhvdXNpbmciLCJyZWN5Y2xlZFBjdCI6NjAsIndlaWdodEtnIjoyLjJ9XSwicGxhY2VkT25NYXJrZXREYXRlIjoiMjAyNi0wOS0wMSIsInByb2R1Y3RHcm91cCI6ImJhdHRlcnkiLCJwcm9kdWN0R3JvdXBEYXRhIjp7ImFub2RlTWF0ZXJpYWwiOlt7ImNhc051bWJlciI6Ijc3ODItNDItNSIsIm5hbWUiOiJHcmFwaGl0ZSIsIndlaWdodFBjdCI6OTZ9LHsiY2FzTnVtYmVyIjoiOTAwMy01NS04IiwibmFtZSI6IlNCUi9DTUMgYmluZGVyIiwid2VpZ2h0UGN0Ijo0fV0sImJhdHRlcnlDaGVtaXN0cnkiOiJOTUMiLCJiYXR0ZXJ5TW9kZWxJZCI6IkFDTUUtTE1ULTQ4ViIsImJhdHRlcnlQYXNzcG9ydE51bWJlciI6IlVSTjpPREw6QkFUVDowOTUwNjAwMDEzNDM1MjpBQ01FLUxNVC0yMDI2LTA5IiwiYmF0dGVyeVN0YXR1cyI6Im9yaWdpbmFsIiwiYmF0dGVyeVR5cGUiOiJsbXQiLCJiYXR0ZXJ5V2VpZ2h0S2ciOjEyLjQsImNhdGhvZGVNYXRlcmlhbCI6W3siY2FzTnVtYmVyIjoiMzQ2NDE3LTk3LTgiLCJuYW1lIjoiTGlOaTAuOE1uMC4xQ28wLjFPMiIsIndlaWdodFBjdCI6OTZ9LHsiY2FzTnVtYmVyIjoiMjQ5MzctNzktOSIsIm5hbWUiOiJQVkRGIGJpbmRlciIsIndlaWdodFBjdCI6Mn0seyJjYXNOdW1iZXIiOiIxMzMzLTg2LTQiLCJuYW1lIjoiQ29uZHVjdGl2ZSBjYXJib24gYmxhY2siLCJ3ZWlnaHRQY3QiOjJ9XSwiY28yZVBlclVuaXRLZyI6ODYuNCwiY29tcG9uZW50UGFydE51bWJlcnMiOlsiQUNNRS1DRUxMLTIxNzAwLU5NQyIsIkFDTUUtQk1TLTEzUy1WMSIsIkFDTUUtTE1ULUVOQ0wtNDgiXSwiY3JpdGljYWxSYXdNYXRlcmlhbHMiOlt7ImNhc051bWJlciI6Ijc0NDAtNDgtNCIsIm5hbWUiOiJDb2JhbHQiLCJ3ZWlnaHRHcmFtcyI6MzEwfSx7ImNhc051bWJlciI6Ijc0MzktOTMtMiIsIm5hbWUiOiJMaXRoaXVtIiwid2VpZ2h0R3JhbXMiOjQyMH0seyJjYXNOdW1iZXIiOiI3NzgyLTQyLTUiLCJuYW1lIjoiTmF0dXJhbCBncmFwaGl0ZSIsIndlaWdodEdyYW1zIjoxODAwfV0sImN5Y2xlTGlmZVRlc3RDUmF0ZSI6MSwiZGlzYXNzZW1ibHlJbnN0cnVjdGlvbnNVcmwiOiJodHRwczovL2FjbWUuZXhhbXBsZS9zZXJ2aWNlL2xtdC00OC9kaXNhc3NlbWJseSIsImR5bmFtaWNQZXJmb3JtYW5jZSI6eyJjYXBhY2l0eUZhZGVQY3QiOjAuNSwiZXhwZWN0ZWRMaWZldGltZUN5Y2xlcyI6MTE5NSwiaW50ZXJuYWxSZXNpc3RhbmNlTW9obSI6MTEwLjQsInJhdGVkQ2FwYWNpdHlBaCI6MTkuOSwicm91bmRUcmlwRWZmaWNpZW5jeVBjdCI6OTQuOH0sImVsZWN0cm9seXRlTWF0ZXJpYWwiOlt7ImNhc051bWJlciI6Ijk2LTQ5LTEiLCJuYW1lIjoiRXRoeWxlbmUgY2FyYm9uYXRlIiwid2VpZ2h0UGN0IjozOH0seyJjYXNOdW1iZXIiOiI2MTYtMzgtNiIsIm5hbWUiOiJEaW1ldGh5bCBjYXJib25hdGUiLCJ3ZWlnaHRQY3QiOjQ5fSx7ImNhc051bWJlciI6IjIxMzI0LTQwLTMiLCJuYW1lIjoiTGl0aGl1bSBoZXhhZmx1b3JvcGhvc3BoYXRlIiwid2VpZ2h0UGN0IjoxM31dLCJldURlY2xhcmF0aW9uT2ZDb25mb3JtaXR5IjoiRVUtRG9DIEFDTUUtMjAyNi1MTVQtMDkwMSwgcGVyIFJlZ3VsYXRpb24gKEVVKSAyMDIzLzE1NDIgQXJ0LiAxOCIsImV4cGVjdGVkTGlmZXRpbWVDeWNsZXMiOjEyMDAsImV4cGVjdGVkTGlmZXRpbWVSZWZlcmVuY2VUZXN0IjoiRU4gNTA2MDQtMToyMDE2LCAyNSBkZWdDLCAxMDAlIERvRCIsImhhemFyZG91c1N1YnN0YW5jZXMiOlt7ImNhc051bWJlciI6IjIxMzI0LTQwLTMiLCJjb25jZW50cmF0aW9uUGN0IjowLjgsIm5hbWUiOiJMaXRoaXVtIGhleGFmbHVvcm9waG9zcGhhdGUifV0sImluaXRpYWxSb3VuZFRyaXBFZmZpY2llbmN5UGN0Ijo5NSwiaW50ZXJuYWxDZWxsUmVzaXN0YW5jZU1vaG0iOjE0LCJpbnRlcm5hbFBhY2tSZXNpc3RhbmNlTW9obSI6MTEwLCJtYW51ZmFjdHVyaW5nRGF0ZSI6IjIwMjYtMDgtMThUMDA6MDA6MDBaIiwibWFudWZhY3R1cmluZ1BsYWNlIjoiTcO8bmNoZW4sIERFIiwibWFya2luZ0luZm9ybWF0aW9uIjoiU2VwYXJhdGUtY29sbGVjdGlvbiBzeW1ib2wgcGVyIEFydC4gMTMoNCk7IGNhcGFjaXR5IDIwIEFoIC8gOTYwIFdoOyA0OCBWIExNVCIsIm1heGltdW1Wb2x0YWdlViI6NTQuNiwibWluaW1hbFZvbHRhZ2VWIjozOSwibm9taW5hbENhcGFjaXR5QWgiOjIwLCJub21pbmFsVm9sdGFnZVYiOjQ4LCJub3RJblVzZVRlbXBlcmF0dXJlUmFuZ2UiOnsibWF4QyI6NDUsIm1pbkMiOi0xMH0sIm5vdEluVXNlVGVtcGVyYXR1cmVSZWZlcmVuY2VUZXN0IjoiRU4gNTA2MDQtMToyMDE2IHN0b3JhZ2UgY2xhdXNlIiwib3JpZ2luYWxQb3dlckNhcGFiaWxpdHlXIjo5NjAsInBvd2VyTGltaXRNYXhXIjoxNTAwLCJwb3dlckxpbWl0TWluVyI6MjAsInByb2R1Y3RHcm91cCI6ImJhdHRlcnkiLCJwcm9kdWN0SWRlbnRpZmllciI6eyJndGluIjoiMDk1MDYwMDAxMzQzNTIiLCJzY2hlbWUiOiJnczEifSwicmF0ZWRDYXBhY2l0eUt3aCI6bnVsbCwicmVjeWNsZWRDb250ZW50Q29iYWx0UGN0IjoxMiwicmVjeWNsZWRDb250ZW50TGVhZFBjdCI6MCwicmVjeWNsZWRDb250ZW50TGl0aGl1bVBjdCI6NiwicmVjeWNsZWRDb250ZW50Tmlja2VsUGN0Ijo4LCJyZW5ld2FibGVDb250ZW50UGN0IjoxNCwicm91bmRUcmlwRWZmaWNpZW5jeUF0SGFsZkN5Y2xlTGlmZVBjdCI6OTEsInNhZmV0eU1lYXN1cmVzIjoiRG8gbm90IG9wZW4gdGhlIHBhY2suIFJlcGxhY2UgaXQgdGhyb3VnaCBhbiBhdXRob3Jpc2VkIGRlYWxlci4gS2VlcCBpdCBhd2F5IGZyb20gaGVhdCBhYm92ZSA2MCBkZWdDLiIsInNwYXJlUGFydHNDb250YWN0cyI6InNwYXJlc0BhY21lLmV4YW1wbGUiLCJzdGF0ZU9mSGVhbHRoIjp7InBhcmFtZXRlclNldCI6InN0YXRpb25hcnlPckxtdCIsInJlbWFpbmluZ0NhcGFjaXR5UGN0Ijo5OS41LCJyZW1haW5pbmdQb3dlckNhcGFiaWxpdHlQY3QiOjk5LjEsInNlbGZEaXNjaGFyZ2VSYXRlUGN0UGVyTW9udGgiOjJ9LCJzdGF0ZU9mSGVhbHRoUGN0IjpudWxsLCJ0ZXN0UmVwb3J0UmVzdWx0cyI6IkVOIDUwNjA0LTE6MjAxNiBwYXNzOyBVTiAzOC4zIHBhc3M7IHJlcG9ydCBBQ01FLVRSLTIwMjYtMDgxNSIsInVzYWJsZUV4dGluZ3Vpc2hpbmdBZ2VudCI6IldhdGVyOyBjb29sIGEgYnVybmluZyBwYWNrIHdpdGggbGFyZ2Ugdm9sdW1lcyBvZiB3YXRlciIsInVzYWdlSGlzdG9yeSI6eyJjaGFyZ2VEaXNjaGFyZ2VDeWNsZXMiOjR9LCJ3YXN0ZUJhdHRlcnlJbmZvcm1hdGlvbiI6IlJldHVybiB0aGUgYmF0dGVyeSB0byBhIGJpY3ljbGUgcmV0YWlsZXIgb3IgYSBtdW5pY2lwYWwgY29sbGVjdGlvbiBwb2ludC4gRG8gbm90IHBsYWNlIGl0IGluIGhvdXNlaG9sZCB3YXN0ZS4ifSwicHJvZHVjdE5hbWUiOiJBY21lIExNVCA0OFYgMjBBaCBiYXR0ZXJ5IHBhY2siLCJwdWJsaXNoZWRBdCI6IjIwMjYtMDktMDFUMDk6MDU6MDBaIiwicXJDb2RlVXJsIjoiaHR0cHM6Ly9kcHAuYWNtZS5leGFtcGxlLzAxLzA5NTA2MDAwMTM0MzUyLzIxLzdlNGE5YzNkMmYxZThiNmE1ZDQwIiwicmVwYWlyYWJpbGl0eVNjb3JlIjpudWxsLCJyZXRlbnRpb25Mb2NrZWQiOnRydWUsInJldGVudGlvblVudGlsIjoiMjAzNi0wOC0yOVQwOTowNTowMFoiLCJzY2hlbWFWZXJzaW9uIjoiMi43LjAiLCJzdGF0dXMiOiJhY3RpdmUiLCJ1cGRhdGVkQXQiOiIyMDI2LTA5LTAxVDA5OjA1OjAwWiIsInZlcnNpb24iOjF9.55m5_OYvkiKUN9QV9BNB3JeqMOvkYjwYCiPxup_xciGjUrYtHOcaDdy8ULvSAy5NRGpT9p90RrajgBb0Iv5kCg", "payload": { "batchId": "ACME-LMT-2026-09", "co2ePerUnit": null, @@ -468,7 +475,6 @@ "euDeclarationOfConformity": "EU-DoC ACME-2026-LMT-0901, per Regulation (EU) 2023/1542 Art. 18", "expectedLifetimeCycles": 1200, "expectedLifetimeReferenceTest": "EN 50604-1:2016, 25 degC, 100% DoD", - "gtin": "09506000134352", "hazardousSubstances": [ { "casNumber": "21324-40-3", @@ -495,6 +501,10 @@ "powerLimitMaxW": 1500.0, "powerLimitMinW": 20.0, "productGroup": "battery", + "productIdentifier": { + "gtin": "09506000134352", + "scheme": "gs1" + }, "ratedCapacityKwh": null, "recycledContentCobaltPct": 12.0, "recycledContentLeadPct": 0.0, @@ -520,11 +530,11 @@ }, "productName": "Acme LMT 48V 20Ah battery pack", "publishedAt": "2026-09-01T09:05:00Z", - "qrCodeUrl": "https://dpp.acme.example/01/09506000134352/10/ACME-LMT-2026-09/21/7e4a9c3d2f1e8b6a5d40", + "qrCodeUrl": "https://dpp.acme.example/01/09506000134352/21/7e4a9c3d2f1e8b6a5d40", "repairabilityScore": null, "retentionLocked": true, "retentionUntil": "2036-08-29T09:05:00Z", - "schemaVersion": "2.6.0", + "schemaVersion": "2.7.0", "status": "active", "updatedAt": "2026-09-01T09:05:00Z", "version": 1 @@ -532,21 +542,22 @@ }, "manifest": { "contentHashes": { - "auditEntries": "f88a9f18e40918793c0888102ae898ac5ab35078a017fc1848ef4bde95ef67b7", - "fullView": "70f5a9779744ad58b77cebed129ecec4c24d7c5bbf3b65be4b3c61c4be5f0e80", - "publicView": "7ada532408d7c20c385804ca00d0a6a969f1448c796775c14657d7932ecf392a" + "auditEntries": "d4ba820a32410f354c8b3ee5cafff919fa183871c955503803f83a5aa4c3b81c", + "fullView": "e8c5a8fbbddd67948a3ee3eb7abfc07427c2ff2ab23eeba3dc4dc9bbf12cbdbd", + "publicView": "74c1a1eda478cc2643b8652bf188f47e449b851ae64ae05f922de314a9249b83" }, - "coreVersion": "0.20.0", + "coreVersion": "0.21.0", "createdAt": "2026-09-25T12:00:00Z", "formatVersion": "1", "issuerDid": "did:web:node.acme.example", "nodeVersion": "0.14.0", "passportId": "0199a3c2-7b10-7e4a-9c3d-2f1e8b6a5d40" }, - "manifestJws": "eyJhbGciOiJFZERTQSIsImtpZCI6ImZlODEyYzEyZjNhYjRjZTZhYzVkYjY5YWMzNTJmOTA2Y2IxYjExZWY0M2ZiMzNlMjUyZWY3ZmY1NTIyNjM4ODkifQ.eyJjb250ZW50SGFzaGVzIjp7ImF1ZGl0RW50cmllcyI6ImY4OGE5ZjE4ZTQwOTE4NzkzYzA4ODgxMDJhZTg5OGFjNWFiMzUwNzhhMDE3ZmMxODQ4ZWY0YmRlOTVlZjY3YjciLCJmdWxsVmlldyI6IjcwZjVhOTc3OTc0NGFkNThiNzdjZWJlZDEyOWVjZWM0YzI0ZDdjNWJiZjNiNjViZTRiM2M2MWM0YmU1ZjBlODAiLCJwdWJsaWNWaWV3IjoiN2FkYTUzMjQwOGQ3YzIwYzM4NTgwNGNhMDBkMGE2YTk2OWYxNDQ4Yzc5Njc3NWMxNDY1N2Q3OTMyZWNmMzkyYSJ9LCJjb3JlVmVyc2lvbiI6IjAuMjAuMCIsImNyZWF0ZWRBdCI6IjIwMjYtMDktMjVUMTI6MDA6MDBaIiwiZm9ybWF0VmVyc2lvbiI6IjEiLCJpc3N1ZXJEaWQiOiJkaWQ6d2ViOm5vZGUuYWNtZS5leGFtcGxlIiwibm9kZVZlcnNpb24iOiIwLjE0LjAiLCJwYXNzcG9ydElkIjoiMDE5OWEzYzItN2IxMC03ZTRhLTljM2QtMmYxZThiNmE1ZDQwIn0.LowiXEfwTwp_l3t1Leui0lyq8gUKTPy41xRpSKy0wWfdiRso6Iri26iU_zaEQSHSQNLJZrrEXUrnvQbPbIr_CQ", + "manifestJws": "eyJhbGciOiJFZERTQSIsImtpZCI6ImZlODEyYzEyZjNhYjRjZTZhYzVkYjY5YWMzNTJmOTA2Y2IxYjExZWY0M2ZiMzNlMjUyZWY3ZmY1NTIyNjM4ODkifQ.eyJjb250ZW50SGFzaGVzIjp7ImF1ZGl0RW50cmllcyI6ImQ0YmE4MjBhMzI0MTBmMzU0YzhiM2VlNWNhZmZmOTE5ZmExODM4NzFjOTU1NTAzODAzZjgzYTVhYTRjM2I4MWMiLCJmdWxsVmlldyI6ImU4YzVhOGZiYmRkZDY3OTQ4YTNlZTNlYjdhYmZjMDc0MjdjMmZmMmFiMjNlZWJhM2RjNGRjOWJiZjEyY2JkYmQiLCJwdWJsaWNWaWV3IjoiNzRjMWExZWRhNDc4Y2MyNjQzYjg2NTJiZjE4OGY0N2U0NDliODUxYWU2NGFlMDVmOTIyZGUzMTRhOTI0OWI4MyJ9LCJjb3JlVmVyc2lvbiI6IjAuMjEuMCIsImNyZWF0ZWRBdCI6IjIwMjYtMDktMjVUMTI6MDA6MDBaIiwiZm9ybWF0VmVyc2lvbiI6IjEiLCJpc3N1ZXJEaWQiOiJkaWQ6d2ViOm5vZGUuYWNtZS5leGFtcGxlIiwibm9kZVZlcnNpb24iOiIwLjE0LjAiLCJwYXNzcG9ydElkIjoiMDE5OWEzYzItN2IxMC03ZTRhLTljM2QtMmYxZThiNmE1ZDQwIn0.sYutIRK_RIxoxf2GXa4McJKdMayBpejZh-isdp11TgteX7lQyoSAYiwKRGH1FRFlH3k_sywAnm5hJw9tRfJ7AA", "publicView": { - "jws": "eyJhbGciOiJFZERTQSIsImtpZCI6ImZlODEyYzEyZjNhYjRjZTZhYzVkYjY5YWMzNTJmOTA2Y2IxYjExZWY0M2ZiMzNlMjUyZWY3ZmY1NTIyNjM4ODkifQ.eyJjbzJlUGVyVW5pdCI6bnVsbCwiY29tbW9kaXR5Q29kZSI6Ijg1MDc2MDAwIiwiY3JlYXRlZEF0IjoiMjAyNi0wOS0wMVQwOTowMDowMFoiLCJpZCI6IjAxOTlhM2MyLTdiMTAtN2U0YS05YzNkLTJmMWU4YjZhNWQ0MCIsIm1hbnVmYWN0dXJlciI6eyJhZGRyZXNzIjoiTXVzdGVyc3RyYXNzZSAxLCA4MDMzMSBNw7xuY2hlbiwgREUiLCJjb3VudHJ5IjpudWxsLCJkaWRXZWJVcmwiOiJodHRwczovL25vZGUuYWNtZS5leGFtcGxlLy53ZWxsLWtub3duL2RpZC5qc29uIiwibmFtZSI6IkFjbWUgWmVsbGVuIEdtYkgifSwibWF0ZXJpYWxzIjpbeyJjb3VudHJ5T2ZPcmlnaW4iOiJERSIsIm5hbWUiOiJOTUMgODExIGNhdGhvZGUgYWN0aXZlIG1hdGVyaWFsIiwicmVjeWNsZWRQY3QiOjgsIndlaWdodEtnIjozLjF9LHsiY291bnRyeU9mT3JpZ2luIjoiREUiLCJuYW1lIjoiR3JhcGhpdGUgYW5vZGUgYWN0aXZlIG1hdGVyaWFsIiwicmVjeWNsZWRQY3QiOjQsIndlaWdodEtnIjoxLjl9LHsiY291bnRyeU9mT3JpZ2luIjoiREUiLCJuYW1lIjoiQWx1bWluaXVtIHBhY2sgaG91c2luZyIsInJlY3ljbGVkUGN0Ijo2MCwid2VpZ2h0S2ciOjIuMn1dLCJwbGFjZWRPbk1hcmtldERhdGUiOiIyMDI2LTA5LTAxIiwicHJvZHVjdEdyb3VwIjoiYmF0dGVyeSIsInByb2R1Y3RHcm91cERhdGEiOnsiYmF0dGVyeUNoZW1pc3RyeSI6Ik5NQyIsImJhdHRlcnlNb2RlbElkIjoiQUNNRS1MTVQtNDhWIiwiYmF0dGVyeVBhc3Nwb3J0TnVtYmVyIjoiVVJOOk9ETDpCQVRUOjA5NTA2MDAwMTM0MzUyOkFDTUUtTE1ULTIwMjYtMDkiLCJiYXR0ZXJ5VHlwZSI6ImxtdCIsImJhdHRlcnlXZWlnaHRLZyI6MTIuNCwiY28yZVBlclVuaXRLZyI6ODYuNCwiY3JpdGljYWxSYXdNYXRlcmlhbHMiOlt7ImNhc051bWJlciI6Ijc0NDAtNDgtNCIsIm5hbWUiOiJDb2JhbHQiLCJ3ZWlnaHRHcmFtcyI6MzEwfSx7ImNhc051bWJlciI6Ijc0MzktOTMtMiIsIm5hbWUiOiJMaXRoaXVtIiwid2VpZ2h0R3JhbXMiOjQyMH0seyJjYXNOdW1iZXIiOiI3NzgyLTQyLTUiLCJuYW1lIjoiTmF0dXJhbCBncmFwaGl0ZSIsIndlaWdodEdyYW1zIjoxODAwfV0sImN5Y2xlTGlmZVRlc3RDUmF0ZSI6MSwiZXVEZWNsYXJhdGlvbk9mQ29uZm9ybWl0eSI6IkVVLURvQyBBQ01FLTIwMjYtTE1ULTA5MDEsIHBlciBSZWd1bGF0aW9uIChFVSkgMjAyMy8xNTQyIEFydC4gMTgiLCJleHBlY3RlZExpZmV0aW1lQ3ljbGVzIjoxMjAwLCJleHBlY3RlZExpZmV0aW1lUmVmZXJlbmNlVGVzdCI6IkVOIDUwNjA0LTE6MjAxNiwgMjUgZGVnQywgMTAwJSBEb0QiLCJndGluIjoiMDk1MDYwMDAxMzQzNTIiLCJoYXphcmRvdXNTdWJzdGFuY2VzIjpbeyJjYXNOdW1iZXIiOiIyMTMyNC00MC0zIiwiY29uY2VudHJhdGlvblBjdCI6MC44LCJuYW1lIjoiTGl0aGl1bSBoZXhhZmx1b3JvcGhvc3BoYXRlIn1dLCJpbml0aWFsUm91bmRUcmlwRWZmaWNpZW5jeVBjdCI6OTUsImludGVybmFsQ2VsbFJlc2lzdGFuY2VNb2htIjoxNCwiaW50ZXJuYWxQYWNrUmVzaXN0YW5jZU1vaG0iOjExMCwibWFudWZhY3R1cmluZ0RhdGUiOiIyMDI2LTA4LTE4VDAwOjAwOjAwWiIsIm1hbnVmYWN0dXJpbmdQbGFjZSI6Ik3DvG5jaGVuLCBERSIsIm1hcmtpbmdJbmZvcm1hdGlvbiI6IlNlcGFyYXRlLWNvbGxlY3Rpb24gc3ltYm9sIHBlciBBcnQuIDEzKDQpOyBjYXBhY2l0eSAyMCBBaCAvIDk2MCBXaDsgNDggViBMTVQiLCJtYXhpbXVtVm9sdGFnZVYiOjU0LjYsIm1pbmltYWxWb2x0YWdlViI6MzksIm5vbWluYWxDYXBhY2l0eUFoIjoyMCwibm9taW5hbFZvbHRhZ2VWIjo0OCwibm90SW5Vc2VUZW1wZXJhdHVyZVJhbmdlIjp7Im1heEMiOjQ1LCJtaW5DIjotMTB9LCJub3RJblVzZVRlbXBlcmF0dXJlUmVmZXJlbmNlVGVzdCI6IkVOIDUwNjA0LTE6MjAxNiBzdG9yYWdlIGNsYXVzZSIsIm9yaWdpbmFsUG93ZXJDYXBhYmlsaXR5VyI6OTYwLCJwb3dlckxpbWl0TWF4VyI6MTUwMCwicG93ZXJMaW1pdE1pblciOjIwLCJwcm9kdWN0R3JvdXAiOiJiYXR0ZXJ5IiwicmF0ZWRDYXBhY2l0eUt3aCI6bnVsbCwicmVjeWNsZWRDb250ZW50Q29iYWx0UGN0IjoxMiwicmVjeWNsZWRDb250ZW50TGVhZFBjdCI6MCwicmVjeWNsZWRDb250ZW50TGl0aGl1bVBjdCI6NiwicmVjeWNsZWRDb250ZW50Tmlja2VsUGN0Ijo4LCJyZW5ld2FibGVDb250ZW50UGN0IjoxNCwicm91bmRUcmlwRWZmaWNpZW5jeUF0SGFsZkN5Y2xlTGlmZVBjdCI6OTEsInVzYWJsZUV4dGluZ3Vpc2hpbmdBZ2VudCI6IldhdGVyOyBjb29sIGEgYnVybmluZyBwYWNrIHdpdGggbGFyZ2Ugdm9sdW1lcyBvZiB3YXRlciIsIndhc3RlQmF0dGVyeUluZm9ybWF0aW9uIjoiUmV0dXJuIHRoZSBiYXR0ZXJ5IHRvIGEgYmljeWNsZSByZXRhaWxlciBvciBhIG11bmljaXBhbCBjb2xsZWN0aW9uIHBvaW50LiBEbyBub3QgcGxhY2UgaXQgaW4gaG91c2Vob2xkIHdhc3RlLiJ9LCJwcm9kdWN0TmFtZSI6IkFjbWUgTE1UIDQ4ViAyMEFoIGJhdHRlcnkgcGFjayIsInB1Ymxpc2hlZEF0IjoiMjAyNi0wOS0wMVQwOTowNTowMFoiLCJxckNvZGVVcmwiOiJodHRwczovL2RwcC5hY21lLmV4YW1wbGUvMDEvMDk1MDYwMDAxMzQzNTIvMTAvQUNNRS1MTVQtMjAyNi0wOS8yMS83ZTRhOWMzZDJmMWU4YjZhNWQ0MCIsInJlcGFpcmFiaWxpdHlTY29yZSI6bnVsbCwicmV0ZW50aW9uVW50aWwiOiIyMDM2LTA4LTI5VDA5OjA1OjAwWiIsInNjaGVtYVZlcnNpb24iOiIyLjYuMCIsInN0YXR1cyI6ImFjdGl2ZSIsInVwZGF0ZWRBdCI6IjIwMjYtMDktMDFUMDk6MDU6MDBaIiwidmVyc2lvbiI6MX0.OnjeF7qUrlZOKc-Xx8u-ThMayslJBs7HPAmpZBFKvyJpivIqOrN5lTCW15PsoyBeSOpjmRq3Mm_UC99B-Ya-Dg", + "jws": "eyJhbGciOiJFZERTQSIsImtpZCI6ImZlODEyYzEyZjNhYjRjZTZhYzVkYjY5YWMzNTJmOTA2Y2IxYjExZWY0M2ZiMzNlMjUyZWY3ZmY1NTIyNjM4ODkifQ.eyJiYXRjaElkIjoiQUNNRS1MTVQtMjAyNi0wOSIsImNvMmVQZXJVbml0IjpudWxsLCJjb21tb2RpdHlDb2RlIjoiODUwNzYwMDAiLCJjcmVhdGVkQXQiOiIyMDI2LTA5LTAxVDA5OjAwOjAwWiIsImlkIjoiMDE5OWEzYzItN2IxMC03ZTRhLTljM2QtMmYxZThiNmE1ZDQwIiwibWFudWZhY3R1cmVyIjp7ImFkZHJlc3MiOiJNdXN0ZXJzdHJhc3NlIDEsIDgwMzMxIE3DvG5jaGVuLCBERSIsImNvdW50cnkiOm51bGwsImRpZFdlYlVybCI6Imh0dHBzOi8vbm9kZS5hY21lLmV4YW1wbGUvLndlbGwta25vd24vZGlkLmpzb24iLCJuYW1lIjoiQWNtZSBaZWxsZW4gR21iSCJ9LCJtYXRlcmlhbHMiOlt7ImNvdW50cnlPZk9yaWdpbiI6IkRFIiwibmFtZSI6Ik5NQyA4MTEgY2F0aG9kZSBhY3RpdmUgbWF0ZXJpYWwiLCJyZWN5Y2xlZFBjdCI6OCwid2VpZ2h0S2ciOjMuMX0seyJjb3VudHJ5T2ZPcmlnaW4iOiJERSIsIm5hbWUiOiJHcmFwaGl0ZSBhbm9kZSBhY3RpdmUgbWF0ZXJpYWwiLCJyZWN5Y2xlZFBjdCI6NCwid2VpZ2h0S2ciOjEuOX0seyJjb3VudHJ5T2ZPcmlnaW4iOiJERSIsIm5hbWUiOiJBbHVtaW5pdW0gcGFjayBob3VzaW5nIiwicmVjeWNsZWRQY3QiOjYwLCJ3ZWlnaHRLZyI6Mi4yfV0sInBsYWNlZE9uTWFya2V0RGF0ZSI6IjIwMjYtMDktMDEiLCJwcm9kdWN0R3JvdXAiOiJiYXR0ZXJ5IiwicHJvZHVjdEdyb3VwRGF0YSI6eyJiYXR0ZXJ5Q2hlbWlzdHJ5IjoiTk1DIiwiYmF0dGVyeU1vZGVsSWQiOiJBQ01FLUxNVC00OFYiLCJiYXR0ZXJ5UGFzc3BvcnROdW1iZXIiOiJVUk46T0RMOkJBVFQ6MDk1MDYwMDAxMzQzNTI6QUNNRS1MTVQtMjAyNi0wOSIsImJhdHRlcnlUeXBlIjoibG10IiwiYmF0dGVyeVdlaWdodEtnIjoxMi40LCJjbzJlUGVyVW5pdEtnIjo4Ni40LCJjcml0aWNhbFJhd01hdGVyaWFscyI6W3siY2FzTnVtYmVyIjoiNzQ0MC00OC00IiwibmFtZSI6IkNvYmFsdCIsIndlaWdodEdyYW1zIjozMTB9LHsiY2FzTnVtYmVyIjoiNzQzOS05My0yIiwibmFtZSI6IkxpdGhpdW0iLCJ3ZWlnaHRHcmFtcyI6NDIwfSx7ImNhc051bWJlciI6Ijc3ODItNDItNSIsIm5hbWUiOiJOYXR1cmFsIGdyYXBoaXRlIiwid2VpZ2h0R3JhbXMiOjE4MDB9XSwiY3ljbGVMaWZlVGVzdENSYXRlIjoxLCJldURlY2xhcmF0aW9uT2ZDb25mb3JtaXR5IjoiRVUtRG9DIEFDTUUtMjAyNi1MTVQtMDkwMSwgcGVyIFJlZ3VsYXRpb24gKEVVKSAyMDIzLzE1NDIgQXJ0LiAxOCIsImV4cGVjdGVkTGlmZXRpbWVDeWNsZXMiOjEyMDAsImV4cGVjdGVkTGlmZXRpbWVSZWZlcmVuY2VUZXN0IjoiRU4gNTA2MDQtMToyMDE2LCAyNSBkZWdDLCAxMDAlIERvRCIsImhhemFyZG91c1N1YnN0YW5jZXMiOlt7ImNhc051bWJlciI6IjIxMzI0LTQwLTMiLCJjb25jZW50cmF0aW9uUGN0IjowLjgsIm5hbWUiOiJMaXRoaXVtIGhleGFmbHVvcm9waG9zcGhhdGUifV0sImluaXRpYWxSb3VuZFRyaXBFZmZpY2llbmN5UGN0Ijo5NSwiaW50ZXJuYWxDZWxsUmVzaXN0YW5jZU1vaG0iOjE0LCJpbnRlcm5hbFBhY2tSZXNpc3RhbmNlTW9obSI6MTEwLCJtYW51ZmFjdHVyaW5nRGF0ZSI6IjIwMjYtMDgtMThUMDA6MDA6MDBaIiwibWFudWZhY3R1cmluZ1BsYWNlIjoiTcO8bmNoZW4sIERFIiwibWFya2luZ0luZm9ybWF0aW9uIjoiU2VwYXJhdGUtY29sbGVjdGlvbiBzeW1ib2wgcGVyIEFydC4gMTMoNCk7IGNhcGFjaXR5IDIwIEFoIC8gOTYwIFdoOyA0OCBWIExNVCIsIm1heGltdW1Wb2x0YWdlViI6NTQuNiwibWluaW1hbFZvbHRhZ2VWIjozOSwibm9taW5hbENhcGFjaXR5QWgiOjIwLCJub21pbmFsVm9sdGFnZVYiOjQ4LCJub3RJblVzZVRlbXBlcmF0dXJlUmFuZ2UiOnsibWF4QyI6NDUsIm1pbkMiOi0xMH0sIm5vdEluVXNlVGVtcGVyYXR1cmVSZWZlcmVuY2VUZXN0IjoiRU4gNTA2MDQtMToyMDE2IHN0b3JhZ2UgY2xhdXNlIiwib3JpZ2luYWxQb3dlckNhcGFiaWxpdHlXIjo5NjAsInBvd2VyTGltaXRNYXhXIjoxNTAwLCJwb3dlckxpbWl0TWluVyI6MjAsInByb2R1Y3RHcm91cCI6ImJhdHRlcnkiLCJwcm9kdWN0SWRlbnRpZmllciI6eyJndGluIjoiMDk1MDYwMDAxMzQzNTIiLCJzY2hlbWUiOiJnczEifSwicmF0ZWRDYXBhY2l0eUt3aCI6bnVsbCwicmVjeWNsZWRDb250ZW50Q29iYWx0UGN0IjoxMiwicmVjeWNsZWRDb250ZW50TGVhZFBjdCI6MCwicmVjeWNsZWRDb250ZW50TGl0aGl1bVBjdCI6NiwicmVjeWNsZWRDb250ZW50Tmlja2VsUGN0Ijo4LCJyZW5ld2FibGVDb250ZW50UGN0IjoxNCwicm91bmRUcmlwRWZmaWNpZW5jeUF0SGFsZkN5Y2xlTGlmZVBjdCI6OTEsInVzYWJsZUV4dGluZ3Vpc2hpbmdBZ2VudCI6IldhdGVyOyBjb29sIGEgYnVybmluZyBwYWNrIHdpdGggbGFyZ2Ugdm9sdW1lcyBvZiB3YXRlciIsIndhc3RlQmF0dGVyeUluZm9ybWF0aW9uIjoiUmV0dXJuIHRoZSBiYXR0ZXJ5IHRvIGEgYmljeWNsZSByZXRhaWxlciBvciBhIG11bmljaXBhbCBjb2xsZWN0aW9uIHBvaW50LiBEbyBub3QgcGxhY2UgaXQgaW4gaG91c2Vob2xkIHdhc3RlLiJ9LCJwcm9kdWN0TmFtZSI6IkFjbWUgTE1UIDQ4ViAyMEFoIGJhdHRlcnkgcGFjayIsInB1Ymxpc2hlZEF0IjoiMjAyNi0wOS0wMVQwOTowNTowMFoiLCJxckNvZGVVcmwiOiJodHRwczovL2RwcC5hY21lLmV4YW1wbGUvMDEvMDk1MDYwMDAxMzQzNTIvMjEvN2U0YTljM2QyZjFlOGI2YTVkNDAiLCJyZXBhaXJhYmlsaXR5U2NvcmUiOm51bGwsInJldGVudGlvblVudGlsIjoiMjAzNi0wOC0yOVQwOTowNTowMFoiLCJzY2hlbWFWZXJzaW9uIjoiMi43LjAiLCJzdGF0dXMiOiJhY3RpdmUiLCJ1cGRhdGVkQXQiOiIyMDI2LTA5LTAxVDA5OjA1OjAwWiIsInZlcnNpb24iOjF9.LHi5ToX900cUN4vak8l1zOZ5xc1H9jW25fL4XUWuxz2JU1_3PxxrjRUTyY9RctPxPSTWmS40fUWurEZnTdE3Dw", "payload": { + "batchId": "ACME-LMT-2026-09", "co2ePerUnit": null, "commodityCode": "85076000", "createdAt": "2026-09-01T09:00:00Z", @@ -607,7 +618,6 @@ "euDeclarationOfConformity": "EU-DoC ACME-2026-LMT-0901, per Regulation (EU) 2023/1542 Art. 18", "expectedLifetimeCycles": 1200, "expectedLifetimeReferenceTest": "EN 50604-1:2016, 25 degC, 100% DoD", - "gtin": "09506000134352", "hazardousSubstances": [ { "casNumber": "21324-40-3", @@ -634,6 +644,10 @@ "powerLimitMaxW": 1500.0, "powerLimitMinW": 20.0, "productGroup": "battery", + "productIdentifier": { + "gtin": "09506000134352", + "scheme": "gs1" + }, "ratedCapacityKwh": null, "recycledContentCobaltPct": 12.0, "recycledContentLeadPct": 0.0, @@ -646,10 +660,10 @@ }, "productName": "Acme LMT 48V 20Ah battery pack", "publishedAt": "2026-09-01T09:05:00Z", - "qrCodeUrl": "https://dpp.acme.example/01/09506000134352/10/ACME-LMT-2026-09/21/7e4a9c3d2f1e8b6a5d40", + "qrCodeUrl": "https://dpp.acme.example/01/09506000134352/21/7e4a9c3d2f1e8b6a5d40", "repairabilityScore": null, "retentionUntil": "2036-08-29T09:05:00Z", - "schemaVersion": "2.6.0", + "schemaVersion": "2.7.0", "status": "active", "updatedAt": "2026-09-01T09:05:00Z", "version": 1 diff --git a/site/dpp-landing/public/verify/examples/02-valid-with-transfer.json b/site/dpp-landing/public/verify/examples/02-valid-with-transfer.json index 3ff21b0..51ca302 100644 --- a/site/dpp-landing/public/verify/examples/02-valid-with-transfer.json +++ b/site/dpp-landing/public/verify/examples/02-valid-with-transfer.json @@ -16,7 +16,7 @@ { "action": "published", "actor": "api-key", - "entryHash": "4e81bf531274f21aa02339144c34711eac79af7fb22ebf10a18982adc3f075a3", + "entryHash": "2934a67be97238b4f38ff4ee4d53464a0c197cec343297b25124f894b942c2f2", "id": "0199a3c2-7b10-7e4a-9c3d-000000000002", "metadata": { "fullViewPayload": { @@ -142,7 +142,6 @@ "euDeclarationOfConformity": "EU-DoC ACME-2026-LMT-0901, per Regulation (EU) 2023/1542 Art. 18", "expectedLifetimeCycles": 1200, "expectedLifetimeReferenceTest": "EN 50604-1:2016, 25 degC, 100% DoD", - "gtin": "09506000134352", "hazardousSubstances": [ { "casNumber": "21324-40-3", @@ -169,6 +168,10 @@ "powerLimitMaxW": 1500.0, "powerLimitMinW": 20.0, "productGroup": "battery", + "productIdentifier": { + "gtin": "09506000134352", + "scheme": "gs1" + }, "ratedCapacityKwh": null, "recycledContentCobaltPct": 12.0, "recycledContentLeadPct": 0.0, @@ -194,16 +197,17 @@ }, "productName": "Acme LMT 48V 20Ah battery pack", "publishedAt": "2026-09-01T09:05:00Z", - "qrCodeUrl": "https://dpp.acme.example/01/09506000134352/10/ACME-LMT-2026-09/21/7e4a9c3d2f1e8b6a5d40", + "qrCodeUrl": "https://dpp.acme.example/01/09506000134352/21/7e4a9c3d2f1e8b6a5d40", "repairabilityScore": null, "retentionLocked": true, "retentionUntil": "2036-08-29T09:05:00Z", - "schemaVersion": "2.6.0", + "schemaVersion": "2.7.0", "status": "active", "updatedAt": "2026-09-01T09:05:00Z", "version": 1 }, "publicViewPayload": { + "batchId": "ACME-LMT-2026-09", "co2ePerUnit": null, "commodityCode": "85076000", "createdAt": "2026-09-01T09:00:00Z", @@ -264,7 +268,6 @@ "euDeclarationOfConformity": "EU-DoC ACME-2026-LMT-0901, per Regulation (EU) 2023/1542 Art. 18", "expectedLifetimeCycles": 1200, "expectedLifetimeReferenceTest": "EN 50604-1:2016, 25 degC, 100% DoD", - "gtin": "09506000134352", "hazardousSubstances": [ { "casNumber": "21324-40-3", @@ -291,6 +294,10 @@ "powerLimitMaxW": 1500.0, "powerLimitMinW": 20.0, "productGroup": "battery", + "productIdentifier": { + "gtin": "09506000134352", + "scheme": "gs1" + }, "ratedCapacityKwh": null, "recycledContentCobaltPct": 12.0, "recycledContentLeadPct": 0.0, @@ -303,10 +310,10 @@ }, "productName": "Acme LMT 48V 20Ah battery pack", "publishedAt": "2026-09-01T09:05:00Z", - "qrCodeUrl": "https://dpp.acme.example/01/09506000134352/10/ACME-LMT-2026-09/21/7e4a9c3d2f1e8b6a5d40", + "qrCodeUrl": "https://dpp.acme.example/01/09506000134352/21/7e4a9c3d2f1e8b6a5d40", "repairabilityScore": null, "retentionUntil": "2036-08-29T09:05:00Z", - "schemaVersion": "2.6.0", + "schemaVersion": "2.7.0", "status": "active", "updatedAt": "2026-09-01T09:05:00Z", "version": 1 @@ -322,7 +329,7 @@ { "action": "transferred", "actor": "api-key", - "entryHash": "5c869a32da993e9a5ee13bc3b059fee9c3abc1fbbd840ab2449473f0e5453b08", + "entryHash": "1b61fd6f3f72f0730d61b59008f883d7630a03e2dea9f5bd67206482d0770530", "id": "0199a3c2-7b10-7e4a-9c3d-000000000003", "metadata": { "event": "transfer.initiated", @@ -331,7 +338,7 @@ }, "newStatus": null, "passportId": "0199a3c2-7b10-7e4a-9c3d-2f1e8b6a5d40", - "prevHash": "4e81bf531274f21aa02339144c34711eac79af7fb22ebf10a18982adc3f075a3", + "prevHash": "2934a67be97238b4f38ff4ee4d53464a0c197cec343297b25124f894b942c2f2", "previousStatus": null, "requestId": "0199a3c2-7b10-7e4a-8d2e-000000000003", "timestamp": "2026-09-10T14:00:00.042Z" @@ -339,7 +346,7 @@ { "action": "transferred", "actor": "api-key", - "entryHash": "3a5eb46b99bc15d235b342a0a6092d3e382d998b7de32588ed4966d74295fa51", + "entryHash": "f462766c832366e92cef97196b764df1bd5ce5e1acc1fa5e2b395f99d4c3e6fa", "id": "0199a3c2-7b10-7e4a-9c3d-000000000004", "metadata": { "event": "transfer.accepted", @@ -348,7 +355,7 @@ }, "newStatus": null, "passportId": "0199a3c2-7b10-7e4a-9c3d-2f1e8b6a5d40", - "prevHash": "5c869a32da993e9a5ee13bc3b059fee9c3abc1fbbd840ab2449473f0e5453b08", + "prevHash": "1b61fd6f3f72f0730d61b59008f883d7630a03e2dea9f5bd67206482d0770530", "previousStatus": null, "requestId": "0199a3c2-7b10-7e4a-8d2e-000000000004", "timestamp": "2026-09-10T14:30:00.123456Z" @@ -399,7 +406,7 @@ } }, "fullView": { - "jws": "eyJhbGciOiJFZERTQSIsImtpZCI6ImZlODEyYzEyZjNhYjRjZTZhYzVkYjY5YWMzNTJmOTA2Y2IxYjExZWY0M2ZiMzNlMjUyZWY3ZmY1NTIyNjM4ODkifQ.eyJiYXRjaElkIjoiQUNNRS1MTVQtMjAyNi0wOSIsImNvMmVQZXJVbml0IjpudWxsLCJjb21tb2RpdHlDb2RlIjoiODUwNzYwMDAiLCJjcmVhdGVkQXQiOiIyMDI2LTA5LTAxVDA5OjAwOjAwWiIsImlkIjoiMDE5OWEzYzItN2IxMC03ZTRhLTljM2QtMmYxZThiNmE1ZDQwIiwiandzU2lnbmF0dXJlIjpudWxsLCJtYW51ZmFjdHVyZXIiOnsiYWRkcmVzcyI6Ik11c3RlcnN0cmFzc2UgMSwgODAzMzEgTcO8bmNoZW4sIERFIiwiY291bnRyeSI6bnVsbCwiZGlkV2ViVXJsIjoiaHR0cHM6Ly9ub2RlLmFjbWUuZXhhbXBsZS8ud2VsbC1rbm93bi9kaWQuanNvbiIsIm5hbWUiOiJBY21lIFplbGxlbiBHbWJIIn0sIm1hdGVyaWFscyI6W3siY291bnRyeU9mT3JpZ2luIjoiREUiLCJuYW1lIjoiTk1DIDgxMSBjYXRob2RlIGFjdGl2ZSBtYXRlcmlhbCIsInJlY3ljbGVkUGN0Ijo4LCJ3ZWlnaHRLZyI6My4xfSx7ImNvdW50cnlPZk9yaWdpbiI6IkRFIiwibmFtZSI6IkdyYXBoaXRlIGFub2RlIGFjdGl2ZSBtYXRlcmlhbCIsInJlY3ljbGVkUGN0Ijo0LCJ3ZWlnaHRLZyI6MS45fSx7ImNvdW50cnlPZk9yaWdpbiI6IkRFIiwibmFtZSI6IkFsdW1pbml1bSBwYWNrIGhvdXNpbmciLCJyZWN5Y2xlZFBjdCI6NjAsIndlaWdodEtnIjoyLjJ9XSwicGxhY2VkT25NYXJrZXREYXRlIjoiMjAyNi0wOS0wMSIsInByb2R1Y3RHcm91cCI6ImJhdHRlcnkiLCJwcm9kdWN0R3JvdXBEYXRhIjp7ImFub2RlTWF0ZXJpYWwiOlt7ImNhc051bWJlciI6Ijc3ODItNDItNSIsIm5hbWUiOiJHcmFwaGl0ZSIsIndlaWdodFBjdCI6OTZ9LHsiY2FzTnVtYmVyIjoiOTAwMy01NS04IiwibmFtZSI6IlNCUi9DTUMgYmluZGVyIiwid2VpZ2h0UGN0Ijo0fV0sImJhdHRlcnlDaGVtaXN0cnkiOiJOTUMiLCJiYXR0ZXJ5TW9kZWxJZCI6IkFDTUUtTE1ULTQ4ViIsImJhdHRlcnlQYXNzcG9ydE51bWJlciI6IlVSTjpPREw6QkFUVDowOTUwNjAwMDEzNDM1MjpBQ01FLUxNVC0yMDI2LTA5IiwiYmF0dGVyeVN0YXR1cyI6Im9yaWdpbmFsIiwiYmF0dGVyeVR5cGUiOiJsbXQiLCJiYXR0ZXJ5V2VpZ2h0S2ciOjEyLjQsImNhdGhvZGVNYXRlcmlhbCI6W3siY2FzTnVtYmVyIjoiMzQ2NDE3LTk3LTgiLCJuYW1lIjoiTGlOaTAuOE1uMC4xQ28wLjFPMiIsIndlaWdodFBjdCI6OTZ9LHsiY2FzTnVtYmVyIjoiMjQ5MzctNzktOSIsIm5hbWUiOiJQVkRGIGJpbmRlciIsIndlaWdodFBjdCI6Mn0seyJjYXNOdW1iZXIiOiIxMzMzLTg2LTQiLCJuYW1lIjoiQ29uZHVjdGl2ZSBjYXJib24gYmxhY2siLCJ3ZWlnaHRQY3QiOjJ9XSwiY28yZVBlclVuaXRLZyI6ODYuNCwiY29tcG9uZW50UGFydE51bWJlcnMiOlsiQUNNRS1DRUxMLTIxNzAwLU5NQyIsIkFDTUUtQk1TLTEzUy1WMSIsIkFDTUUtTE1ULUVOQ0wtNDgiXSwiY3JpdGljYWxSYXdNYXRlcmlhbHMiOlt7ImNhc051bWJlciI6Ijc0NDAtNDgtNCIsIm5hbWUiOiJDb2JhbHQiLCJ3ZWlnaHRHcmFtcyI6MzEwfSx7ImNhc051bWJlciI6Ijc0MzktOTMtMiIsIm5hbWUiOiJMaXRoaXVtIiwid2VpZ2h0R3JhbXMiOjQyMH0seyJjYXNOdW1iZXIiOiI3NzgyLTQyLTUiLCJuYW1lIjoiTmF0dXJhbCBncmFwaGl0ZSIsIndlaWdodEdyYW1zIjoxODAwfV0sImN5Y2xlTGlmZVRlc3RDUmF0ZSI6MSwiZGlzYXNzZW1ibHlJbnN0cnVjdGlvbnNVcmwiOiJodHRwczovL2FjbWUuZXhhbXBsZS9zZXJ2aWNlL2xtdC00OC9kaXNhc3NlbWJseSIsImR5bmFtaWNQZXJmb3JtYW5jZSI6eyJjYXBhY2l0eUZhZGVQY3QiOjAuNSwiZXhwZWN0ZWRMaWZldGltZUN5Y2xlcyI6MTE5NSwiaW50ZXJuYWxSZXNpc3RhbmNlTW9obSI6MTEwLjQsInJhdGVkQ2FwYWNpdHlBaCI6MTkuOSwicm91bmRUcmlwRWZmaWNpZW5jeVBjdCI6OTQuOH0sImVsZWN0cm9seXRlTWF0ZXJpYWwiOlt7ImNhc051bWJlciI6Ijk2LTQ5LTEiLCJuYW1lIjoiRXRoeWxlbmUgY2FyYm9uYXRlIiwid2VpZ2h0UGN0IjozOH0seyJjYXNOdW1iZXIiOiI2MTYtMzgtNiIsIm5hbWUiOiJEaW1ldGh5bCBjYXJib25hdGUiLCJ3ZWlnaHRQY3QiOjQ5fSx7ImNhc051bWJlciI6IjIxMzI0LTQwLTMiLCJuYW1lIjoiTGl0aGl1bSBoZXhhZmx1b3JvcGhvc3BoYXRlIiwid2VpZ2h0UGN0IjoxM31dLCJldURlY2xhcmF0aW9uT2ZDb25mb3JtaXR5IjoiRVUtRG9DIEFDTUUtMjAyNi1MTVQtMDkwMSwgcGVyIFJlZ3VsYXRpb24gKEVVKSAyMDIzLzE1NDIgQXJ0LiAxOCIsImV4cGVjdGVkTGlmZXRpbWVDeWNsZXMiOjEyMDAsImV4cGVjdGVkTGlmZXRpbWVSZWZlcmVuY2VUZXN0IjoiRU4gNTA2MDQtMToyMDE2LCAyNSBkZWdDLCAxMDAlIERvRCIsImd0aW4iOiIwOTUwNjAwMDEzNDM1MiIsImhhemFyZG91c1N1YnN0YW5jZXMiOlt7ImNhc051bWJlciI6IjIxMzI0LTQwLTMiLCJjb25jZW50cmF0aW9uUGN0IjowLjgsIm5hbWUiOiJMaXRoaXVtIGhleGFmbHVvcm9waG9zcGhhdGUifV0sImluaXRpYWxSb3VuZFRyaXBFZmZpY2llbmN5UGN0Ijo5NSwiaW50ZXJuYWxDZWxsUmVzaXN0YW5jZU1vaG0iOjE0LCJpbnRlcm5hbFBhY2tSZXNpc3RhbmNlTW9obSI6MTEwLCJtYW51ZmFjdHVyaW5nRGF0ZSI6IjIwMjYtMDgtMThUMDA6MDA6MDBaIiwibWFudWZhY3R1cmluZ1BsYWNlIjoiTcO8bmNoZW4sIERFIiwibWFya2luZ0luZm9ybWF0aW9uIjoiU2VwYXJhdGUtY29sbGVjdGlvbiBzeW1ib2wgcGVyIEFydC4gMTMoNCk7IGNhcGFjaXR5IDIwIEFoIC8gOTYwIFdoOyA0OCBWIExNVCIsIm1heGltdW1Wb2x0YWdlViI6NTQuNiwibWluaW1hbFZvbHRhZ2VWIjozOSwibm9taW5hbENhcGFjaXR5QWgiOjIwLCJub21pbmFsVm9sdGFnZVYiOjQ4LCJub3RJblVzZVRlbXBlcmF0dXJlUmFuZ2UiOnsibWF4QyI6NDUsIm1pbkMiOi0xMH0sIm5vdEluVXNlVGVtcGVyYXR1cmVSZWZlcmVuY2VUZXN0IjoiRU4gNTA2MDQtMToyMDE2IHN0b3JhZ2UgY2xhdXNlIiwib3JpZ2luYWxQb3dlckNhcGFiaWxpdHlXIjo5NjAsInBvd2VyTGltaXRNYXhXIjoxNTAwLCJwb3dlckxpbWl0TWluVyI6MjAsInByb2R1Y3RHcm91cCI6ImJhdHRlcnkiLCJyYXRlZENhcGFjaXR5S3doIjpudWxsLCJyZWN5Y2xlZENvbnRlbnRDb2JhbHRQY3QiOjEyLCJyZWN5Y2xlZENvbnRlbnRMZWFkUGN0IjowLCJyZWN5Y2xlZENvbnRlbnRMaXRoaXVtUGN0Ijo2LCJyZWN5Y2xlZENvbnRlbnROaWNrZWxQY3QiOjgsInJlbmV3YWJsZUNvbnRlbnRQY3QiOjE0LCJyb3VuZFRyaXBFZmZpY2llbmN5QXRIYWxmQ3ljbGVMaWZlUGN0Ijo5MSwic2FmZXR5TWVhc3VyZXMiOiJEbyBub3Qgb3BlbiB0aGUgcGFjay4gUmVwbGFjZSBpdCB0aHJvdWdoIGFuIGF1dGhvcmlzZWQgZGVhbGVyLiBLZWVwIGl0IGF3YXkgZnJvbSBoZWF0IGFib3ZlIDYwIGRlZ0MuIiwic3BhcmVQYXJ0c0NvbnRhY3RzIjoic3BhcmVzQGFjbWUuZXhhbXBsZSIsInN0YXRlT2ZIZWFsdGgiOnsicGFyYW1ldGVyU2V0Ijoic3RhdGlvbmFyeU9yTG10IiwicmVtYWluaW5nQ2FwYWNpdHlQY3QiOjk5LjUsInJlbWFpbmluZ1Bvd2VyQ2FwYWJpbGl0eVBjdCI6OTkuMSwic2VsZkRpc2NoYXJnZVJhdGVQY3RQZXJNb250aCI6Mn0sInN0YXRlT2ZIZWFsdGhQY3QiOm51bGwsInRlc3RSZXBvcnRSZXN1bHRzIjoiRU4gNTA2MDQtMToyMDE2IHBhc3M7IFVOIDM4LjMgcGFzczsgcmVwb3J0IEFDTUUtVFItMjAyNi0wODE1IiwidXNhYmxlRXh0aW5ndWlzaGluZ0FnZW50IjoiV2F0ZXI7IGNvb2wgYSBidXJuaW5nIHBhY2sgd2l0aCBsYXJnZSB2b2x1bWVzIG9mIHdhdGVyIiwidXNhZ2VIaXN0b3J5Ijp7ImNoYXJnZURpc2NoYXJnZUN5Y2xlcyI6NH0sIndhc3RlQmF0dGVyeUluZm9ybWF0aW9uIjoiUmV0dXJuIHRoZSBiYXR0ZXJ5IHRvIGEgYmljeWNsZSByZXRhaWxlciBvciBhIG11bmljaXBhbCBjb2xsZWN0aW9uIHBvaW50LiBEbyBub3QgcGxhY2UgaXQgaW4gaG91c2Vob2xkIHdhc3RlLiJ9LCJwcm9kdWN0TmFtZSI6IkFjbWUgTE1UIDQ4ViAyMEFoIGJhdHRlcnkgcGFjayIsInB1Ymxpc2hlZEF0IjoiMjAyNi0wOS0wMVQwOTowNTowMFoiLCJxckNvZGVVcmwiOiJodHRwczovL2RwcC5hY21lLmV4YW1wbGUvMDEvMDk1MDYwMDAxMzQzNTIvMTAvQUNNRS1MTVQtMjAyNi0wOS8yMS83ZTRhOWMzZDJmMWU4YjZhNWQ0MCIsInJlcGFpcmFiaWxpdHlTY29yZSI6bnVsbCwicmV0ZW50aW9uTG9ja2VkIjp0cnVlLCJyZXRlbnRpb25VbnRpbCI6IjIwMzYtMDgtMjlUMDk6MDU6MDBaIiwic2NoZW1hVmVyc2lvbiI6IjIuNi4wIiwic3RhdHVzIjoiYWN0aXZlIiwidXBkYXRlZEF0IjoiMjAyNi0wOS0wMVQwOTowNTowMFoiLCJ2ZXJzaW9uIjoxfQ.WlMDfygpDjYk8xHRQjpQgppwhVkUgYhyj_9iiPH_IXvXb8IKcD0cA2lFJCznB1B6llfW5Q3qiZcfRAdB78nDBw", + "jws": "eyJhbGciOiJFZERTQSIsImtpZCI6ImZlODEyYzEyZjNhYjRjZTZhYzVkYjY5YWMzNTJmOTA2Y2IxYjExZWY0M2ZiMzNlMjUyZWY3ZmY1NTIyNjM4ODkifQ.eyJiYXRjaElkIjoiQUNNRS1MTVQtMjAyNi0wOSIsImNvMmVQZXJVbml0IjpudWxsLCJjb21tb2RpdHlDb2RlIjoiODUwNzYwMDAiLCJjcmVhdGVkQXQiOiIyMDI2LTA5LTAxVDA5OjAwOjAwWiIsImlkIjoiMDE5OWEzYzItN2IxMC03ZTRhLTljM2QtMmYxZThiNmE1ZDQwIiwiandzU2lnbmF0dXJlIjpudWxsLCJtYW51ZmFjdHVyZXIiOnsiYWRkcmVzcyI6Ik11c3RlcnN0cmFzc2UgMSwgODAzMzEgTcO8bmNoZW4sIERFIiwiY291bnRyeSI6bnVsbCwiZGlkV2ViVXJsIjoiaHR0cHM6Ly9ub2RlLmFjbWUuZXhhbXBsZS8ud2VsbC1rbm93bi9kaWQuanNvbiIsIm5hbWUiOiJBY21lIFplbGxlbiBHbWJIIn0sIm1hdGVyaWFscyI6W3siY291bnRyeU9mT3JpZ2luIjoiREUiLCJuYW1lIjoiTk1DIDgxMSBjYXRob2RlIGFjdGl2ZSBtYXRlcmlhbCIsInJlY3ljbGVkUGN0Ijo4LCJ3ZWlnaHRLZyI6My4xfSx7ImNvdW50cnlPZk9yaWdpbiI6IkRFIiwibmFtZSI6IkdyYXBoaXRlIGFub2RlIGFjdGl2ZSBtYXRlcmlhbCIsInJlY3ljbGVkUGN0Ijo0LCJ3ZWlnaHRLZyI6MS45fSx7ImNvdW50cnlPZk9yaWdpbiI6IkRFIiwibmFtZSI6IkFsdW1pbml1bSBwYWNrIGhvdXNpbmciLCJyZWN5Y2xlZFBjdCI6NjAsIndlaWdodEtnIjoyLjJ9XSwicGxhY2VkT25NYXJrZXREYXRlIjoiMjAyNi0wOS0wMSIsInByb2R1Y3RHcm91cCI6ImJhdHRlcnkiLCJwcm9kdWN0R3JvdXBEYXRhIjp7ImFub2RlTWF0ZXJpYWwiOlt7ImNhc051bWJlciI6Ijc3ODItNDItNSIsIm5hbWUiOiJHcmFwaGl0ZSIsIndlaWdodFBjdCI6OTZ9LHsiY2FzTnVtYmVyIjoiOTAwMy01NS04IiwibmFtZSI6IlNCUi9DTUMgYmluZGVyIiwid2VpZ2h0UGN0Ijo0fV0sImJhdHRlcnlDaGVtaXN0cnkiOiJOTUMiLCJiYXR0ZXJ5TW9kZWxJZCI6IkFDTUUtTE1ULTQ4ViIsImJhdHRlcnlQYXNzcG9ydE51bWJlciI6IlVSTjpPREw6QkFUVDowOTUwNjAwMDEzNDM1MjpBQ01FLUxNVC0yMDI2LTA5IiwiYmF0dGVyeVN0YXR1cyI6Im9yaWdpbmFsIiwiYmF0dGVyeVR5cGUiOiJsbXQiLCJiYXR0ZXJ5V2VpZ2h0S2ciOjEyLjQsImNhdGhvZGVNYXRlcmlhbCI6W3siY2FzTnVtYmVyIjoiMzQ2NDE3LTk3LTgiLCJuYW1lIjoiTGlOaTAuOE1uMC4xQ28wLjFPMiIsIndlaWdodFBjdCI6OTZ9LHsiY2FzTnVtYmVyIjoiMjQ5MzctNzktOSIsIm5hbWUiOiJQVkRGIGJpbmRlciIsIndlaWdodFBjdCI6Mn0seyJjYXNOdW1iZXIiOiIxMzMzLTg2LTQiLCJuYW1lIjoiQ29uZHVjdGl2ZSBjYXJib24gYmxhY2siLCJ3ZWlnaHRQY3QiOjJ9XSwiY28yZVBlclVuaXRLZyI6ODYuNCwiY29tcG9uZW50UGFydE51bWJlcnMiOlsiQUNNRS1DRUxMLTIxNzAwLU5NQyIsIkFDTUUtQk1TLTEzUy1WMSIsIkFDTUUtTE1ULUVOQ0wtNDgiXSwiY3JpdGljYWxSYXdNYXRlcmlhbHMiOlt7ImNhc051bWJlciI6Ijc0NDAtNDgtNCIsIm5hbWUiOiJDb2JhbHQiLCJ3ZWlnaHRHcmFtcyI6MzEwfSx7ImNhc051bWJlciI6Ijc0MzktOTMtMiIsIm5hbWUiOiJMaXRoaXVtIiwid2VpZ2h0R3JhbXMiOjQyMH0seyJjYXNOdW1iZXIiOiI3NzgyLTQyLTUiLCJuYW1lIjoiTmF0dXJhbCBncmFwaGl0ZSIsIndlaWdodEdyYW1zIjoxODAwfV0sImN5Y2xlTGlmZVRlc3RDUmF0ZSI6MSwiZGlzYXNzZW1ibHlJbnN0cnVjdGlvbnNVcmwiOiJodHRwczovL2FjbWUuZXhhbXBsZS9zZXJ2aWNlL2xtdC00OC9kaXNhc3NlbWJseSIsImR5bmFtaWNQZXJmb3JtYW5jZSI6eyJjYXBhY2l0eUZhZGVQY3QiOjAuNSwiZXhwZWN0ZWRMaWZldGltZUN5Y2xlcyI6MTE5NSwiaW50ZXJuYWxSZXNpc3RhbmNlTW9obSI6MTEwLjQsInJhdGVkQ2FwYWNpdHlBaCI6MTkuOSwicm91bmRUcmlwRWZmaWNpZW5jeVBjdCI6OTQuOH0sImVsZWN0cm9seXRlTWF0ZXJpYWwiOlt7ImNhc051bWJlciI6Ijk2LTQ5LTEiLCJuYW1lIjoiRXRoeWxlbmUgY2FyYm9uYXRlIiwid2VpZ2h0UGN0IjozOH0seyJjYXNOdW1iZXIiOiI2MTYtMzgtNiIsIm5hbWUiOiJEaW1ldGh5bCBjYXJib25hdGUiLCJ3ZWlnaHRQY3QiOjQ5fSx7ImNhc051bWJlciI6IjIxMzI0LTQwLTMiLCJuYW1lIjoiTGl0aGl1bSBoZXhhZmx1b3JvcGhvc3BoYXRlIiwid2VpZ2h0UGN0IjoxM31dLCJldURlY2xhcmF0aW9uT2ZDb25mb3JtaXR5IjoiRVUtRG9DIEFDTUUtMjAyNi1MTVQtMDkwMSwgcGVyIFJlZ3VsYXRpb24gKEVVKSAyMDIzLzE1NDIgQXJ0LiAxOCIsImV4cGVjdGVkTGlmZXRpbWVDeWNsZXMiOjEyMDAsImV4cGVjdGVkTGlmZXRpbWVSZWZlcmVuY2VUZXN0IjoiRU4gNTA2MDQtMToyMDE2LCAyNSBkZWdDLCAxMDAlIERvRCIsImhhemFyZG91c1N1YnN0YW5jZXMiOlt7ImNhc051bWJlciI6IjIxMzI0LTQwLTMiLCJjb25jZW50cmF0aW9uUGN0IjowLjgsIm5hbWUiOiJMaXRoaXVtIGhleGFmbHVvcm9waG9zcGhhdGUifV0sImluaXRpYWxSb3VuZFRyaXBFZmZpY2llbmN5UGN0Ijo5NSwiaW50ZXJuYWxDZWxsUmVzaXN0YW5jZU1vaG0iOjE0LCJpbnRlcm5hbFBhY2tSZXNpc3RhbmNlTW9obSI6MTEwLCJtYW51ZmFjdHVyaW5nRGF0ZSI6IjIwMjYtMDgtMThUMDA6MDA6MDBaIiwibWFudWZhY3R1cmluZ1BsYWNlIjoiTcO8bmNoZW4sIERFIiwibWFya2luZ0luZm9ybWF0aW9uIjoiU2VwYXJhdGUtY29sbGVjdGlvbiBzeW1ib2wgcGVyIEFydC4gMTMoNCk7IGNhcGFjaXR5IDIwIEFoIC8gOTYwIFdoOyA0OCBWIExNVCIsIm1heGltdW1Wb2x0YWdlViI6NTQuNiwibWluaW1hbFZvbHRhZ2VWIjozOSwibm9taW5hbENhcGFjaXR5QWgiOjIwLCJub21pbmFsVm9sdGFnZVYiOjQ4LCJub3RJblVzZVRlbXBlcmF0dXJlUmFuZ2UiOnsibWF4QyI6NDUsIm1pbkMiOi0xMH0sIm5vdEluVXNlVGVtcGVyYXR1cmVSZWZlcmVuY2VUZXN0IjoiRU4gNTA2MDQtMToyMDE2IHN0b3JhZ2UgY2xhdXNlIiwib3JpZ2luYWxQb3dlckNhcGFiaWxpdHlXIjo5NjAsInBvd2VyTGltaXRNYXhXIjoxNTAwLCJwb3dlckxpbWl0TWluVyI6MjAsInByb2R1Y3RHcm91cCI6ImJhdHRlcnkiLCJwcm9kdWN0SWRlbnRpZmllciI6eyJndGluIjoiMDk1MDYwMDAxMzQzNTIiLCJzY2hlbWUiOiJnczEifSwicmF0ZWRDYXBhY2l0eUt3aCI6bnVsbCwicmVjeWNsZWRDb250ZW50Q29iYWx0UGN0IjoxMiwicmVjeWNsZWRDb250ZW50TGVhZFBjdCI6MCwicmVjeWNsZWRDb250ZW50TGl0aGl1bVBjdCI6NiwicmVjeWNsZWRDb250ZW50Tmlja2VsUGN0Ijo4LCJyZW5ld2FibGVDb250ZW50UGN0IjoxNCwicm91bmRUcmlwRWZmaWNpZW5jeUF0SGFsZkN5Y2xlTGlmZVBjdCI6OTEsInNhZmV0eU1lYXN1cmVzIjoiRG8gbm90IG9wZW4gdGhlIHBhY2suIFJlcGxhY2UgaXQgdGhyb3VnaCBhbiBhdXRob3Jpc2VkIGRlYWxlci4gS2VlcCBpdCBhd2F5IGZyb20gaGVhdCBhYm92ZSA2MCBkZWdDLiIsInNwYXJlUGFydHNDb250YWN0cyI6InNwYXJlc0BhY21lLmV4YW1wbGUiLCJzdGF0ZU9mSGVhbHRoIjp7InBhcmFtZXRlclNldCI6InN0YXRpb25hcnlPckxtdCIsInJlbWFpbmluZ0NhcGFjaXR5UGN0Ijo5OS41LCJyZW1haW5pbmdQb3dlckNhcGFiaWxpdHlQY3QiOjk5LjEsInNlbGZEaXNjaGFyZ2VSYXRlUGN0UGVyTW9udGgiOjJ9LCJzdGF0ZU9mSGVhbHRoUGN0IjpudWxsLCJ0ZXN0UmVwb3J0UmVzdWx0cyI6IkVOIDUwNjA0LTE6MjAxNiBwYXNzOyBVTiAzOC4zIHBhc3M7IHJlcG9ydCBBQ01FLVRSLTIwMjYtMDgxNSIsInVzYWJsZUV4dGluZ3Vpc2hpbmdBZ2VudCI6IldhdGVyOyBjb29sIGEgYnVybmluZyBwYWNrIHdpdGggbGFyZ2Ugdm9sdW1lcyBvZiB3YXRlciIsInVzYWdlSGlzdG9yeSI6eyJjaGFyZ2VEaXNjaGFyZ2VDeWNsZXMiOjR9LCJ3YXN0ZUJhdHRlcnlJbmZvcm1hdGlvbiI6IlJldHVybiB0aGUgYmF0dGVyeSB0byBhIGJpY3ljbGUgcmV0YWlsZXIgb3IgYSBtdW5pY2lwYWwgY29sbGVjdGlvbiBwb2ludC4gRG8gbm90IHBsYWNlIGl0IGluIGhvdXNlaG9sZCB3YXN0ZS4ifSwicHJvZHVjdE5hbWUiOiJBY21lIExNVCA0OFYgMjBBaCBiYXR0ZXJ5IHBhY2siLCJwdWJsaXNoZWRBdCI6IjIwMjYtMDktMDFUMDk6MDU6MDBaIiwicXJDb2RlVXJsIjoiaHR0cHM6Ly9kcHAuYWNtZS5leGFtcGxlLzAxLzA5NTA2MDAwMTM0MzUyLzIxLzdlNGE5YzNkMmYxZThiNmE1ZDQwIiwicmVwYWlyYWJpbGl0eVNjb3JlIjpudWxsLCJyZXRlbnRpb25Mb2NrZWQiOnRydWUsInJldGVudGlvblVudGlsIjoiMjAzNi0wOC0yOVQwOTowNTowMFoiLCJzY2hlbWFWZXJzaW9uIjoiMi43LjAiLCJzdGF0dXMiOiJhY3RpdmUiLCJ1cGRhdGVkQXQiOiIyMDI2LTA5LTAxVDA5OjA1OjAwWiIsInZlcnNpb24iOjF9.55m5_OYvkiKUN9QV9BNB3JeqMOvkYjwYCiPxup_xciGjUrYtHOcaDdy8ULvSAy5NRGpT9p90RrajgBb0Iv5kCg", "payload": { "batchId": "ACME-LMT-2026-09", "co2ePerUnit": null, @@ -523,7 +530,6 @@ "euDeclarationOfConformity": "EU-DoC ACME-2026-LMT-0901, per Regulation (EU) 2023/1542 Art. 18", "expectedLifetimeCycles": 1200, "expectedLifetimeReferenceTest": "EN 50604-1:2016, 25 degC, 100% DoD", - "gtin": "09506000134352", "hazardousSubstances": [ { "casNumber": "21324-40-3", @@ -550,6 +556,10 @@ "powerLimitMaxW": 1500.0, "powerLimitMinW": 20.0, "productGroup": "battery", + "productIdentifier": { + "gtin": "09506000134352", + "scheme": "gs1" + }, "ratedCapacityKwh": null, "recycledContentCobaltPct": 12.0, "recycledContentLeadPct": 0.0, @@ -575,11 +585,11 @@ }, "productName": "Acme LMT 48V 20Ah battery pack", "publishedAt": "2026-09-01T09:05:00Z", - "qrCodeUrl": "https://dpp.acme.example/01/09506000134352/10/ACME-LMT-2026-09/21/7e4a9c3d2f1e8b6a5d40", + "qrCodeUrl": "https://dpp.acme.example/01/09506000134352/21/7e4a9c3d2f1e8b6a5d40", "repairabilityScore": null, "retentionLocked": true, "retentionUntil": "2036-08-29T09:05:00Z", - "schemaVersion": "2.6.0", + "schemaVersion": "2.7.0", "status": "active", "updatedAt": "2026-09-01T09:05:00Z", "version": 1 @@ -587,22 +597,23 @@ }, "manifest": { "contentHashes": { - "auditEntries": "1ce4965e8bbf4b7e9b7cbf26d108ac4aa10392a2750a296c9b8e972801cc6835", - "fullView": "70f5a9779744ad58b77cebed129ecec4c24d7c5bbf3b65be4b3c61c4be5f0e80", - "publicView": "7ada532408d7c20c385804ca00d0a6a969f1448c796775c14657d7932ecf392a", + "auditEntries": "c21f3edd03d4f71d7428fe4560d2030ffd514db461234e89b489ae0934f4d7f3", + "fullView": "e8c5a8fbbddd67948a3ee3eb7abfc07427c2ff2ab23eeba3dc4dc9bbf12cbdbd", + "publicView": "74c1a1eda478cc2643b8652bf188f47e449b851ae64ae05f922de314a9249b83", "transferChain": "52e0fd4f91be57a81e6219557f5f3c4f2331b0cbbc9461d376c967dae5445445" }, - "coreVersion": "0.20.0", + "coreVersion": "0.21.0", "createdAt": "2026-09-25T12:00:00Z", "formatVersion": "1", "issuerDid": "did:web:node.acme.example", "nodeVersion": "0.14.0", "passportId": "0199a3c2-7b10-7e4a-9c3d-2f1e8b6a5d40" }, - "manifestJws": "eyJhbGciOiJFZERTQSIsImtpZCI6ImZlODEyYzEyZjNhYjRjZTZhYzVkYjY5YWMzNTJmOTA2Y2IxYjExZWY0M2ZiMzNlMjUyZWY3ZmY1NTIyNjM4ODkifQ.eyJjb250ZW50SGFzaGVzIjp7ImF1ZGl0RW50cmllcyI6IjFjZTQ5NjVlOGJiZjRiN2U5YjdjYmYyNmQxMDhhYzRhYTEwMzkyYTI3NTBhMjk2YzliOGU5NzI4MDFjYzY4MzUiLCJmdWxsVmlldyI6IjcwZjVhOTc3OTc0NGFkNThiNzdjZWJlZDEyOWVjZWM0YzI0ZDdjNWJiZjNiNjViZTRiM2M2MWM0YmU1ZjBlODAiLCJwdWJsaWNWaWV3IjoiN2FkYTUzMjQwOGQ3YzIwYzM4NTgwNGNhMDBkMGE2YTk2OWYxNDQ4Yzc5Njc3NWMxNDY1N2Q3OTMyZWNmMzkyYSIsInRyYW5zZmVyQ2hhaW4iOiI1MmUwZmQ0ZjkxYmU1N2E4MWU2MjE5NTU3ZjVmM2M0ZjIzMzFiMGNiYmM5NDYxZDM3NmM5NjdkYWU1NDQ1NDQ1In0sImNvcmVWZXJzaW9uIjoiMC4yMC4wIiwiY3JlYXRlZEF0IjoiMjAyNi0wOS0yNVQxMjowMDowMFoiLCJmb3JtYXRWZXJzaW9uIjoiMSIsImlzc3VlckRpZCI6ImRpZDp3ZWI6bm9kZS5hY21lLmV4YW1wbGUiLCJub2RlVmVyc2lvbiI6IjAuMTQuMCIsInBhc3Nwb3J0SWQiOiIwMTk5YTNjMi03YjEwLTdlNGEtOWMzZC0yZjFlOGI2YTVkNDAifQ.5t4VLTBbsEQ37gcC8296m3-u8WHKTXwVCqVS_GZQk5KezjIuV0eIdXU9iwjAUHeNPWJqntrMrgM6BKQ5jlVuAg", + "manifestJws": "eyJhbGciOiJFZERTQSIsImtpZCI6ImZlODEyYzEyZjNhYjRjZTZhYzVkYjY5YWMzNTJmOTA2Y2IxYjExZWY0M2ZiMzNlMjUyZWY3ZmY1NTIyNjM4ODkifQ.eyJjb250ZW50SGFzaGVzIjp7ImF1ZGl0RW50cmllcyI6ImMyMWYzZWRkMDNkNGY3MWQ3NDI4ZmU0NTYwZDIwMzBmZmQ1MTRkYjQ2MTIzNGU4OWI0ODlhZTA5MzRmNGQ3ZjMiLCJmdWxsVmlldyI6ImU4YzVhOGZiYmRkZDY3OTQ4YTNlZTNlYjdhYmZjMDc0MjdjMmZmMmFiMjNlZWJhM2RjNGRjOWJiZjEyY2JkYmQiLCJwdWJsaWNWaWV3IjoiNzRjMWExZWRhNDc4Y2MyNjQzYjg2NTJiZjE4OGY0N2U0NDliODUxYWU2NGFlMDVmOTIyZGUzMTRhOTI0OWI4MyIsInRyYW5zZmVyQ2hhaW4iOiI1MmUwZmQ0ZjkxYmU1N2E4MWU2MjE5NTU3ZjVmM2M0ZjIzMzFiMGNiYmM5NDYxZDM3NmM5NjdkYWU1NDQ1NDQ1In0sImNvcmVWZXJzaW9uIjoiMC4yMS4wIiwiY3JlYXRlZEF0IjoiMjAyNi0wOS0yNVQxMjowMDowMFoiLCJmb3JtYXRWZXJzaW9uIjoiMSIsImlzc3VlckRpZCI6ImRpZDp3ZWI6bm9kZS5hY21lLmV4YW1wbGUiLCJub2RlVmVyc2lvbiI6IjAuMTQuMCIsInBhc3Nwb3J0SWQiOiIwMTk5YTNjMi03YjEwLTdlNGEtOWMzZC0yZjFlOGI2YTVkNDAifQ.TdSJCy5o_N9Rwte5i5kPZZJLkVVPP-N1PluWU0AN-b9QF9KpZWr5vXt-MWRAlSnrOiUbbT4HPKpE98NW6dk1AA", "publicView": { - "jws": "eyJhbGciOiJFZERTQSIsImtpZCI6ImZlODEyYzEyZjNhYjRjZTZhYzVkYjY5YWMzNTJmOTA2Y2IxYjExZWY0M2ZiMzNlMjUyZWY3ZmY1NTIyNjM4ODkifQ.eyJjbzJlUGVyVW5pdCI6bnVsbCwiY29tbW9kaXR5Q29kZSI6Ijg1MDc2MDAwIiwiY3JlYXRlZEF0IjoiMjAyNi0wOS0wMVQwOTowMDowMFoiLCJpZCI6IjAxOTlhM2MyLTdiMTAtN2U0YS05YzNkLTJmMWU4YjZhNWQ0MCIsIm1hbnVmYWN0dXJlciI6eyJhZGRyZXNzIjoiTXVzdGVyc3RyYXNzZSAxLCA4MDMzMSBNw7xuY2hlbiwgREUiLCJjb3VudHJ5IjpudWxsLCJkaWRXZWJVcmwiOiJodHRwczovL25vZGUuYWNtZS5leGFtcGxlLy53ZWxsLWtub3duL2RpZC5qc29uIiwibmFtZSI6IkFjbWUgWmVsbGVuIEdtYkgifSwibWF0ZXJpYWxzIjpbeyJjb3VudHJ5T2ZPcmlnaW4iOiJERSIsIm5hbWUiOiJOTUMgODExIGNhdGhvZGUgYWN0aXZlIG1hdGVyaWFsIiwicmVjeWNsZWRQY3QiOjgsIndlaWdodEtnIjozLjF9LHsiY291bnRyeU9mT3JpZ2luIjoiREUiLCJuYW1lIjoiR3JhcGhpdGUgYW5vZGUgYWN0aXZlIG1hdGVyaWFsIiwicmVjeWNsZWRQY3QiOjQsIndlaWdodEtnIjoxLjl9LHsiY291bnRyeU9mT3JpZ2luIjoiREUiLCJuYW1lIjoiQWx1bWluaXVtIHBhY2sgaG91c2luZyIsInJlY3ljbGVkUGN0Ijo2MCwid2VpZ2h0S2ciOjIuMn1dLCJwbGFjZWRPbk1hcmtldERhdGUiOiIyMDI2LTA5LTAxIiwicHJvZHVjdEdyb3VwIjoiYmF0dGVyeSIsInByb2R1Y3RHcm91cERhdGEiOnsiYmF0dGVyeUNoZW1pc3RyeSI6Ik5NQyIsImJhdHRlcnlNb2RlbElkIjoiQUNNRS1MTVQtNDhWIiwiYmF0dGVyeVBhc3Nwb3J0TnVtYmVyIjoiVVJOOk9ETDpCQVRUOjA5NTA2MDAwMTM0MzUyOkFDTUUtTE1ULTIwMjYtMDkiLCJiYXR0ZXJ5VHlwZSI6ImxtdCIsImJhdHRlcnlXZWlnaHRLZyI6MTIuNCwiY28yZVBlclVuaXRLZyI6ODYuNCwiY3JpdGljYWxSYXdNYXRlcmlhbHMiOlt7ImNhc051bWJlciI6Ijc0NDAtNDgtNCIsIm5hbWUiOiJDb2JhbHQiLCJ3ZWlnaHRHcmFtcyI6MzEwfSx7ImNhc051bWJlciI6Ijc0MzktOTMtMiIsIm5hbWUiOiJMaXRoaXVtIiwid2VpZ2h0R3JhbXMiOjQyMH0seyJjYXNOdW1iZXIiOiI3NzgyLTQyLTUiLCJuYW1lIjoiTmF0dXJhbCBncmFwaGl0ZSIsIndlaWdodEdyYW1zIjoxODAwfV0sImN5Y2xlTGlmZVRlc3RDUmF0ZSI6MSwiZXVEZWNsYXJhdGlvbk9mQ29uZm9ybWl0eSI6IkVVLURvQyBBQ01FLTIwMjYtTE1ULTA5MDEsIHBlciBSZWd1bGF0aW9uIChFVSkgMjAyMy8xNTQyIEFydC4gMTgiLCJleHBlY3RlZExpZmV0aW1lQ3ljbGVzIjoxMjAwLCJleHBlY3RlZExpZmV0aW1lUmVmZXJlbmNlVGVzdCI6IkVOIDUwNjA0LTE6MjAxNiwgMjUgZGVnQywgMTAwJSBEb0QiLCJndGluIjoiMDk1MDYwMDAxMzQzNTIiLCJoYXphcmRvdXNTdWJzdGFuY2VzIjpbeyJjYXNOdW1iZXIiOiIyMTMyNC00MC0zIiwiY29uY2VudHJhdGlvblBjdCI6MC44LCJuYW1lIjoiTGl0aGl1bSBoZXhhZmx1b3JvcGhvc3BoYXRlIn1dLCJpbml0aWFsUm91bmRUcmlwRWZmaWNpZW5jeVBjdCI6OTUsImludGVybmFsQ2VsbFJlc2lzdGFuY2VNb2htIjoxNCwiaW50ZXJuYWxQYWNrUmVzaXN0YW5jZU1vaG0iOjExMCwibWFudWZhY3R1cmluZ0RhdGUiOiIyMDI2LTA4LTE4VDAwOjAwOjAwWiIsIm1hbnVmYWN0dXJpbmdQbGFjZSI6Ik3DvG5jaGVuLCBERSIsIm1hcmtpbmdJbmZvcm1hdGlvbiI6IlNlcGFyYXRlLWNvbGxlY3Rpb24gc3ltYm9sIHBlciBBcnQuIDEzKDQpOyBjYXBhY2l0eSAyMCBBaCAvIDk2MCBXaDsgNDggViBMTVQiLCJtYXhpbXVtVm9sdGFnZVYiOjU0LjYsIm1pbmltYWxWb2x0YWdlViI6MzksIm5vbWluYWxDYXBhY2l0eUFoIjoyMCwibm9taW5hbFZvbHRhZ2VWIjo0OCwibm90SW5Vc2VUZW1wZXJhdHVyZVJhbmdlIjp7Im1heEMiOjQ1LCJtaW5DIjotMTB9LCJub3RJblVzZVRlbXBlcmF0dXJlUmVmZXJlbmNlVGVzdCI6IkVOIDUwNjA0LTE6MjAxNiBzdG9yYWdlIGNsYXVzZSIsIm9yaWdpbmFsUG93ZXJDYXBhYmlsaXR5VyI6OTYwLCJwb3dlckxpbWl0TWF4VyI6MTUwMCwicG93ZXJMaW1pdE1pblciOjIwLCJwcm9kdWN0R3JvdXAiOiJiYXR0ZXJ5IiwicmF0ZWRDYXBhY2l0eUt3aCI6bnVsbCwicmVjeWNsZWRDb250ZW50Q29iYWx0UGN0IjoxMiwicmVjeWNsZWRDb250ZW50TGVhZFBjdCI6MCwicmVjeWNsZWRDb250ZW50TGl0aGl1bVBjdCI6NiwicmVjeWNsZWRDb250ZW50Tmlja2VsUGN0Ijo4LCJyZW5ld2FibGVDb250ZW50UGN0IjoxNCwicm91bmRUcmlwRWZmaWNpZW5jeUF0SGFsZkN5Y2xlTGlmZVBjdCI6OTEsInVzYWJsZUV4dGluZ3Vpc2hpbmdBZ2VudCI6IldhdGVyOyBjb29sIGEgYnVybmluZyBwYWNrIHdpdGggbGFyZ2Ugdm9sdW1lcyBvZiB3YXRlciIsIndhc3RlQmF0dGVyeUluZm9ybWF0aW9uIjoiUmV0dXJuIHRoZSBiYXR0ZXJ5IHRvIGEgYmljeWNsZSByZXRhaWxlciBvciBhIG11bmljaXBhbCBjb2xsZWN0aW9uIHBvaW50LiBEbyBub3QgcGxhY2UgaXQgaW4gaG91c2Vob2xkIHdhc3RlLiJ9LCJwcm9kdWN0TmFtZSI6IkFjbWUgTE1UIDQ4ViAyMEFoIGJhdHRlcnkgcGFjayIsInB1Ymxpc2hlZEF0IjoiMjAyNi0wOS0wMVQwOTowNTowMFoiLCJxckNvZGVVcmwiOiJodHRwczovL2RwcC5hY21lLmV4YW1wbGUvMDEvMDk1MDYwMDAxMzQzNTIvMTAvQUNNRS1MTVQtMjAyNi0wOS8yMS83ZTRhOWMzZDJmMWU4YjZhNWQ0MCIsInJlcGFpcmFiaWxpdHlTY29yZSI6bnVsbCwicmV0ZW50aW9uVW50aWwiOiIyMDM2LTA4LTI5VDA5OjA1OjAwWiIsInNjaGVtYVZlcnNpb24iOiIyLjYuMCIsInN0YXR1cyI6ImFjdGl2ZSIsInVwZGF0ZWRBdCI6IjIwMjYtMDktMDFUMDk6MDU6MDBaIiwidmVyc2lvbiI6MX0.OnjeF7qUrlZOKc-Xx8u-ThMayslJBs7HPAmpZBFKvyJpivIqOrN5lTCW15PsoyBeSOpjmRq3Mm_UC99B-Ya-Dg", + "jws": "eyJhbGciOiJFZERTQSIsImtpZCI6ImZlODEyYzEyZjNhYjRjZTZhYzVkYjY5YWMzNTJmOTA2Y2IxYjExZWY0M2ZiMzNlMjUyZWY3ZmY1NTIyNjM4ODkifQ.eyJiYXRjaElkIjoiQUNNRS1MTVQtMjAyNi0wOSIsImNvMmVQZXJVbml0IjpudWxsLCJjb21tb2RpdHlDb2RlIjoiODUwNzYwMDAiLCJjcmVhdGVkQXQiOiIyMDI2LTA5LTAxVDA5OjAwOjAwWiIsImlkIjoiMDE5OWEzYzItN2IxMC03ZTRhLTljM2QtMmYxZThiNmE1ZDQwIiwibWFudWZhY3R1cmVyIjp7ImFkZHJlc3MiOiJNdXN0ZXJzdHJhc3NlIDEsIDgwMzMxIE3DvG5jaGVuLCBERSIsImNvdW50cnkiOm51bGwsImRpZFdlYlVybCI6Imh0dHBzOi8vbm9kZS5hY21lLmV4YW1wbGUvLndlbGwta25vd24vZGlkLmpzb24iLCJuYW1lIjoiQWNtZSBaZWxsZW4gR21iSCJ9LCJtYXRlcmlhbHMiOlt7ImNvdW50cnlPZk9yaWdpbiI6IkRFIiwibmFtZSI6Ik5NQyA4MTEgY2F0aG9kZSBhY3RpdmUgbWF0ZXJpYWwiLCJyZWN5Y2xlZFBjdCI6OCwid2VpZ2h0S2ciOjMuMX0seyJjb3VudHJ5T2ZPcmlnaW4iOiJERSIsIm5hbWUiOiJHcmFwaGl0ZSBhbm9kZSBhY3RpdmUgbWF0ZXJpYWwiLCJyZWN5Y2xlZFBjdCI6NCwid2VpZ2h0S2ciOjEuOX0seyJjb3VudHJ5T2ZPcmlnaW4iOiJERSIsIm5hbWUiOiJBbHVtaW5pdW0gcGFjayBob3VzaW5nIiwicmVjeWNsZWRQY3QiOjYwLCJ3ZWlnaHRLZyI6Mi4yfV0sInBsYWNlZE9uTWFya2V0RGF0ZSI6IjIwMjYtMDktMDEiLCJwcm9kdWN0R3JvdXAiOiJiYXR0ZXJ5IiwicHJvZHVjdEdyb3VwRGF0YSI6eyJiYXR0ZXJ5Q2hlbWlzdHJ5IjoiTk1DIiwiYmF0dGVyeU1vZGVsSWQiOiJBQ01FLUxNVC00OFYiLCJiYXR0ZXJ5UGFzc3BvcnROdW1iZXIiOiJVUk46T0RMOkJBVFQ6MDk1MDYwMDAxMzQzNTI6QUNNRS1MTVQtMjAyNi0wOSIsImJhdHRlcnlUeXBlIjoibG10IiwiYmF0dGVyeVdlaWdodEtnIjoxMi40LCJjbzJlUGVyVW5pdEtnIjo4Ni40LCJjcml0aWNhbFJhd01hdGVyaWFscyI6W3siY2FzTnVtYmVyIjoiNzQ0MC00OC00IiwibmFtZSI6IkNvYmFsdCIsIndlaWdodEdyYW1zIjozMTB9LHsiY2FzTnVtYmVyIjoiNzQzOS05My0yIiwibmFtZSI6IkxpdGhpdW0iLCJ3ZWlnaHRHcmFtcyI6NDIwfSx7ImNhc051bWJlciI6Ijc3ODItNDItNSIsIm5hbWUiOiJOYXR1cmFsIGdyYXBoaXRlIiwid2VpZ2h0R3JhbXMiOjE4MDB9XSwiY3ljbGVMaWZlVGVzdENSYXRlIjoxLCJldURlY2xhcmF0aW9uT2ZDb25mb3JtaXR5IjoiRVUtRG9DIEFDTUUtMjAyNi1MTVQtMDkwMSwgcGVyIFJlZ3VsYXRpb24gKEVVKSAyMDIzLzE1NDIgQXJ0LiAxOCIsImV4cGVjdGVkTGlmZXRpbWVDeWNsZXMiOjEyMDAsImV4cGVjdGVkTGlmZXRpbWVSZWZlcmVuY2VUZXN0IjoiRU4gNTA2MDQtMToyMDE2LCAyNSBkZWdDLCAxMDAlIERvRCIsImhhemFyZG91c1N1YnN0YW5jZXMiOlt7ImNhc051bWJlciI6IjIxMzI0LTQwLTMiLCJjb25jZW50cmF0aW9uUGN0IjowLjgsIm5hbWUiOiJMaXRoaXVtIGhleGFmbHVvcm9waG9zcGhhdGUifV0sImluaXRpYWxSb3VuZFRyaXBFZmZpY2llbmN5UGN0Ijo5NSwiaW50ZXJuYWxDZWxsUmVzaXN0YW5jZU1vaG0iOjE0LCJpbnRlcm5hbFBhY2tSZXNpc3RhbmNlTW9obSI6MTEwLCJtYW51ZmFjdHVyaW5nRGF0ZSI6IjIwMjYtMDgtMThUMDA6MDA6MDBaIiwibWFudWZhY3R1cmluZ1BsYWNlIjoiTcO8bmNoZW4sIERFIiwibWFya2luZ0luZm9ybWF0aW9uIjoiU2VwYXJhdGUtY29sbGVjdGlvbiBzeW1ib2wgcGVyIEFydC4gMTMoNCk7IGNhcGFjaXR5IDIwIEFoIC8gOTYwIFdoOyA0OCBWIExNVCIsIm1heGltdW1Wb2x0YWdlViI6NTQuNiwibWluaW1hbFZvbHRhZ2VWIjozOSwibm9taW5hbENhcGFjaXR5QWgiOjIwLCJub21pbmFsVm9sdGFnZVYiOjQ4LCJub3RJblVzZVRlbXBlcmF0dXJlUmFuZ2UiOnsibWF4QyI6NDUsIm1pbkMiOi0xMH0sIm5vdEluVXNlVGVtcGVyYXR1cmVSZWZlcmVuY2VUZXN0IjoiRU4gNTA2MDQtMToyMDE2IHN0b3JhZ2UgY2xhdXNlIiwib3JpZ2luYWxQb3dlckNhcGFiaWxpdHlXIjo5NjAsInBvd2VyTGltaXRNYXhXIjoxNTAwLCJwb3dlckxpbWl0TWluVyI6MjAsInByb2R1Y3RHcm91cCI6ImJhdHRlcnkiLCJwcm9kdWN0SWRlbnRpZmllciI6eyJndGluIjoiMDk1MDYwMDAxMzQzNTIiLCJzY2hlbWUiOiJnczEifSwicmF0ZWRDYXBhY2l0eUt3aCI6bnVsbCwicmVjeWNsZWRDb250ZW50Q29iYWx0UGN0IjoxMiwicmVjeWNsZWRDb250ZW50TGVhZFBjdCI6MCwicmVjeWNsZWRDb250ZW50TGl0aGl1bVBjdCI6NiwicmVjeWNsZWRDb250ZW50Tmlja2VsUGN0Ijo4LCJyZW5ld2FibGVDb250ZW50UGN0IjoxNCwicm91bmRUcmlwRWZmaWNpZW5jeUF0SGFsZkN5Y2xlTGlmZVBjdCI6OTEsInVzYWJsZUV4dGluZ3Vpc2hpbmdBZ2VudCI6IldhdGVyOyBjb29sIGEgYnVybmluZyBwYWNrIHdpdGggbGFyZ2Ugdm9sdW1lcyBvZiB3YXRlciIsIndhc3RlQmF0dGVyeUluZm9ybWF0aW9uIjoiUmV0dXJuIHRoZSBiYXR0ZXJ5IHRvIGEgYmljeWNsZSByZXRhaWxlciBvciBhIG11bmljaXBhbCBjb2xsZWN0aW9uIHBvaW50LiBEbyBub3QgcGxhY2UgaXQgaW4gaG91c2Vob2xkIHdhc3RlLiJ9LCJwcm9kdWN0TmFtZSI6IkFjbWUgTE1UIDQ4ViAyMEFoIGJhdHRlcnkgcGFjayIsInB1Ymxpc2hlZEF0IjoiMjAyNi0wOS0wMVQwOTowNTowMFoiLCJxckNvZGVVcmwiOiJodHRwczovL2RwcC5hY21lLmV4YW1wbGUvMDEvMDk1MDYwMDAxMzQzNTIvMjEvN2U0YTljM2QyZjFlOGI2YTVkNDAiLCJyZXBhaXJhYmlsaXR5U2NvcmUiOm51bGwsInJldGVudGlvblVudGlsIjoiMjAzNi0wOC0yOVQwOTowNTowMFoiLCJzY2hlbWFWZXJzaW9uIjoiMi43LjAiLCJzdGF0dXMiOiJhY3RpdmUiLCJ1cGRhdGVkQXQiOiIyMDI2LTA5LTAxVDA5OjA1OjAwWiIsInZlcnNpb24iOjF9.LHi5ToX900cUN4vak8l1zOZ5xc1H9jW25fL4XUWuxz2JU1_3PxxrjRUTyY9RctPxPSTWmS40fUWurEZnTdE3Dw", "payload": { + "batchId": "ACME-LMT-2026-09", "co2ePerUnit": null, "commodityCode": "85076000", "createdAt": "2026-09-01T09:00:00Z", @@ -663,7 +674,6 @@ "euDeclarationOfConformity": "EU-DoC ACME-2026-LMT-0901, per Regulation (EU) 2023/1542 Art. 18", "expectedLifetimeCycles": 1200, "expectedLifetimeReferenceTest": "EN 50604-1:2016, 25 degC, 100% DoD", - "gtin": "09506000134352", "hazardousSubstances": [ { "casNumber": "21324-40-3", @@ -690,6 +700,10 @@ "powerLimitMaxW": 1500.0, "powerLimitMinW": 20.0, "productGroup": "battery", + "productIdentifier": { + "gtin": "09506000134352", + "scheme": "gs1" + }, "ratedCapacityKwh": null, "recycledContentCobaltPct": 12.0, "recycledContentLeadPct": 0.0, @@ -702,10 +716,10 @@ }, "productName": "Acme LMT 48V 20Ah battery pack", "publishedAt": "2026-09-01T09:05:00Z", - "qrCodeUrl": "https://dpp.acme.example/01/09506000134352/10/ACME-LMT-2026-09/21/7e4a9c3d2f1e8b6a5d40", + "qrCodeUrl": "https://dpp.acme.example/01/09506000134352/21/7e4a9c3d2f1e8b6a5d40", "repairabilityScore": null, "retentionUntil": "2036-08-29T09:05:00Z", - "schemaVersion": "2.6.0", + "schemaVersion": "2.7.0", "status": "active", "updatedAt": "2026-09-01T09:05:00Z", "version": 1 diff --git a/site/dpp-landing/public/verify/examples/03-valid-with-eol.json b/site/dpp-landing/public/verify/examples/03-valid-with-eol.json index c97ae2d..22717ff 100644 --- a/site/dpp-landing/public/verify/examples/03-valid-with-eol.json +++ b/site/dpp-landing/public/verify/examples/03-valid-with-eol.json @@ -16,7 +16,7 @@ { "action": "published", "actor": "api-key", - "entryHash": "4e81bf531274f21aa02339144c34711eac79af7fb22ebf10a18982adc3f075a3", + "entryHash": "2934a67be97238b4f38ff4ee4d53464a0c197cec343297b25124f894b942c2f2", "id": "0199a3c2-7b10-7e4a-9c3d-000000000002", "metadata": { "fullViewPayload": { @@ -142,7 +142,6 @@ "euDeclarationOfConformity": "EU-DoC ACME-2026-LMT-0901, per Regulation (EU) 2023/1542 Art. 18", "expectedLifetimeCycles": 1200, "expectedLifetimeReferenceTest": "EN 50604-1:2016, 25 degC, 100% DoD", - "gtin": "09506000134352", "hazardousSubstances": [ { "casNumber": "21324-40-3", @@ -169,6 +168,10 @@ "powerLimitMaxW": 1500.0, "powerLimitMinW": 20.0, "productGroup": "battery", + "productIdentifier": { + "gtin": "09506000134352", + "scheme": "gs1" + }, "ratedCapacityKwh": null, "recycledContentCobaltPct": 12.0, "recycledContentLeadPct": 0.0, @@ -194,16 +197,17 @@ }, "productName": "Acme LMT 48V 20Ah battery pack", "publishedAt": "2026-09-01T09:05:00Z", - "qrCodeUrl": "https://dpp.acme.example/01/09506000134352/10/ACME-LMT-2026-09/21/7e4a9c3d2f1e8b6a5d40", + "qrCodeUrl": "https://dpp.acme.example/01/09506000134352/21/7e4a9c3d2f1e8b6a5d40", "repairabilityScore": null, "retentionLocked": true, "retentionUntil": "2036-08-29T09:05:00Z", - "schemaVersion": "2.6.0", + "schemaVersion": "2.7.0", "status": "active", "updatedAt": "2026-09-01T09:05:00Z", "version": 1 }, "publicViewPayload": { + "batchId": "ACME-LMT-2026-09", "co2ePerUnit": null, "commodityCode": "85076000", "createdAt": "2026-09-01T09:00:00Z", @@ -264,7 +268,6 @@ "euDeclarationOfConformity": "EU-DoC ACME-2026-LMT-0901, per Regulation (EU) 2023/1542 Art. 18", "expectedLifetimeCycles": 1200, "expectedLifetimeReferenceTest": "EN 50604-1:2016, 25 degC, 100% DoD", - "gtin": "09506000134352", "hazardousSubstances": [ { "casNumber": "21324-40-3", @@ -291,6 +294,10 @@ "powerLimitMaxW": 1500.0, "powerLimitMinW": 20.0, "productGroup": "battery", + "productIdentifier": { + "gtin": "09506000134352", + "scheme": "gs1" + }, "ratedCapacityKwh": null, "recycledContentCobaltPct": 12.0, "recycledContentLeadPct": 0.0, @@ -303,10 +310,10 @@ }, "productName": "Acme LMT 48V 20Ah battery pack", "publishedAt": "2026-09-01T09:05:00Z", - "qrCodeUrl": "https://dpp.acme.example/01/09506000134352/10/ACME-LMT-2026-09/21/7e4a9c3d2f1e8b6a5d40", + "qrCodeUrl": "https://dpp.acme.example/01/09506000134352/21/7e4a9c3d2f1e8b6a5d40", "repairabilityScore": null, "retentionUntil": "2036-08-29T09:05:00Z", - "schemaVersion": "2.6.0", + "schemaVersion": "2.7.0", "status": "active", "updatedAt": "2026-09-01T09:05:00Z", "version": 1 @@ -322,7 +329,7 @@ { "action": "deactivated", "actor": "api-key", - "entryHash": "f5fe9d960a95161eb72590f7a8c644c6ed022f956f1d8aaf84eb8a93b9154c58", + "entryHash": "b5cec9e5dad32bb0c151c0a17a43fe650d808c234a3c1c5747738902af6bef3d", "id": "0199a3c2-7b10-7e4a-9c3d-000000000005", "metadata": { "declaredAt": "2026-09-20T08:00:00Z", @@ -335,7 +342,7 @@ }, "newStatus": "deactivated", "passportId": "0199a3c2-7b10-7e4a-9c3d-2f1e8b6a5d40", - "prevHash": "4e81bf531274f21aa02339144c34711eac79af7fb22ebf10a18982adc3f075a3", + "prevHash": "2934a67be97238b4f38ff4ee4d53464a0c197cec343297b25124f894b942c2f2", "previousStatus": "active", "requestId": "0199a3c2-7b10-7e4a-8d2e-000000000005", "timestamp": "2026-09-20T08:00:00.018Z" @@ -374,7 +381,7 @@ } }, "fullView": { - "jws": "eyJhbGciOiJFZERTQSIsImtpZCI6ImZlODEyYzEyZjNhYjRjZTZhYzVkYjY5YWMzNTJmOTA2Y2IxYjExZWY0M2ZiMzNlMjUyZWY3ZmY1NTIyNjM4ODkifQ.eyJiYXRjaElkIjoiQUNNRS1MTVQtMjAyNi0wOSIsImNvMmVQZXJVbml0IjpudWxsLCJjb21tb2RpdHlDb2RlIjoiODUwNzYwMDAiLCJjcmVhdGVkQXQiOiIyMDI2LTA5LTAxVDA5OjAwOjAwWiIsImlkIjoiMDE5OWEzYzItN2IxMC03ZTRhLTljM2QtMmYxZThiNmE1ZDQwIiwiandzU2lnbmF0dXJlIjpudWxsLCJtYW51ZmFjdHVyZXIiOnsiYWRkcmVzcyI6Ik11c3RlcnN0cmFzc2UgMSwgODAzMzEgTcO8bmNoZW4sIERFIiwiY291bnRyeSI6bnVsbCwiZGlkV2ViVXJsIjoiaHR0cHM6Ly9ub2RlLmFjbWUuZXhhbXBsZS8ud2VsbC1rbm93bi9kaWQuanNvbiIsIm5hbWUiOiJBY21lIFplbGxlbiBHbWJIIn0sIm1hdGVyaWFscyI6W3siY291bnRyeU9mT3JpZ2luIjoiREUiLCJuYW1lIjoiTk1DIDgxMSBjYXRob2RlIGFjdGl2ZSBtYXRlcmlhbCIsInJlY3ljbGVkUGN0Ijo4LCJ3ZWlnaHRLZyI6My4xfSx7ImNvdW50cnlPZk9yaWdpbiI6IkRFIiwibmFtZSI6IkdyYXBoaXRlIGFub2RlIGFjdGl2ZSBtYXRlcmlhbCIsInJlY3ljbGVkUGN0Ijo0LCJ3ZWlnaHRLZyI6MS45fSx7ImNvdW50cnlPZk9yaWdpbiI6IkRFIiwibmFtZSI6IkFsdW1pbml1bSBwYWNrIGhvdXNpbmciLCJyZWN5Y2xlZFBjdCI6NjAsIndlaWdodEtnIjoyLjJ9XSwicGxhY2VkT25NYXJrZXREYXRlIjoiMjAyNi0wOS0wMSIsInByb2R1Y3RHcm91cCI6ImJhdHRlcnkiLCJwcm9kdWN0R3JvdXBEYXRhIjp7ImFub2RlTWF0ZXJpYWwiOlt7ImNhc051bWJlciI6Ijc3ODItNDItNSIsIm5hbWUiOiJHcmFwaGl0ZSIsIndlaWdodFBjdCI6OTZ9LHsiY2FzTnVtYmVyIjoiOTAwMy01NS04IiwibmFtZSI6IlNCUi9DTUMgYmluZGVyIiwid2VpZ2h0UGN0Ijo0fV0sImJhdHRlcnlDaGVtaXN0cnkiOiJOTUMiLCJiYXR0ZXJ5TW9kZWxJZCI6IkFDTUUtTE1ULTQ4ViIsImJhdHRlcnlQYXNzcG9ydE51bWJlciI6IlVSTjpPREw6QkFUVDowOTUwNjAwMDEzNDM1MjpBQ01FLUxNVC0yMDI2LTA5IiwiYmF0dGVyeVN0YXR1cyI6Im9yaWdpbmFsIiwiYmF0dGVyeVR5cGUiOiJsbXQiLCJiYXR0ZXJ5V2VpZ2h0S2ciOjEyLjQsImNhdGhvZGVNYXRlcmlhbCI6W3siY2FzTnVtYmVyIjoiMzQ2NDE3LTk3LTgiLCJuYW1lIjoiTGlOaTAuOE1uMC4xQ28wLjFPMiIsIndlaWdodFBjdCI6OTZ9LHsiY2FzTnVtYmVyIjoiMjQ5MzctNzktOSIsIm5hbWUiOiJQVkRGIGJpbmRlciIsIndlaWdodFBjdCI6Mn0seyJjYXNOdW1iZXIiOiIxMzMzLTg2LTQiLCJuYW1lIjoiQ29uZHVjdGl2ZSBjYXJib24gYmxhY2siLCJ3ZWlnaHRQY3QiOjJ9XSwiY28yZVBlclVuaXRLZyI6ODYuNCwiY29tcG9uZW50UGFydE51bWJlcnMiOlsiQUNNRS1DRUxMLTIxNzAwLU5NQyIsIkFDTUUtQk1TLTEzUy1WMSIsIkFDTUUtTE1ULUVOQ0wtNDgiXSwiY3JpdGljYWxSYXdNYXRlcmlhbHMiOlt7ImNhc051bWJlciI6Ijc0NDAtNDgtNCIsIm5hbWUiOiJDb2JhbHQiLCJ3ZWlnaHRHcmFtcyI6MzEwfSx7ImNhc051bWJlciI6Ijc0MzktOTMtMiIsIm5hbWUiOiJMaXRoaXVtIiwid2VpZ2h0R3JhbXMiOjQyMH0seyJjYXNOdW1iZXIiOiI3NzgyLTQyLTUiLCJuYW1lIjoiTmF0dXJhbCBncmFwaGl0ZSIsIndlaWdodEdyYW1zIjoxODAwfV0sImN5Y2xlTGlmZVRlc3RDUmF0ZSI6MSwiZGlzYXNzZW1ibHlJbnN0cnVjdGlvbnNVcmwiOiJodHRwczovL2FjbWUuZXhhbXBsZS9zZXJ2aWNlL2xtdC00OC9kaXNhc3NlbWJseSIsImR5bmFtaWNQZXJmb3JtYW5jZSI6eyJjYXBhY2l0eUZhZGVQY3QiOjAuNSwiZXhwZWN0ZWRMaWZldGltZUN5Y2xlcyI6MTE5NSwiaW50ZXJuYWxSZXNpc3RhbmNlTW9obSI6MTEwLjQsInJhdGVkQ2FwYWNpdHlBaCI6MTkuOSwicm91bmRUcmlwRWZmaWNpZW5jeVBjdCI6OTQuOH0sImVsZWN0cm9seXRlTWF0ZXJpYWwiOlt7ImNhc051bWJlciI6Ijk2LTQ5LTEiLCJuYW1lIjoiRXRoeWxlbmUgY2FyYm9uYXRlIiwid2VpZ2h0UGN0IjozOH0seyJjYXNOdW1iZXIiOiI2MTYtMzgtNiIsIm5hbWUiOiJEaW1ldGh5bCBjYXJib25hdGUiLCJ3ZWlnaHRQY3QiOjQ5fSx7ImNhc051bWJlciI6IjIxMzI0LTQwLTMiLCJuYW1lIjoiTGl0aGl1bSBoZXhhZmx1b3JvcGhvc3BoYXRlIiwid2VpZ2h0UGN0IjoxM31dLCJldURlY2xhcmF0aW9uT2ZDb25mb3JtaXR5IjoiRVUtRG9DIEFDTUUtMjAyNi1MTVQtMDkwMSwgcGVyIFJlZ3VsYXRpb24gKEVVKSAyMDIzLzE1NDIgQXJ0LiAxOCIsImV4cGVjdGVkTGlmZXRpbWVDeWNsZXMiOjEyMDAsImV4cGVjdGVkTGlmZXRpbWVSZWZlcmVuY2VUZXN0IjoiRU4gNTA2MDQtMToyMDE2LCAyNSBkZWdDLCAxMDAlIERvRCIsImd0aW4iOiIwOTUwNjAwMDEzNDM1MiIsImhhemFyZG91c1N1YnN0YW5jZXMiOlt7ImNhc051bWJlciI6IjIxMzI0LTQwLTMiLCJjb25jZW50cmF0aW9uUGN0IjowLjgsIm5hbWUiOiJMaXRoaXVtIGhleGFmbHVvcm9waG9zcGhhdGUifV0sImluaXRpYWxSb3VuZFRyaXBFZmZpY2llbmN5UGN0Ijo5NSwiaW50ZXJuYWxDZWxsUmVzaXN0YW5jZU1vaG0iOjE0LCJpbnRlcm5hbFBhY2tSZXNpc3RhbmNlTW9obSI6MTEwLCJtYW51ZmFjdHVyaW5nRGF0ZSI6IjIwMjYtMDgtMThUMDA6MDA6MDBaIiwibWFudWZhY3R1cmluZ1BsYWNlIjoiTcO8bmNoZW4sIERFIiwibWFya2luZ0luZm9ybWF0aW9uIjoiU2VwYXJhdGUtY29sbGVjdGlvbiBzeW1ib2wgcGVyIEFydC4gMTMoNCk7IGNhcGFjaXR5IDIwIEFoIC8gOTYwIFdoOyA0OCBWIExNVCIsIm1heGltdW1Wb2x0YWdlViI6NTQuNiwibWluaW1hbFZvbHRhZ2VWIjozOSwibm9taW5hbENhcGFjaXR5QWgiOjIwLCJub21pbmFsVm9sdGFnZVYiOjQ4LCJub3RJblVzZVRlbXBlcmF0dXJlUmFuZ2UiOnsibWF4QyI6NDUsIm1pbkMiOi0xMH0sIm5vdEluVXNlVGVtcGVyYXR1cmVSZWZlcmVuY2VUZXN0IjoiRU4gNTA2MDQtMToyMDE2IHN0b3JhZ2UgY2xhdXNlIiwib3JpZ2luYWxQb3dlckNhcGFiaWxpdHlXIjo5NjAsInBvd2VyTGltaXRNYXhXIjoxNTAwLCJwb3dlckxpbWl0TWluVyI6MjAsInByb2R1Y3RHcm91cCI6ImJhdHRlcnkiLCJyYXRlZENhcGFjaXR5S3doIjpudWxsLCJyZWN5Y2xlZENvbnRlbnRDb2JhbHRQY3QiOjEyLCJyZWN5Y2xlZENvbnRlbnRMZWFkUGN0IjowLCJyZWN5Y2xlZENvbnRlbnRMaXRoaXVtUGN0Ijo2LCJyZWN5Y2xlZENvbnRlbnROaWNrZWxQY3QiOjgsInJlbmV3YWJsZUNvbnRlbnRQY3QiOjE0LCJyb3VuZFRyaXBFZmZpY2llbmN5QXRIYWxmQ3ljbGVMaWZlUGN0Ijo5MSwic2FmZXR5TWVhc3VyZXMiOiJEbyBub3Qgb3BlbiB0aGUgcGFjay4gUmVwbGFjZSBpdCB0aHJvdWdoIGFuIGF1dGhvcmlzZWQgZGVhbGVyLiBLZWVwIGl0IGF3YXkgZnJvbSBoZWF0IGFib3ZlIDYwIGRlZ0MuIiwic3BhcmVQYXJ0c0NvbnRhY3RzIjoic3BhcmVzQGFjbWUuZXhhbXBsZSIsInN0YXRlT2ZIZWFsdGgiOnsicGFyYW1ldGVyU2V0Ijoic3RhdGlvbmFyeU9yTG10IiwicmVtYWluaW5nQ2FwYWNpdHlQY3QiOjk5LjUsInJlbWFpbmluZ1Bvd2VyQ2FwYWJpbGl0eVBjdCI6OTkuMSwic2VsZkRpc2NoYXJnZVJhdGVQY3RQZXJNb250aCI6Mn0sInN0YXRlT2ZIZWFsdGhQY3QiOm51bGwsInRlc3RSZXBvcnRSZXN1bHRzIjoiRU4gNTA2MDQtMToyMDE2IHBhc3M7IFVOIDM4LjMgcGFzczsgcmVwb3J0IEFDTUUtVFItMjAyNi0wODE1IiwidXNhYmxlRXh0aW5ndWlzaGluZ0FnZW50IjoiV2F0ZXI7IGNvb2wgYSBidXJuaW5nIHBhY2sgd2l0aCBsYXJnZSB2b2x1bWVzIG9mIHdhdGVyIiwidXNhZ2VIaXN0b3J5Ijp7ImNoYXJnZURpc2NoYXJnZUN5Y2xlcyI6NH0sIndhc3RlQmF0dGVyeUluZm9ybWF0aW9uIjoiUmV0dXJuIHRoZSBiYXR0ZXJ5IHRvIGEgYmljeWNsZSByZXRhaWxlciBvciBhIG11bmljaXBhbCBjb2xsZWN0aW9uIHBvaW50LiBEbyBub3QgcGxhY2UgaXQgaW4gaG91c2Vob2xkIHdhc3RlLiJ9LCJwcm9kdWN0TmFtZSI6IkFjbWUgTE1UIDQ4ViAyMEFoIGJhdHRlcnkgcGFjayIsInB1Ymxpc2hlZEF0IjoiMjAyNi0wOS0wMVQwOTowNTowMFoiLCJxckNvZGVVcmwiOiJodHRwczovL2RwcC5hY21lLmV4YW1wbGUvMDEvMDk1MDYwMDAxMzQzNTIvMTAvQUNNRS1MTVQtMjAyNi0wOS8yMS83ZTRhOWMzZDJmMWU4YjZhNWQ0MCIsInJlcGFpcmFiaWxpdHlTY29yZSI6bnVsbCwicmV0ZW50aW9uTG9ja2VkIjp0cnVlLCJyZXRlbnRpb25VbnRpbCI6IjIwMzYtMDgtMjlUMDk6MDU6MDBaIiwic2NoZW1hVmVyc2lvbiI6IjIuNi4wIiwic3RhdHVzIjoiYWN0aXZlIiwidXBkYXRlZEF0IjoiMjAyNi0wOS0wMVQwOTowNTowMFoiLCJ2ZXJzaW9uIjoxfQ.WlMDfygpDjYk8xHRQjpQgppwhVkUgYhyj_9iiPH_IXvXb8IKcD0cA2lFJCznB1B6llfW5Q3qiZcfRAdB78nDBw", + "jws": "eyJhbGciOiJFZERTQSIsImtpZCI6ImZlODEyYzEyZjNhYjRjZTZhYzVkYjY5YWMzNTJmOTA2Y2IxYjExZWY0M2ZiMzNlMjUyZWY3ZmY1NTIyNjM4ODkifQ.eyJiYXRjaElkIjoiQUNNRS1MTVQtMjAyNi0wOSIsImNvMmVQZXJVbml0IjpudWxsLCJjb21tb2RpdHlDb2RlIjoiODUwNzYwMDAiLCJjcmVhdGVkQXQiOiIyMDI2LTA5LTAxVDA5OjAwOjAwWiIsImlkIjoiMDE5OWEzYzItN2IxMC03ZTRhLTljM2QtMmYxZThiNmE1ZDQwIiwiandzU2lnbmF0dXJlIjpudWxsLCJtYW51ZmFjdHVyZXIiOnsiYWRkcmVzcyI6Ik11c3RlcnN0cmFzc2UgMSwgODAzMzEgTcO8bmNoZW4sIERFIiwiY291bnRyeSI6bnVsbCwiZGlkV2ViVXJsIjoiaHR0cHM6Ly9ub2RlLmFjbWUuZXhhbXBsZS8ud2VsbC1rbm93bi9kaWQuanNvbiIsIm5hbWUiOiJBY21lIFplbGxlbiBHbWJIIn0sIm1hdGVyaWFscyI6W3siY291bnRyeU9mT3JpZ2luIjoiREUiLCJuYW1lIjoiTk1DIDgxMSBjYXRob2RlIGFjdGl2ZSBtYXRlcmlhbCIsInJlY3ljbGVkUGN0Ijo4LCJ3ZWlnaHRLZyI6My4xfSx7ImNvdW50cnlPZk9yaWdpbiI6IkRFIiwibmFtZSI6IkdyYXBoaXRlIGFub2RlIGFjdGl2ZSBtYXRlcmlhbCIsInJlY3ljbGVkUGN0Ijo0LCJ3ZWlnaHRLZyI6MS45fSx7ImNvdW50cnlPZk9yaWdpbiI6IkRFIiwibmFtZSI6IkFsdW1pbml1bSBwYWNrIGhvdXNpbmciLCJyZWN5Y2xlZFBjdCI6NjAsIndlaWdodEtnIjoyLjJ9XSwicGxhY2VkT25NYXJrZXREYXRlIjoiMjAyNi0wOS0wMSIsInByb2R1Y3RHcm91cCI6ImJhdHRlcnkiLCJwcm9kdWN0R3JvdXBEYXRhIjp7ImFub2RlTWF0ZXJpYWwiOlt7ImNhc051bWJlciI6Ijc3ODItNDItNSIsIm5hbWUiOiJHcmFwaGl0ZSIsIndlaWdodFBjdCI6OTZ9LHsiY2FzTnVtYmVyIjoiOTAwMy01NS04IiwibmFtZSI6IlNCUi9DTUMgYmluZGVyIiwid2VpZ2h0UGN0Ijo0fV0sImJhdHRlcnlDaGVtaXN0cnkiOiJOTUMiLCJiYXR0ZXJ5TW9kZWxJZCI6IkFDTUUtTE1ULTQ4ViIsImJhdHRlcnlQYXNzcG9ydE51bWJlciI6IlVSTjpPREw6QkFUVDowOTUwNjAwMDEzNDM1MjpBQ01FLUxNVC0yMDI2LTA5IiwiYmF0dGVyeVN0YXR1cyI6Im9yaWdpbmFsIiwiYmF0dGVyeVR5cGUiOiJsbXQiLCJiYXR0ZXJ5V2VpZ2h0S2ciOjEyLjQsImNhdGhvZGVNYXRlcmlhbCI6W3siY2FzTnVtYmVyIjoiMzQ2NDE3LTk3LTgiLCJuYW1lIjoiTGlOaTAuOE1uMC4xQ28wLjFPMiIsIndlaWdodFBjdCI6OTZ9LHsiY2FzTnVtYmVyIjoiMjQ5MzctNzktOSIsIm5hbWUiOiJQVkRGIGJpbmRlciIsIndlaWdodFBjdCI6Mn0seyJjYXNOdW1iZXIiOiIxMzMzLTg2LTQiLCJuYW1lIjoiQ29uZHVjdGl2ZSBjYXJib24gYmxhY2siLCJ3ZWlnaHRQY3QiOjJ9XSwiY28yZVBlclVuaXRLZyI6ODYuNCwiY29tcG9uZW50UGFydE51bWJlcnMiOlsiQUNNRS1DRUxMLTIxNzAwLU5NQyIsIkFDTUUtQk1TLTEzUy1WMSIsIkFDTUUtTE1ULUVOQ0wtNDgiXSwiY3JpdGljYWxSYXdNYXRlcmlhbHMiOlt7ImNhc051bWJlciI6Ijc0NDAtNDgtNCIsIm5hbWUiOiJDb2JhbHQiLCJ3ZWlnaHRHcmFtcyI6MzEwfSx7ImNhc051bWJlciI6Ijc0MzktOTMtMiIsIm5hbWUiOiJMaXRoaXVtIiwid2VpZ2h0R3JhbXMiOjQyMH0seyJjYXNOdW1iZXIiOiI3NzgyLTQyLTUiLCJuYW1lIjoiTmF0dXJhbCBncmFwaGl0ZSIsIndlaWdodEdyYW1zIjoxODAwfV0sImN5Y2xlTGlmZVRlc3RDUmF0ZSI6MSwiZGlzYXNzZW1ibHlJbnN0cnVjdGlvbnNVcmwiOiJodHRwczovL2FjbWUuZXhhbXBsZS9zZXJ2aWNlL2xtdC00OC9kaXNhc3NlbWJseSIsImR5bmFtaWNQZXJmb3JtYW5jZSI6eyJjYXBhY2l0eUZhZGVQY3QiOjAuNSwiZXhwZWN0ZWRMaWZldGltZUN5Y2xlcyI6MTE5NSwiaW50ZXJuYWxSZXNpc3RhbmNlTW9obSI6MTEwLjQsInJhdGVkQ2FwYWNpdHlBaCI6MTkuOSwicm91bmRUcmlwRWZmaWNpZW5jeVBjdCI6OTQuOH0sImVsZWN0cm9seXRlTWF0ZXJpYWwiOlt7ImNhc051bWJlciI6Ijk2LTQ5LTEiLCJuYW1lIjoiRXRoeWxlbmUgY2FyYm9uYXRlIiwid2VpZ2h0UGN0IjozOH0seyJjYXNOdW1iZXIiOiI2MTYtMzgtNiIsIm5hbWUiOiJEaW1ldGh5bCBjYXJib25hdGUiLCJ3ZWlnaHRQY3QiOjQ5fSx7ImNhc051bWJlciI6IjIxMzI0LTQwLTMiLCJuYW1lIjoiTGl0aGl1bSBoZXhhZmx1b3JvcGhvc3BoYXRlIiwid2VpZ2h0UGN0IjoxM31dLCJldURlY2xhcmF0aW9uT2ZDb25mb3JtaXR5IjoiRVUtRG9DIEFDTUUtMjAyNi1MTVQtMDkwMSwgcGVyIFJlZ3VsYXRpb24gKEVVKSAyMDIzLzE1NDIgQXJ0LiAxOCIsImV4cGVjdGVkTGlmZXRpbWVDeWNsZXMiOjEyMDAsImV4cGVjdGVkTGlmZXRpbWVSZWZlcmVuY2VUZXN0IjoiRU4gNTA2MDQtMToyMDE2LCAyNSBkZWdDLCAxMDAlIERvRCIsImhhemFyZG91c1N1YnN0YW5jZXMiOlt7ImNhc051bWJlciI6IjIxMzI0LTQwLTMiLCJjb25jZW50cmF0aW9uUGN0IjowLjgsIm5hbWUiOiJMaXRoaXVtIGhleGFmbHVvcm9waG9zcGhhdGUifV0sImluaXRpYWxSb3VuZFRyaXBFZmZpY2llbmN5UGN0Ijo5NSwiaW50ZXJuYWxDZWxsUmVzaXN0YW5jZU1vaG0iOjE0LCJpbnRlcm5hbFBhY2tSZXNpc3RhbmNlTW9obSI6MTEwLCJtYW51ZmFjdHVyaW5nRGF0ZSI6IjIwMjYtMDgtMThUMDA6MDA6MDBaIiwibWFudWZhY3R1cmluZ1BsYWNlIjoiTcO8bmNoZW4sIERFIiwibWFya2luZ0luZm9ybWF0aW9uIjoiU2VwYXJhdGUtY29sbGVjdGlvbiBzeW1ib2wgcGVyIEFydC4gMTMoNCk7IGNhcGFjaXR5IDIwIEFoIC8gOTYwIFdoOyA0OCBWIExNVCIsIm1heGltdW1Wb2x0YWdlViI6NTQuNiwibWluaW1hbFZvbHRhZ2VWIjozOSwibm9taW5hbENhcGFjaXR5QWgiOjIwLCJub21pbmFsVm9sdGFnZVYiOjQ4LCJub3RJblVzZVRlbXBlcmF0dXJlUmFuZ2UiOnsibWF4QyI6NDUsIm1pbkMiOi0xMH0sIm5vdEluVXNlVGVtcGVyYXR1cmVSZWZlcmVuY2VUZXN0IjoiRU4gNTA2MDQtMToyMDE2IHN0b3JhZ2UgY2xhdXNlIiwib3JpZ2luYWxQb3dlckNhcGFiaWxpdHlXIjo5NjAsInBvd2VyTGltaXRNYXhXIjoxNTAwLCJwb3dlckxpbWl0TWluVyI6MjAsInByb2R1Y3RHcm91cCI6ImJhdHRlcnkiLCJwcm9kdWN0SWRlbnRpZmllciI6eyJndGluIjoiMDk1MDYwMDAxMzQzNTIiLCJzY2hlbWUiOiJnczEifSwicmF0ZWRDYXBhY2l0eUt3aCI6bnVsbCwicmVjeWNsZWRDb250ZW50Q29iYWx0UGN0IjoxMiwicmVjeWNsZWRDb250ZW50TGVhZFBjdCI6MCwicmVjeWNsZWRDb250ZW50TGl0aGl1bVBjdCI6NiwicmVjeWNsZWRDb250ZW50Tmlja2VsUGN0Ijo4LCJyZW5ld2FibGVDb250ZW50UGN0IjoxNCwicm91bmRUcmlwRWZmaWNpZW5jeUF0SGFsZkN5Y2xlTGlmZVBjdCI6OTEsInNhZmV0eU1lYXN1cmVzIjoiRG8gbm90IG9wZW4gdGhlIHBhY2suIFJlcGxhY2UgaXQgdGhyb3VnaCBhbiBhdXRob3Jpc2VkIGRlYWxlci4gS2VlcCBpdCBhd2F5IGZyb20gaGVhdCBhYm92ZSA2MCBkZWdDLiIsInNwYXJlUGFydHNDb250YWN0cyI6InNwYXJlc0BhY21lLmV4YW1wbGUiLCJzdGF0ZU9mSGVhbHRoIjp7InBhcmFtZXRlclNldCI6InN0YXRpb25hcnlPckxtdCIsInJlbWFpbmluZ0NhcGFjaXR5UGN0Ijo5OS41LCJyZW1haW5pbmdQb3dlckNhcGFiaWxpdHlQY3QiOjk5LjEsInNlbGZEaXNjaGFyZ2VSYXRlUGN0UGVyTW9udGgiOjJ9LCJzdGF0ZU9mSGVhbHRoUGN0IjpudWxsLCJ0ZXN0UmVwb3J0UmVzdWx0cyI6IkVOIDUwNjA0LTE6MjAxNiBwYXNzOyBVTiAzOC4zIHBhc3M7IHJlcG9ydCBBQ01FLVRSLTIwMjYtMDgxNSIsInVzYWJsZUV4dGluZ3Vpc2hpbmdBZ2VudCI6IldhdGVyOyBjb29sIGEgYnVybmluZyBwYWNrIHdpdGggbGFyZ2Ugdm9sdW1lcyBvZiB3YXRlciIsInVzYWdlSGlzdG9yeSI6eyJjaGFyZ2VEaXNjaGFyZ2VDeWNsZXMiOjR9LCJ3YXN0ZUJhdHRlcnlJbmZvcm1hdGlvbiI6IlJldHVybiB0aGUgYmF0dGVyeSB0byBhIGJpY3ljbGUgcmV0YWlsZXIgb3IgYSBtdW5pY2lwYWwgY29sbGVjdGlvbiBwb2ludC4gRG8gbm90IHBsYWNlIGl0IGluIGhvdXNlaG9sZCB3YXN0ZS4ifSwicHJvZHVjdE5hbWUiOiJBY21lIExNVCA0OFYgMjBBaCBiYXR0ZXJ5IHBhY2siLCJwdWJsaXNoZWRBdCI6IjIwMjYtMDktMDFUMDk6MDU6MDBaIiwicXJDb2RlVXJsIjoiaHR0cHM6Ly9kcHAuYWNtZS5leGFtcGxlLzAxLzA5NTA2MDAwMTM0MzUyLzIxLzdlNGE5YzNkMmYxZThiNmE1ZDQwIiwicmVwYWlyYWJpbGl0eVNjb3JlIjpudWxsLCJyZXRlbnRpb25Mb2NrZWQiOnRydWUsInJldGVudGlvblVudGlsIjoiMjAzNi0wOC0yOVQwOTowNTowMFoiLCJzY2hlbWFWZXJzaW9uIjoiMi43LjAiLCJzdGF0dXMiOiJhY3RpdmUiLCJ1cGRhdGVkQXQiOiIyMDI2LTA5LTAxVDA5OjA1OjAwWiIsInZlcnNpb24iOjF9.55m5_OYvkiKUN9QV9BNB3JeqMOvkYjwYCiPxup_xciGjUrYtHOcaDdy8ULvSAy5NRGpT9p90RrajgBb0Iv5kCg", "payload": { "batchId": "ACME-LMT-2026-09", "co2ePerUnit": null, @@ -498,7 +505,6 @@ "euDeclarationOfConformity": "EU-DoC ACME-2026-LMT-0901, per Regulation (EU) 2023/1542 Art. 18", "expectedLifetimeCycles": 1200, "expectedLifetimeReferenceTest": "EN 50604-1:2016, 25 degC, 100% DoD", - "gtin": "09506000134352", "hazardousSubstances": [ { "casNumber": "21324-40-3", @@ -525,6 +531,10 @@ "powerLimitMaxW": 1500.0, "powerLimitMinW": 20.0, "productGroup": "battery", + "productIdentifier": { + "gtin": "09506000134352", + "scheme": "gs1" + }, "ratedCapacityKwh": null, "recycledContentCobaltPct": 12.0, "recycledContentLeadPct": 0.0, @@ -550,11 +560,11 @@ }, "productName": "Acme LMT 48V 20Ah battery pack", "publishedAt": "2026-09-01T09:05:00Z", - "qrCodeUrl": "https://dpp.acme.example/01/09506000134352/10/ACME-LMT-2026-09/21/7e4a9c3d2f1e8b6a5d40", + "qrCodeUrl": "https://dpp.acme.example/01/09506000134352/21/7e4a9c3d2f1e8b6a5d40", "repairabilityScore": null, "retentionLocked": true, "retentionUntil": "2036-08-29T09:05:00Z", - "schemaVersion": "2.6.0", + "schemaVersion": "2.7.0", "status": "active", "updatedAt": "2026-09-01T09:05:00Z", "version": 1 @@ -562,22 +572,23 @@ }, "manifest": { "contentHashes": { - "auditEntries": "1799b3885d95741b2209401519a69f5db27cdee31b42b8003a1dd0e0c53a7363", + "auditEntries": "7cbad381a418f0d97abbb4f33e5f66ba1e715e1f2d0f93e069ec041aa55260a1", "eolEvent": "7cb65bb485538e109105404e15c7bc411aa3050694fa4d63339c70dbe431d3a0", - "fullView": "70f5a9779744ad58b77cebed129ecec4c24d7c5bbf3b65be4b3c61c4be5f0e80", - "publicView": "7ada532408d7c20c385804ca00d0a6a969f1448c796775c14657d7932ecf392a" + "fullView": "e8c5a8fbbddd67948a3ee3eb7abfc07427c2ff2ab23eeba3dc4dc9bbf12cbdbd", + "publicView": "74c1a1eda478cc2643b8652bf188f47e449b851ae64ae05f922de314a9249b83" }, - "coreVersion": "0.20.0", + "coreVersion": "0.21.0", "createdAt": "2026-09-25T12:00:00Z", "formatVersion": "1", "issuerDid": "did:web:node.acme.example", "nodeVersion": "0.14.0", "passportId": "0199a3c2-7b10-7e4a-9c3d-2f1e8b6a5d40" }, - "manifestJws": "eyJhbGciOiJFZERTQSIsImtpZCI6ImZlODEyYzEyZjNhYjRjZTZhYzVkYjY5YWMzNTJmOTA2Y2IxYjExZWY0M2ZiMzNlMjUyZWY3ZmY1NTIyNjM4ODkifQ.eyJjb250ZW50SGFzaGVzIjp7ImF1ZGl0RW50cmllcyI6IjE3OTliMzg4NWQ5NTc0MWIyMjA5NDAxNTE5YTY5ZjVkYjI3Y2RlZTMxYjQyYjgwMDNhMWRkMGUwYzUzYTczNjMiLCJlb2xFdmVudCI6IjdjYjY1YmI0ODU1MzhlMTA5MTA1NDA0ZTE1YzdiYzQxMWFhMzA1MDY5NGZhNGQ2MzMzOWM3MGRiZTQzMWQzYTAiLCJmdWxsVmlldyI6IjcwZjVhOTc3OTc0NGFkNThiNzdjZWJlZDEyOWVjZWM0YzI0ZDdjNWJiZjNiNjViZTRiM2M2MWM0YmU1ZjBlODAiLCJwdWJsaWNWaWV3IjoiN2FkYTUzMjQwOGQ3YzIwYzM4NTgwNGNhMDBkMGE2YTk2OWYxNDQ4Yzc5Njc3NWMxNDY1N2Q3OTMyZWNmMzkyYSJ9LCJjb3JlVmVyc2lvbiI6IjAuMjAuMCIsImNyZWF0ZWRBdCI6IjIwMjYtMDktMjVUMTI6MDA6MDBaIiwiZm9ybWF0VmVyc2lvbiI6IjEiLCJpc3N1ZXJEaWQiOiJkaWQ6d2ViOm5vZGUuYWNtZS5leGFtcGxlIiwibm9kZVZlcnNpb24iOiIwLjE0LjAiLCJwYXNzcG9ydElkIjoiMDE5OWEzYzItN2IxMC03ZTRhLTljM2QtMmYxZThiNmE1ZDQwIn0.M7bMTQFVEzMax6kR3S4njIrYgEIC6qvquslOMdUxwJIWD4Iq_dg3qVyLwdBc6g6RpJcXBXOZQMMsoKbyDHZACQ", + "manifestJws": "eyJhbGciOiJFZERTQSIsImtpZCI6ImZlODEyYzEyZjNhYjRjZTZhYzVkYjY5YWMzNTJmOTA2Y2IxYjExZWY0M2ZiMzNlMjUyZWY3ZmY1NTIyNjM4ODkifQ.eyJjb250ZW50SGFzaGVzIjp7ImF1ZGl0RW50cmllcyI6IjdjYmFkMzgxYTQxOGYwZDk3YWJiYjRmMzNlNWY2NmJhMWU3MTVlMWYyZDBmOTNlMDY5ZWMwNDFhYTU1MjYwYTEiLCJlb2xFdmVudCI6IjdjYjY1YmI0ODU1MzhlMTA5MTA1NDA0ZTE1YzdiYzQxMWFhMzA1MDY5NGZhNGQ2MzMzOWM3MGRiZTQzMWQzYTAiLCJmdWxsVmlldyI6ImU4YzVhOGZiYmRkZDY3OTQ4YTNlZTNlYjdhYmZjMDc0MjdjMmZmMmFiMjNlZWJhM2RjNGRjOWJiZjEyY2JkYmQiLCJwdWJsaWNWaWV3IjoiNzRjMWExZWRhNDc4Y2MyNjQzYjg2NTJiZjE4OGY0N2U0NDliODUxYWU2NGFlMDVmOTIyZGUzMTRhOTI0OWI4MyJ9LCJjb3JlVmVyc2lvbiI6IjAuMjEuMCIsImNyZWF0ZWRBdCI6IjIwMjYtMDktMjVUMTI6MDA6MDBaIiwiZm9ybWF0VmVyc2lvbiI6IjEiLCJpc3N1ZXJEaWQiOiJkaWQ6d2ViOm5vZGUuYWNtZS5leGFtcGxlIiwibm9kZVZlcnNpb24iOiIwLjE0LjAiLCJwYXNzcG9ydElkIjoiMDE5OWEzYzItN2IxMC03ZTRhLTljM2QtMmYxZThiNmE1ZDQwIn0.z-LKtW-sMgdmxQhMgWKjU9hoZlOUraGCeL5A4UI-djD3GRoOcJQ0e9bb1DB9qYcYCakswJ55zzuJ6T5wkznxCA", "publicView": { - "jws": "eyJhbGciOiJFZERTQSIsImtpZCI6ImZlODEyYzEyZjNhYjRjZTZhYzVkYjY5YWMzNTJmOTA2Y2IxYjExZWY0M2ZiMzNlMjUyZWY3ZmY1NTIyNjM4ODkifQ.eyJjbzJlUGVyVW5pdCI6bnVsbCwiY29tbW9kaXR5Q29kZSI6Ijg1MDc2MDAwIiwiY3JlYXRlZEF0IjoiMjAyNi0wOS0wMVQwOTowMDowMFoiLCJpZCI6IjAxOTlhM2MyLTdiMTAtN2U0YS05YzNkLTJmMWU4YjZhNWQ0MCIsIm1hbnVmYWN0dXJlciI6eyJhZGRyZXNzIjoiTXVzdGVyc3RyYXNzZSAxLCA4MDMzMSBNw7xuY2hlbiwgREUiLCJjb3VudHJ5IjpudWxsLCJkaWRXZWJVcmwiOiJodHRwczovL25vZGUuYWNtZS5leGFtcGxlLy53ZWxsLWtub3duL2RpZC5qc29uIiwibmFtZSI6IkFjbWUgWmVsbGVuIEdtYkgifSwibWF0ZXJpYWxzIjpbeyJjb3VudHJ5T2ZPcmlnaW4iOiJERSIsIm5hbWUiOiJOTUMgODExIGNhdGhvZGUgYWN0aXZlIG1hdGVyaWFsIiwicmVjeWNsZWRQY3QiOjgsIndlaWdodEtnIjozLjF9LHsiY291bnRyeU9mT3JpZ2luIjoiREUiLCJuYW1lIjoiR3JhcGhpdGUgYW5vZGUgYWN0aXZlIG1hdGVyaWFsIiwicmVjeWNsZWRQY3QiOjQsIndlaWdodEtnIjoxLjl9LHsiY291bnRyeU9mT3JpZ2luIjoiREUiLCJuYW1lIjoiQWx1bWluaXVtIHBhY2sgaG91c2luZyIsInJlY3ljbGVkUGN0Ijo2MCwid2VpZ2h0S2ciOjIuMn1dLCJwbGFjZWRPbk1hcmtldERhdGUiOiIyMDI2LTA5LTAxIiwicHJvZHVjdEdyb3VwIjoiYmF0dGVyeSIsInByb2R1Y3RHcm91cERhdGEiOnsiYmF0dGVyeUNoZW1pc3RyeSI6Ik5NQyIsImJhdHRlcnlNb2RlbElkIjoiQUNNRS1MTVQtNDhWIiwiYmF0dGVyeVBhc3Nwb3J0TnVtYmVyIjoiVVJOOk9ETDpCQVRUOjA5NTA2MDAwMTM0MzUyOkFDTUUtTE1ULTIwMjYtMDkiLCJiYXR0ZXJ5VHlwZSI6ImxtdCIsImJhdHRlcnlXZWlnaHRLZyI6MTIuNCwiY28yZVBlclVuaXRLZyI6ODYuNCwiY3JpdGljYWxSYXdNYXRlcmlhbHMiOlt7ImNhc051bWJlciI6Ijc0NDAtNDgtNCIsIm5hbWUiOiJDb2JhbHQiLCJ3ZWlnaHRHcmFtcyI6MzEwfSx7ImNhc051bWJlciI6Ijc0MzktOTMtMiIsIm5hbWUiOiJMaXRoaXVtIiwid2VpZ2h0R3JhbXMiOjQyMH0seyJjYXNOdW1iZXIiOiI3NzgyLTQyLTUiLCJuYW1lIjoiTmF0dXJhbCBncmFwaGl0ZSIsIndlaWdodEdyYW1zIjoxODAwfV0sImN5Y2xlTGlmZVRlc3RDUmF0ZSI6MSwiZXVEZWNsYXJhdGlvbk9mQ29uZm9ybWl0eSI6IkVVLURvQyBBQ01FLTIwMjYtTE1ULTA5MDEsIHBlciBSZWd1bGF0aW9uIChFVSkgMjAyMy8xNTQyIEFydC4gMTgiLCJleHBlY3RlZExpZmV0aW1lQ3ljbGVzIjoxMjAwLCJleHBlY3RlZExpZmV0aW1lUmVmZXJlbmNlVGVzdCI6IkVOIDUwNjA0LTE6MjAxNiwgMjUgZGVnQywgMTAwJSBEb0QiLCJndGluIjoiMDk1MDYwMDAxMzQzNTIiLCJoYXphcmRvdXNTdWJzdGFuY2VzIjpbeyJjYXNOdW1iZXIiOiIyMTMyNC00MC0zIiwiY29uY2VudHJhdGlvblBjdCI6MC44LCJuYW1lIjoiTGl0aGl1bSBoZXhhZmx1b3JvcGhvc3BoYXRlIn1dLCJpbml0aWFsUm91bmRUcmlwRWZmaWNpZW5jeVBjdCI6OTUsImludGVybmFsQ2VsbFJlc2lzdGFuY2VNb2htIjoxNCwiaW50ZXJuYWxQYWNrUmVzaXN0YW5jZU1vaG0iOjExMCwibWFudWZhY3R1cmluZ0RhdGUiOiIyMDI2LTA4LTE4VDAwOjAwOjAwWiIsIm1hbnVmYWN0dXJpbmdQbGFjZSI6Ik3DvG5jaGVuLCBERSIsIm1hcmtpbmdJbmZvcm1hdGlvbiI6IlNlcGFyYXRlLWNvbGxlY3Rpb24gc3ltYm9sIHBlciBBcnQuIDEzKDQpOyBjYXBhY2l0eSAyMCBBaCAvIDk2MCBXaDsgNDggViBMTVQiLCJtYXhpbXVtVm9sdGFnZVYiOjU0LjYsIm1pbmltYWxWb2x0YWdlViI6MzksIm5vbWluYWxDYXBhY2l0eUFoIjoyMCwibm9taW5hbFZvbHRhZ2VWIjo0OCwibm90SW5Vc2VUZW1wZXJhdHVyZVJhbmdlIjp7Im1heEMiOjQ1LCJtaW5DIjotMTB9LCJub3RJblVzZVRlbXBlcmF0dXJlUmVmZXJlbmNlVGVzdCI6IkVOIDUwNjA0LTE6MjAxNiBzdG9yYWdlIGNsYXVzZSIsIm9yaWdpbmFsUG93ZXJDYXBhYmlsaXR5VyI6OTYwLCJwb3dlckxpbWl0TWF4VyI6MTUwMCwicG93ZXJMaW1pdE1pblciOjIwLCJwcm9kdWN0R3JvdXAiOiJiYXR0ZXJ5IiwicmF0ZWRDYXBhY2l0eUt3aCI6bnVsbCwicmVjeWNsZWRDb250ZW50Q29iYWx0UGN0IjoxMiwicmVjeWNsZWRDb250ZW50TGVhZFBjdCI6MCwicmVjeWNsZWRDb250ZW50TGl0aGl1bVBjdCI6NiwicmVjeWNsZWRDb250ZW50Tmlja2VsUGN0Ijo4LCJyZW5ld2FibGVDb250ZW50UGN0IjoxNCwicm91bmRUcmlwRWZmaWNpZW5jeUF0SGFsZkN5Y2xlTGlmZVBjdCI6OTEsInVzYWJsZUV4dGluZ3Vpc2hpbmdBZ2VudCI6IldhdGVyOyBjb29sIGEgYnVybmluZyBwYWNrIHdpdGggbGFyZ2Ugdm9sdW1lcyBvZiB3YXRlciIsIndhc3RlQmF0dGVyeUluZm9ybWF0aW9uIjoiUmV0dXJuIHRoZSBiYXR0ZXJ5IHRvIGEgYmljeWNsZSByZXRhaWxlciBvciBhIG11bmljaXBhbCBjb2xsZWN0aW9uIHBvaW50LiBEbyBub3QgcGxhY2UgaXQgaW4gaG91c2Vob2xkIHdhc3RlLiJ9LCJwcm9kdWN0TmFtZSI6IkFjbWUgTE1UIDQ4ViAyMEFoIGJhdHRlcnkgcGFjayIsInB1Ymxpc2hlZEF0IjoiMjAyNi0wOS0wMVQwOTowNTowMFoiLCJxckNvZGVVcmwiOiJodHRwczovL2RwcC5hY21lLmV4YW1wbGUvMDEvMDk1MDYwMDAxMzQzNTIvMTAvQUNNRS1MTVQtMjAyNi0wOS8yMS83ZTRhOWMzZDJmMWU4YjZhNWQ0MCIsInJlcGFpcmFiaWxpdHlTY29yZSI6bnVsbCwicmV0ZW50aW9uVW50aWwiOiIyMDM2LTA4LTI5VDA5OjA1OjAwWiIsInNjaGVtYVZlcnNpb24iOiIyLjYuMCIsInN0YXR1cyI6ImFjdGl2ZSIsInVwZGF0ZWRBdCI6IjIwMjYtMDktMDFUMDk6MDU6MDBaIiwidmVyc2lvbiI6MX0.OnjeF7qUrlZOKc-Xx8u-ThMayslJBs7HPAmpZBFKvyJpivIqOrN5lTCW15PsoyBeSOpjmRq3Mm_UC99B-Ya-Dg", + "jws": "eyJhbGciOiJFZERTQSIsImtpZCI6ImZlODEyYzEyZjNhYjRjZTZhYzVkYjY5YWMzNTJmOTA2Y2IxYjExZWY0M2ZiMzNlMjUyZWY3ZmY1NTIyNjM4ODkifQ.eyJiYXRjaElkIjoiQUNNRS1MTVQtMjAyNi0wOSIsImNvMmVQZXJVbml0IjpudWxsLCJjb21tb2RpdHlDb2RlIjoiODUwNzYwMDAiLCJjcmVhdGVkQXQiOiIyMDI2LTA5LTAxVDA5OjAwOjAwWiIsImlkIjoiMDE5OWEzYzItN2IxMC03ZTRhLTljM2QtMmYxZThiNmE1ZDQwIiwibWFudWZhY3R1cmVyIjp7ImFkZHJlc3MiOiJNdXN0ZXJzdHJhc3NlIDEsIDgwMzMxIE3DvG5jaGVuLCBERSIsImNvdW50cnkiOm51bGwsImRpZFdlYlVybCI6Imh0dHBzOi8vbm9kZS5hY21lLmV4YW1wbGUvLndlbGwta25vd24vZGlkLmpzb24iLCJuYW1lIjoiQWNtZSBaZWxsZW4gR21iSCJ9LCJtYXRlcmlhbHMiOlt7ImNvdW50cnlPZk9yaWdpbiI6IkRFIiwibmFtZSI6Ik5NQyA4MTEgY2F0aG9kZSBhY3RpdmUgbWF0ZXJpYWwiLCJyZWN5Y2xlZFBjdCI6OCwid2VpZ2h0S2ciOjMuMX0seyJjb3VudHJ5T2ZPcmlnaW4iOiJERSIsIm5hbWUiOiJHcmFwaGl0ZSBhbm9kZSBhY3RpdmUgbWF0ZXJpYWwiLCJyZWN5Y2xlZFBjdCI6NCwid2VpZ2h0S2ciOjEuOX0seyJjb3VudHJ5T2ZPcmlnaW4iOiJERSIsIm5hbWUiOiJBbHVtaW5pdW0gcGFjayBob3VzaW5nIiwicmVjeWNsZWRQY3QiOjYwLCJ3ZWlnaHRLZyI6Mi4yfV0sInBsYWNlZE9uTWFya2V0RGF0ZSI6IjIwMjYtMDktMDEiLCJwcm9kdWN0R3JvdXAiOiJiYXR0ZXJ5IiwicHJvZHVjdEdyb3VwRGF0YSI6eyJiYXR0ZXJ5Q2hlbWlzdHJ5IjoiTk1DIiwiYmF0dGVyeU1vZGVsSWQiOiJBQ01FLUxNVC00OFYiLCJiYXR0ZXJ5UGFzc3BvcnROdW1iZXIiOiJVUk46T0RMOkJBVFQ6MDk1MDYwMDAxMzQzNTI6QUNNRS1MTVQtMjAyNi0wOSIsImJhdHRlcnlUeXBlIjoibG10IiwiYmF0dGVyeVdlaWdodEtnIjoxMi40LCJjbzJlUGVyVW5pdEtnIjo4Ni40LCJjcml0aWNhbFJhd01hdGVyaWFscyI6W3siY2FzTnVtYmVyIjoiNzQ0MC00OC00IiwibmFtZSI6IkNvYmFsdCIsIndlaWdodEdyYW1zIjozMTB9LHsiY2FzTnVtYmVyIjoiNzQzOS05My0yIiwibmFtZSI6IkxpdGhpdW0iLCJ3ZWlnaHRHcmFtcyI6NDIwfSx7ImNhc051bWJlciI6Ijc3ODItNDItNSIsIm5hbWUiOiJOYXR1cmFsIGdyYXBoaXRlIiwid2VpZ2h0R3JhbXMiOjE4MDB9XSwiY3ljbGVMaWZlVGVzdENSYXRlIjoxLCJldURlY2xhcmF0aW9uT2ZDb25mb3JtaXR5IjoiRVUtRG9DIEFDTUUtMjAyNi1MTVQtMDkwMSwgcGVyIFJlZ3VsYXRpb24gKEVVKSAyMDIzLzE1NDIgQXJ0LiAxOCIsImV4cGVjdGVkTGlmZXRpbWVDeWNsZXMiOjEyMDAsImV4cGVjdGVkTGlmZXRpbWVSZWZlcmVuY2VUZXN0IjoiRU4gNTA2MDQtMToyMDE2LCAyNSBkZWdDLCAxMDAlIERvRCIsImhhemFyZG91c1N1YnN0YW5jZXMiOlt7ImNhc051bWJlciI6IjIxMzI0LTQwLTMiLCJjb25jZW50cmF0aW9uUGN0IjowLjgsIm5hbWUiOiJMaXRoaXVtIGhleGFmbHVvcm9waG9zcGhhdGUifV0sImluaXRpYWxSb3VuZFRyaXBFZmZpY2llbmN5UGN0Ijo5NSwiaW50ZXJuYWxDZWxsUmVzaXN0YW5jZU1vaG0iOjE0LCJpbnRlcm5hbFBhY2tSZXNpc3RhbmNlTW9obSI6MTEwLCJtYW51ZmFjdHVyaW5nRGF0ZSI6IjIwMjYtMDgtMThUMDA6MDA6MDBaIiwibWFudWZhY3R1cmluZ1BsYWNlIjoiTcO8bmNoZW4sIERFIiwibWFya2luZ0luZm9ybWF0aW9uIjoiU2VwYXJhdGUtY29sbGVjdGlvbiBzeW1ib2wgcGVyIEFydC4gMTMoNCk7IGNhcGFjaXR5IDIwIEFoIC8gOTYwIFdoOyA0OCBWIExNVCIsIm1heGltdW1Wb2x0YWdlViI6NTQuNiwibWluaW1hbFZvbHRhZ2VWIjozOSwibm9taW5hbENhcGFjaXR5QWgiOjIwLCJub21pbmFsVm9sdGFnZVYiOjQ4LCJub3RJblVzZVRlbXBlcmF0dXJlUmFuZ2UiOnsibWF4QyI6NDUsIm1pbkMiOi0xMH0sIm5vdEluVXNlVGVtcGVyYXR1cmVSZWZlcmVuY2VUZXN0IjoiRU4gNTA2MDQtMToyMDE2IHN0b3JhZ2UgY2xhdXNlIiwib3JpZ2luYWxQb3dlckNhcGFiaWxpdHlXIjo5NjAsInBvd2VyTGltaXRNYXhXIjoxNTAwLCJwb3dlckxpbWl0TWluVyI6MjAsInByb2R1Y3RHcm91cCI6ImJhdHRlcnkiLCJwcm9kdWN0SWRlbnRpZmllciI6eyJndGluIjoiMDk1MDYwMDAxMzQzNTIiLCJzY2hlbWUiOiJnczEifSwicmF0ZWRDYXBhY2l0eUt3aCI6bnVsbCwicmVjeWNsZWRDb250ZW50Q29iYWx0UGN0IjoxMiwicmVjeWNsZWRDb250ZW50TGVhZFBjdCI6MCwicmVjeWNsZWRDb250ZW50TGl0aGl1bVBjdCI6NiwicmVjeWNsZWRDb250ZW50Tmlja2VsUGN0Ijo4LCJyZW5ld2FibGVDb250ZW50UGN0IjoxNCwicm91bmRUcmlwRWZmaWNpZW5jeUF0SGFsZkN5Y2xlTGlmZVBjdCI6OTEsInVzYWJsZUV4dGluZ3Vpc2hpbmdBZ2VudCI6IldhdGVyOyBjb29sIGEgYnVybmluZyBwYWNrIHdpdGggbGFyZ2Ugdm9sdW1lcyBvZiB3YXRlciIsIndhc3RlQmF0dGVyeUluZm9ybWF0aW9uIjoiUmV0dXJuIHRoZSBiYXR0ZXJ5IHRvIGEgYmljeWNsZSByZXRhaWxlciBvciBhIG11bmljaXBhbCBjb2xsZWN0aW9uIHBvaW50LiBEbyBub3QgcGxhY2UgaXQgaW4gaG91c2Vob2xkIHdhc3RlLiJ9LCJwcm9kdWN0TmFtZSI6IkFjbWUgTE1UIDQ4ViAyMEFoIGJhdHRlcnkgcGFjayIsInB1Ymxpc2hlZEF0IjoiMjAyNi0wOS0wMVQwOTowNTowMFoiLCJxckNvZGVVcmwiOiJodHRwczovL2RwcC5hY21lLmV4YW1wbGUvMDEvMDk1MDYwMDAxMzQzNTIvMjEvN2U0YTljM2QyZjFlOGI2YTVkNDAiLCJyZXBhaXJhYmlsaXR5U2NvcmUiOm51bGwsInJldGVudGlvblVudGlsIjoiMjAzNi0wOC0yOVQwOTowNTowMFoiLCJzY2hlbWFWZXJzaW9uIjoiMi43LjAiLCJzdGF0dXMiOiJhY3RpdmUiLCJ1cGRhdGVkQXQiOiIyMDI2LTA5LTAxVDA5OjA1OjAwWiIsInZlcnNpb24iOjF9.LHi5ToX900cUN4vak8l1zOZ5xc1H9jW25fL4XUWuxz2JU1_3PxxrjRUTyY9RctPxPSTWmS40fUWurEZnTdE3Dw", "payload": { + "batchId": "ACME-LMT-2026-09", "co2ePerUnit": null, "commodityCode": "85076000", "createdAt": "2026-09-01T09:00:00Z", @@ -638,7 +649,6 @@ "euDeclarationOfConformity": "EU-DoC ACME-2026-LMT-0901, per Regulation (EU) 2023/1542 Art. 18", "expectedLifetimeCycles": 1200, "expectedLifetimeReferenceTest": "EN 50604-1:2016, 25 degC, 100% DoD", - "gtin": "09506000134352", "hazardousSubstances": [ { "casNumber": "21324-40-3", @@ -665,6 +675,10 @@ "powerLimitMaxW": 1500.0, "powerLimitMinW": 20.0, "productGroup": "battery", + "productIdentifier": { + "gtin": "09506000134352", + "scheme": "gs1" + }, "ratedCapacityKwh": null, "recycledContentCobaltPct": 12.0, "recycledContentLeadPct": 0.0, @@ -677,10 +691,10 @@ }, "productName": "Acme LMT 48V 20Ah battery pack", "publishedAt": "2026-09-01T09:05:00Z", - "qrCodeUrl": "https://dpp.acme.example/01/09506000134352/10/ACME-LMT-2026-09/21/7e4a9c3d2f1e8b6a5d40", + "qrCodeUrl": "https://dpp.acme.example/01/09506000134352/21/7e4a9c3d2f1e8b6a5d40", "repairabilityScore": null, "retentionUntil": "2036-08-29T09:05:00Z", - "schemaVersion": "2.6.0", + "schemaVersion": "2.7.0", "status": "active", "updatedAt": "2026-09-01T09:05:00Z", "version": 1 diff --git a/site/dpp-landing/public/verify/examples/04-valid-full-lifecycle.json b/site/dpp-landing/public/verify/examples/04-valid-full-lifecycle.json index f3f24b3..b120508 100644 --- a/site/dpp-landing/public/verify/examples/04-valid-full-lifecycle.json +++ b/site/dpp-landing/public/verify/examples/04-valid-full-lifecycle.json @@ -16,7 +16,7 @@ { "action": "published", "actor": "api-key", - "entryHash": "4e81bf531274f21aa02339144c34711eac79af7fb22ebf10a18982adc3f075a3", + "entryHash": "2934a67be97238b4f38ff4ee4d53464a0c197cec343297b25124f894b942c2f2", "id": "0199a3c2-7b10-7e4a-9c3d-000000000002", "metadata": { "fullViewPayload": { @@ -142,7 +142,6 @@ "euDeclarationOfConformity": "EU-DoC ACME-2026-LMT-0901, per Regulation (EU) 2023/1542 Art. 18", "expectedLifetimeCycles": 1200, "expectedLifetimeReferenceTest": "EN 50604-1:2016, 25 degC, 100% DoD", - "gtin": "09506000134352", "hazardousSubstances": [ { "casNumber": "21324-40-3", @@ -169,6 +168,10 @@ "powerLimitMaxW": 1500.0, "powerLimitMinW": 20.0, "productGroup": "battery", + "productIdentifier": { + "gtin": "09506000134352", + "scheme": "gs1" + }, "ratedCapacityKwh": null, "recycledContentCobaltPct": 12.0, "recycledContentLeadPct": 0.0, @@ -194,16 +197,17 @@ }, "productName": "Acme LMT 48V 20Ah battery pack", "publishedAt": "2026-09-01T09:05:00Z", - "qrCodeUrl": "https://dpp.acme.example/01/09506000134352/10/ACME-LMT-2026-09/21/7e4a9c3d2f1e8b6a5d40", + "qrCodeUrl": "https://dpp.acme.example/01/09506000134352/21/7e4a9c3d2f1e8b6a5d40", "repairabilityScore": null, "retentionLocked": true, "retentionUntil": "2036-08-29T09:05:00Z", - "schemaVersion": "2.6.0", + "schemaVersion": "2.7.0", "status": "active", "updatedAt": "2026-09-01T09:05:00Z", "version": 1 }, "publicViewPayload": { + "batchId": "ACME-LMT-2026-09", "co2ePerUnit": null, "commodityCode": "85076000", "createdAt": "2026-09-01T09:00:00Z", @@ -264,7 +268,6 @@ "euDeclarationOfConformity": "EU-DoC ACME-2026-LMT-0901, per Regulation (EU) 2023/1542 Art. 18", "expectedLifetimeCycles": 1200, "expectedLifetimeReferenceTest": "EN 50604-1:2016, 25 degC, 100% DoD", - "gtin": "09506000134352", "hazardousSubstances": [ { "casNumber": "21324-40-3", @@ -291,6 +294,10 @@ "powerLimitMaxW": 1500.0, "powerLimitMinW": 20.0, "productGroup": "battery", + "productIdentifier": { + "gtin": "09506000134352", + "scheme": "gs1" + }, "ratedCapacityKwh": null, "recycledContentCobaltPct": 12.0, "recycledContentLeadPct": 0.0, @@ -303,10 +310,10 @@ }, "productName": "Acme LMT 48V 20Ah battery pack", "publishedAt": "2026-09-01T09:05:00Z", - "qrCodeUrl": "https://dpp.acme.example/01/09506000134352/10/ACME-LMT-2026-09/21/7e4a9c3d2f1e8b6a5d40", + "qrCodeUrl": "https://dpp.acme.example/01/09506000134352/21/7e4a9c3d2f1e8b6a5d40", "repairabilityScore": null, "retentionUntil": "2036-08-29T09:05:00Z", - "schemaVersion": "2.6.0", + "schemaVersion": "2.7.0", "status": "active", "updatedAt": "2026-09-01T09:05:00Z", "version": 1 @@ -322,7 +329,7 @@ { "action": "transferred", "actor": "api-key", - "entryHash": "5c869a32da993e9a5ee13bc3b059fee9c3abc1fbbd840ab2449473f0e5453b08", + "entryHash": "1b61fd6f3f72f0730d61b59008f883d7630a03e2dea9f5bd67206482d0770530", "id": "0199a3c2-7b10-7e4a-9c3d-000000000003", "metadata": { "event": "transfer.initiated", @@ -331,7 +338,7 @@ }, "newStatus": null, "passportId": "0199a3c2-7b10-7e4a-9c3d-2f1e8b6a5d40", - "prevHash": "4e81bf531274f21aa02339144c34711eac79af7fb22ebf10a18982adc3f075a3", + "prevHash": "2934a67be97238b4f38ff4ee4d53464a0c197cec343297b25124f894b942c2f2", "previousStatus": null, "requestId": "0199a3c2-7b10-7e4a-8d2e-000000000003", "timestamp": "2026-09-10T14:00:00.042Z" @@ -339,7 +346,7 @@ { "action": "transferred", "actor": "api-key", - "entryHash": "3a5eb46b99bc15d235b342a0a6092d3e382d998b7de32588ed4966d74295fa51", + "entryHash": "f462766c832366e92cef97196b764df1bd5ce5e1acc1fa5e2b395f99d4c3e6fa", "id": "0199a3c2-7b10-7e4a-9c3d-000000000004", "metadata": { "event": "transfer.accepted", @@ -348,7 +355,7 @@ }, "newStatus": null, "passportId": "0199a3c2-7b10-7e4a-9c3d-2f1e8b6a5d40", - "prevHash": "5c869a32da993e9a5ee13bc3b059fee9c3abc1fbbd840ab2449473f0e5453b08", + "prevHash": "1b61fd6f3f72f0730d61b59008f883d7630a03e2dea9f5bd67206482d0770530", "previousStatus": null, "requestId": "0199a3c2-7b10-7e4a-8d2e-000000000004", "timestamp": "2026-09-10T14:30:00.123456Z" @@ -356,7 +363,7 @@ { "action": "deactivated", "actor": "api-key", - "entryHash": "256b89a07f8ff158fe29f327e08996214563987ca111cddc563bb0e9a9f9a362", + "entryHash": "6fd9d12be0f3a26ae6fc2740a796a13363de1e3abd3082ce284c9eeebdc88dac", "id": "0199a3c2-7b10-7e4a-9c3d-000000000005", "metadata": { "declaredAt": "2026-09-20T08:00:00Z", @@ -369,7 +376,7 @@ }, "newStatus": "deactivated", "passportId": "0199a3c2-7b10-7e4a-9c3d-2f1e8b6a5d40", - "prevHash": "3a5eb46b99bc15d235b342a0a6092d3e382d998b7de32588ed4966d74295fa51", + "prevHash": "f462766c832366e92cef97196b764df1bd5ce5e1acc1fa5e2b395f99d4c3e6fa", "previousStatus": "active", "requestId": "0199a3c2-7b10-7e4a-8d2e-000000000005", "timestamp": "2026-09-20T08:00:00.018Z" @@ -429,7 +436,7 @@ } }, "fullView": { - "jws": "eyJhbGciOiJFZERTQSIsImtpZCI6ImZlODEyYzEyZjNhYjRjZTZhYzVkYjY5YWMzNTJmOTA2Y2IxYjExZWY0M2ZiMzNlMjUyZWY3ZmY1NTIyNjM4ODkifQ.eyJiYXRjaElkIjoiQUNNRS1MTVQtMjAyNi0wOSIsImNvMmVQZXJVbml0IjpudWxsLCJjb21tb2RpdHlDb2RlIjoiODUwNzYwMDAiLCJjcmVhdGVkQXQiOiIyMDI2LTA5LTAxVDA5OjAwOjAwWiIsImlkIjoiMDE5OWEzYzItN2IxMC03ZTRhLTljM2QtMmYxZThiNmE1ZDQwIiwiandzU2lnbmF0dXJlIjpudWxsLCJtYW51ZmFjdHVyZXIiOnsiYWRkcmVzcyI6Ik11c3RlcnN0cmFzc2UgMSwgODAzMzEgTcO8bmNoZW4sIERFIiwiY291bnRyeSI6bnVsbCwiZGlkV2ViVXJsIjoiaHR0cHM6Ly9ub2RlLmFjbWUuZXhhbXBsZS8ud2VsbC1rbm93bi9kaWQuanNvbiIsIm5hbWUiOiJBY21lIFplbGxlbiBHbWJIIn0sIm1hdGVyaWFscyI6W3siY291bnRyeU9mT3JpZ2luIjoiREUiLCJuYW1lIjoiTk1DIDgxMSBjYXRob2RlIGFjdGl2ZSBtYXRlcmlhbCIsInJlY3ljbGVkUGN0Ijo4LCJ3ZWlnaHRLZyI6My4xfSx7ImNvdW50cnlPZk9yaWdpbiI6IkRFIiwibmFtZSI6IkdyYXBoaXRlIGFub2RlIGFjdGl2ZSBtYXRlcmlhbCIsInJlY3ljbGVkUGN0Ijo0LCJ3ZWlnaHRLZyI6MS45fSx7ImNvdW50cnlPZk9yaWdpbiI6IkRFIiwibmFtZSI6IkFsdW1pbml1bSBwYWNrIGhvdXNpbmciLCJyZWN5Y2xlZFBjdCI6NjAsIndlaWdodEtnIjoyLjJ9XSwicGxhY2VkT25NYXJrZXREYXRlIjoiMjAyNi0wOS0wMSIsInByb2R1Y3RHcm91cCI6ImJhdHRlcnkiLCJwcm9kdWN0R3JvdXBEYXRhIjp7ImFub2RlTWF0ZXJpYWwiOlt7ImNhc051bWJlciI6Ijc3ODItNDItNSIsIm5hbWUiOiJHcmFwaGl0ZSIsIndlaWdodFBjdCI6OTZ9LHsiY2FzTnVtYmVyIjoiOTAwMy01NS04IiwibmFtZSI6IlNCUi9DTUMgYmluZGVyIiwid2VpZ2h0UGN0Ijo0fV0sImJhdHRlcnlDaGVtaXN0cnkiOiJOTUMiLCJiYXR0ZXJ5TW9kZWxJZCI6IkFDTUUtTE1ULTQ4ViIsImJhdHRlcnlQYXNzcG9ydE51bWJlciI6IlVSTjpPREw6QkFUVDowOTUwNjAwMDEzNDM1MjpBQ01FLUxNVC0yMDI2LTA5IiwiYmF0dGVyeVN0YXR1cyI6Im9yaWdpbmFsIiwiYmF0dGVyeVR5cGUiOiJsbXQiLCJiYXR0ZXJ5V2VpZ2h0S2ciOjEyLjQsImNhdGhvZGVNYXRlcmlhbCI6W3siY2FzTnVtYmVyIjoiMzQ2NDE3LTk3LTgiLCJuYW1lIjoiTGlOaTAuOE1uMC4xQ28wLjFPMiIsIndlaWdodFBjdCI6OTZ9LHsiY2FzTnVtYmVyIjoiMjQ5MzctNzktOSIsIm5hbWUiOiJQVkRGIGJpbmRlciIsIndlaWdodFBjdCI6Mn0seyJjYXNOdW1iZXIiOiIxMzMzLTg2LTQiLCJuYW1lIjoiQ29uZHVjdGl2ZSBjYXJib24gYmxhY2siLCJ3ZWlnaHRQY3QiOjJ9XSwiY28yZVBlclVuaXRLZyI6ODYuNCwiY29tcG9uZW50UGFydE51bWJlcnMiOlsiQUNNRS1DRUxMLTIxNzAwLU5NQyIsIkFDTUUtQk1TLTEzUy1WMSIsIkFDTUUtTE1ULUVOQ0wtNDgiXSwiY3JpdGljYWxSYXdNYXRlcmlhbHMiOlt7ImNhc051bWJlciI6Ijc0NDAtNDgtNCIsIm5hbWUiOiJDb2JhbHQiLCJ3ZWlnaHRHcmFtcyI6MzEwfSx7ImNhc051bWJlciI6Ijc0MzktOTMtMiIsIm5hbWUiOiJMaXRoaXVtIiwid2VpZ2h0R3JhbXMiOjQyMH0seyJjYXNOdW1iZXIiOiI3NzgyLTQyLTUiLCJuYW1lIjoiTmF0dXJhbCBncmFwaGl0ZSIsIndlaWdodEdyYW1zIjoxODAwfV0sImN5Y2xlTGlmZVRlc3RDUmF0ZSI6MSwiZGlzYXNzZW1ibHlJbnN0cnVjdGlvbnNVcmwiOiJodHRwczovL2FjbWUuZXhhbXBsZS9zZXJ2aWNlL2xtdC00OC9kaXNhc3NlbWJseSIsImR5bmFtaWNQZXJmb3JtYW5jZSI6eyJjYXBhY2l0eUZhZGVQY3QiOjAuNSwiZXhwZWN0ZWRMaWZldGltZUN5Y2xlcyI6MTE5NSwiaW50ZXJuYWxSZXNpc3RhbmNlTW9obSI6MTEwLjQsInJhdGVkQ2FwYWNpdHlBaCI6MTkuOSwicm91bmRUcmlwRWZmaWNpZW5jeVBjdCI6OTQuOH0sImVsZWN0cm9seXRlTWF0ZXJpYWwiOlt7ImNhc051bWJlciI6Ijk2LTQ5LTEiLCJuYW1lIjoiRXRoeWxlbmUgY2FyYm9uYXRlIiwid2VpZ2h0UGN0IjozOH0seyJjYXNOdW1iZXIiOiI2MTYtMzgtNiIsIm5hbWUiOiJEaW1ldGh5bCBjYXJib25hdGUiLCJ3ZWlnaHRQY3QiOjQ5fSx7ImNhc051bWJlciI6IjIxMzI0LTQwLTMiLCJuYW1lIjoiTGl0aGl1bSBoZXhhZmx1b3JvcGhvc3BoYXRlIiwid2VpZ2h0UGN0IjoxM31dLCJldURlY2xhcmF0aW9uT2ZDb25mb3JtaXR5IjoiRVUtRG9DIEFDTUUtMjAyNi1MTVQtMDkwMSwgcGVyIFJlZ3VsYXRpb24gKEVVKSAyMDIzLzE1NDIgQXJ0LiAxOCIsImV4cGVjdGVkTGlmZXRpbWVDeWNsZXMiOjEyMDAsImV4cGVjdGVkTGlmZXRpbWVSZWZlcmVuY2VUZXN0IjoiRU4gNTA2MDQtMToyMDE2LCAyNSBkZWdDLCAxMDAlIERvRCIsImd0aW4iOiIwOTUwNjAwMDEzNDM1MiIsImhhemFyZG91c1N1YnN0YW5jZXMiOlt7ImNhc051bWJlciI6IjIxMzI0LTQwLTMiLCJjb25jZW50cmF0aW9uUGN0IjowLjgsIm5hbWUiOiJMaXRoaXVtIGhleGFmbHVvcm9waG9zcGhhdGUifV0sImluaXRpYWxSb3VuZFRyaXBFZmZpY2llbmN5UGN0Ijo5NSwiaW50ZXJuYWxDZWxsUmVzaXN0YW5jZU1vaG0iOjE0LCJpbnRlcm5hbFBhY2tSZXNpc3RhbmNlTW9obSI6MTEwLCJtYW51ZmFjdHVyaW5nRGF0ZSI6IjIwMjYtMDgtMThUMDA6MDA6MDBaIiwibWFudWZhY3R1cmluZ1BsYWNlIjoiTcO8bmNoZW4sIERFIiwibWFya2luZ0luZm9ybWF0aW9uIjoiU2VwYXJhdGUtY29sbGVjdGlvbiBzeW1ib2wgcGVyIEFydC4gMTMoNCk7IGNhcGFjaXR5IDIwIEFoIC8gOTYwIFdoOyA0OCBWIExNVCIsIm1heGltdW1Wb2x0YWdlViI6NTQuNiwibWluaW1hbFZvbHRhZ2VWIjozOSwibm9taW5hbENhcGFjaXR5QWgiOjIwLCJub21pbmFsVm9sdGFnZVYiOjQ4LCJub3RJblVzZVRlbXBlcmF0dXJlUmFuZ2UiOnsibWF4QyI6NDUsIm1pbkMiOi0xMH0sIm5vdEluVXNlVGVtcGVyYXR1cmVSZWZlcmVuY2VUZXN0IjoiRU4gNTA2MDQtMToyMDE2IHN0b3JhZ2UgY2xhdXNlIiwib3JpZ2luYWxQb3dlckNhcGFiaWxpdHlXIjo5NjAsInBvd2VyTGltaXRNYXhXIjoxNTAwLCJwb3dlckxpbWl0TWluVyI6MjAsInByb2R1Y3RHcm91cCI6ImJhdHRlcnkiLCJyYXRlZENhcGFjaXR5S3doIjpudWxsLCJyZWN5Y2xlZENvbnRlbnRDb2JhbHRQY3QiOjEyLCJyZWN5Y2xlZENvbnRlbnRMZWFkUGN0IjowLCJyZWN5Y2xlZENvbnRlbnRMaXRoaXVtUGN0Ijo2LCJyZWN5Y2xlZENvbnRlbnROaWNrZWxQY3QiOjgsInJlbmV3YWJsZUNvbnRlbnRQY3QiOjE0LCJyb3VuZFRyaXBFZmZpY2llbmN5QXRIYWxmQ3ljbGVMaWZlUGN0Ijo5MSwic2FmZXR5TWVhc3VyZXMiOiJEbyBub3Qgb3BlbiB0aGUgcGFjay4gUmVwbGFjZSBpdCB0aHJvdWdoIGFuIGF1dGhvcmlzZWQgZGVhbGVyLiBLZWVwIGl0IGF3YXkgZnJvbSBoZWF0IGFib3ZlIDYwIGRlZ0MuIiwic3BhcmVQYXJ0c0NvbnRhY3RzIjoic3BhcmVzQGFjbWUuZXhhbXBsZSIsInN0YXRlT2ZIZWFsdGgiOnsicGFyYW1ldGVyU2V0Ijoic3RhdGlvbmFyeU9yTG10IiwicmVtYWluaW5nQ2FwYWNpdHlQY3QiOjk5LjUsInJlbWFpbmluZ1Bvd2VyQ2FwYWJpbGl0eVBjdCI6OTkuMSwic2VsZkRpc2NoYXJnZVJhdGVQY3RQZXJNb250aCI6Mn0sInN0YXRlT2ZIZWFsdGhQY3QiOm51bGwsInRlc3RSZXBvcnRSZXN1bHRzIjoiRU4gNTA2MDQtMToyMDE2IHBhc3M7IFVOIDM4LjMgcGFzczsgcmVwb3J0IEFDTUUtVFItMjAyNi0wODE1IiwidXNhYmxlRXh0aW5ndWlzaGluZ0FnZW50IjoiV2F0ZXI7IGNvb2wgYSBidXJuaW5nIHBhY2sgd2l0aCBsYXJnZSB2b2x1bWVzIG9mIHdhdGVyIiwidXNhZ2VIaXN0b3J5Ijp7ImNoYXJnZURpc2NoYXJnZUN5Y2xlcyI6NH0sIndhc3RlQmF0dGVyeUluZm9ybWF0aW9uIjoiUmV0dXJuIHRoZSBiYXR0ZXJ5IHRvIGEgYmljeWNsZSByZXRhaWxlciBvciBhIG11bmljaXBhbCBjb2xsZWN0aW9uIHBvaW50LiBEbyBub3QgcGxhY2UgaXQgaW4gaG91c2Vob2xkIHdhc3RlLiJ9LCJwcm9kdWN0TmFtZSI6IkFjbWUgTE1UIDQ4ViAyMEFoIGJhdHRlcnkgcGFjayIsInB1Ymxpc2hlZEF0IjoiMjAyNi0wOS0wMVQwOTowNTowMFoiLCJxckNvZGVVcmwiOiJodHRwczovL2RwcC5hY21lLmV4YW1wbGUvMDEvMDk1MDYwMDAxMzQzNTIvMTAvQUNNRS1MTVQtMjAyNi0wOS8yMS83ZTRhOWMzZDJmMWU4YjZhNWQ0MCIsInJlcGFpcmFiaWxpdHlTY29yZSI6bnVsbCwicmV0ZW50aW9uTG9ja2VkIjp0cnVlLCJyZXRlbnRpb25VbnRpbCI6IjIwMzYtMDgtMjlUMDk6MDU6MDBaIiwic2NoZW1hVmVyc2lvbiI6IjIuNi4wIiwic3RhdHVzIjoiYWN0aXZlIiwidXBkYXRlZEF0IjoiMjAyNi0wOS0wMVQwOTowNTowMFoiLCJ2ZXJzaW9uIjoxfQ.WlMDfygpDjYk8xHRQjpQgppwhVkUgYhyj_9iiPH_IXvXb8IKcD0cA2lFJCznB1B6llfW5Q3qiZcfRAdB78nDBw", + "jws": "eyJhbGciOiJFZERTQSIsImtpZCI6ImZlODEyYzEyZjNhYjRjZTZhYzVkYjY5YWMzNTJmOTA2Y2IxYjExZWY0M2ZiMzNlMjUyZWY3ZmY1NTIyNjM4ODkifQ.eyJiYXRjaElkIjoiQUNNRS1MTVQtMjAyNi0wOSIsImNvMmVQZXJVbml0IjpudWxsLCJjb21tb2RpdHlDb2RlIjoiODUwNzYwMDAiLCJjcmVhdGVkQXQiOiIyMDI2LTA5LTAxVDA5OjAwOjAwWiIsImlkIjoiMDE5OWEzYzItN2IxMC03ZTRhLTljM2QtMmYxZThiNmE1ZDQwIiwiandzU2lnbmF0dXJlIjpudWxsLCJtYW51ZmFjdHVyZXIiOnsiYWRkcmVzcyI6Ik11c3RlcnN0cmFzc2UgMSwgODAzMzEgTcO8bmNoZW4sIERFIiwiY291bnRyeSI6bnVsbCwiZGlkV2ViVXJsIjoiaHR0cHM6Ly9ub2RlLmFjbWUuZXhhbXBsZS8ud2VsbC1rbm93bi9kaWQuanNvbiIsIm5hbWUiOiJBY21lIFplbGxlbiBHbWJIIn0sIm1hdGVyaWFscyI6W3siY291bnRyeU9mT3JpZ2luIjoiREUiLCJuYW1lIjoiTk1DIDgxMSBjYXRob2RlIGFjdGl2ZSBtYXRlcmlhbCIsInJlY3ljbGVkUGN0Ijo4LCJ3ZWlnaHRLZyI6My4xfSx7ImNvdW50cnlPZk9yaWdpbiI6IkRFIiwibmFtZSI6IkdyYXBoaXRlIGFub2RlIGFjdGl2ZSBtYXRlcmlhbCIsInJlY3ljbGVkUGN0Ijo0LCJ3ZWlnaHRLZyI6MS45fSx7ImNvdW50cnlPZk9yaWdpbiI6IkRFIiwibmFtZSI6IkFsdW1pbml1bSBwYWNrIGhvdXNpbmciLCJyZWN5Y2xlZFBjdCI6NjAsIndlaWdodEtnIjoyLjJ9XSwicGxhY2VkT25NYXJrZXREYXRlIjoiMjAyNi0wOS0wMSIsInByb2R1Y3RHcm91cCI6ImJhdHRlcnkiLCJwcm9kdWN0R3JvdXBEYXRhIjp7ImFub2RlTWF0ZXJpYWwiOlt7ImNhc051bWJlciI6Ijc3ODItNDItNSIsIm5hbWUiOiJHcmFwaGl0ZSIsIndlaWdodFBjdCI6OTZ9LHsiY2FzTnVtYmVyIjoiOTAwMy01NS04IiwibmFtZSI6IlNCUi9DTUMgYmluZGVyIiwid2VpZ2h0UGN0Ijo0fV0sImJhdHRlcnlDaGVtaXN0cnkiOiJOTUMiLCJiYXR0ZXJ5TW9kZWxJZCI6IkFDTUUtTE1ULTQ4ViIsImJhdHRlcnlQYXNzcG9ydE51bWJlciI6IlVSTjpPREw6QkFUVDowOTUwNjAwMDEzNDM1MjpBQ01FLUxNVC0yMDI2LTA5IiwiYmF0dGVyeVN0YXR1cyI6Im9yaWdpbmFsIiwiYmF0dGVyeVR5cGUiOiJsbXQiLCJiYXR0ZXJ5V2VpZ2h0S2ciOjEyLjQsImNhdGhvZGVNYXRlcmlhbCI6W3siY2FzTnVtYmVyIjoiMzQ2NDE3LTk3LTgiLCJuYW1lIjoiTGlOaTAuOE1uMC4xQ28wLjFPMiIsIndlaWdodFBjdCI6OTZ9LHsiY2FzTnVtYmVyIjoiMjQ5MzctNzktOSIsIm5hbWUiOiJQVkRGIGJpbmRlciIsIndlaWdodFBjdCI6Mn0seyJjYXNOdW1iZXIiOiIxMzMzLTg2LTQiLCJuYW1lIjoiQ29uZHVjdGl2ZSBjYXJib24gYmxhY2siLCJ3ZWlnaHRQY3QiOjJ9XSwiY28yZVBlclVuaXRLZyI6ODYuNCwiY29tcG9uZW50UGFydE51bWJlcnMiOlsiQUNNRS1DRUxMLTIxNzAwLU5NQyIsIkFDTUUtQk1TLTEzUy1WMSIsIkFDTUUtTE1ULUVOQ0wtNDgiXSwiY3JpdGljYWxSYXdNYXRlcmlhbHMiOlt7ImNhc051bWJlciI6Ijc0NDAtNDgtNCIsIm5hbWUiOiJDb2JhbHQiLCJ3ZWlnaHRHcmFtcyI6MzEwfSx7ImNhc051bWJlciI6Ijc0MzktOTMtMiIsIm5hbWUiOiJMaXRoaXVtIiwid2VpZ2h0R3JhbXMiOjQyMH0seyJjYXNOdW1iZXIiOiI3NzgyLTQyLTUiLCJuYW1lIjoiTmF0dXJhbCBncmFwaGl0ZSIsIndlaWdodEdyYW1zIjoxODAwfV0sImN5Y2xlTGlmZVRlc3RDUmF0ZSI6MSwiZGlzYXNzZW1ibHlJbnN0cnVjdGlvbnNVcmwiOiJodHRwczovL2FjbWUuZXhhbXBsZS9zZXJ2aWNlL2xtdC00OC9kaXNhc3NlbWJseSIsImR5bmFtaWNQZXJmb3JtYW5jZSI6eyJjYXBhY2l0eUZhZGVQY3QiOjAuNSwiZXhwZWN0ZWRMaWZldGltZUN5Y2xlcyI6MTE5NSwiaW50ZXJuYWxSZXNpc3RhbmNlTW9obSI6MTEwLjQsInJhdGVkQ2FwYWNpdHlBaCI6MTkuOSwicm91bmRUcmlwRWZmaWNpZW5jeVBjdCI6OTQuOH0sImVsZWN0cm9seXRlTWF0ZXJpYWwiOlt7ImNhc051bWJlciI6Ijk2LTQ5LTEiLCJuYW1lIjoiRXRoeWxlbmUgY2FyYm9uYXRlIiwid2VpZ2h0UGN0IjozOH0seyJjYXNOdW1iZXIiOiI2MTYtMzgtNiIsIm5hbWUiOiJEaW1ldGh5bCBjYXJib25hdGUiLCJ3ZWlnaHRQY3QiOjQ5fSx7ImNhc051bWJlciI6IjIxMzI0LTQwLTMiLCJuYW1lIjoiTGl0aGl1bSBoZXhhZmx1b3JvcGhvc3BoYXRlIiwid2VpZ2h0UGN0IjoxM31dLCJldURlY2xhcmF0aW9uT2ZDb25mb3JtaXR5IjoiRVUtRG9DIEFDTUUtMjAyNi1MTVQtMDkwMSwgcGVyIFJlZ3VsYXRpb24gKEVVKSAyMDIzLzE1NDIgQXJ0LiAxOCIsImV4cGVjdGVkTGlmZXRpbWVDeWNsZXMiOjEyMDAsImV4cGVjdGVkTGlmZXRpbWVSZWZlcmVuY2VUZXN0IjoiRU4gNTA2MDQtMToyMDE2LCAyNSBkZWdDLCAxMDAlIERvRCIsImhhemFyZG91c1N1YnN0YW5jZXMiOlt7ImNhc051bWJlciI6IjIxMzI0LTQwLTMiLCJjb25jZW50cmF0aW9uUGN0IjowLjgsIm5hbWUiOiJMaXRoaXVtIGhleGFmbHVvcm9waG9zcGhhdGUifV0sImluaXRpYWxSb3VuZFRyaXBFZmZpY2llbmN5UGN0Ijo5NSwiaW50ZXJuYWxDZWxsUmVzaXN0YW5jZU1vaG0iOjE0LCJpbnRlcm5hbFBhY2tSZXNpc3RhbmNlTW9obSI6MTEwLCJtYW51ZmFjdHVyaW5nRGF0ZSI6IjIwMjYtMDgtMThUMDA6MDA6MDBaIiwibWFudWZhY3R1cmluZ1BsYWNlIjoiTcO8bmNoZW4sIERFIiwibWFya2luZ0luZm9ybWF0aW9uIjoiU2VwYXJhdGUtY29sbGVjdGlvbiBzeW1ib2wgcGVyIEFydC4gMTMoNCk7IGNhcGFjaXR5IDIwIEFoIC8gOTYwIFdoOyA0OCBWIExNVCIsIm1heGltdW1Wb2x0YWdlViI6NTQuNiwibWluaW1hbFZvbHRhZ2VWIjozOSwibm9taW5hbENhcGFjaXR5QWgiOjIwLCJub21pbmFsVm9sdGFnZVYiOjQ4LCJub3RJblVzZVRlbXBlcmF0dXJlUmFuZ2UiOnsibWF4QyI6NDUsIm1pbkMiOi0xMH0sIm5vdEluVXNlVGVtcGVyYXR1cmVSZWZlcmVuY2VUZXN0IjoiRU4gNTA2MDQtMToyMDE2IHN0b3JhZ2UgY2xhdXNlIiwib3JpZ2luYWxQb3dlckNhcGFiaWxpdHlXIjo5NjAsInBvd2VyTGltaXRNYXhXIjoxNTAwLCJwb3dlckxpbWl0TWluVyI6MjAsInByb2R1Y3RHcm91cCI6ImJhdHRlcnkiLCJwcm9kdWN0SWRlbnRpZmllciI6eyJndGluIjoiMDk1MDYwMDAxMzQzNTIiLCJzY2hlbWUiOiJnczEifSwicmF0ZWRDYXBhY2l0eUt3aCI6bnVsbCwicmVjeWNsZWRDb250ZW50Q29iYWx0UGN0IjoxMiwicmVjeWNsZWRDb250ZW50TGVhZFBjdCI6MCwicmVjeWNsZWRDb250ZW50TGl0aGl1bVBjdCI6NiwicmVjeWNsZWRDb250ZW50Tmlja2VsUGN0Ijo4LCJyZW5ld2FibGVDb250ZW50UGN0IjoxNCwicm91bmRUcmlwRWZmaWNpZW5jeUF0SGFsZkN5Y2xlTGlmZVBjdCI6OTEsInNhZmV0eU1lYXN1cmVzIjoiRG8gbm90IG9wZW4gdGhlIHBhY2suIFJlcGxhY2UgaXQgdGhyb3VnaCBhbiBhdXRob3Jpc2VkIGRlYWxlci4gS2VlcCBpdCBhd2F5IGZyb20gaGVhdCBhYm92ZSA2MCBkZWdDLiIsInNwYXJlUGFydHNDb250YWN0cyI6InNwYXJlc0BhY21lLmV4YW1wbGUiLCJzdGF0ZU9mSGVhbHRoIjp7InBhcmFtZXRlclNldCI6InN0YXRpb25hcnlPckxtdCIsInJlbWFpbmluZ0NhcGFjaXR5UGN0Ijo5OS41LCJyZW1haW5pbmdQb3dlckNhcGFiaWxpdHlQY3QiOjk5LjEsInNlbGZEaXNjaGFyZ2VSYXRlUGN0UGVyTW9udGgiOjJ9LCJzdGF0ZU9mSGVhbHRoUGN0IjpudWxsLCJ0ZXN0UmVwb3J0UmVzdWx0cyI6IkVOIDUwNjA0LTE6MjAxNiBwYXNzOyBVTiAzOC4zIHBhc3M7IHJlcG9ydCBBQ01FLVRSLTIwMjYtMDgxNSIsInVzYWJsZUV4dGluZ3Vpc2hpbmdBZ2VudCI6IldhdGVyOyBjb29sIGEgYnVybmluZyBwYWNrIHdpdGggbGFyZ2Ugdm9sdW1lcyBvZiB3YXRlciIsInVzYWdlSGlzdG9yeSI6eyJjaGFyZ2VEaXNjaGFyZ2VDeWNsZXMiOjR9LCJ3YXN0ZUJhdHRlcnlJbmZvcm1hdGlvbiI6IlJldHVybiB0aGUgYmF0dGVyeSB0byBhIGJpY3ljbGUgcmV0YWlsZXIgb3IgYSBtdW5pY2lwYWwgY29sbGVjdGlvbiBwb2ludC4gRG8gbm90IHBsYWNlIGl0IGluIGhvdXNlaG9sZCB3YXN0ZS4ifSwicHJvZHVjdE5hbWUiOiJBY21lIExNVCA0OFYgMjBBaCBiYXR0ZXJ5IHBhY2siLCJwdWJsaXNoZWRBdCI6IjIwMjYtMDktMDFUMDk6MDU6MDBaIiwicXJDb2RlVXJsIjoiaHR0cHM6Ly9kcHAuYWNtZS5leGFtcGxlLzAxLzA5NTA2MDAwMTM0MzUyLzIxLzdlNGE5YzNkMmYxZThiNmE1ZDQwIiwicmVwYWlyYWJpbGl0eVNjb3JlIjpudWxsLCJyZXRlbnRpb25Mb2NrZWQiOnRydWUsInJldGVudGlvblVudGlsIjoiMjAzNi0wOC0yOVQwOTowNTowMFoiLCJzY2hlbWFWZXJzaW9uIjoiMi43LjAiLCJzdGF0dXMiOiJhY3RpdmUiLCJ1cGRhdGVkQXQiOiIyMDI2LTA5LTAxVDA5OjA1OjAwWiIsInZlcnNpb24iOjF9.55m5_OYvkiKUN9QV9BNB3JeqMOvkYjwYCiPxup_xciGjUrYtHOcaDdy8ULvSAy5NRGpT9p90RrajgBb0Iv5kCg", "payload": { "batchId": "ACME-LMT-2026-09", "co2ePerUnit": null, @@ -553,7 +560,6 @@ "euDeclarationOfConformity": "EU-DoC ACME-2026-LMT-0901, per Regulation (EU) 2023/1542 Art. 18", "expectedLifetimeCycles": 1200, "expectedLifetimeReferenceTest": "EN 50604-1:2016, 25 degC, 100% DoD", - "gtin": "09506000134352", "hazardousSubstances": [ { "casNumber": "21324-40-3", @@ -580,6 +586,10 @@ "powerLimitMaxW": 1500.0, "powerLimitMinW": 20.0, "productGroup": "battery", + "productIdentifier": { + "gtin": "09506000134352", + "scheme": "gs1" + }, "ratedCapacityKwh": null, "recycledContentCobaltPct": 12.0, "recycledContentLeadPct": 0.0, @@ -605,11 +615,11 @@ }, "productName": "Acme LMT 48V 20Ah battery pack", "publishedAt": "2026-09-01T09:05:00Z", - "qrCodeUrl": "https://dpp.acme.example/01/09506000134352/10/ACME-LMT-2026-09/21/7e4a9c3d2f1e8b6a5d40", + "qrCodeUrl": "https://dpp.acme.example/01/09506000134352/21/7e4a9c3d2f1e8b6a5d40", "repairabilityScore": null, "retentionLocked": true, "retentionUntil": "2036-08-29T09:05:00Z", - "schemaVersion": "2.6.0", + "schemaVersion": "2.7.0", "status": "active", "updatedAt": "2026-09-01T09:05:00Z", "version": 1 @@ -617,23 +627,24 @@ }, "manifest": { "contentHashes": { - "auditEntries": "d3e3661902ae8ebc797d545c6124173a74c3b086b2bba8399628df6b53db79e0", + "auditEntries": "46110fef3e331eab68e2616292edcc10d2bfcdfc16fa7bb0409cecdf7cb86a33", "eolEvent": "7cb65bb485538e109105404e15c7bc411aa3050694fa4d63339c70dbe431d3a0", - "fullView": "70f5a9779744ad58b77cebed129ecec4c24d7c5bbf3b65be4b3c61c4be5f0e80", - "publicView": "7ada532408d7c20c385804ca00d0a6a969f1448c796775c14657d7932ecf392a", + "fullView": "e8c5a8fbbddd67948a3ee3eb7abfc07427c2ff2ab23eeba3dc4dc9bbf12cbdbd", + "publicView": "74c1a1eda478cc2643b8652bf188f47e449b851ae64ae05f922de314a9249b83", "transferChain": "52e0fd4f91be57a81e6219557f5f3c4f2331b0cbbc9461d376c967dae5445445" }, - "coreVersion": "0.20.0", + "coreVersion": "0.21.0", "createdAt": "2026-09-25T12:00:00Z", "formatVersion": "1", "issuerDid": "did:web:node.acme.example", "nodeVersion": "0.14.0", "passportId": "0199a3c2-7b10-7e4a-9c3d-2f1e8b6a5d40" }, - "manifestJws": "eyJhbGciOiJFZERTQSIsImtpZCI6ImZlODEyYzEyZjNhYjRjZTZhYzVkYjY5YWMzNTJmOTA2Y2IxYjExZWY0M2ZiMzNlMjUyZWY3ZmY1NTIyNjM4ODkifQ.eyJjb250ZW50SGFzaGVzIjp7ImF1ZGl0RW50cmllcyI6ImQzZTM2NjE5MDJhZThlYmM3OTdkNTQ1YzYxMjQxNzNhNzRjM2IwODZiMmJiYTgzOTk2MjhkZjZiNTNkYjc5ZTAiLCJlb2xFdmVudCI6IjdjYjY1YmI0ODU1MzhlMTA5MTA1NDA0ZTE1YzdiYzQxMWFhMzA1MDY5NGZhNGQ2MzMzOWM3MGRiZTQzMWQzYTAiLCJmdWxsVmlldyI6IjcwZjVhOTc3OTc0NGFkNThiNzdjZWJlZDEyOWVjZWM0YzI0ZDdjNWJiZjNiNjViZTRiM2M2MWM0YmU1ZjBlODAiLCJwdWJsaWNWaWV3IjoiN2FkYTUzMjQwOGQ3YzIwYzM4NTgwNGNhMDBkMGE2YTk2OWYxNDQ4Yzc5Njc3NWMxNDY1N2Q3OTMyZWNmMzkyYSIsInRyYW5zZmVyQ2hhaW4iOiI1MmUwZmQ0ZjkxYmU1N2E4MWU2MjE5NTU3ZjVmM2M0ZjIzMzFiMGNiYmM5NDYxZDM3NmM5NjdkYWU1NDQ1NDQ1In0sImNvcmVWZXJzaW9uIjoiMC4yMC4wIiwiY3JlYXRlZEF0IjoiMjAyNi0wOS0yNVQxMjowMDowMFoiLCJmb3JtYXRWZXJzaW9uIjoiMSIsImlzc3VlckRpZCI6ImRpZDp3ZWI6bm9kZS5hY21lLmV4YW1wbGUiLCJub2RlVmVyc2lvbiI6IjAuMTQuMCIsInBhc3Nwb3J0SWQiOiIwMTk5YTNjMi03YjEwLTdlNGEtOWMzZC0yZjFlOGI2YTVkNDAifQ.Y4XyqkZCD-XAtSYTICoyCngJx7sDCk7sYcdyezYe7ZDDY0k4w8WhK1oUaB5x_zg-malEGWJ_dXIVyI0P_M_qBg", + "manifestJws": "eyJhbGciOiJFZERTQSIsImtpZCI6ImZlODEyYzEyZjNhYjRjZTZhYzVkYjY5YWMzNTJmOTA2Y2IxYjExZWY0M2ZiMzNlMjUyZWY3ZmY1NTIyNjM4ODkifQ.eyJjb250ZW50SGFzaGVzIjp7ImF1ZGl0RW50cmllcyI6IjQ2MTEwZmVmM2UzMzFlYWI2OGUyNjE2MjkyZWRjYzEwZDJiZmNkZmMxNmZhN2JiMDQwOWNlY2RmN2NiODZhMzMiLCJlb2xFdmVudCI6IjdjYjY1YmI0ODU1MzhlMTA5MTA1NDA0ZTE1YzdiYzQxMWFhMzA1MDY5NGZhNGQ2MzMzOWM3MGRiZTQzMWQzYTAiLCJmdWxsVmlldyI6ImU4YzVhOGZiYmRkZDY3OTQ4YTNlZTNlYjdhYmZjMDc0MjdjMmZmMmFiMjNlZWJhM2RjNGRjOWJiZjEyY2JkYmQiLCJwdWJsaWNWaWV3IjoiNzRjMWExZWRhNDc4Y2MyNjQzYjg2NTJiZjE4OGY0N2U0NDliODUxYWU2NGFlMDVmOTIyZGUzMTRhOTI0OWI4MyIsInRyYW5zZmVyQ2hhaW4iOiI1MmUwZmQ0ZjkxYmU1N2E4MWU2MjE5NTU3ZjVmM2M0ZjIzMzFiMGNiYmM5NDYxZDM3NmM5NjdkYWU1NDQ1NDQ1In0sImNvcmVWZXJzaW9uIjoiMC4yMS4wIiwiY3JlYXRlZEF0IjoiMjAyNi0wOS0yNVQxMjowMDowMFoiLCJmb3JtYXRWZXJzaW9uIjoiMSIsImlzc3VlckRpZCI6ImRpZDp3ZWI6bm9kZS5hY21lLmV4YW1wbGUiLCJub2RlVmVyc2lvbiI6IjAuMTQuMCIsInBhc3Nwb3J0SWQiOiIwMTk5YTNjMi03YjEwLTdlNGEtOWMzZC0yZjFlOGI2YTVkNDAifQ.nR0d3UZbNRttz9D0VL9qGHN9dQwzFQGa4eRni8N926diP9G-qB4nGbqgqyz9VqaL6DjKReENzDldyo87sev_BA", "publicView": { - "jws": "eyJhbGciOiJFZERTQSIsImtpZCI6ImZlODEyYzEyZjNhYjRjZTZhYzVkYjY5YWMzNTJmOTA2Y2IxYjExZWY0M2ZiMzNlMjUyZWY3ZmY1NTIyNjM4ODkifQ.eyJjbzJlUGVyVW5pdCI6bnVsbCwiY29tbW9kaXR5Q29kZSI6Ijg1MDc2MDAwIiwiY3JlYXRlZEF0IjoiMjAyNi0wOS0wMVQwOTowMDowMFoiLCJpZCI6IjAxOTlhM2MyLTdiMTAtN2U0YS05YzNkLTJmMWU4YjZhNWQ0MCIsIm1hbnVmYWN0dXJlciI6eyJhZGRyZXNzIjoiTXVzdGVyc3RyYXNzZSAxLCA4MDMzMSBNw7xuY2hlbiwgREUiLCJjb3VudHJ5IjpudWxsLCJkaWRXZWJVcmwiOiJodHRwczovL25vZGUuYWNtZS5leGFtcGxlLy53ZWxsLWtub3duL2RpZC5qc29uIiwibmFtZSI6IkFjbWUgWmVsbGVuIEdtYkgifSwibWF0ZXJpYWxzIjpbeyJjb3VudHJ5T2ZPcmlnaW4iOiJERSIsIm5hbWUiOiJOTUMgODExIGNhdGhvZGUgYWN0aXZlIG1hdGVyaWFsIiwicmVjeWNsZWRQY3QiOjgsIndlaWdodEtnIjozLjF9LHsiY291bnRyeU9mT3JpZ2luIjoiREUiLCJuYW1lIjoiR3JhcGhpdGUgYW5vZGUgYWN0aXZlIG1hdGVyaWFsIiwicmVjeWNsZWRQY3QiOjQsIndlaWdodEtnIjoxLjl9LHsiY291bnRyeU9mT3JpZ2luIjoiREUiLCJuYW1lIjoiQWx1bWluaXVtIHBhY2sgaG91c2luZyIsInJlY3ljbGVkUGN0Ijo2MCwid2VpZ2h0S2ciOjIuMn1dLCJwbGFjZWRPbk1hcmtldERhdGUiOiIyMDI2LTA5LTAxIiwicHJvZHVjdEdyb3VwIjoiYmF0dGVyeSIsInByb2R1Y3RHcm91cERhdGEiOnsiYmF0dGVyeUNoZW1pc3RyeSI6Ik5NQyIsImJhdHRlcnlNb2RlbElkIjoiQUNNRS1MTVQtNDhWIiwiYmF0dGVyeVBhc3Nwb3J0TnVtYmVyIjoiVVJOOk9ETDpCQVRUOjA5NTA2MDAwMTM0MzUyOkFDTUUtTE1ULTIwMjYtMDkiLCJiYXR0ZXJ5VHlwZSI6ImxtdCIsImJhdHRlcnlXZWlnaHRLZyI6MTIuNCwiY28yZVBlclVuaXRLZyI6ODYuNCwiY3JpdGljYWxSYXdNYXRlcmlhbHMiOlt7ImNhc051bWJlciI6Ijc0NDAtNDgtNCIsIm5hbWUiOiJDb2JhbHQiLCJ3ZWlnaHRHcmFtcyI6MzEwfSx7ImNhc051bWJlciI6Ijc0MzktOTMtMiIsIm5hbWUiOiJMaXRoaXVtIiwid2VpZ2h0R3JhbXMiOjQyMH0seyJjYXNOdW1iZXIiOiI3NzgyLTQyLTUiLCJuYW1lIjoiTmF0dXJhbCBncmFwaGl0ZSIsIndlaWdodEdyYW1zIjoxODAwfV0sImN5Y2xlTGlmZVRlc3RDUmF0ZSI6MSwiZXVEZWNsYXJhdGlvbk9mQ29uZm9ybWl0eSI6IkVVLURvQyBBQ01FLTIwMjYtTE1ULTA5MDEsIHBlciBSZWd1bGF0aW9uIChFVSkgMjAyMy8xNTQyIEFydC4gMTgiLCJleHBlY3RlZExpZmV0aW1lQ3ljbGVzIjoxMjAwLCJleHBlY3RlZExpZmV0aW1lUmVmZXJlbmNlVGVzdCI6IkVOIDUwNjA0LTE6MjAxNiwgMjUgZGVnQywgMTAwJSBEb0QiLCJndGluIjoiMDk1MDYwMDAxMzQzNTIiLCJoYXphcmRvdXNTdWJzdGFuY2VzIjpbeyJjYXNOdW1iZXIiOiIyMTMyNC00MC0zIiwiY29uY2VudHJhdGlvblBjdCI6MC44LCJuYW1lIjoiTGl0aGl1bSBoZXhhZmx1b3JvcGhvc3BoYXRlIn1dLCJpbml0aWFsUm91bmRUcmlwRWZmaWNpZW5jeVBjdCI6OTUsImludGVybmFsQ2VsbFJlc2lzdGFuY2VNb2htIjoxNCwiaW50ZXJuYWxQYWNrUmVzaXN0YW5jZU1vaG0iOjExMCwibWFudWZhY3R1cmluZ0RhdGUiOiIyMDI2LTA4LTE4VDAwOjAwOjAwWiIsIm1hbnVmYWN0dXJpbmdQbGFjZSI6Ik3DvG5jaGVuLCBERSIsIm1hcmtpbmdJbmZvcm1hdGlvbiI6IlNlcGFyYXRlLWNvbGxlY3Rpb24gc3ltYm9sIHBlciBBcnQuIDEzKDQpOyBjYXBhY2l0eSAyMCBBaCAvIDk2MCBXaDsgNDggViBMTVQiLCJtYXhpbXVtVm9sdGFnZVYiOjU0LjYsIm1pbmltYWxWb2x0YWdlViI6MzksIm5vbWluYWxDYXBhY2l0eUFoIjoyMCwibm9taW5hbFZvbHRhZ2VWIjo0OCwibm90SW5Vc2VUZW1wZXJhdHVyZVJhbmdlIjp7Im1heEMiOjQ1LCJtaW5DIjotMTB9LCJub3RJblVzZVRlbXBlcmF0dXJlUmVmZXJlbmNlVGVzdCI6IkVOIDUwNjA0LTE6MjAxNiBzdG9yYWdlIGNsYXVzZSIsIm9yaWdpbmFsUG93ZXJDYXBhYmlsaXR5VyI6OTYwLCJwb3dlckxpbWl0TWF4VyI6MTUwMCwicG93ZXJMaW1pdE1pblciOjIwLCJwcm9kdWN0R3JvdXAiOiJiYXR0ZXJ5IiwicmF0ZWRDYXBhY2l0eUt3aCI6bnVsbCwicmVjeWNsZWRDb250ZW50Q29iYWx0UGN0IjoxMiwicmVjeWNsZWRDb250ZW50TGVhZFBjdCI6MCwicmVjeWNsZWRDb250ZW50TGl0aGl1bVBjdCI6NiwicmVjeWNsZWRDb250ZW50Tmlja2VsUGN0Ijo4LCJyZW5ld2FibGVDb250ZW50UGN0IjoxNCwicm91bmRUcmlwRWZmaWNpZW5jeUF0SGFsZkN5Y2xlTGlmZVBjdCI6OTEsInVzYWJsZUV4dGluZ3Vpc2hpbmdBZ2VudCI6IldhdGVyOyBjb29sIGEgYnVybmluZyBwYWNrIHdpdGggbGFyZ2Ugdm9sdW1lcyBvZiB3YXRlciIsIndhc3RlQmF0dGVyeUluZm9ybWF0aW9uIjoiUmV0dXJuIHRoZSBiYXR0ZXJ5IHRvIGEgYmljeWNsZSByZXRhaWxlciBvciBhIG11bmljaXBhbCBjb2xsZWN0aW9uIHBvaW50LiBEbyBub3QgcGxhY2UgaXQgaW4gaG91c2Vob2xkIHdhc3RlLiJ9LCJwcm9kdWN0TmFtZSI6IkFjbWUgTE1UIDQ4ViAyMEFoIGJhdHRlcnkgcGFjayIsInB1Ymxpc2hlZEF0IjoiMjAyNi0wOS0wMVQwOTowNTowMFoiLCJxckNvZGVVcmwiOiJodHRwczovL2RwcC5hY21lLmV4YW1wbGUvMDEvMDk1MDYwMDAxMzQzNTIvMTAvQUNNRS1MTVQtMjAyNi0wOS8yMS83ZTRhOWMzZDJmMWU4YjZhNWQ0MCIsInJlcGFpcmFiaWxpdHlTY29yZSI6bnVsbCwicmV0ZW50aW9uVW50aWwiOiIyMDM2LTA4LTI5VDA5OjA1OjAwWiIsInNjaGVtYVZlcnNpb24iOiIyLjYuMCIsInN0YXR1cyI6ImFjdGl2ZSIsInVwZGF0ZWRBdCI6IjIwMjYtMDktMDFUMDk6MDU6MDBaIiwidmVyc2lvbiI6MX0.OnjeF7qUrlZOKc-Xx8u-ThMayslJBs7HPAmpZBFKvyJpivIqOrN5lTCW15PsoyBeSOpjmRq3Mm_UC99B-Ya-Dg", + "jws": "eyJhbGciOiJFZERTQSIsImtpZCI6ImZlODEyYzEyZjNhYjRjZTZhYzVkYjY5YWMzNTJmOTA2Y2IxYjExZWY0M2ZiMzNlMjUyZWY3ZmY1NTIyNjM4ODkifQ.eyJiYXRjaElkIjoiQUNNRS1MTVQtMjAyNi0wOSIsImNvMmVQZXJVbml0IjpudWxsLCJjb21tb2RpdHlDb2RlIjoiODUwNzYwMDAiLCJjcmVhdGVkQXQiOiIyMDI2LTA5LTAxVDA5OjAwOjAwWiIsImlkIjoiMDE5OWEzYzItN2IxMC03ZTRhLTljM2QtMmYxZThiNmE1ZDQwIiwibWFudWZhY3R1cmVyIjp7ImFkZHJlc3MiOiJNdXN0ZXJzdHJhc3NlIDEsIDgwMzMxIE3DvG5jaGVuLCBERSIsImNvdW50cnkiOm51bGwsImRpZFdlYlVybCI6Imh0dHBzOi8vbm9kZS5hY21lLmV4YW1wbGUvLndlbGwta25vd24vZGlkLmpzb24iLCJuYW1lIjoiQWNtZSBaZWxsZW4gR21iSCJ9LCJtYXRlcmlhbHMiOlt7ImNvdW50cnlPZk9yaWdpbiI6IkRFIiwibmFtZSI6Ik5NQyA4MTEgY2F0aG9kZSBhY3RpdmUgbWF0ZXJpYWwiLCJyZWN5Y2xlZFBjdCI6OCwid2VpZ2h0S2ciOjMuMX0seyJjb3VudHJ5T2ZPcmlnaW4iOiJERSIsIm5hbWUiOiJHcmFwaGl0ZSBhbm9kZSBhY3RpdmUgbWF0ZXJpYWwiLCJyZWN5Y2xlZFBjdCI6NCwid2VpZ2h0S2ciOjEuOX0seyJjb3VudHJ5T2ZPcmlnaW4iOiJERSIsIm5hbWUiOiJBbHVtaW5pdW0gcGFjayBob3VzaW5nIiwicmVjeWNsZWRQY3QiOjYwLCJ3ZWlnaHRLZyI6Mi4yfV0sInBsYWNlZE9uTWFya2V0RGF0ZSI6IjIwMjYtMDktMDEiLCJwcm9kdWN0R3JvdXAiOiJiYXR0ZXJ5IiwicHJvZHVjdEdyb3VwRGF0YSI6eyJiYXR0ZXJ5Q2hlbWlzdHJ5IjoiTk1DIiwiYmF0dGVyeU1vZGVsSWQiOiJBQ01FLUxNVC00OFYiLCJiYXR0ZXJ5UGFzc3BvcnROdW1iZXIiOiJVUk46T0RMOkJBVFQ6MDk1MDYwMDAxMzQzNTI6QUNNRS1MTVQtMjAyNi0wOSIsImJhdHRlcnlUeXBlIjoibG10IiwiYmF0dGVyeVdlaWdodEtnIjoxMi40LCJjbzJlUGVyVW5pdEtnIjo4Ni40LCJjcml0aWNhbFJhd01hdGVyaWFscyI6W3siY2FzTnVtYmVyIjoiNzQ0MC00OC00IiwibmFtZSI6IkNvYmFsdCIsIndlaWdodEdyYW1zIjozMTB9LHsiY2FzTnVtYmVyIjoiNzQzOS05My0yIiwibmFtZSI6IkxpdGhpdW0iLCJ3ZWlnaHRHcmFtcyI6NDIwfSx7ImNhc051bWJlciI6Ijc3ODItNDItNSIsIm5hbWUiOiJOYXR1cmFsIGdyYXBoaXRlIiwid2VpZ2h0R3JhbXMiOjE4MDB9XSwiY3ljbGVMaWZlVGVzdENSYXRlIjoxLCJldURlY2xhcmF0aW9uT2ZDb25mb3JtaXR5IjoiRVUtRG9DIEFDTUUtMjAyNi1MTVQtMDkwMSwgcGVyIFJlZ3VsYXRpb24gKEVVKSAyMDIzLzE1NDIgQXJ0LiAxOCIsImV4cGVjdGVkTGlmZXRpbWVDeWNsZXMiOjEyMDAsImV4cGVjdGVkTGlmZXRpbWVSZWZlcmVuY2VUZXN0IjoiRU4gNTA2MDQtMToyMDE2LCAyNSBkZWdDLCAxMDAlIERvRCIsImhhemFyZG91c1N1YnN0YW5jZXMiOlt7ImNhc051bWJlciI6IjIxMzI0LTQwLTMiLCJjb25jZW50cmF0aW9uUGN0IjowLjgsIm5hbWUiOiJMaXRoaXVtIGhleGFmbHVvcm9waG9zcGhhdGUifV0sImluaXRpYWxSb3VuZFRyaXBFZmZpY2llbmN5UGN0Ijo5NSwiaW50ZXJuYWxDZWxsUmVzaXN0YW5jZU1vaG0iOjE0LCJpbnRlcm5hbFBhY2tSZXNpc3RhbmNlTW9obSI6MTEwLCJtYW51ZmFjdHVyaW5nRGF0ZSI6IjIwMjYtMDgtMThUMDA6MDA6MDBaIiwibWFudWZhY3R1cmluZ1BsYWNlIjoiTcO8bmNoZW4sIERFIiwibWFya2luZ0luZm9ybWF0aW9uIjoiU2VwYXJhdGUtY29sbGVjdGlvbiBzeW1ib2wgcGVyIEFydC4gMTMoNCk7IGNhcGFjaXR5IDIwIEFoIC8gOTYwIFdoOyA0OCBWIExNVCIsIm1heGltdW1Wb2x0YWdlViI6NTQuNiwibWluaW1hbFZvbHRhZ2VWIjozOSwibm9taW5hbENhcGFjaXR5QWgiOjIwLCJub21pbmFsVm9sdGFnZVYiOjQ4LCJub3RJblVzZVRlbXBlcmF0dXJlUmFuZ2UiOnsibWF4QyI6NDUsIm1pbkMiOi0xMH0sIm5vdEluVXNlVGVtcGVyYXR1cmVSZWZlcmVuY2VUZXN0IjoiRU4gNTA2MDQtMToyMDE2IHN0b3JhZ2UgY2xhdXNlIiwib3JpZ2luYWxQb3dlckNhcGFiaWxpdHlXIjo5NjAsInBvd2VyTGltaXRNYXhXIjoxNTAwLCJwb3dlckxpbWl0TWluVyI6MjAsInByb2R1Y3RHcm91cCI6ImJhdHRlcnkiLCJwcm9kdWN0SWRlbnRpZmllciI6eyJndGluIjoiMDk1MDYwMDAxMzQzNTIiLCJzY2hlbWUiOiJnczEifSwicmF0ZWRDYXBhY2l0eUt3aCI6bnVsbCwicmVjeWNsZWRDb250ZW50Q29iYWx0UGN0IjoxMiwicmVjeWNsZWRDb250ZW50TGVhZFBjdCI6MCwicmVjeWNsZWRDb250ZW50TGl0aGl1bVBjdCI6NiwicmVjeWNsZWRDb250ZW50Tmlja2VsUGN0Ijo4LCJyZW5ld2FibGVDb250ZW50UGN0IjoxNCwicm91bmRUcmlwRWZmaWNpZW5jeUF0SGFsZkN5Y2xlTGlmZVBjdCI6OTEsInVzYWJsZUV4dGluZ3Vpc2hpbmdBZ2VudCI6IldhdGVyOyBjb29sIGEgYnVybmluZyBwYWNrIHdpdGggbGFyZ2Ugdm9sdW1lcyBvZiB3YXRlciIsIndhc3RlQmF0dGVyeUluZm9ybWF0aW9uIjoiUmV0dXJuIHRoZSBiYXR0ZXJ5IHRvIGEgYmljeWNsZSByZXRhaWxlciBvciBhIG11bmljaXBhbCBjb2xsZWN0aW9uIHBvaW50LiBEbyBub3QgcGxhY2UgaXQgaW4gaG91c2Vob2xkIHdhc3RlLiJ9LCJwcm9kdWN0TmFtZSI6IkFjbWUgTE1UIDQ4ViAyMEFoIGJhdHRlcnkgcGFjayIsInB1Ymxpc2hlZEF0IjoiMjAyNi0wOS0wMVQwOTowNTowMFoiLCJxckNvZGVVcmwiOiJodHRwczovL2RwcC5hY21lLmV4YW1wbGUvMDEvMDk1MDYwMDAxMzQzNTIvMjEvN2U0YTljM2QyZjFlOGI2YTVkNDAiLCJyZXBhaXJhYmlsaXR5U2NvcmUiOm51bGwsInJldGVudGlvblVudGlsIjoiMjAzNi0wOC0yOVQwOTowNTowMFoiLCJzY2hlbWFWZXJzaW9uIjoiMi43LjAiLCJzdGF0dXMiOiJhY3RpdmUiLCJ1cGRhdGVkQXQiOiIyMDI2LTA5LTAxVDA5OjA1OjAwWiIsInZlcnNpb24iOjF9.LHi5ToX900cUN4vak8l1zOZ5xc1H9jW25fL4XUWuxz2JU1_3PxxrjRUTyY9RctPxPSTWmS40fUWurEZnTdE3Dw", "payload": { + "batchId": "ACME-LMT-2026-09", "co2ePerUnit": null, "commodityCode": "85076000", "createdAt": "2026-09-01T09:00:00Z", @@ -694,7 +705,6 @@ "euDeclarationOfConformity": "EU-DoC ACME-2026-LMT-0901, per Regulation (EU) 2023/1542 Art. 18", "expectedLifetimeCycles": 1200, "expectedLifetimeReferenceTest": "EN 50604-1:2016, 25 degC, 100% DoD", - "gtin": "09506000134352", "hazardousSubstances": [ { "casNumber": "21324-40-3", @@ -721,6 +731,10 @@ "powerLimitMaxW": 1500.0, "powerLimitMinW": 20.0, "productGroup": "battery", + "productIdentifier": { + "gtin": "09506000134352", + "scheme": "gs1" + }, "ratedCapacityKwh": null, "recycledContentCobaltPct": 12.0, "recycledContentLeadPct": 0.0, @@ -733,10 +747,10 @@ }, "productName": "Acme LMT 48V 20Ah battery pack", "publishedAt": "2026-09-01T09:05:00Z", - "qrCodeUrl": "https://dpp.acme.example/01/09506000134352/10/ACME-LMT-2026-09/21/7e4a9c3d2f1e8b6a5d40", + "qrCodeUrl": "https://dpp.acme.example/01/09506000134352/21/7e4a9c3d2f1e8b6a5d40", "repairabilityScore": null, "retentionUntil": "2036-08-29T09:05:00Z", - "schemaVersion": "2.6.0", + "schemaVersion": "2.7.0", "status": "active", "updatedAt": "2026-09-01T09:05:00Z", "version": 1 diff --git a/site/dpp-landing/public/verify/examples/05-tampered-signature.json b/site/dpp-landing/public/verify/examples/05-tampered-signature.json index a438f97..d14139e 100644 --- a/site/dpp-landing/public/verify/examples/05-tampered-signature.json +++ b/site/dpp-landing/public/verify/examples/05-tampered-signature.json @@ -16,7 +16,7 @@ { "action": "published", "actor": "api-key", - "entryHash": "4e81bf531274f21aa02339144c34711eac79af7fb22ebf10a18982adc3f075a3", + "entryHash": "2934a67be97238b4f38ff4ee4d53464a0c197cec343297b25124f894b942c2f2", "id": "0199a3c2-7b10-7e4a-9c3d-000000000002", "metadata": { "fullViewPayload": { @@ -142,7 +142,6 @@ "euDeclarationOfConformity": "EU-DoC ACME-2026-LMT-0901, per Regulation (EU) 2023/1542 Art. 18", "expectedLifetimeCycles": 1200, "expectedLifetimeReferenceTest": "EN 50604-1:2016, 25 degC, 100% DoD", - "gtin": "09506000134352", "hazardousSubstances": [ { "casNumber": "21324-40-3", @@ -169,6 +168,10 @@ "powerLimitMaxW": 1500.0, "powerLimitMinW": 20.0, "productGroup": "battery", + "productIdentifier": { + "gtin": "09506000134352", + "scheme": "gs1" + }, "ratedCapacityKwh": null, "recycledContentCobaltPct": 12.0, "recycledContentLeadPct": 0.0, @@ -194,16 +197,17 @@ }, "productName": "Acme LMT 48V 20Ah battery pack", "publishedAt": "2026-09-01T09:05:00Z", - "qrCodeUrl": "https://dpp.acme.example/01/09506000134352/10/ACME-LMT-2026-09/21/7e4a9c3d2f1e8b6a5d40", + "qrCodeUrl": "https://dpp.acme.example/01/09506000134352/21/7e4a9c3d2f1e8b6a5d40", "repairabilityScore": null, "retentionLocked": true, "retentionUntil": "2036-08-29T09:05:00Z", - "schemaVersion": "2.6.0", + "schemaVersion": "2.7.0", "status": "active", "updatedAt": "2026-09-01T09:05:00Z", "version": 1 }, "publicViewPayload": { + "batchId": "ACME-LMT-2026-09", "co2ePerUnit": null, "commodityCode": "85076000", "createdAt": "2026-09-01T09:00:00Z", @@ -264,7 +268,6 @@ "euDeclarationOfConformity": "EU-DoC ACME-2026-LMT-0901, per Regulation (EU) 2023/1542 Art. 18", "expectedLifetimeCycles": 1200, "expectedLifetimeReferenceTest": "EN 50604-1:2016, 25 degC, 100% DoD", - "gtin": "09506000134352", "hazardousSubstances": [ { "casNumber": "21324-40-3", @@ -291,6 +294,10 @@ "powerLimitMaxW": 1500.0, "powerLimitMinW": 20.0, "productGroup": "battery", + "productIdentifier": { + "gtin": "09506000134352", + "scheme": "gs1" + }, "ratedCapacityKwh": null, "recycledContentCobaltPct": 12.0, "recycledContentLeadPct": 0.0, @@ -303,10 +310,10 @@ }, "productName": "Acme LMT 48V 20Ah battery pack", "publishedAt": "2026-09-01T09:05:00Z", - "qrCodeUrl": "https://dpp.acme.example/01/09506000134352/10/ACME-LMT-2026-09/21/7e4a9c3d2f1e8b6a5d40", + "qrCodeUrl": "https://dpp.acme.example/01/09506000134352/21/7e4a9c3d2f1e8b6a5d40", "repairabilityScore": null, "retentionUntil": "2036-08-29T09:05:00Z", - "schemaVersion": "2.6.0", + "schemaVersion": "2.7.0", "status": "active", "updatedAt": "2026-09-01T09:05:00Z", "version": 1 @@ -322,7 +329,7 @@ { "action": "transferred", "actor": "api-key", - "entryHash": "5c869a32da993e9a5ee13bc3b059fee9c3abc1fbbd840ab2449473f0e5453b08", + "entryHash": "1b61fd6f3f72f0730d61b59008f883d7630a03e2dea9f5bd67206482d0770530", "id": "0199a3c2-7b10-7e4a-9c3d-000000000003", "metadata": { "event": "transfer.initiated", @@ -331,7 +338,7 @@ }, "newStatus": null, "passportId": "0199a3c2-7b10-7e4a-9c3d-2f1e8b6a5d40", - "prevHash": "4e81bf531274f21aa02339144c34711eac79af7fb22ebf10a18982adc3f075a3", + "prevHash": "2934a67be97238b4f38ff4ee4d53464a0c197cec343297b25124f894b942c2f2", "previousStatus": null, "requestId": "0199a3c2-7b10-7e4a-8d2e-000000000003", "timestamp": "2026-09-10T14:00:00.042Z" @@ -339,7 +346,7 @@ { "action": "transferred", "actor": "api-key", - "entryHash": "3a5eb46b99bc15d235b342a0a6092d3e382d998b7de32588ed4966d74295fa51", + "entryHash": "f462766c832366e92cef97196b764df1bd5ce5e1acc1fa5e2b395f99d4c3e6fa", "id": "0199a3c2-7b10-7e4a-9c3d-000000000004", "metadata": { "event": "transfer.accepted", @@ -348,7 +355,7 @@ }, "newStatus": null, "passportId": "0199a3c2-7b10-7e4a-9c3d-2f1e8b6a5d40", - "prevHash": "5c869a32da993e9a5ee13bc3b059fee9c3abc1fbbd840ab2449473f0e5453b08", + "prevHash": "1b61fd6f3f72f0730d61b59008f883d7630a03e2dea9f5bd67206482d0770530", "previousStatus": null, "requestId": "0199a3c2-7b10-7e4a-8d2e-000000000004", "timestamp": "2026-09-10T14:30:00.123456Z" @@ -356,7 +363,7 @@ { "action": "deactivated", "actor": "api-key", - "entryHash": "256b89a07f8ff158fe29f327e08996214563987ca111cddc563bb0e9a9f9a362", + "entryHash": "6fd9d12be0f3a26ae6fc2740a796a13363de1e3abd3082ce284c9eeebdc88dac", "id": "0199a3c2-7b10-7e4a-9c3d-000000000005", "metadata": { "declaredAt": "2026-09-20T08:00:00Z", @@ -369,7 +376,7 @@ }, "newStatus": "deactivated", "passportId": "0199a3c2-7b10-7e4a-9c3d-2f1e8b6a5d40", - "prevHash": "3a5eb46b99bc15d235b342a0a6092d3e382d998b7de32588ed4966d74295fa51", + "prevHash": "f462766c832366e92cef97196b764df1bd5ce5e1acc1fa5e2b395f99d4c3e6fa", "previousStatus": "active", "requestId": "0199a3c2-7b10-7e4a-8d2e-000000000005", "timestamp": "2026-09-20T08:00:00.018Z" @@ -429,7 +436,7 @@ } }, "fullView": { - "jws": "eyJhbGciOiJFZERTQSIsImtpZCI6ImZlODEyYzEyZjNhYjRjZTZhYzVkYjY5YWMzNTJmOTA2Y2IxYjExZWY0M2ZiMzNlMjUyZWY3ZmY1NTIyNjM4ODkifQ.eyJiYXRjaElkIjoiQUNNRS1MTVQtMjAyNi0wOSIsImNvMmVQZXJVbml0IjpudWxsLCJjb21tb2RpdHlDb2RlIjoiODUwNzYwMDAiLCJjcmVhdGVkQXQiOiIyMDI2LTA5LTAxVDA5OjAwOjAwWiIsImlkIjoiMDE5OWEzYzItN2IxMC03ZTRhLTljM2QtMmYxZThiNmE1ZDQwIiwiandzU2lnbmF0dXJlIjpudWxsLCJtYW51ZmFjdHVyZXIiOnsiYWRkcmVzcyI6Ik11c3RlcnN0cmFzc2UgMSwgODAzMzEgTcO8bmNoZW4sIERFIiwiY291bnRyeSI6bnVsbCwiZGlkV2ViVXJsIjoiaHR0cHM6Ly9ub2RlLmFjbWUuZXhhbXBsZS8ud2VsbC1rbm93bi9kaWQuanNvbiIsIm5hbWUiOiJBY21lIFplbGxlbiBHbWJIIn0sIm1hdGVyaWFscyI6W3siY291bnRyeU9mT3JpZ2luIjoiREUiLCJuYW1lIjoiTk1DIDgxMSBjYXRob2RlIGFjdGl2ZSBtYXRlcmlhbCIsInJlY3ljbGVkUGN0Ijo4LCJ3ZWlnaHRLZyI6My4xfSx7ImNvdW50cnlPZk9yaWdpbiI6IkRFIiwibmFtZSI6IkdyYXBoaXRlIGFub2RlIGFjdGl2ZSBtYXRlcmlhbCIsInJlY3ljbGVkUGN0Ijo0LCJ3ZWlnaHRLZyI6MS45fSx7ImNvdW50cnlPZk9yaWdpbiI6IkRFIiwibmFtZSI6IkFsdW1pbml1bSBwYWNrIGhvdXNpbmciLCJyZWN5Y2xlZFBjdCI6NjAsIndlaWdodEtnIjoyLjJ9XSwicGxhY2VkT25NYXJrZXREYXRlIjoiMjAyNi0wOS0wMSIsInByb2R1Y3RHcm91cCI6ImJhdHRlcnkiLCJwcm9kdWN0R3JvdXBEYXRhIjp7ImFub2RlTWF0ZXJpYWwiOlt7ImNhc051bWJlciI6Ijc3ODItNDItNSIsIm5hbWUiOiJHcmFwaGl0ZSIsIndlaWdodFBjdCI6OTZ9LHsiY2FzTnVtYmVyIjoiOTAwMy01NS04IiwibmFtZSI6IlNCUi9DTUMgYmluZGVyIiwid2VpZ2h0UGN0Ijo0fV0sImJhdHRlcnlDaGVtaXN0cnkiOiJOTUMiLCJiYXR0ZXJ5TW9kZWxJZCI6IkFDTUUtTE1ULTQ4ViIsImJhdHRlcnlQYXNzcG9ydE51bWJlciI6IlVSTjpPREw6QkFUVDowOTUwNjAwMDEzNDM1MjpBQ01FLUxNVC0yMDI2LTA5IiwiYmF0dGVyeVN0YXR1cyI6Im9yaWdpbmFsIiwiYmF0dGVyeVR5cGUiOiJsbXQiLCJiYXR0ZXJ5V2VpZ2h0S2ciOjEyLjQsImNhdGhvZGVNYXRlcmlhbCI6W3siY2FzTnVtYmVyIjoiMzQ2NDE3LTk3LTgiLCJuYW1lIjoiTGlOaTAuOE1uMC4xQ28wLjFPMiIsIndlaWdodFBjdCI6OTZ9LHsiY2FzTnVtYmVyIjoiMjQ5MzctNzktOSIsIm5hbWUiOiJQVkRGIGJpbmRlciIsIndlaWdodFBjdCI6Mn0seyJjYXNOdW1iZXIiOiIxMzMzLTg2LTQiLCJuYW1lIjoiQ29uZHVjdGl2ZSBjYXJib24gYmxhY2siLCJ3ZWlnaHRQY3QiOjJ9XSwiY28yZVBlclVuaXRLZyI6ODYuNCwiY29tcG9uZW50UGFydE51bWJlcnMiOlsiQUNNRS1DRUxMLTIxNzAwLU5NQyIsIkFDTUUtQk1TLTEzUy1WMSIsIkFDTUUtTE1ULUVOQ0wtNDgiXSwiY3JpdGljYWxSYXdNYXRlcmlhbHMiOlt7ImNhc051bWJlciI6Ijc0NDAtNDgtNCIsIm5hbWUiOiJDb2JhbHQiLCJ3ZWlnaHRHcmFtcyI6MzEwfSx7ImNhc051bWJlciI6Ijc0MzktOTMtMiIsIm5hbWUiOiJMaXRoaXVtIiwid2VpZ2h0R3JhbXMiOjQyMH0seyJjYXNOdW1iZXIiOiI3NzgyLTQyLTUiLCJuYW1lIjoiTmF0dXJhbCBncmFwaGl0ZSIsIndlaWdodEdyYW1zIjoxODAwfV0sImN5Y2xlTGlmZVRlc3RDUmF0ZSI6MSwiZGlzYXNzZW1ibHlJbnN0cnVjdGlvbnNVcmwiOiJodHRwczovL2FjbWUuZXhhbXBsZS9zZXJ2aWNlL2xtdC00OC9kaXNhc3NlbWJseSIsImR5bmFtaWNQZXJmb3JtYW5jZSI6eyJjYXBhY2l0eUZhZGVQY3QiOjAuNSwiZXhwZWN0ZWRMaWZldGltZUN5Y2xlcyI6MTE5NSwiaW50ZXJuYWxSZXNpc3RhbmNlTW9obSI6MTEwLjQsInJhdGVkQ2FwYWNpdHlBaCI6MTkuOSwicm91bmRUcmlwRWZmaWNpZW5jeVBjdCI6OTQuOH0sImVsZWN0cm9seXRlTWF0ZXJpYWwiOlt7ImNhc051bWJlciI6Ijk2LTQ5LTEiLCJuYW1lIjoiRXRoeWxlbmUgY2FyYm9uYXRlIiwid2VpZ2h0UGN0IjozOH0seyJjYXNOdW1iZXIiOiI2MTYtMzgtNiIsIm5hbWUiOiJEaW1ldGh5bCBjYXJib25hdGUiLCJ3ZWlnaHRQY3QiOjQ5fSx7ImNhc051bWJlciI6IjIxMzI0LTQwLTMiLCJuYW1lIjoiTGl0aGl1bSBoZXhhZmx1b3JvcGhvc3BoYXRlIiwid2VpZ2h0UGN0IjoxM31dLCJldURlY2xhcmF0aW9uT2ZDb25mb3JtaXR5IjoiRVUtRG9DIEFDTUUtMjAyNi1MTVQtMDkwMSwgcGVyIFJlZ3VsYXRpb24gKEVVKSAyMDIzLzE1NDIgQXJ0LiAxOCIsImV4cGVjdGVkTGlmZXRpbWVDeWNsZXMiOjEyMDAsImV4cGVjdGVkTGlmZXRpbWVSZWZlcmVuY2VUZXN0IjoiRU4gNTA2MDQtMToyMDE2LCAyNSBkZWdDLCAxMDAlIERvRCIsImd0aW4iOiIwOTUwNjAwMDEzNDM1MiIsImhhemFyZG91c1N1YnN0YW5jZXMiOlt7ImNhc051bWJlciI6IjIxMzI0LTQwLTMiLCJjb25jZW50cmF0aW9uUGN0IjowLjgsIm5hbWUiOiJMaXRoaXVtIGhleGFmbHVvcm9waG9zcGhhdGUifV0sImluaXRpYWxSb3VuZFRyaXBFZmZpY2llbmN5UGN0Ijo5NSwiaW50ZXJuYWxDZWxsUmVzaXN0YW5jZU1vaG0iOjE0LCJpbnRlcm5hbFBhY2tSZXNpc3RhbmNlTW9obSI6MTEwLCJtYW51ZmFjdHVyaW5nRGF0ZSI6IjIwMjYtMDgtMThUMDA6MDA6MDBaIiwibWFudWZhY3R1cmluZ1BsYWNlIjoiTcO8bmNoZW4sIERFIiwibWFya2luZ0luZm9ybWF0aW9uIjoiU2VwYXJhdGUtY29sbGVjdGlvbiBzeW1ib2wgcGVyIEFydC4gMTMoNCk7IGNhcGFjaXR5IDIwIEFoIC8gOTYwIFdoOyA0OCBWIExNVCIsIm1heGltdW1Wb2x0YWdlViI6NTQuNiwibWluaW1hbFZvbHRhZ2VWIjozOSwibm9taW5hbENhcGFjaXR5QWgiOjIwLCJub21pbmFsVm9sdGFnZVYiOjQ4LCJub3RJblVzZVRlbXBlcmF0dXJlUmFuZ2UiOnsibWF4QyI6NDUsIm1pbkMiOi0xMH0sIm5vdEluVXNlVGVtcGVyYXR1cmVSZWZlcmVuY2VUZXN0IjoiRU4gNTA2MDQtMToyMDE2IHN0b3JhZ2UgY2xhdXNlIiwib3JpZ2luYWxQb3dlckNhcGFiaWxpdHlXIjo5NjAsInBvd2VyTGltaXRNYXhXIjoxNTAwLCJwb3dlckxpbWl0TWluVyI6MjAsInByb2R1Y3RHcm91cCI6ImJhdHRlcnkiLCJyYXRlZENhcGFjaXR5S3doIjpudWxsLCJyZWN5Y2xlZENvbnRlbnRDb2JhbHRQY3QiOjEyLCJyZWN5Y2xlZENvbnRlbnRMZWFkUGN0IjowLCJyZWN5Y2xlZENvbnRlbnRMaXRoaXVtUGN0Ijo2LCJyZWN5Y2xlZENvbnRlbnROaWNrZWxQY3QiOjgsInJlbmV3YWJsZUNvbnRlbnRQY3QiOjE0LCJyb3VuZFRyaXBFZmZpY2llbmN5QXRIYWxmQ3ljbGVMaWZlUGN0Ijo5MSwic2FmZXR5TWVhc3VyZXMiOiJEbyBub3Qgb3BlbiB0aGUgcGFjay4gUmVwbGFjZSBpdCB0aHJvdWdoIGFuIGF1dGhvcmlzZWQgZGVhbGVyLiBLZWVwIGl0IGF3YXkgZnJvbSBoZWF0IGFib3ZlIDYwIGRlZ0MuIiwic3BhcmVQYXJ0c0NvbnRhY3RzIjoic3BhcmVzQGFjbWUuZXhhbXBsZSIsInN0YXRlT2ZIZWFsdGgiOnsicGFyYW1ldGVyU2V0Ijoic3RhdGlvbmFyeU9yTG10IiwicmVtYWluaW5nQ2FwYWNpdHlQY3QiOjk5LjUsInJlbWFpbmluZ1Bvd2VyQ2FwYWJpbGl0eVBjdCI6OTkuMSwic2VsZkRpc2NoYXJnZVJhdGVQY3RQZXJNb250aCI6Mn0sInN0YXRlT2ZIZWFsdGhQY3QiOm51bGwsInRlc3RSZXBvcnRSZXN1bHRzIjoiRU4gNTA2MDQtMToyMDE2IHBhc3M7IFVOIDM4LjMgcGFzczsgcmVwb3J0IEFDTUUtVFItMjAyNi0wODE1IiwidXNhYmxlRXh0aW5ndWlzaGluZ0FnZW50IjoiV2F0ZXI7IGNvb2wgYSBidXJuaW5nIHBhY2sgd2l0aCBsYXJnZSB2b2x1bWVzIG9mIHdhdGVyIiwidXNhZ2VIaXN0b3J5Ijp7ImNoYXJnZURpc2NoYXJnZUN5Y2xlcyI6NH0sIndhc3RlQmF0dGVyeUluZm9ybWF0aW9uIjoiUmV0dXJuIHRoZSBiYXR0ZXJ5IHRvIGEgYmljeWNsZSByZXRhaWxlciBvciBhIG11bmljaXBhbCBjb2xsZWN0aW9uIHBvaW50LiBEbyBub3QgcGxhY2UgaXQgaW4gaG91c2Vob2xkIHdhc3RlLiJ9LCJwcm9kdWN0TmFtZSI6IkFjbWUgTE1UIDQ4ViAyMEFoIGJhdHRlcnkgcGFjayIsInB1Ymxpc2hlZEF0IjoiMjAyNi0wOS0wMVQwOTowNTowMFoiLCJxckNvZGVVcmwiOiJodHRwczovL2RwcC5hY21lLmV4YW1wbGUvMDEvMDk1MDYwMDAxMzQzNTIvMTAvQUNNRS1MTVQtMjAyNi0wOS8yMS83ZTRhOWMzZDJmMWU4YjZhNWQ0MCIsInJlcGFpcmFiaWxpdHlTY29yZSI6bnVsbCwicmV0ZW50aW9uTG9ja2VkIjp0cnVlLCJyZXRlbnRpb25VbnRpbCI6IjIwMzYtMDgtMjlUMDk6MDU6MDBaIiwic2NoZW1hVmVyc2lvbiI6IjIuNi4wIiwic3RhdHVzIjoiYWN0aXZlIiwidXBkYXRlZEF0IjoiMjAyNi0wOS0wMVQwOTowNTowMFoiLCJ2ZXJzaW9uIjoxfQ.WlMDfygpDjYk8xHRQjpQgppwhVkUgYhyj_9iiPH_IXvXb8IKcD0cA2lFJCznB1B6llfW5Q3qiZcfRAdB78nDBw", + "jws": "eyJhbGciOiJFZERTQSIsImtpZCI6ImZlODEyYzEyZjNhYjRjZTZhYzVkYjY5YWMzNTJmOTA2Y2IxYjExZWY0M2ZiMzNlMjUyZWY3ZmY1NTIyNjM4ODkifQ.eyJiYXRjaElkIjoiQUNNRS1MTVQtMjAyNi0wOSIsImNvMmVQZXJVbml0IjpudWxsLCJjb21tb2RpdHlDb2RlIjoiODUwNzYwMDAiLCJjcmVhdGVkQXQiOiIyMDI2LTA5LTAxVDA5OjAwOjAwWiIsImlkIjoiMDE5OWEzYzItN2IxMC03ZTRhLTljM2QtMmYxZThiNmE1ZDQwIiwiandzU2lnbmF0dXJlIjpudWxsLCJtYW51ZmFjdHVyZXIiOnsiYWRkcmVzcyI6Ik11c3RlcnN0cmFzc2UgMSwgODAzMzEgTcO8bmNoZW4sIERFIiwiY291bnRyeSI6bnVsbCwiZGlkV2ViVXJsIjoiaHR0cHM6Ly9ub2RlLmFjbWUuZXhhbXBsZS8ud2VsbC1rbm93bi9kaWQuanNvbiIsIm5hbWUiOiJBY21lIFplbGxlbiBHbWJIIn0sIm1hdGVyaWFscyI6W3siY291bnRyeU9mT3JpZ2luIjoiREUiLCJuYW1lIjoiTk1DIDgxMSBjYXRob2RlIGFjdGl2ZSBtYXRlcmlhbCIsInJlY3ljbGVkUGN0Ijo4LCJ3ZWlnaHRLZyI6My4xfSx7ImNvdW50cnlPZk9yaWdpbiI6IkRFIiwibmFtZSI6IkdyYXBoaXRlIGFub2RlIGFjdGl2ZSBtYXRlcmlhbCIsInJlY3ljbGVkUGN0Ijo0LCJ3ZWlnaHRLZyI6MS45fSx7ImNvdW50cnlPZk9yaWdpbiI6IkRFIiwibmFtZSI6IkFsdW1pbml1bSBwYWNrIGhvdXNpbmciLCJyZWN5Y2xlZFBjdCI6NjAsIndlaWdodEtnIjoyLjJ9XSwicGxhY2VkT25NYXJrZXREYXRlIjoiMjAyNi0wOS0wMSIsInByb2R1Y3RHcm91cCI6ImJhdHRlcnkiLCJwcm9kdWN0R3JvdXBEYXRhIjp7ImFub2RlTWF0ZXJpYWwiOlt7ImNhc051bWJlciI6Ijc3ODItNDItNSIsIm5hbWUiOiJHcmFwaGl0ZSIsIndlaWdodFBjdCI6OTZ9LHsiY2FzTnVtYmVyIjoiOTAwMy01NS04IiwibmFtZSI6IlNCUi9DTUMgYmluZGVyIiwid2VpZ2h0UGN0Ijo0fV0sImJhdHRlcnlDaGVtaXN0cnkiOiJOTUMiLCJiYXR0ZXJ5TW9kZWxJZCI6IkFDTUUtTE1ULTQ4ViIsImJhdHRlcnlQYXNzcG9ydE51bWJlciI6IlVSTjpPREw6QkFUVDowOTUwNjAwMDEzNDM1MjpBQ01FLUxNVC0yMDI2LTA5IiwiYmF0dGVyeVN0YXR1cyI6Im9yaWdpbmFsIiwiYmF0dGVyeVR5cGUiOiJsbXQiLCJiYXR0ZXJ5V2VpZ2h0S2ciOjEyLjQsImNhdGhvZGVNYXRlcmlhbCI6W3siY2FzTnVtYmVyIjoiMzQ2NDE3LTk3LTgiLCJuYW1lIjoiTGlOaTAuOE1uMC4xQ28wLjFPMiIsIndlaWdodFBjdCI6OTZ9LHsiY2FzTnVtYmVyIjoiMjQ5MzctNzktOSIsIm5hbWUiOiJQVkRGIGJpbmRlciIsIndlaWdodFBjdCI6Mn0seyJjYXNOdW1iZXIiOiIxMzMzLTg2LTQiLCJuYW1lIjoiQ29uZHVjdGl2ZSBjYXJib24gYmxhY2siLCJ3ZWlnaHRQY3QiOjJ9XSwiY28yZVBlclVuaXRLZyI6ODYuNCwiY29tcG9uZW50UGFydE51bWJlcnMiOlsiQUNNRS1DRUxMLTIxNzAwLU5NQyIsIkFDTUUtQk1TLTEzUy1WMSIsIkFDTUUtTE1ULUVOQ0wtNDgiXSwiY3JpdGljYWxSYXdNYXRlcmlhbHMiOlt7ImNhc051bWJlciI6Ijc0NDAtNDgtNCIsIm5hbWUiOiJDb2JhbHQiLCJ3ZWlnaHRHcmFtcyI6MzEwfSx7ImNhc051bWJlciI6Ijc0MzktOTMtMiIsIm5hbWUiOiJMaXRoaXVtIiwid2VpZ2h0R3JhbXMiOjQyMH0seyJjYXNOdW1iZXIiOiI3NzgyLTQyLTUiLCJuYW1lIjoiTmF0dXJhbCBncmFwaGl0ZSIsIndlaWdodEdyYW1zIjoxODAwfV0sImN5Y2xlTGlmZVRlc3RDUmF0ZSI6MSwiZGlzYXNzZW1ibHlJbnN0cnVjdGlvbnNVcmwiOiJodHRwczovL2FjbWUuZXhhbXBsZS9zZXJ2aWNlL2xtdC00OC9kaXNhc3NlbWJseSIsImR5bmFtaWNQZXJmb3JtYW5jZSI6eyJjYXBhY2l0eUZhZGVQY3QiOjAuNSwiZXhwZWN0ZWRMaWZldGltZUN5Y2xlcyI6MTE5NSwiaW50ZXJuYWxSZXNpc3RhbmNlTW9obSI6MTEwLjQsInJhdGVkQ2FwYWNpdHlBaCI6MTkuOSwicm91bmRUcmlwRWZmaWNpZW5jeVBjdCI6OTQuOH0sImVsZWN0cm9seXRlTWF0ZXJpYWwiOlt7ImNhc051bWJlciI6Ijk2LTQ5LTEiLCJuYW1lIjoiRXRoeWxlbmUgY2FyYm9uYXRlIiwid2VpZ2h0UGN0IjozOH0seyJjYXNOdW1iZXIiOiI2MTYtMzgtNiIsIm5hbWUiOiJEaW1ldGh5bCBjYXJib25hdGUiLCJ3ZWlnaHRQY3QiOjQ5fSx7ImNhc051bWJlciI6IjIxMzI0LTQwLTMiLCJuYW1lIjoiTGl0aGl1bSBoZXhhZmx1b3JvcGhvc3BoYXRlIiwid2VpZ2h0UGN0IjoxM31dLCJldURlY2xhcmF0aW9uT2ZDb25mb3JtaXR5IjoiRVUtRG9DIEFDTUUtMjAyNi1MTVQtMDkwMSwgcGVyIFJlZ3VsYXRpb24gKEVVKSAyMDIzLzE1NDIgQXJ0LiAxOCIsImV4cGVjdGVkTGlmZXRpbWVDeWNsZXMiOjEyMDAsImV4cGVjdGVkTGlmZXRpbWVSZWZlcmVuY2VUZXN0IjoiRU4gNTA2MDQtMToyMDE2LCAyNSBkZWdDLCAxMDAlIERvRCIsImhhemFyZG91c1N1YnN0YW5jZXMiOlt7ImNhc051bWJlciI6IjIxMzI0LTQwLTMiLCJjb25jZW50cmF0aW9uUGN0IjowLjgsIm5hbWUiOiJMaXRoaXVtIGhleGFmbHVvcm9waG9zcGhhdGUifV0sImluaXRpYWxSb3VuZFRyaXBFZmZpY2llbmN5UGN0Ijo5NSwiaW50ZXJuYWxDZWxsUmVzaXN0YW5jZU1vaG0iOjE0LCJpbnRlcm5hbFBhY2tSZXNpc3RhbmNlTW9obSI6MTEwLCJtYW51ZmFjdHVyaW5nRGF0ZSI6IjIwMjYtMDgtMThUMDA6MDA6MDBaIiwibWFudWZhY3R1cmluZ1BsYWNlIjoiTcO8bmNoZW4sIERFIiwibWFya2luZ0luZm9ybWF0aW9uIjoiU2VwYXJhdGUtY29sbGVjdGlvbiBzeW1ib2wgcGVyIEFydC4gMTMoNCk7IGNhcGFjaXR5IDIwIEFoIC8gOTYwIFdoOyA0OCBWIExNVCIsIm1heGltdW1Wb2x0YWdlViI6NTQuNiwibWluaW1hbFZvbHRhZ2VWIjozOSwibm9taW5hbENhcGFjaXR5QWgiOjIwLCJub21pbmFsVm9sdGFnZVYiOjQ4LCJub3RJblVzZVRlbXBlcmF0dXJlUmFuZ2UiOnsibWF4QyI6NDUsIm1pbkMiOi0xMH0sIm5vdEluVXNlVGVtcGVyYXR1cmVSZWZlcmVuY2VUZXN0IjoiRU4gNTA2MDQtMToyMDE2IHN0b3JhZ2UgY2xhdXNlIiwib3JpZ2luYWxQb3dlckNhcGFiaWxpdHlXIjo5NjAsInBvd2VyTGltaXRNYXhXIjoxNTAwLCJwb3dlckxpbWl0TWluVyI6MjAsInByb2R1Y3RHcm91cCI6ImJhdHRlcnkiLCJwcm9kdWN0SWRlbnRpZmllciI6eyJndGluIjoiMDk1MDYwMDAxMzQzNTIiLCJzY2hlbWUiOiJnczEifSwicmF0ZWRDYXBhY2l0eUt3aCI6bnVsbCwicmVjeWNsZWRDb250ZW50Q29iYWx0UGN0IjoxMiwicmVjeWNsZWRDb250ZW50TGVhZFBjdCI6MCwicmVjeWNsZWRDb250ZW50TGl0aGl1bVBjdCI6NiwicmVjeWNsZWRDb250ZW50Tmlja2VsUGN0Ijo4LCJyZW5ld2FibGVDb250ZW50UGN0IjoxNCwicm91bmRUcmlwRWZmaWNpZW5jeUF0SGFsZkN5Y2xlTGlmZVBjdCI6OTEsInNhZmV0eU1lYXN1cmVzIjoiRG8gbm90IG9wZW4gdGhlIHBhY2suIFJlcGxhY2UgaXQgdGhyb3VnaCBhbiBhdXRob3Jpc2VkIGRlYWxlci4gS2VlcCBpdCBhd2F5IGZyb20gaGVhdCBhYm92ZSA2MCBkZWdDLiIsInNwYXJlUGFydHNDb250YWN0cyI6InNwYXJlc0BhY21lLmV4YW1wbGUiLCJzdGF0ZU9mSGVhbHRoIjp7InBhcmFtZXRlclNldCI6InN0YXRpb25hcnlPckxtdCIsInJlbWFpbmluZ0NhcGFjaXR5UGN0Ijo5OS41LCJyZW1haW5pbmdQb3dlckNhcGFiaWxpdHlQY3QiOjk5LjEsInNlbGZEaXNjaGFyZ2VSYXRlUGN0UGVyTW9udGgiOjJ9LCJzdGF0ZU9mSGVhbHRoUGN0IjpudWxsLCJ0ZXN0UmVwb3J0UmVzdWx0cyI6IkVOIDUwNjA0LTE6MjAxNiBwYXNzOyBVTiAzOC4zIHBhc3M7IHJlcG9ydCBBQ01FLVRSLTIwMjYtMDgxNSIsInVzYWJsZUV4dGluZ3Vpc2hpbmdBZ2VudCI6IldhdGVyOyBjb29sIGEgYnVybmluZyBwYWNrIHdpdGggbGFyZ2Ugdm9sdW1lcyBvZiB3YXRlciIsInVzYWdlSGlzdG9yeSI6eyJjaGFyZ2VEaXNjaGFyZ2VDeWNsZXMiOjR9LCJ3YXN0ZUJhdHRlcnlJbmZvcm1hdGlvbiI6IlJldHVybiB0aGUgYmF0dGVyeSB0byBhIGJpY3ljbGUgcmV0YWlsZXIgb3IgYSBtdW5pY2lwYWwgY29sbGVjdGlvbiBwb2ludC4gRG8gbm90IHBsYWNlIGl0IGluIGhvdXNlaG9sZCB3YXN0ZS4ifSwicHJvZHVjdE5hbWUiOiJBY21lIExNVCA0OFYgMjBBaCBiYXR0ZXJ5IHBhY2siLCJwdWJsaXNoZWRBdCI6IjIwMjYtMDktMDFUMDk6MDU6MDBaIiwicXJDb2RlVXJsIjoiaHR0cHM6Ly9kcHAuYWNtZS5leGFtcGxlLzAxLzA5NTA2MDAwMTM0MzUyLzIxLzdlNGE5YzNkMmYxZThiNmE1ZDQwIiwicmVwYWlyYWJpbGl0eVNjb3JlIjpudWxsLCJyZXRlbnRpb25Mb2NrZWQiOnRydWUsInJldGVudGlvblVudGlsIjoiMjAzNi0wOC0yOVQwOTowNTowMFoiLCJzY2hlbWFWZXJzaW9uIjoiMi43LjAiLCJzdGF0dXMiOiJhY3RpdmUiLCJ1cGRhdGVkQXQiOiIyMDI2LTA5LTAxVDA5OjA1OjAwWiIsInZlcnNpb24iOjF9.55m5_OYvkiKUN9QV9BNB3JeqMOvkYjwYCiPxup_xciGjUrYtHOcaDdy8ULvSAy5NRGpT9p90RrajgBb0Iv5kCg", "payload": { "batchId": "ACME-LMT-2026-09", "co2ePerUnit": null, @@ -553,7 +560,6 @@ "euDeclarationOfConformity": "EU-DoC ACME-2026-LMT-0901, per Regulation (EU) 2023/1542 Art. 18", "expectedLifetimeCycles": 1200, "expectedLifetimeReferenceTest": "EN 50604-1:2016, 25 degC, 100% DoD", - "gtin": "09506000134352", "hazardousSubstances": [ { "casNumber": "21324-40-3", @@ -580,6 +586,10 @@ "powerLimitMaxW": 1500.0, "powerLimitMinW": 20.0, "productGroup": "battery", + "productIdentifier": { + "gtin": "09506000134352", + "scheme": "gs1" + }, "ratedCapacityKwh": null, "recycledContentCobaltPct": 12.0, "recycledContentLeadPct": 0.0, @@ -605,11 +615,11 @@ }, "productName": "Acme LMT 48V 20Ah battery pack", "publishedAt": "2026-09-01T09:05:00Z", - "qrCodeUrl": "https://dpp.acme.example/01/09506000134352/10/ACME-LMT-2026-09/21/7e4a9c3d2f1e8b6a5d40", + "qrCodeUrl": "https://dpp.acme.example/01/09506000134352/21/7e4a9c3d2f1e8b6a5d40", "repairabilityScore": null, "retentionLocked": true, "retentionUntil": "2036-08-29T09:05:00Z", - "schemaVersion": "2.6.0", + "schemaVersion": "2.7.0", "status": "active", "updatedAt": "2026-09-01T09:05:00Z", "version": 1 @@ -617,23 +627,24 @@ }, "manifest": { "contentHashes": { - "auditEntries": "d3e3661902ae8ebc797d545c6124173a74c3b086b2bba8399628df6b53db79e0", + "auditEntries": "46110fef3e331eab68e2616292edcc10d2bfcdfc16fa7bb0409cecdf7cb86a33", "eolEvent": "7cb65bb485538e109105404e15c7bc411aa3050694fa4d63339c70dbe431d3a0", - "fullView": "70f5a9779744ad58b77cebed129ecec4c24d7c5bbf3b65be4b3c61c4be5f0e80", - "publicView": "7ada532408d7c20c385804ca00d0a6a969f1448c796775c14657d7932ecf392a", + "fullView": "e8c5a8fbbddd67948a3ee3eb7abfc07427c2ff2ab23eeba3dc4dc9bbf12cbdbd", + "publicView": "74c1a1eda478cc2643b8652bf188f47e449b851ae64ae05f922de314a9249b83", "transferChain": "52e0fd4f91be57a81e6219557f5f3c4f2331b0cbbc9461d376c967dae5445445" }, - "coreVersion": "0.20.0", + "coreVersion": "0.21.0", "createdAt": "2026-09-25T12:00:00Z", "formatVersion": "1", "issuerDid": "did:web:node.acme.example", "nodeVersion": "0.14.0", "passportId": "0199a3c2-7b10-7e4a-9c3d-2f1e8b6a5d40" }, - "manifestJws": "eyJhbGciOiJFZERTQSIsImtpZCI6ImZlODEyYzEyZjNhYjRjZTZhYzVkYjY5YWMzNTJmOTA2Y2IxYjExZWY0M2ZiMzNlMjUyZWY3ZmY1NTIyNjM4ODkifQ.eyJjb250ZW50SGFzaGVzIjp7ImF1ZGl0RW50cmllcyI6ImQzZTM2NjE5MDJhZThlYmM3OTdkNTQ1YzYxMjQxNzNhNzRjM2IwODZiMmJiYTgzOTk2MjhkZjZiNTNkYjc5ZTAiLCJlb2xFdmVudCI6IjdjYjY1YmI0ODU1MzhlMTA5MTA1NDA0ZTE1YzdiYzQxMWFhMzA1MDY5NGZhNGQ2MzMzOWM3MGRiZTQzMWQzYTAiLCJmdWxsVmlldyI6IjcwZjVhOTc3OTc0NGFkNThiNzdjZWJlZDEyOWVjZWM0YzI0ZDdjNWJiZjNiNjViZTRiM2M2MWM0YmU1ZjBlODAiLCJwdWJsaWNWaWV3IjoiN2FkYTUzMjQwOGQ3YzIwYzM4NTgwNGNhMDBkMGE2YTk2OWYxNDQ4Yzc5Njc3NWMxNDY1N2Q3OTMyZWNmMzkyYSIsInRyYW5zZmVyQ2hhaW4iOiI1MmUwZmQ0ZjkxYmU1N2E4MWU2MjE5NTU3ZjVmM2M0ZjIzMzFiMGNiYmM5NDYxZDM3NmM5NjdkYWU1NDQ1NDQ1In0sImNvcmVWZXJzaW9uIjoiMC4yMC4wIiwiY3JlYXRlZEF0IjoiMjAyNi0wOS0yNVQxMjowMDowMFoiLCJmb3JtYXRWZXJzaW9uIjoiMSIsImlzc3VlckRpZCI6ImRpZDp3ZWI6bm9kZS5hY21lLmV4YW1wbGUiLCJub2RlVmVyc2lvbiI6IjAuMTQuMCIsInBhc3Nwb3J0SWQiOiIwMTk5YTNjMi03YjEwLTdlNGEtOWMzZC0yZjFlOGI2YTVkNDAifQ.Y4XyqkZCD-XAtSYTICoyCngJx7sDCk7sYcdyezYe7ZDDY0k4w8WhK1oUaB5x_zg-malEGWJ_dXIVyI0P_M_qBg", + "manifestJws": "eyJhbGciOiJFZERTQSIsImtpZCI6ImZlODEyYzEyZjNhYjRjZTZhYzVkYjY5YWMzNTJmOTA2Y2IxYjExZWY0M2ZiMzNlMjUyZWY3ZmY1NTIyNjM4ODkifQ.eyJjb250ZW50SGFzaGVzIjp7ImF1ZGl0RW50cmllcyI6IjQ2MTEwZmVmM2UzMzFlYWI2OGUyNjE2MjkyZWRjYzEwZDJiZmNkZmMxNmZhN2JiMDQwOWNlY2RmN2NiODZhMzMiLCJlb2xFdmVudCI6IjdjYjY1YmI0ODU1MzhlMTA5MTA1NDA0ZTE1YzdiYzQxMWFhMzA1MDY5NGZhNGQ2MzMzOWM3MGRiZTQzMWQzYTAiLCJmdWxsVmlldyI6ImU4YzVhOGZiYmRkZDY3OTQ4YTNlZTNlYjdhYmZjMDc0MjdjMmZmMmFiMjNlZWJhM2RjNGRjOWJiZjEyY2JkYmQiLCJwdWJsaWNWaWV3IjoiNzRjMWExZWRhNDc4Y2MyNjQzYjg2NTJiZjE4OGY0N2U0NDliODUxYWU2NGFlMDVmOTIyZGUzMTRhOTI0OWI4MyIsInRyYW5zZmVyQ2hhaW4iOiI1MmUwZmQ0ZjkxYmU1N2E4MWU2MjE5NTU3ZjVmM2M0ZjIzMzFiMGNiYmM5NDYxZDM3NmM5NjdkYWU1NDQ1NDQ1In0sImNvcmVWZXJzaW9uIjoiMC4yMS4wIiwiY3JlYXRlZEF0IjoiMjAyNi0wOS0yNVQxMjowMDowMFoiLCJmb3JtYXRWZXJzaW9uIjoiMSIsImlzc3VlckRpZCI6ImRpZDp3ZWI6bm9kZS5hY21lLmV4YW1wbGUiLCJub2RlVmVyc2lvbiI6IjAuMTQuMCIsInBhc3Nwb3J0SWQiOiIwMTk5YTNjMi03YjEwLTdlNGEtOWMzZC0yZjFlOGI2YTVkNDAifQ.nR0d3UZbNRttz9D0VL9qGHN9dQwzFQGa4eRni8N926diP9G-qB4nGbqgqyz9VqaL6DjKReENzDldyo87sev_BA", "publicView": { - "jws": "eyJhbGciOiJFZERTQSIsImtpZCI6ImZlODEyYzEyZjNhYjRjZTZhYzVkYjY5YWMzNTJmOTA2Y2IxYjExZWY0M2ZiMzNlMjUyZWY3ZmY1NTIyNjM4ODkifQ.eyJjbzJlUGVyVW5pdCI6bnVsbCwiY29tbW9kaXR5Q29kZSI6Ijg1MDc2MDAwIiwiY3JlYXRlZEF0IjoiMjAyNi0wOS0wMVQwOTowMDowMFoiLCJpZCI6IjAxOTlhM2MyLTdiMTAtN2U0YS05YzNkLTJmMWU4YjZhNWQ0MCIsIm1hbnVmYWN0dXJlciI6eyJhZGRyZXNzIjoiTXVzdGVyc3RyYXNzZSAxLCA4MDMzMSBNw7xuY2hlbiwgREUiLCJjb3VudHJ5IjpudWxsLCJkaWRXZWJVcmwiOiJodHRwczovL25vZGUuYWNtZS5leGFtcGxlLy53ZWxsLWtub3duL2RpZC5qc29uIiwibmFtZSI6IkFjbWUgWmVsbGVuIEdtYkgifSwibWF0ZXJpYWxzIjpbeyJjb3VudHJ5T2ZPcmlnaW4iOiJERSIsIm5hbWUiOiJOTUMgODExIGNhdGhvZGUgYWN0aXZlIG1hdGVyaWFsIiwicmVjeWNsZWRQY3QiOjgsIndlaWdodEtnIjozLjF9LHsiY291bnRyeU9mT3JpZ2luIjoiREUiLCJuYW1lIjoiR3JhcGhpdGUgYW5vZGUgYWN0aXZlIG1hdGVyaWFsIiwicmVjeWNsZWRQY3QiOjQsIndlaWdodEtnIjoxLjl9LHsiY291bnRyeU9mT3JpZ2luIjoiREUiLCJuYW1lIjoiQWx1bWluaXVtIHBhY2sgaG91c2luZyIsInJlY3ljbGVkUGN0Ijo2MCwid2VpZ2h0S2ciOjIuMn1dLCJwbGFjZWRPbk1hcmtldERhdGUiOiIyMDI2LTA5LTAxIiwicHJvZHVjdEdyb3VwIjoiYmF0dGVyeSIsInByb2R1Y3RHcm91cERhdGEiOnsiYmF0dGVyeUNoZW1pc3RyeSI6Ik5NQyIsImJhdHRlcnlNb2RlbElkIjoiQUNNRS1MTVQtNDhWIiwiYmF0dGVyeVBhc3Nwb3J0TnVtYmVyIjoiVVJOOk9ETDpCQVRUOjA5NTA2MDAwMTM0MzUyOkFDTUUtTE1ULTIwMjYtMDkiLCJiYXR0ZXJ5VHlwZSI6ImxtdCIsImJhdHRlcnlXZWlnaHRLZyI6MTIuNCwiY28yZVBlclVuaXRLZyI6ODYuNCwiY3JpdGljYWxSYXdNYXRlcmlhbHMiOlt7ImNhc051bWJlciI6Ijc0NDAtNDgtNCIsIm5hbWUiOiJDb2JhbHQiLCJ3ZWlnaHRHcmFtcyI6MzEwfSx7ImNhc051bWJlciI6Ijc0MzktOTMtMiIsIm5hbWUiOiJMaXRoaXVtIiwid2VpZ2h0R3JhbXMiOjQyMH0seyJjYXNOdW1iZXIiOiI3NzgyLTQyLTUiLCJuYW1lIjoiTmF0dXJhbCBncmFwaGl0ZSIsIndlaWdodEdyYW1zIjoxODAwfV0sImN5Y2xlTGlmZVRlc3RDUmF0ZSI6MSwiZXVEZWNsYXJhdGlvbk9mQ29uZm9ybWl0eSI6IkVVLURvQyBBQ01FLTIwMjYtTE1ULTA5MDEsIHBlciBSZWd1bGF0aW9uIChFVSkgMjAyMy8xNTQyIEFydC4gMTgiLCJleHBlY3RlZExpZmV0aW1lQ3ljbGVzIjoxMjAwLCJleHBlY3RlZExpZmV0aW1lUmVmZXJlbmNlVGVzdCI6IkVOIDUwNjA0LTE6MjAxNiwgMjUgZGVnQywgMTAwJSBEb0QiLCJndGluIjoiMDk1MDYwMDAxMzQzNTIiLCJoYXphcmRvdXNTdWJzdGFuY2VzIjpbeyJjYXNOdW1iZXIiOiIyMTMyNC00MC0zIiwiY29uY2VudHJhdGlvblBjdCI6MC44LCJuYW1lIjoiTGl0aGl1bSBoZXhhZmx1b3JvcGhvc3BoYXRlIn1dLCJpbml0aWFsUm91bmRUcmlwRWZmaWNpZW5jeVBjdCI6OTUsImludGVybmFsQ2VsbFJlc2lzdGFuY2VNb2htIjoxNCwiaW50ZXJuYWxQYWNrUmVzaXN0YW5jZU1vaG0iOjExMCwibWFudWZhY3R1cmluZ0RhdGUiOiIyMDI2LTA4LTE4VDAwOjAwOjAwWiIsIm1hbnVmYWN0dXJpbmdQbGFjZSI6Ik3DvG5jaGVuLCBERSIsIm1hcmtpbmdJbmZvcm1hdGlvbiI6IlNlcGFyYXRlLWNvbGxlY3Rpb24gc3ltYm9sIHBlciBBcnQuIDEzKDQpOyBjYXBhY2l0eSAyMCBBaCAvIDk2MCBXaDsgNDggViBMTVQiLCJtYXhpbXVtVm9sdGFnZVYiOjU0LjYsIm1pbmltYWxWb2x0YWdlViI6MzksIm5vbWluYWxDYXBhY2l0eUFoIjoyMCwibm9taW5hbFZvbHRhZ2VWIjo0OCwibm90SW5Vc2VUZW1wZXJhdHVyZVJhbmdlIjp7Im1heEMiOjQ1LCJtaW5DIjotMTB9LCJub3RJblVzZVRlbXBlcmF0dXJlUmVmZXJlbmNlVGVzdCI6IkVOIDUwNjA0LTE6MjAxNiBzdG9yYWdlIGNsYXVzZSIsIm9yaWdpbmFsUG93ZXJDYXBhYmlsaXR5VyI6OTYwLCJwb3dlckxpbWl0TWF4VyI6MTUwMCwicG93ZXJMaW1pdE1pblciOjIwLCJwcm9kdWN0R3JvdXAiOiJiYXR0ZXJ5IiwicmF0ZWRDYXBhY2l0eUt3aCI6bnVsbCwicmVjeWNsZWRDb250ZW50Q29iYWx0UGN0IjoxMiwicmVjeWNsZWRDb250ZW50TGVhZFBjdCI6MCwicmVjeWNsZWRDb250ZW50TGl0aGl1bVBjdCI6NiwicmVjeWNsZWRDb250ZW50Tmlja2VsUGN0Ijo4LCJyZW5ld2FibGVDb250ZW50UGN0IjoxNCwicm91bmRUcmlwRWZmaWNpZW5jeUF0SGFsZkN5Y2xlTGlmZVBjdCI6OTEsInVzYWJsZUV4dGluZ3Vpc2hpbmdBZ2VudCI6IldhdGVyOyBjb29sIGEgYnVybmluZyBwYWNrIHdpdGggbGFyZ2Ugdm9sdW1lcyBvZiB3YXRlciIsIndhc3RlQmF0dGVyeUluZm9ybWF0aW9uIjoiUmV0dXJuIHRoZSBiYXR0ZXJ5IHRvIGEgYmljeWNsZSByZXRhaWxlciBvciBhIG11bmljaXBhbCBjb2xsZWN0aW9uIHBvaW50LiBEbyBub3QgcGxhY2UgaXQgaW4gaG91c2Vob2xkIHdhc3RlLiJ9LCJwcm9kdWN0TmFtZSI6IkFjbWUgTE1UIDQ4ViAyMEFoIGJhdHRlcnkgcGFjayIsInB1Ymxpc2hlZEF0IjoiMjAyNi0wOS0wMVQwOTowNTowMFoiLCJxckNvZGVVcmwiOiJodHRwczovL2RwcC5hY21lLmV4YW1wbGUvMDEvMDk1MDYwMDAxMzQzNTIvMTAvQUNNRS1MTVQtMjAyNi0wOS8yMS83ZTRhOWMzZDJmMWU4YjZhNWQ0MCIsInJlcGFpcmFiaWxpdHlTY29yZSI6bnVsbCwicmV0ZW50aW9uVW50aWwiOiIyMDM2LTA4LTI5VDA5OjA1OjAwWiIsInNjaGVtYVZlcnNpb24iOiIyLjYuMCIsInN0YXR1cyI6ImFjdGl2ZSIsInVwZGF0ZWRBdCI6IjIwMjYtMDktMDFUMDk6MDU6MDBaIiwidmVyc2lvbiI6MX0.OnjeF7qUrlZOKc-Xx8u-ThMayslJBs7HPAmpZBFKvyJAivIqOrN5lTCW15PsoyBeSOpjmRq3Mm_UC99B-Ya-Dg", + "jws": "eyJhbGciOiJFZERTQSIsImtpZCI6ImZlODEyYzEyZjNhYjRjZTZhYzVkYjY5YWMzNTJmOTA2Y2IxYjExZWY0M2ZiMzNlMjUyZWY3ZmY1NTIyNjM4ODkifQ.eyJiYXRjaElkIjoiQUNNRS1MTVQtMjAyNi0wOSIsImNvMmVQZXJVbml0IjpudWxsLCJjb21tb2RpdHlDb2RlIjoiODUwNzYwMDAiLCJjcmVhdGVkQXQiOiIyMDI2LTA5LTAxVDA5OjAwOjAwWiIsImlkIjoiMDE5OWEzYzItN2IxMC03ZTRhLTljM2QtMmYxZThiNmE1ZDQwIiwibWFudWZhY3R1cmVyIjp7ImFkZHJlc3MiOiJNdXN0ZXJzdHJhc3NlIDEsIDgwMzMxIE3DvG5jaGVuLCBERSIsImNvdW50cnkiOm51bGwsImRpZFdlYlVybCI6Imh0dHBzOi8vbm9kZS5hY21lLmV4YW1wbGUvLndlbGwta25vd24vZGlkLmpzb24iLCJuYW1lIjoiQWNtZSBaZWxsZW4gR21iSCJ9LCJtYXRlcmlhbHMiOlt7ImNvdW50cnlPZk9yaWdpbiI6IkRFIiwibmFtZSI6Ik5NQyA4MTEgY2F0aG9kZSBhY3RpdmUgbWF0ZXJpYWwiLCJyZWN5Y2xlZFBjdCI6OCwid2VpZ2h0S2ciOjMuMX0seyJjb3VudHJ5T2ZPcmlnaW4iOiJERSIsIm5hbWUiOiJHcmFwaGl0ZSBhbm9kZSBhY3RpdmUgbWF0ZXJpYWwiLCJyZWN5Y2xlZFBjdCI6NCwid2VpZ2h0S2ciOjEuOX0seyJjb3VudHJ5T2ZPcmlnaW4iOiJERSIsIm5hbWUiOiJBbHVtaW5pdW0gcGFjayBob3VzaW5nIiwicmVjeWNsZWRQY3QiOjYwLCJ3ZWlnaHRLZyI6Mi4yfV0sInBsYWNlZE9uTWFya2V0RGF0ZSI6IjIwMjYtMDktMDEiLCJwcm9kdWN0R3JvdXAiOiJiYXR0ZXJ5IiwicHJvZHVjdEdyb3VwRGF0YSI6eyJiYXR0ZXJ5Q2hlbWlzdHJ5IjoiTk1DIiwiYmF0dGVyeU1vZGVsSWQiOiJBQ01FLUxNVC00OFYiLCJiYXR0ZXJ5UGFzc3BvcnROdW1iZXIiOiJVUk46T0RMOkJBVFQ6MDk1MDYwMDAxMzQzNTI6QUNNRS1MTVQtMjAyNi0wOSIsImJhdHRlcnlUeXBlIjoibG10IiwiYmF0dGVyeVdlaWdodEtnIjoxMi40LCJjbzJlUGVyVW5pdEtnIjo4Ni40LCJjcml0aWNhbFJhd01hdGVyaWFscyI6W3siY2FzTnVtYmVyIjoiNzQ0MC00OC00IiwibmFtZSI6IkNvYmFsdCIsIndlaWdodEdyYW1zIjozMTB9LHsiY2FzTnVtYmVyIjoiNzQzOS05My0yIiwibmFtZSI6IkxpdGhpdW0iLCJ3ZWlnaHRHcmFtcyI6NDIwfSx7ImNhc051bWJlciI6Ijc3ODItNDItNSIsIm5hbWUiOiJOYXR1cmFsIGdyYXBoaXRlIiwid2VpZ2h0R3JhbXMiOjE4MDB9XSwiY3ljbGVMaWZlVGVzdENSYXRlIjoxLCJldURlY2xhcmF0aW9uT2ZDb25mb3JtaXR5IjoiRVUtRG9DIEFDTUUtMjAyNi1MTVQtMDkwMSwgcGVyIFJlZ3VsYXRpb24gKEVVKSAyMDIzLzE1NDIgQXJ0LiAxOCIsImV4cGVjdGVkTGlmZXRpbWVDeWNsZXMiOjEyMDAsImV4cGVjdGVkTGlmZXRpbWVSZWZlcmVuY2VUZXN0IjoiRU4gNTA2MDQtMToyMDE2LCAyNSBkZWdDLCAxMDAlIERvRCIsImhhemFyZG91c1N1YnN0YW5jZXMiOlt7ImNhc051bWJlciI6IjIxMzI0LTQwLTMiLCJjb25jZW50cmF0aW9uUGN0IjowLjgsIm5hbWUiOiJMaXRoaXVtIGhleGFmbHVvcm9waG9zcGhhdGUifV0sImluaXRpYWxSb3VuZFRyaXBFZmZpY2llbmN5UGN0Ijo5NSwiaW50ZXJuYWxDZWxsUmVzaXN0YW5jZU1vaG0iOjE0LCJpbnRlcm5hbFBhY2tSZXNpc3RhbmNlTW9obSI6MTEwLCJtYW51ZmFjdHVyaW5nRGF0ZSI6IjIwMjYtMDgtMThUMDA6MDA6MDBaIiwibWFudWZhY3R1cmluZ1BsYWNlIjoiTcO8bmNoZW4sIERFIiwibWFya2luZ0luZm9ybWF0aW9uIjoiU2VwYXJhdGUtY29sbGVjdGlvbiBzeW1ib2wgcGVyIEFydC4gMTMoNCk7IGNhcGFjaXR5IDIwIEFoIC8gOTYwIFdoOyA0OCBWIExNVCIsIm1heGltdW1Wb2x0YWdlViI6NTQuNiwibWluaW1hbFZvbHRhZ2VWIjozOSwibm9taW5hbENhcGFjaXR5QWgiOjIwLCJub21pbmFsVm9sdGFnZVYiOjQ4LCJub3RJblVzZVRlbXBlcmF0dXJlUmFuZ2UiOnsibWF4QyI6NDUsIm1pbkMiOi0xMH0sIm5vdEluVXNlVGVtcGVyYXR1cmVSZWZlcmVuY2VUZXN0IjoiRU4gNTA2MDQtMToyMDE2IHN0b3JhZ2UgY2xhdXNlIiwib3JpZ2luYWxQb3dlckNhcGFiaWxpdHlXIjo5NjAsInBvd2VyTGltaXRNYXhXIjoxNTAwLCJwb3dlckxpbWl0TWluVyI6MjAsInByb2R1Y3RHcm91cCI6ImJhdHRlcnkiLCJwcm9kdWN0SWRlbnRpZmllciI6eyJndGluIjoiMDk1MDYwMDAxMzQzNTIiLCJzY2hlbWUiOiJnczEifSwicmF0ZWRDYXBhY2l0eUt3aCI6bnVsbCwicmVjeWNsZWRDb250ZW50Q29iYWx0UGN0IjoxMiwicmVjeWNsZWRDb250ZW50TGVhZFBjdCI6MCwicmVjeWNsZWRDb250ZW50TGl0aGl1bVBjdCI6NiwicmVjeWNsZWRDb250ZW50Tmlja2VsUGN0Ijo4LCJyZW5ld2FibGVDb250ZW50UGN0IjoxNCwicm91bmRUcmlwRWZmaWNpZW5jeUF0SGFsZkN5Y2xlTGlmZVBjdCI6OTEsInVzYWJsZUV4dGluZ3Vpc2hpbmdBZ2VudCI6IldhdGVyOyBjb29sIGEgYnVybmluZyBwYWNrIHdpdGggbGFyZ2Ugdm9sdW1lcyBvZiB3YXRlciIsIndhc3RlQmF0dGVyeUluZm9ybWF0aW9uIjoiUmV0dXJuIHRoZSBiYXR0ZXJ5IHRvIGEgYmljeWNsZSByZXRhaWxlciBvciBhIG11bmljaXBhbCBjb2xsZWN0aW9uIHBvaW50LiBEbyBub3QgcGxhY2UgaXQgaW4gaG91c2Vob2xkIHdhc3RlLiJ9LCJwcm9kdWN0TmFtZSI6IkFjbWUgTE1UIDQ4ViAyMEFoIGJhdHRlcnkgcGFjayIsInB1Ymxpc2hlZEF0IjoiMjAyNi0wOS0wMVQwOTowNTowMFoiLCJxckNvZGVVcmwiOiJodHRwczovL2RwcC5hY21lLmV4YW1wbGUvMDEvMDk1MDYwMDAxMzQzNTIvMjEvN2U0YTljM2QyZjFlOGI2YTVkNDAiLCJyZXBhaXJhYmlsaXR5U2NvcmUiOm51bGwsInJldGVudGlvblVudGlsIjoiMjAzNi0wOC0yOVQwOTowNTowMFoiLCJzY2hlbWFWZXJzaW9uIjoiMi43LjAiLCJzdGF0dXMiOiJhY3RpdmUiLCJ1cGRhdGVkQXQiOiIyMDI2LTA5LTAxVDA5OjA1OjAwWiIsInZlcnNpb24iOjF9.LHi5ToX900cUN4vak8l1zOZ5xc1H9jW25fL4XUWuxz2AU1_3PxxrjRUTyY9RctPxPSTWmS40fUWurEZnTdE3Dw", "payload": { + "batchId": "ACME-LMT-2026-09", "co2ePerUnit": null, "commodityCode": "85076000", "createdAt": "2026-09-01T09:00:00Z", @@ -694,7 +705,6 @@ "euDeclarationOfConformity": "EU-DoC ACME-2026-LMT-0901, per Regulation (EU) 2023/1542 Art. 18", "expectedLifetimeCycles": 1200, "expectedLifetimeReferenceTest": "EN 50604-1:2016, 25 degC, 100% DoD", - "gtin": "09506000134352", "hazardousSubstances": [ { "casNumber": "21324-40-3", @@ -721,6 +731,10 @@ "powerLimitMaxW": 1500.0, "powerLimitMinW": 20.0, "productGroup": "battery", + "productIdentifier": { + "gtin": "09506000134352", + "scheme": "gs1" + }, "ratedCapacityKwh": null, "recycledContentCobaltPct": 12.0, "recycledContentLeadPct": 0.0, @@ -733,10 +747,10 @@ }, "productName": "Acme LMT 48V 20Ah battery pack", "publishedAt": "2026-09-01T09:05:00Z", - "qrCodeUrl": "https://dpp.acme.example/01/09506000134352/10/ACME-LMT-2026-09/21/7e4a9c3d2f1e8b6a5d40", + "qrCodeUrl": "https://dpp.acme.example/01/09506000134352/21/7e4a9c3d2f1e8b6a5d40", "repairabilityScore": null, "retentionUntil": "2036-08-29T09:05:00Z", - "schemaVersion": "2.6.0", + "schemaVersion": "2.7.0", "status": "active", "updatedAt": "2026-09-01T09:05:00Z", "version": 1 diff --git a/site/dpp-landing/public/verify/examples/06-tampered-audit-entry.json b/site/dpp-landing/public/verify/examples/06-tampered-audit-entry.json index 0c6470c..0330217 100644 --- a/site/dpp-landing/public/verify/examples/06-tampered-audit-entry.json +++ b/site/dpp-landing/public/verify/examples/06-tampered-audit-entry.json @@ -16,7 +16,7 @@ { "action": "published", "actor": "api-key", - "entryHash": "4e81bf531274f21aa02339144c34711eac79af7fb22ebf10a18982adc3f075a3", + "entryHash": "2934a67be97238b4f38ff4ee4d53464a0c197cec343297b25124f894b942c2f2", "id": "0199a3c2-7b10-7e4a-9c3d-000000000002", "metadata": { "fullViewPayload": { @@ -142,7 +142,6 @@ "euDeclarationOfConformity": "EU-DoC ACME-2026-LMT-0901, per Regulation (EU) 2023/1542 Art. 18", "expectedLifetimeCycles": 1200, "expectedLifetimeReferenceTest": "EN 50604-1:2016, 25 degC, 100% DoD", - "gtin": "09506000134352", "hazardousSubstances": [ { "casNumber": "21324-40-3", @@ -169,6 +168,10 @@ "powerLimitMaxW": 1500.0, "powerLimitMinW": 20.0, "productGroup": "battery", + "productIdentifier": { + "gtin": "09506000134352", + "scheme": "gs1" + }, "ratedCapacityKwh": null, "recycledContentCobaltPct": 12.0, "recycledContentLeadPct": 0.0, @@ -194,16 +197,17 @@ }, "productName": "Acme LMT 48V 20Ah battery pack", "publishedAt": "2026-09-01T09:05:00Z", - "qrCodeUrl": "https://dpp.acme.example/01/09506000134352/10/ACME-LMT-2026-09/21/7e4a9c3d2f1e8b6a5d40", + "qrCodeUrl": "https://dpp.acme.example/01/09506000134352/21/7e4a9c3d2f1e8b6a5d40", "repairabilityScore": null, "retentionLocked": true, "retentionUntil": "2036-08-29T09:05:00Z", - "schemaVersion": "2.6.0", + "schemaVersion": "2.7.0", "status": "active", "updatedAt": "2026-09-01T09:05:00Z", "version": 1 }, "publicViewPayload": { + "batchId": "ACME-LMT-2026-09", "co2ePerUnit": null, "commodityCode": "85076000", "createdAt": "2026-09-01T09:00:00Z", @@ -264,7 +268,6 @@ "euDeclarationOfConformity": "EU-DoC ACME-2026-LMT-0901, per Regulation (EU) 2023/1542 Art. 18", "expectedLifetimeCycles": 1200, "expectedLifetimeReferenceTest": "EN 50604-1:2016, 25 degC, 100% DoD", - "gtin": "09506000134352", "hazardousSubstances": [ { "casNumber": "21324-40-3", @@ -291,6 +294,10 @@ "powerLimitMaxW": 1500.0, "powerLimitMinW": 20.0, "productGroup": "battery", + "productIdentifier": { + "gtin": "09506000134352", + "scheme": "gs1" + }, "ratedCapacityKwh": null, "recycledContentCobaltPct": 12.0, "recycledContentLeadPct": 0.0, @@ -303,10 +310,10 @@ }, "productName": "Acme LMT 48V 20Ah battery pack", "publishedAt": "2026-09-01T09:05:00Z", - "qrCodeUrl": "https://dpp.acme.example/01/09506000134352/10/ACME-LMT-2026-09/21/7e4a9c3d2f1e8b6a5d40", + "qrCodeUrl": "https://dpp.acme.example/01/09506000134352/21/7e4a9c3d2f1e8b6a5d40", "repairabilityScore": null, "retentionUntil": "2036-08-29T09:05:00Z", - "schemaVersion": "2.6.0", + "schemaVersion": "2.7.0", "status": "active", "updatedAt": "2026-09-01T09:05:00Z", "version": 1 @@ -322,7 +329,7 @@ { "action": "transferred", "actor": "api-key", - "entryHash": "5c869a32da993e9a5ee13bc3b059fee9c3abc1fbbd840ab2449473f0e5453b08", + "entryHash": "1b61fd6f3f72f0730d61b59008f883d7630a03e2dea9f5bd67206482d0770530", "id": "0199a3c2-7b10-7e4a-9c3d-000000000003", "metadata": { "event": "transfer.initiated", @@ -331,7 +338,7 @@ }, "newStatus": null, "passportId": "0199a3c2-7b10-7e4a-9c3d-2f1e8b6a5d40", - "prevHash": "4e81bf531274f21aa02339144c34711eac79af7fb22ebf10a18982adc3f075a3", + "prevHash": "2934a67be97238b4f38ff4ee4d53464a0c197cec343297b25124f894b942c2f2", "previousStatus": null, "requestId": "0199a3c2-7b10-7e4a-8d2e-000000000003", "timestamp": "2026-09-10T14:00:00.042Z" @@ -339,7 +346,7 @@ { "action": "transferred", "actor": "api-key", - "entryHash": "3a5eb46b99bc15d235b342a0a6092d3e382d998b7de32588ed4966d74295fa51", + "entryHash": "f462766c832366e92cef97196b764df1bd5ce5e1acc1fa5e2b395f99d4c3e6fa", "id": "0199a3c2-7b10-7e4a-9c3d-000000000004", "metadata": { "event": "transfer.accepted", @@ -348,7 +355,7 @@ }, "newStatus": null, "passportId": "0199a3c2-7b10-7e4a-9c3d-2f1e8b6a5d40", - "prevHash": "5c869a32da993e9a5ee13bc3b059fee9c3abc1fbbd840ab2449473f0e5453b08", + "prevHash": "1b61fd6f3f72f0730d61b59008f883d7630a03e2dea9f5bd67206482d0770530", "previousStatus": null, "requestId": "0199a3c2-7b10-7e4a-8d2e-000000000004", "timestamp": "2026-09-10T14:30:00.123456Z" @@ -356,7 +363,7 @@ { "action": "deactivated", "actor": "api-key", - "entryHash": "256b89a07f8ff158fe29f327e08996214563987ca111cddc563bb0e9a9f9a362", + "entryHash": "6fd9d12be0f3a26ae6fc2740a796a13363de1e3abd3082ce284c9eeebdc88dac", "id": "0199a3c2-7b10-7e4a-9c3d-000000000005", "metadata": { "declaredAt": "2026-09-20T08:00:00Z", @@ -369,7 +376,7 @@ }, "newStatus": "deactivated", "passportId": "0199a3c2-7b10-7e4a-9c3d-2f1e8b6a5d40", - "prevHash": "3a5eb46b99bc15d235b342a0a6092d3e382d998b7de32588ed4966d74295fa51", + "prevHash": "f462766c832366e92cef97196b764df1bd5ce5e1acc1fa5e2b395f99d4c3e6fa", "previousStatus": "active", "requestId": "0199a3c2-7b10-7e4a-8d2e-000000000005", "timestamp": "2026-09-20T08:00:00.018Z" @@ -429,7 +436,7 @@ } }, "fullView": { - "jws": "eyJhbGciOiJFZERTQSIsImtpZCI6ImZlODEyYzEyZjNhYjRjZTZhYzVkYjY5YWMzNTJmOTA2Y2IxYjExZWY0M2ZiMzNlMjUyZWY3ZmY1NTIyNjM4ODkifQ.eyJiYXRjaElkIjoiQUNNRS1MTVQtMjAyNi0wOSIsImNvMmVQZXJVbml0IjpudWxsLCJjb21tb2RpdHlDb2RlIjoiODUwNzYwMDAiLCJjcmVhdGVkQXQiOiIyMDI2LTA5LTAxVDA5OjAwOjAwWiIsImlkIjoiMDE5OWEzYzItN2IxMC03ZTRhLTljM2QtMmYxZThiNmE1ZDQwIiwiandzU2lnbmF0dXJlIjpudWxsLCJtYW51ZmFjdHVyZXIiOnsiYWRkcmVzcyI6Ik11c3RlcnN0cmFzc2UgMSwgODAzMzEgTcO8bmNoZW4sIERFIiwiY291bnRyeSI6bnVsbCwiZGlkV2ViVXJsIjoiaHR0cHM6Ly9ub2RlLmFjbWUuZXhhbXBsZS8ud2VsbC1rbm93bi9kaWQuanNvbiIsIm5hbWUiOiJBY21lIFplbGxlbiBHbWJIIn0sIm1hdGVyaWFscyI6W3siY291bnRyeU9mT3JpZ2luIjoiREUiLCJuYW1lIjoiTk1DIDgxMSBjYXRob2RlIGFjdGl2ZSBtYXRlcmlhbCIsInJlY3ljbGVkUGN0Ijo4LCJ3ZWlnaHRLZyI6My4xfSx7ImNvdW50cnlPZk9yaWdpbiI6IkRFIiwibmFtZSI6IkdyYXBoaXRlIGFub2RlIGFjdGl2ZSBtYXRlcmlhbCIsInJlY3ljbGVkUGN0Ijo0LCJ3ZWlnaHRLZyI6MS45fSx7ImNvdW50cnlPZk9yaWdpbiI6IkRFIiwibmFtZSI6IkFsdW1pbml1bSBwYWNrIGhvdXNpbmciLCJyZWN5Y2xlZFBjdCI6NjAsIndlaWdodEtnIjoyLjJ9XSwicGxhY2VkT25NYXJrZXREYXRlIjoiMjAyNi0wOS0wMSIsInByb2R1Y3RHcm91cCI6ImJhdHRlcnkiLCJwcm9kdWN0R3JvdXBEYXRhIjp7ImFub2RlTWF0ZXJpYWwiOlt7ImNhc051bWJlciI6Ijc3ODItNDItNSIsIm5hbWUiOiJHcmFwaGl0ZSIsIndlaWdodFBjdCI6OTZ9LHsiY2FzTnVtYmVyIjoiOTAwMy01NS04IiwibmFtZSI6IlNCUi9DTUMgYmluZGVyIiwid2VpZ2h0UGN0Ijo0fV0sImJhdHRlcnlDaGVtaXN0cnkiOiJOTUMiLCJiYXR0ZXJ5TW9kZWxJZCI6IkFDTUUtTE1ULTQ4ViIsImJhdHRlcnlQYXNzcG9ydE51bWJlciI6IlVSTjpPREw6QkFUVDowOTUwNjAwMDEzNDM1MjpBQ01FLUxNVC0yMDI2LTA5IiwiYmF0dGVyeVN0YXR1cyI6Im9yaWdpbmFsIiwiYmF0dGVyeVR5cGUiOiJsbXQiLCJiYXR0ZXJ5V2VpZ2h0S2ciOjEyLjQsImNhdGhvZGVNYXRlcmlhbCI6W3siY2FzTnVtYmVyIjoiMzQ2NDE3LTk3LTgiLCJuYW1lIjoiTGlOaTAuOE1uMC4xQ28wLjFPMiIsIndlaWdodFBjdCI6OTZ9LHsiY2FzTnVtYmVyIjoiMjQ5MzctNzktOSIsIm5hbWUiOiJQVkRGIGJpbmRlciIsIndlaWdodFBjdCI6Mn0seyJjYXNOdW1iZXIiOiIxMzMzLTg2LTQiLCJuYW1lIjoiQ29uZHVjdGl2ZSBjYXJib24gYmxhY2siLCJ3ZWlnaHRQY3QiOjJ9XSwiY28yZVBlclVuaXRLZyI6ODYuNCwiY29tcG9uZW50UGFydE51bWJlcnMiOlsiQUNNRS1DRUxMLTIxNzAwLU5NQyIsIkFDTUUtQk1TLTEzUy1WMSIsIkFDTUUtTE1ULUVOQ0wtNDgiXSwiY3JpdGljYWxSYXdNYXRlcmlhbHMiOlt7ImNhc051bWJlciI6Ijc0NDAtNDgtNCIsIm5hbWUiOiJDb2JhbHQiLCJ3ZWlnaHRHcmFtcyI6MzEwfSx7ImNhc051bWJlciI6Ijc0MzktOTMtMiIsIm5hbWUiOiJMaXRoaXVtIiwid2VpZ2h0R3JhbXMiOjQyMH0seyJjYXNOdW1iZXIiOiI3NzgyLTQyLTUiLCJuYW1lIjoiTmF0dXJhbCBncmFwaGl0ZSIsIndlaWdodEdyYW1zIjoxODAwfV0sImN5Y2xlTGlmZVRlc3RDUmF0ZSI6MSwiZGlzYXNzZW1ibHlJbnN0cnVjdGlvbnNVcmwiOiJodHRwczovL2FjbWUuZXhhbXBsZS9zZXJ2aWNlL2xtdC00OC9kaXNhc3NlbWJseSIsImR5bmFtaWNQZXJmb3JtYW5jZSI6eyJjYXBhY2l0eUZhZGVQY3QiOjAuNSwiZXhwZWN0ZWRMaWZldGltZUN5Y2xlcyI6MTE5NSwiaW50ZXJuYWxSZXNpc3RhbmNlTW9obSI6MTEwLjQsInJhdGVkQ2FwYWNpdHlBaCI6MTkuOSwicm91bmRUcmlwRWZmaWNpZW5jeVBjdCI6OTQuOH0sImVsZWN0cm9seXRlTWF0ZXJpYWwiOlt7ImNhc051bWJlciI6Ijk2LTQ5LTEiLCJuYW1lIjoiRXRoeWxlbmUgY2FyYm9uYXRlIiwid2VpZ2h0UGN0IjozOH0seyJjYXNOdW1iZXIiOiI2MTYtMzgtNiIsIm5hbWUiOiJEaW1ldGh5bCBjYXJib25hdGUiLCJ3ZWlnaHRQY3QiOjQ5fSx7ImNhc051bWJlciI6IjIxMzI0LTQwLTMiLCJuYW1lIjoiTGl0aGl1bSBoZXhhZmx1b3JvcGhvc3BoYXRlIiwid2VpZ2h0UGN0IjoxM31dLCJldURlY2xhcmF0aW9uT2ZDb25mb3JtaXR5IjoiRVUtRG9DIEFDTUUtMjAyNi1MTVQtMDkwMSwgcGVyIFJlZ3VsYXRpb24gKEVVKSAyMDIzLzE1NDIgQXJ0LiAxOCIsImV4cGVjdGVkTGlmZXRpbWVDeWNsZXMiOjEyMDAsImV4cGVjdGVkTGlmZXRpbWVSZWZlcmVuY2VUZXN0IjoiRU4gNTA2MDQtMToyMDE2LCAyNSBkZWdDLCAxMDAlIERvRCIsImd0aW4iOiIwOTUwNjAwMDEzNDM1MiIsImhhemFyZG91c1N1YnN0YW5jZXMiOlt7ImNhc051bWJlciI6IjIxMzI0LTQwLTMiLCJjb25jZW50cmF0aW9uUGN0IjowLjgsIm5hbWUiOiJMaXRoaXVtIGhleGFmbHVvcm9waG9zcGhhdGUifV0sImluaXRpYWxSb3VuZFRyaXBFZmZpY2llbmN5UGN0Ijo5NSwiaW50ZXJuYWxDZWxsUmVzaXN0YW5jZU1vaG0iOjE0LCJpbnRlcm5hbFBhY2tSZXNpc3RhbmNlTW9obSI6MTEwLCJtYW51ZmFjdHVyaW5nRGF0ZSI6IjIwMjYtMDgtMThUMDA6MDA6MDBaIiwibWFudWZhY3R1cmluZ1BsYWNlIjoiTcO8bmNoZW4sIERFIiwibWFya2luZ0luZm9ybWF0aW9uIjoiU2VwYXJhdGUtY29sbGVjdGlvbiBzeW1ib2wgcGVyIEFydC4gMTMoNCk7IGNhcGFjaXR5IDIwIEFoIC8gOTYwIFdoOyA0OCBWIExNVCIsIm1heGltdW1Wb2x0YWdlViI6NTQuNiwibWluaW1hbFZvbHRhZ2VWIjozOSwibm9taW5hbENhcGFjaXR5QWgiOjIwLCJub21pbmFsVm9sdGFnZVYiOjQ4LCJub3RJblVzZVRlbXBlcmF0dXJlUmFuZ2UiOnsibWF4QyI6NDUsIm1pbkMiOi0xMH0sIm5vdEluVXNlVGVtcGVyYXR1cmVSZWZlcmVuY2VUZXN0IjoiRU4gNTA2MDQtMToyMDE2IHN0b3JhZ2UgY2xhdXNlIiwib3JpZ2luYWxQb3dlckNhcGFiaWxpdHlXIjo5NjAsInBvd2VyTGltaXRNYXhXIjoxNTAwLCJwb3dlckxpbWl0TWluVyI6MjAsInByb2R1Y3RHcm91cCI6ImJhdHRlcnkiLCJyYXRlZENhcGFjaXR5S3doIjpudWxsLCJyZWN5Y2xlZENvbnRlbnRDb2JhbHRQY3QiOjEyLCJyZWN5Y2xlZENvbnRlbnRMZWFkUGN0IjowLCJyZWN5Y2xlZENvbnRlbnRMaXRoaXVtUGN0Ijo2LCJyZWN5Y2xlZENvbnRlbnROaWNrZWxQY3QiOjgsInJlbmV3YWJsZUNvbnRlbnRQY3QiOjE0LCJyb3VuZFRyaXBFZmZpY2llbmN5QXRIYWxmQ3ljbGVMaWZlUGN0Ijo5MSwic2FmZXR5TWVhc3VyZXMiOiJEbyBub3Qgb3BlbiB0aGUgcGFjay4gUmVwbGFjZSBpdCB0aHJvdWdoIGFuIGF1dGhvcmlzZWQgZGVhbGVyLiBLZWVwIGl0IGF3YXkgZnJvbSBoZWF0IGFib3ZlIDYwIGRlZ0MuIiwic3BhcmVQYXJ0c0NvbnRhY3RzIjoic3BhcmVzQGFjbWUuZXhhbXBsZSIsInN0YXRlT2ZIZWFsdGgiOnsicGFyYW1ldGVyU2V0Ijoic3RhdGlvbmFyeU9yTG10IiwicmVtYWluaW5nQ2FwYWNpdHlQY3QiOjk5LjUsInJlbWFpbmluZ1Bvd2VyQ2FwYWJpbGl0eVBjdCI6OTkuMSwic2VsZkRpc2NoYXJnZVJhdGVQY3RQZXJNb250aCI6Mn0sInN0YXRlT2ZIZWFsdGhQY3QiOm51bGwsInRlc3RSZXBvcnRSZXN1bHRzIjoiRU4gNTA2MDQtMToyMDE2IHBhc3M7IFVOIDM4LjMgcGFzczsgcmVwb3J0IEFDTUUtVFItMjAyNi0wODE1IiwidXNhYmxlRXh0aW5ndWlzaGluZ0FnZW50IjoiV2F0ZXI7IGNvb2wgYSBidXJuaW5nIHBhY2sgd2l0aCBsYXJnZSB2b2x1bWVzIG9mIHdhdGVyIiwidXNhZ2VIaXN0b3J5Ijp7ImNoYXJnZURpc2NoYXJnZUN5Y2xlcyI6NH0sIndhc3RlQmF0dGVyeUluZm9ybWF0aW9uIjoiUmV0dXJuIHRoZSBiYXR0ZXJ5IHRvIGEgYmljeWNsZSByZXRhaWxlciBvciBhIG11bmljaXBhbCBjb2xsZWN0aW9uIHBvaW50LiBEbyBub3QgcGxhY2UgaXQgaW4gaG91c2Vob2xkIHdhc3RlLiJ9LCJwcm9kdWN0TmFtZSI6IkFjbWUgTE1UIDQ4ViAyMEFoIGJhdHRlcnkgcGFjayIsInB1Ymxpc2hlZEF0IjoiMjAyNi0wOS0wMVQwOTowNTowMFoiLCJxckNvZGVVcmwiOiJodHRwczovL2RwcC5hY21lLmV4YW1wbGUvMDEvMDk1MDYwMDAxMzQzNTIvMTAvQUNNRS1MTVQtMjAyNi0wOS8yMS83ZTRhOWMzZDJmMWU4YjZhNWQ0MCIsInJlcGFpcmFiaWxpdHlTY29yZSI6bnVsbCwicmV0ZW50aW9uTG9ja2VkIjp0cnVlLCJyZXRlbnRpb25VbnRpbCI6IjIwMzYtMDgtMjlUMDk6MDU6MDBaIiwic2NoZW1hVmVyc2lvbiI6IjIuNi4wIiwic3RhdHVzIjoiYWN0aXZlIiwidXBkYXRlZEF0IjoiMjAyNi0wOS0wMVQwOTowNTowMFoiLCJ2ZXJzaW9uIjoxfQ.WlMDfygpDjYk8xHRQjpQgppwhVkUgYhyj_9iiPH_IXvXb8IKcD0cA2lFJCznB1B6llfW5Q3qiZcfRAdB78nDBw", + "jws": "eyJhbGciOiJFZERTQSIsImtpZCI6ImZlODEyYzEyZjNhYjRjZTZhYzVkYjY5YWMzNTJmOTA2Y2IxYjExZWY0M2ZiMzNlMjUyZWY3ZmY1NTIyNjM4ODkifQ.eyJiYXRjaElkIjoiQUNNRS1MTVQtMjAyNi0wOSIsImNvMmVQZXJVbml0IjpudWxsLCJjb21tb2RpdHlDb2RlIjoiODUwNzYwMDAiLCJjcmVhdGVkQXQiOiIyMDI2LTA5LTAxVDA5OjAwOjAwWiIsImlkIjoiMDE5OWEzYzItN2IxMC03ZTRhLTljM2QtMmYxZThiNmE1ZDQwIiwiandzU2lnbmF0dXJlIjpudWxsLCJtYW51ZmFjdHVyZXIiOnsiYWRkcmVzcyI6Ik11c3RlcnN0cmFzc2UgMSwgODAzMzEgTcO8bmNoZW4sIERFIiwiY291bnRyeSI6bnVsbCwiZGlkV2ViVXJsIjoiaHR0cHM6Ly9ub2RlLmFjbWUuZXhhbXBsZS8ud2VsbC1rbm93bi9kaWQuanNvbiIsIm5hbWUiOiJBY21lIFplbGxlbiBHbWJIIn0sIm1hdGVyaWFscyI6W3siY291bnRyeU9mT3JpZ2luIjoiREUiLCJuYW1lIjoiTk1DIDgxMSBjYXRob2RlIGFjdGl2ZSBtYXRlcmlhbCIsInJlY3ljbGVkUGN0Ijo4LCJ3ZWlnaHRLZyI6My4xfSx7ImNvdW50cnlPZk9yaWdpbiI6IkRFIiwibmFtZSI6IkdyYXBoaXRlIGFub2RlIGFjdGl2ZSBtYXRlcmlhbCIsInJlY3ljbGVkUGN0Ijo0LCJ3ZWlnaHRLZyI6MS45fSx7ImNvdW50cnlPZk9yaWdpbiI6IkRFIiwibmFtZSI6IkFsdW1pbml1bSBwYWNrIGhvdXNpbmciLCJyZWN5Y2xlZFBjdCI6NjAsIndlaWdodEtnIjoyLjJ9XSwicGxhY2VkT25NYXJrZXREYXRlIjoiMjAyNi0wOS0wMSIsInByb2R1Y3RHcm91cCI6ImJhdHRlcnkiLCJwcm9kdWN0R3JvdXBEYXRhIjp7ImFub2RlTWF0ZXJpYWwiOlt7ImNhc051bWJlciI6Ijc3ODItNDItNSIsIm5hbWUiOiJHcmFwaGl0ZSIsIndlaWdodFBjdCI6OTZ9LHsiY2FzTnVtYmVyIjoiOTAwMy01NS04IiwibmFtZSI6IlNCUi9DTUMgYmluZGVyIiwid2VpZ2h0UGN0Ijo0fV0sImJhdHRlcnlDaGVtaXN0cnkiOiJOTUMiLCJiYXR0ZXJ5TW9kZWxJZCI6IkFDTUUtTE1ULTQ4ViIsImJhdHRlcnlQYXNzcG9ydE51bWJlciI6IlVSTjpPREw6QkFUVDowOTUwNjAwMDEzNDM1MjpBQ01FLUxNVC0yMDI2LTA5IiwiYmF0dGVyeVN0YXR1cyI6Im9yaWdpbmFsIiwiYmF0dGVyeVR5cGUiOiJsbXQiLCJiYXR0ZXJ5V2VpZ2h0S2ciOjEyLjQsImNhdGhvZGVNYXRlcmlhbCI6W3siY2FzTnVtYmVyIjoiMzQ2NDE3LTk3LTgiLCJuYW1lIjoiTGlOaTAuOE1uMC4xQ28wLjFPMiIsIndlaWdodFBjdCI6OTZ9LHsiY2FzTnVtYmVyIjoiMjQ5MzctNzktOSIsIm5hbWUiOiJQVkRGIGJpbmRlciIsIndlaWdodFBjdCI6Mn0seyJjYXNOdW1iZXIiOiIxMzMzLTg2LTQiLCJuYW1lIjoiQ29uZHVjdGl2ZSBjYXJib24gYmxhY2siLCJ3ZWlnaHRQY3QiOjJ9XSwiY28yZVBlclVuaXRLZyI6ODYuNCwiY29tcG9uZW50UGFydE51bWJlcnMiOlsiQUNNRS1DRUxMLTIxNzAwLU5NQyIsIkFDTUUtQk1TLTEzUy1WMSIsIkFDTUUtTE1ULUVOQ0wtNDgiXSwiY3JpdGljYWxSYXdNYXRlcmlhbHMiOlt7ImNhc051bWJlciI6Ijc0NDAtNDgtNCIsIm5hbWUiOiJDb2JhbHQiLCJ3ZWlnaHRHcmFtcyI6MzEwfSx7ImNhc051bWJlciI6Ijc0MzktOTMtMiIsIm5hbWUiOiJMaXRoaXVtIiwid2VpZ2h0R3JhbXMiOjQyMH0seyJjYXNOdW1iZXIiOiI3NzgyLTQyLTUiLCJuYW1lIjoiTmF0dXJhbCBncmFwaGl0ZSIsIndlaWdodEdyYW1zIjoxODAwfV0sImN5Y2xlTGlmZVRlc3RDUmF0ZSI6MSwiZGlzYXNzZW1ibHlJbnN0cnVjdGlvbnNVcmwiOiJodHRwczovL2FjbWUuZXhhbXBsZS9zZXJ2aWNlL2xtdC00OC9kaXNhc3NlbWJseSIsImR5bmFtaWNQZXJmb3JtYW5jZSI6eyJjYXBhY2l0eUZhZGVQY3QiOjAuNSwiZXhwZWN0ZWRMaWZldGltZUN5Y2xlcyI6MTE5NSwiaW50ZXJuYWxSZXNpc3RhbmNlTW9obSI6MTEwLjQsInJhdGVkQ2FwYWNpdHlBaCI6MTkuOSwicm91bmRUcmlwRWZmaWNpZW5jeVBjdCI6OTQuOH0sImVsZWN0cm9seXRlTWF0ZXJpYWwiOlt7ImNhc051bWJlciI6Ijk2LTQ5LTEiLCJuYW1lIjoiRXRoeWxlbmUgY2FyYm9uYXRlIiwid2VpZ2h0UGN0IjozOH0seyJjYXNOdW1iZXIiOiI2MTYtMzgtNiIsIm5hbWUiOiJEaW1ldGh5bCBjYXJib25hdGUiLCJ3ZWlnaHRQY3QiOjQ5fSx7ImNhc051bWJlciI6IjIxMzI0LTQwLTMiLCJuYW1lIjoiTGl0aGl1bSBoZXhhZmx1b3JvcGhvc3BoYXRlIiwid2VpZ2h0UGN0IjoxM31dLCJldURlY2xhcmF0aW9uT2ZDb25mb3JtaXR5IjoiRVUtRG9DIEFDTUUtMjAyNi1MTVQtMDkwMSwgcGVyIFJlZ3VsYXRpb24gKEVVKSAyMDIzLzE1NDIgQXJ0LiAxOCIsImV4cGVjdGVkTGlmZXRpbWVDeWNsZXMiOjEyMDAsImV4cGVjdGVkTGlmZXRpbWVSZWZlcmVuY2VUZXN0IjoiRU4gNTA2MDQtMToyMDE2LCAyNSBkZWdDLCAxMDAlIERvRCIsImhhemFyZG91c1N1YnN0YW5jZXMiOlt7ImNhc051bWJlciI6IjIxMzI0LTQwLTMiLCJjb25jZW50cmF0aW9uUGN0IjowLjgsIm5hbWUiOiJMaXRoaXVtIGhleGFmbHVvcm9waG9zcGhhdGUifV0sImluaXRpYWxSb3VuZFRyaXBFZmZpY2llbmN5UGN0Ijo5NSwiaW50ZXJuYWxDZWxsUmVzaXN0YW5jZU1vaG0iOjE0LCJpbnRlcm5hbFBhY2tSZXNpc3RhbmNlTW9obSI6MTEwLCJtYW51ZmFjdHVyaW5nRGF0ZSI6IjIwMjYtMDgtMThUMDA6MDA6MDBaIiwibWFudWZhY3R1cmluZ1BsYWNlIjoiTcO8bmNoZW4sIERFIiwibWFya2luZ0luZm9ybWF0aW9uIjoiU2VwYXJhdGUtY29sbGVjdGlvbiBzeW1ib2wgcGVyIEFydC4gMTMoNCk7IGNhcGFjaXR5IDIwIEFoIC8gOTYwIFdoOyA0OCBWIExNVCIsIm1heGltdW1Wb2x0YWdlViI6NTQuNiwibWluaW1hbFZvbHRhZ2VWIjozOSwibm9taW5hbENhcGFjaXR5QWgiOjIwLCJub21pbmFsVm9sdGFnZVYiOjQ4LCJub3RJblVzZVRlbXBlcmF0dXJlUmFuZ2UiOnsibWF4QyI6NDUsIm1pbkMiOi0xMH0sIm5vdEluVXNlVGVtcGVyYXR1cmVSZWZlcmVuY2VUZXN0IjoiRU4gNTA2MDQtMToyMDE2IHN0b3JhZ2UgY2xhdXNlIiwib3JpZ2luYWxQb3dlckNhcGFiaWxpdHlXIjo5NjAsInBvd2VyTGltaXRNYXhXIjoxNTAwLCJwb3dlckxpbWl0TWluVyI6MjAsInByb2R1Y3RHcm91cCI6ImJhdHRlcnkiLCJwcm9kdWN0SWRlbnRpZmllciI6eyJndGluIjoiMDk1MDYwMDAxMzQzNTIiLCJzY2hlbWUiOiJnczEifSwicmF0ZWRDYXBhY2l0eUt3aCI6bnVsbCwicmVjeWNsZWRDb250ZW50Q29iYWx0UGN0IjoxMiwicmVjeWNsZWRDb250ZW50TGVhZFBjdCI6MCwicmVjeWNsZWRDb250ZW50TGl0aGl1bVBjdCI6NiwicmVjeWNsZWRDb250ZW50Tmlja2VsUGN0Ijo4LCJyZW5ld2FibGVDb250ZW50UGN0IjoxNCwicm91bmRUcmlwRWZmaWNpZW5jeUF0SGFsZkN5Y2xlTGlmZVBjdCI6OTEsInNhZmV0eU1lYXN1cmVzIjoiRG8gbm90IG9wZW4gdGhlIHBhY2suIFJlcGxhY2UgaXQgdGhyb3VnaCBhbiBhdXRob3Jpc2VkIGRlYWxlci4gS2VlcCBpdCBhd2F5IGZyb20gaGVhdCBhYm92ZSA2MCBkZWdDLiIsInNwYXJlUGFydHNDb250YWN0cyI6InNwYXJlc0BhY21lLmV4YW1wbGUiLCJzdGF0ZU9mSGVhbHRoIjp7InBhcmFtZXRlclNldCI6InN0YXRpb25hcnlPckxtdCIsInJlbWFpbmluZ0NhcGFjaXR5UGN0Ijo5OS41LCJyZW1haW5pbmdQb3dlckNhcGFiaWxpdHlQY3QiOjk5LjEsInNlbGZEaXNjaGFyZ2VSYXRlUGN0UGVyTW9udGgiOjJ9LCJzdGF0ZU9mSGVhbHRoUGN0IjpudWxsLCJ0ZXN0UmVwb3J0UmVzdWx0cyI6IkVOIDUwNjA0LTE6MjAxNiBwYXNzOyBVTiAzOC4zIHBhc3M7IHJlcG9ydCBBQ01FLVRSLTIwMjYtMDgxNSIsInVzYWJsZUV4dGluZ3Vpc2hpbmdBZ2VudCI6IldhdGVyOyBjb29sIGEgYnVybmluZyBwYWNrIHdpdGggbGFyZ2Ugdm9sdW1lcyBvZiB3YXRlciIsInVzYWdlSGlzdG9yeSI6eyJjaGFyZ2VEaXNjaGFyZ2VDeWNsZXMiOjR9LCJ3YXN0ZUJhdHRlcnlJbmZvcm1hdGlvbiI6IlJldHVybiB0aGUgYmF0dGVyeSB0byBhIGJpY3ljbGUgcmV0YWlsZXIgb3IgYSBtdW5pY2lwYWwgY29sbGVjdGlvbiBwb2ludC4gRG8gbm90IHBsYWNlIGl0IGluIGhvdXNlaG9sZCB3YXN0ZS4ifSwicHJvZHVjdE5hbWUiOiJBY21lIExNVCA0OFYgMjBBaCBiYXR0ZXJ5IHBhY2siLCJwdWJsaXNoZWRBdCI6IjIwMjYtMDktMDFUMDk6MDU6MDBaIiwicXJDb2RlVXJsIjoiaHR0cHM6Ly9kcHAuYWNtZS5leGFtcGxlLzAxLzA5NTA2MDAwMTM0MzUyLzIxLzdlNGE5YzNkMmYxZThiNmE1ZDQwIiwicmVwYWlyYWJpbGl0eVNjb3JlIjpudWxsLCJyZXRlbnRpb25Mb2NrZWQiOnRydWUsInJldGVudGlvblVudGlsIjoiMjAzNi0wOC0yOVQwOTowNTowMFoiLCJzY2hlbWFWZXJzaW9uIjoiMi43LjAiLCJzdGF0dXMiOiJhY3RpdmUiLCJ1cGRhdGVkQXQiOiIyMDI2LTA5LTAxVDA5OjA1OjAwWiIsInZlcnNpb24iOjF9.55m5_OYvkiKUN9QV9BNB3JeqMOvkYjwYCiPxup_xciGjUrYtHOcaDdy8ULvSAy5NRGpT9p90RrajgBb0Iv5kCg", "payload": { "batchId": "ACME-LMT-2026-09", "co2ePerUnit": null, @@ -553,7 +560,6 @@ "euDeclarationOfConformity": "EU-DoC ACME-2026-LMT-0901, per Regulation (EU) 2023/1542 Art. 18", "expectedLifetimeCycles": 1200, "expectedLifetimeReferenceTest": "EN 50604-1:2016, 25 degC, 100% DoD", - "gtin": "09506000134352", "hazardousSubstances": [ { "casNumber": "21324-40-3", @@ -580,6 +586,10 @@ "powerLimitMaxW": 1500.0, "powerLimitMinW": 20.0, "productGroup": "battery", + "productIdentifier": { + "gtin": "09506000134352", + "scheme": "gs1" + }, "ratedCapacityKwh": null, "recycledContentCobaltPct": 12.0, "recycledContentLeadPct": 0.0, @@ -605,11 +615,11 @@ }, "productName": "Acme LMT 48V 20Ah battery pack", "publishedAt": "2026-09-01T09:05:00Z", - "qrCodeUrl": "https://dpp.acme.example/01/09506000134352/10/ACME-LMT-2026-09/21/7e4a9c3d2f1e8b6a5d40", + "qrCodeUrl": "https://dpp.acme.example/01/09506000134352/21/7e4a9c3d2f1e8b6a5d40", "repairabilityScore": null, "retentionLocked": true, "retentionUntil": "2036-08-29T09:05:00Z", - "schemaVersion": "2.6.0", + "schemaVersion": "2.7.0", "status": "active", "updatedAt": "2026-09-01T09:05:00Z", "version": 1 @@ -617,23 +627,24 @@ }, "manifest": { "contentHashes": { - "auditEntries": "d3e3661902ae8ebc797d545c6124173a74c3b086b2bba8399628df6b53db79e0", + "auditEntries": "46110fef3e331eab68e2616292edcc10d2bfcdfc16fa7bb0409cecdf7cb86a33", "eolEvent": "7cb65bb485538e109105404e15c7bc411aa3050694fa4d63339c70dbe431d3a0", - "fullView": "70f5a9779744ad58b77cebed129ecec4c24d7c5bbf3b65be4b3c61c4be5f0e80", - "publicView": "7ada532408d7c20c385804ca00d0a6a969f1448c796775c14657d7932ecf392a", + "fullView": "e8c5a8fbbddd67948a3ee3eb7abfc07427c2ff2ab23eeba3dc4dc9bbf12cbdbd", + "publicView": "74c1a1eda478cc2643b8652bf188f47e449b851ae64ae05f922de314a9249b83", "transferChain": "52e0fd4f91be57a81e6219557f5f3c4f2331b0cbbc9461d376c967dae5445445" }, - "coreVersion": "0.20.0", + "coreVersion": "0.21.0", "createdAt": "2026-09-25T12:00:00Z", "formatVersion": "1", "issuerDid": "did:web:node.acme.example", "nodeVersion": "0.14.0", "passportId": "0199a3c2-7b10-7e4a-9c3d-2f1e8b6a5d40" }, - "manifestJws": "eyJhbGciOiJFZERTQSIsImtpZCI6ImZlODEyYzEyZjNhYjRjZTZhYzVkYjY5YWMzNTJmOTA2Y2IxYjExZWY0M2ZiMzNlMjUyZWY3ZmY1NTIyNjM4ODkifQ.eyJjb250ZW50SGFzaGVzIjp7ImF1ZGl0RW50cmllcyI6ImQzZTM2NjE5MDJhZThlYmM3OTdkNTQ1YzYxMjQxNzNhNzRjM2IwODZiMmJiYTgzOTk2MjhkZjZiNTNkYjc5ZTAiLCJlb2xFdmVudCI6IjdjYjY1YmI0ODU1MzhlMTA5MTA1NDA0ZTE1YzdiYzQxMWFhMzA1MDY5NGZhNGQ2MzMzOWM3MGRiZTQzMWQzYTAiLCJmdWxsVmlldyI6IjcwZjVhOTc3OTc0NGFkNThiNzdjZWJlZDEyOWVjZWM0YzI0ZDdjNWJiZjNiNjViZTRiM2M2MWM0YmU1ZjBlODAiLCJwdWJsaWNWaWV3IjoiN2FkYTUzMjQwOGQ3YzIwYzM4NTgwNGNhMDBkMGE2YTk2OWYxNDQ4Yzc5Njc3NWMxNDY1N2Q3OTMyZWNmMzkyYSIsInRyYW5zZmVyQ2hhaW4iOiI1MmUwZmQ0ZjkxYmU1N2E4MWU2MjE5NTU3ZjVmM2M0ZjIzMzFiMGNiYmM5NDYxZDM3NmM5NjdkYWU1NDQ1NDQ1In0sImNvcmVWZXJzaW9uIjoiMC4yMC4wIiwiY3JlYXRlZEF0IjoiMjAyNi0wOS0yNVQxMjowMDowMFoiLCJmb3JtYXRWZXJzaW9uIjoiMSIsImlzc3VlckRpZCI6ImRpZDp3ZWI6bm9kZS5hY21lLmV4YW1wbGUiLCJub2RlVmVyc2lvbiI6IjAuMTQuMCIsInBhc3Nwb3J0SWQiOiIwMTk5YTNjMi03YjEwLTdlNGEtOWMzZC0yZjFlOGI2YTVkNDAifQ.Y4XyqkZCD-XAtSYTICoyCngJx7sDCk7sYcdyezYe7ZDDY0k4w8WhK1oUaB5x_zg-malEGWJ_dXIVyI0P_M_qBg", + "manifestJws": "eyJhbGciOiJFZERTQSIsImtpZCI6ImZlODEyYzEyZjNhYjRjZTZhYzVkYjY5YWMzNTJmOTA2Y2IxYjExZWY0M2ZiMzNlMjUyZWY3ZmY1NTIyNjM4ODkifQ.eyJjb250ZW50SGFzaGVzIjp7ImF1ZGl0RW50cmllcyI6IjQ2MTEwZmVmM2UzMzFlYWI2OGUyNjE2MjkyZWRjYzEwZDJiZmNkZmMxNmZhN2JiMDQwOWNlY2RmN2NiODZhMzMiLCJlb2xFdmVudCI6IjdjYjY1YmI0ODU1MzhlMTA5MTA1NDA0ZTE1YzdiYzQxMWFhMzA1MDY5NGZhNGQ2MzMzOWM3MGRiZTQzMWQzYTAiLCJmdWxsVmlldyI6ImU4YzVhOGZiYmRkZDY3OTQ4YTNlZTNlYjdhYmZjMDc0MjdjMmZmMmFiMjNlZWJhM2RjNGRjOWJiZjEyY2JkYmQiLCJwdWJsaWNWaWV3IjoiNzRjMWExZWRhNDc4Y2MyNjQzYjg2NTJiZjE4OGY0N2U0NDliODUxYWU2NGFlMDVmOTIyZGUzMTRhOTI0OWI4MyIsInRyYW5zZmVyQ2hhaW4iOiI1MmUwZmQ0ZjkxYmU1N2E4MWU2MjE5NTU3ZjVmM2M0ZjIzMzFiMGNiYmM5NDYxZDM3NmM5NjdkYWU1NDQ1NDQ1In0sImNvcmVWZXJzaW9uIjoiMC4yMS4wIiwiY3JlYXRlZEF0IjoiMjAyNi0wOS0yNVQxMjowMDowMFoiLCJmb3JtYXRWZXJzaW9uIjoiMSIsImlzc3VlckRpZCI6ImRpZDp3ZWI6bm9kZS5hY21lLmV4YW1wbGUiLCJub2RlVmVyc2lvbiI6IjAuMTQuMCIsInBhc3Nwb3J0SWQiOiIwMTk5YTNjMi03YjEwLTdlNGEtOWMzZC0yZjFlOGI2YTVkNDAifQ.nR0d3UZbNRttz9D0VL9qGHN9dQwzFQGa4eRni8N926diP9G-qB4nGbqgqyz9VqaL6DjKReENzDldyo87sev_BA", "publicView": { - "jws": "eyJhbGciOiJFZERTQSIsImtpZCI6ImZlODEyYzEyZjNhYjRjZTZhYzVkYjY5YWMzNTJmOTA2Y2IxYjExZWY0M2ZiMzNlMjUyZWY3ZmY1NTIyNjM4ODkifQ.eyJjbzJlUGVyVW5pdCI6bnVsbCwiY29tbW9kaXR5Q29kZSI6Ijg1MDc2MDAwIiwiY3JlYXRlZEF0IjoiMjAyNi0wOS0wMVQwOTowMDowMFoiLCJpZCI6IjAxOTlhM2MyLTdiMTAtN2U0YS05YzNkLTJmMWU4YjZhNWQ0MCIsIm1hbnVmYWN0dXJlciI6eyJhZGRyZXNzIjoiTXVzdGVyc3RyYXNzZSAxLCA4MDMzMSBNw7xuY2hlbiwgREUiLCJjb3VudHJ5IjpudWxsLCJkaWRXZWJVcmwiOiJodHRwczovL25vZGUuYWNtZS5leGFtcGxlLy53ZWxsLWtub3duL2RpZC5qc29uIiwibmFtZSI6IkFjbWUgWmVsbGVuIEdtYkgifSwibWF0ZXJpYWxzIjpbeyJjb3VudHJ5T2ZPcmlnaW4iOiJERSIsIm5hbWUiOiJOTUMgODExIGNhdGhvZGUgYWN0aXZlIG1hdGVyaWFsIiwicmVjeWNsZWRQY3QiOjgsIndlaWdodEtnIjozLjF9LHsiY291bnRyeU9mT3JpZ2luIjoiREUiLCJuYW1lIjoiR3JhcGhpdGUgYW5vZGUgYWN0aXZlIG1hdGVyaWFsIiwicmVjeWNsZWRQY3QiOjQsIndlaWdodEtnIjoxLjl9LHsiY291bnRyeU9mT3JpZ2luIjoiREUiLCJuYW1lIjoiQWx1bWluaXVtIHBhY2sgaG91c2luZyIsInJlY3ljbGVkUGN0Ijo2MCwid2VpZ2h0S2ciOjIuMn1dLCJwbGFjZWRPbk1hcmtldERhdGUiOiIyMDI2LTA5LTAxIiwicHJvZHVjdEdyb3VwIjoiYmF0dGVyeSIsInByb2R1Y3RHcm91cERhdGEiOnsiYmF0dGVyeUNoZW1pc3RyeSI6Ik5NQyIsImJhdHRlcnlNb2RlbElkIjoiQUNNRS1MTVQtNDhWIiwiYmF0dGVyeVBhc3Nwb3J0TnVtYmVyIjoiVVJOOk9ETDpCQVRUOjA5NTA2MDAwMTM0MzUyOkFDTUUtTE1ULTIwMjYtMDkiLCJiYXR0ZXJ5VHlwZSI6ImxtdCIsImJhdHRlcnlXZWlnaHRLZyI6MTIuNCwiY28yZVBlclVuaXRLZyI6ODYuNCwiY3JpdGljYWxSYXdNYXRlcmlhbHMiOlt7ImNhc051bWJlciI6Ijc0NDAtNDgtNCIsIm5hbWUiOiJDb2JhbHQiLCJ3ZWlnaHRHcmFtcyI6MzEwfSx7ImNhc051bWJlciI6Ijc0MzktOTMtMiIsIm5hbWUiOiJMaXRoaXVtIiwid2VpZ2h0R3JhbXMiOjQyMH0seyJjYXNOdW1iZXIiOiI3NzgyLTQyLTUiLCJuYW1lIjoiTmF0dXJhbCBncmFwaGl0ZSIsIndlaWdodEdyYW1zIjoxODAwfV0sImN5Y2xlTGlmZVRlc3RDUmF0ZSI6MSwiZXVEZWNsYXJhdGlvbk9mQ29uZm9ybWl0eSI6IkVVLURvQyBBQ01FLTIwMjYtTE1ULTA5MDEsIHBlciBSZWd1bGF0aW9uIChFVSkgMjAyMy8xNTQyIEFydC4gMTgiLCJleHBlY3RlZExpZmV0aW1lQ3ljbGVzIjoxMjAwLCJleHBlY3RlZExpZmV0aW1lUmVmZXJlbmNlVGVzdCI6IkVOIDUwNjA0LTE6MjAxNiwgMjUgZGVnQywgMTAwJSBEb0QiLCJndGluIjoiMDk1MDYwMDAxMzQzNTIiLCJoYXphcmRvdXNTdWJzdGFuY2VzIjpbeyJjYXNOdW1iZXIiOiIyMTMyNC00MC0zIiwiY29uY2VudHJhdGlvblBjdCI6MC44LCJuYW1lIjoiTGl0aGl1bSBoZXhhZmx1b3JvcGhvc3BoYXRlIn1dLCJpbml0aWFsUm91bmRUcmlwRWZmaWNpZW5jeVBjdCI6OTUsImludGVybmFsQ2VsbFJlc2lzdGFuY2VNb2htIjoxNCwiaW50ZXJuYWxQYWNrUmVzaXN0YW5jZU1vaG0iOjExMCwibWFudWZhY3R1cmluZ0RhdGUiOiIyMDI2LTA4LTE4VDAwOjAwOjAwWiIsIm1hbnVmYWN0dXJpbmdQbGFjZSI6Ik3DvG5jaGVuLCBERSIsIm1hcmtpbmdJbmZvcm1hdGlvbiI6IlNlcGFyYXRlLWNvbGxlY3Rpb24gc3ltYm9sIHBlciBBcnQuIDEzKDQpOyBjYXBhY2l0eSAyMCBBaCAvIDk2MCBXaDsgNDggViBMTVQiLCJtYXhpbXVtVm9sdGFnZVYiOjU0LjYsIm1pbmltYWxWb2x0YWdlViI6MzksIm5vbWluYWxDYXBhY2l0eUFoIjoyMCwibm9taW5hbFZvbHRhZ2VWIjo0OCwibm90SW5Vc2VUZW1wZXJhdHVyZVJhbmdlIjp7Im1heEMiOjQ1LCJtaW5DIjotMTB9LCJub3RJblVzZVRlbXBlcmF0dXJlUmVmZXJlbmNlVGVzdCI6IkVOIDUwNjA0LTE6MjAxNiBzdG9yYWdlIGNsYXVzZSIsIm9yaWdpbmFsUG93ZXJDYXBhYmlsaXR5VyI6OTYwLCJwb3dlckxpbWl0TWF4VyI6MTUwMCwicG93ZXJMaW1pdE1pblciOjIwLCJwcm9kdWN0R3JvdXAiOiJiYXR0ZXJ5IiwicmF0ZWRDYXBhY2l0eUt3aCI6bnVsbCwicmVjeWNsZWRDb250ZW50Q29iYWx0UGN0IjoxMiwicmVjeWNsZWRDb250ZW50TGVhZFBjdCI6MCwicmVjeWNsZWRDb250ZW50TGl0aGl1bVBjdCI6NiwicmVjeWNsZWRDb250ZW50Tmlja2VsUGN0Ijo4LCJyZW5ld2FibGVDb250ZW50UGN0IjoxNCwicm91bmRUcmlwRWZmaWNpZW5jeUF0SGFsZkN5Y2xlTGlmZVBjdCI6OTEsInVzYWJsZUV4dGluZ3Vpc2hpbmdBZ2VudCI6IldhdGVyOyBjb29sIGEgYnVybmluZyBwYWNrIHdpdGggbGFyZ2Ugdm9sdW1lcyBvZiB3YXRlciIsIndhc3RlQmF0dGVyeUluZm9ybWF0aW9uIjoiUmV0dXJuIHRoZSBiYXR0ZXJ5IHRvIGEgYmljeWNsZSByZXRhaWxlciBvciBhIG11bmljaXBhbCBjb2xsZWN0aW9uIHBvaW50LiBEbyBub3QgcGxhY2UgaXQgaW4gaG91c2Vob2xkIHdhc3RlLiJ9LCJwcm9kdWN0TmFtZSI6IkFjbWUgTE1UIDQ4ViAyMEFoIGJhdHRlcnkgcGFjayIsInB1Ymxpc2hlZEF0IjoiMjAyNi0wOS0wMVQwOTowNTowMFoiLCJxckNvZGVVcmwiOiJodHRwczovL2RwcC5hY21lLmV4YW1wbGUvMDEvMDk1MDYwMDAxMzQzNTIvMTAvQUNNRS1MTVQtMjAyNi0wOS8yMS83ZTRhOWMzZDJmMWU4YjZhNWQ0MCIsInJlcGFpcmFiaWxpdHlTY29yZSI6bnVsbCwicmV0ZW50aW9uVW50aWwiOiIyMDM2LTA4LTI5VDA5OjA1OjAwWiIsInNjaGVtYVZlcnNpb24iOiIyLjYuMCIsInN0YXR1cyI6ImFjdGl2ZSIsInVwZGF0ZWRBdCI6IjIwMjYtMDktMDFUMDk6MDU6MDBaIiwidmVyc2lvbiI6MX0.OnjeF7qUrlZOKc-Xx8u-ThMayslJBs7HPAmpZBFKvyJpivIqOrN5lTCW15PsoyBeSOpjmRq3Mm_UC99B-Ya-Dg", + "jws": "eyJhbGciOiJFZERTQSIsImtpZCI6ImZlODEyYzEyZjNhYjRjZTZhYzVkYjY5YWMzNTJmOTA2Y2IxYjExZWY0M2ZiMzNlMjUyZWY3ZmY1NTIyNjM4ODkifQ.eyJiYXRjaElkIjoiQUNNRS1MTVQtMjAyNi0wOSIsImNvMmVQZXJVbml0IjpudWxsLCJjb21tb2RpdHlDb2RlIjoiODUwNzYwMDAiLCJjcmVhdGVkQXQiOiIyMDI2LTA5LTAxVDA5OjAwOjAwWiIsImlkIjoiMDE5OWEzYzItN2IxMC03ZTRhLTljM2QtMmYxZThiNmE1ZDQwIiwibWFudWZhY3R1cmVyIjp7ImFkZHJlc3MiOiJNdXN0ZXJzdHJhc3NlIDEsIDgwMzMxIE3DvG5jaGVuLCBERSIsImNvdW50cnkiOm51bGwsImRpZFdlYlVybCI6Imh0dHBzOi8vbm9kZS5hY21lLmV4YW1wbGUvLndlbGwta25vd24vZGlkLmpzb24iLCJuYW1lIjoiQWNtZSBaZWxsZW4gR21iSCJ9LCJtYXRlcmlhbHMiOlt7ImNvdW50cnlPZk9yaWdpbiI6IkRFIiwibmFtZSI6Ik5NQyA4MTEgY2F0aG9kZSBhY3RpdmUgbWF0ZXJpYWwiLCJyZWN5Y2xlZFBjdCI6OCwid2VpZ2h0S2ciOjMuMX0seyJjb3VudHJ5T2ZPcmlnaW4iOiJERSIsIm5hbWUiOiJHcmFwaGl0ZSBhbm9kZSBhY3RpdmUgbWF0ZXJpYWwiLCJyZWN5Y2xlZFBjdCI6NCwid2VpZ2h0S2ciOjEuOX0seyJjb3VudHJ5T2ZPcmlnaW4iOiJERSIsIm5hbWUiOiJBbHVtaW5pdW0gcGFjayBob3VzaW5nIiwicmVjeWNsZWRQY3QiOjYwLCJ3ZWlnaHRLZyI6Mi4yfV0sInBsYWNlZE9uTWFya2V0RGF0ZSI6IjIwMjYtMDktMDEiLCJwcm9kdWN0R3JvdXAiOiJiYXR0ZXJ5IiwicHJvZHVjdEdyb3VwRGF0YSI6eyJiYXR0ZXJ5Q2hlbWlzdHJ5IjoiTk1DIiwiYmF0dGVyeU1vZGVsSWQiOiJBQ01FLUxNVC00OFYiLCJiYXR0ZXJ5UGFzc3BvcnROdW1iZXIiOiJVUk46T0RMOkJBVFQ6MDk1MDYwMDAxMzQzNTI6QUNNRS1MTVQtMjAyNi0wOSIsImJhdHRlcnlUeXBlIjoibG10IiwiYmF0dGVyeVdlaWdodEtnIjoxMi40LCJjbzJlUGVyVW5pdEtnIjo4Ni40LCJjcml0aWNhbFJhd01hdGVyaWFscyI6W3siY2FzTnVtYmVyIjoiNzQ0MC00OC00IiwibmFtZSI6IkNvYmFsdCIsIndlaWdodEdyYW1zIjozMTB9LHsiY2FzTnVtYmVyIjoiNzQzOS05My0yIiwibmFtZSI6IkxpdGhpdW0iLCJ3ZWlnaHRHcmFtcyI6NDIwfSx7ImNhc051bWJlciI6Ijc3ODItNDItNSIsIm5hbWUiOiJOYXR1cmFsIGdyYXBoaXRlIiwid2VpZ2h0R3JhbXMiOjE4MDB9XSwiY3ljbGVMaWZlVGVzdENSYXRlIjoxLCJldURlY2xhcmF0aW9uT2ZDb25mb3JtaXR5IjoiRVUtRG9DIEFDTUUtMjAyNi1MTVQtMDkwMSwgcGVyIFJlZ3VsYXRpb24gKEVVKSAyMDIzLzE1NDIgQXJ0LiAxOCIsImV4cGVjdGVkTGlmZXRpbWVDeWNsZXMiOjEyMDAsImV4cGVjdGVkTGlmZXRpbWVSZWZlcmVuY2VUZXN0IjoiRU4gNTA2MDQtMToyMDE2LCAyNSBkZWdDLCAxMDAlIERvRCIsImhhemFyZG91c1N1YnN0YW5jZXMiOlt7ImNhc051bWJlciI6IjIxMzI0LTQwLTMiLCJjb25jZW50cmF0aW9uUGN0IjowLjgsIm5hbWUiOiJMaXRoaXVtIGhleGFmbHVvcm9waG9zcGhhdGUifV0sImluaXRpYWxSb3VuZFRyaXBFZmZpY2llbmN5UGN0Ijo5NSwiaW50ZXJuYWxDZWxsUmVzaXN0YW5jZU1vaG0iOjE0LCJpbnRlcm5hbFBhY2tSZXNpc3RhbmNlTW9obSI6MTEwLCJtYW51ZmFjdHVyaW5nRGF0ZSI6IjIwMjYtMDgtMThUMDA6MDA6MDBaIiwibWFudWZhY3R1cmluZ1BsYWNlIjoiTcO8bmNoZW4sIERFIiwibWFya2luZ0luZm9ybWF0aW9uIjoiU2VwYXJhdGUtY29sbGVjdGlvbiBzeW1ib2wgcGVyIEFydC4gMTMoNCk7IGNhcGFjaXR5IDIwIEFoIC8gOTYwIFdoOyA0OCBWIExNVCIsIm1heGltdW1Wb2x0YWdlViI6NTQuNiwibWluaW1hbFZvbHRhZ2VWIjozOSwibm9taW5hbENhcGFjaXR5QWgiOjIwLCJub21pbmFsVm9sdGFnZVYiOjQ4LCJub3RJblVzZVRlbXBlcmF0dXJlUmFuZ2UiOnsibWF4QyI6NDUsIm1pbkMiOi0xMH0sIm5vdEluVXNlVGVtcGVyYXR1cmVSZWZlcmVuY2VUZXN0IjoiRU4gNTA2MDQtMToyMDE2IHN0b3JhZ2UgY2xhdXNlIiwib3JpZ2luYWxQb3dlckNhcGFiaWxpdHlXIjo5NjAsInBvd2VyTGltaXRNYXhXIjoxNTAwLCJwb3dlckxpbWl0TWluVyI6MjAsInByb2R1Y3RHcm91cCI6ImJhdHRlcnkiLCJwcm9kdWN0SWRlbnRpZmllciI6eyJndGluIjoiMDk1MDYwMDAxMzQzNTIiLCJzY2hlbWUiOiJnczEifSwicmF0ZWRDYXBhY2l0eUt3aCI6bnVsbCwicmVjeWNsZWRDb250ZW50Q29iYWx0UGN0IjoxMiwicmVjeWNsZWRDb250ZW50TGVhZFBjdCI6MCwicmVjeWNsZWRDb250ZW50TGl0aGl1bVBjdCI6NiwicmVjeWNsZWRDb250ZW50Tmlja2VsUGN0Ijo4LCJyZW5ld2FibGVDb250ZW50UGN0IjoxNCwicm91bmRUcmlwRWZmaWNpZW5jeUF0SGFsZkN5Y2xlTGlmZVBjdCI6OTEsInVzYWJsZUV4dGluZ3Vpc2hpbmdBZ2VudCI6IldhdGVyOyBjb29sIGEgYnVybmluZyBwYWNrIHdpdGggbGFyZ2Ugdm9sdW1lcyBvZiB3YXRlciIsIndhc3RlQmF0dGVyeUluZm9ybWF0aW9uIjoiUmV0dXJuIHRoZSBiYXR0ZXJ5IHRvIGEgYmljeWNsZSByZXRhaWxlciBvciBhIG11bmljaXBhbCBjb2xsZWN0aW9uIHBvaW50LiBEbyBub3QgcGxhY2UgaXQgaW4gaG91c2Vob2xkIHdhc3RlLiJ9LCJwcm9kdWN0TmFtZSI6IkFjbWUgTE1UIDQ4ViAyMEFoIGJhdHRlcnkgcGFjayIsInB1Ymxpc2hlZEF0IjoiMjAyNi0wOS0wMVQwOTowNTowMFoiLCJxckNvZGVVcmwiOiJodHRwczovL2RwcC5hY21lLmV4YW1wbGUvMDEvMDk1MDYwMDAxMzQzNTIvMjEvN2U0YTljM2QyZjFlOGI2YTVkNDAiLCJyZXBhaXJhYmlsaXR5U2NvcmUiOm51bGwsInJldGVudGlvblVudGlsIjoiMjAzNi0wOC0yOVQwOTowNTowMFoiLCJzY2hlbWFWZXJzaW9uIjoiMi43LjAiLCJzdGF0dXMiOiJhY3RpdmUiLCJ1cGRhdGVkQXQiOiIyMDI2LTA5LTAxVDA5OjA1OjAwWiIsInZlcnNpb24iOjF9.LHi5ToX900cUN4vak8l1zOZ5xc1H9jW25fL4XUWuxz2JU1_3PxxrjRUTyY9RctPxPSTWmS40fUWurEZnTdE3Dw", "payload": { + "batchId": "ACME-LMT-2026-09", "co2ePerUnit": null, "commodityCode": "85076000", "createdAt": "2026-09-01T09:00:00Z", @@ -694,7 +705,6 @@ "euDeclarationOfConformity": "EU-DoC ACME-2026-LMT-0901, per Regulation (EU) 2023/1542 Art. 18", "expectedLifetimeCycles": 1200, "expectedLifetimeReferenceTest": "EN 50604-1:2016, 25 degC, 100% DoD", - "gtin": "09506000134352", "hazardousSubstances": [ { "casNumber": "21324-40-3", @@ -721,6 +731,10 @@ "powerLimitMaxW": 1500.0, "powerLimitMinW": 20.0, "productGroup": "battery", + "productIdentifier": { + "gtin": "09506000134352", + "scheme": "gs1" + }, "ratedCapacityKwh": null, "recycledContentCobaltPct": 12.0, "recycledContentLeadPct": 0.0, @@ -733,10 +747,10 @@ }, "productName": "Acme LMT 48V 20Ah battery pack", "publishedAt": "2026-09-01T09:05:00Z", - "qrCodeUrl": "https://dpp.acme.example/01/09506000134352/10/ACME-LMT-2026-09/21/7e4a9c3d2f1e8b6a5d40", + "qrCodeUrl": "https://dpp.acme.example/01/09506000134352/21/7e4a9c3d2f1e8b6a5d40", "repairabilityScore": null, "retentionUntil": "2036-08-29T09:05:00Z", - "schemaVersion": "2.6.0", + "schemaVersion": "2.7.0", "status": "active", "updatedAt": "2026-09-01T09:05:00Z", "version": 1 diff --git a/site/dpp-landing/public/verify/examples/07-tampered-transfer-signature.json b/site/dpp-landing/public/verify/examples/07-tampered-transfer-signature.json index aa8a4de..9b7a4d0 100644 --- a/site/dpp-landing/public/verify/examples/07-tampered-transfer-signature.json +++ b/site/dpp-landing/public/verify/examples/07-tampered-transfer-signature.json @@ -16,7 +16,7 @@ { "action": "published", "actor": "api-key", - "entryHash": "4e81bf531274f21aa02339144c34711eac79af7fb22ebf10a18982adc3f075a3", + "entryHash": "2934a67be97238b4f38ff4ee4d53464a0c197cec343297b25124f894b942c2f2", "id": "0199a3c2-7b10-7e4a-9c3d-000000000002", "metadata": { "fullViewPayload": { @@ -142,7 +142,6 @@ "euDeclarationOfConformity": "EU-DoC ACME-2026-LMT-0901, per Regulation (EU) 2023/1542 Art. 18", "expectedLifetimeCycles": 1200, "expectedLifetimeReferenceTest": "EN 50604-1:2016, 25 degC, 100% DoD", - "gtin": "09506000134352", "hazardousSubstances": [ { "casNumber": "21324-40-3", @@ -169,6 +168,10 @@ "powerLimitMaxW": 1500.0, "powerLimitMinW": 20.0, "productGroup": "battery", + "productIdentifier": { + "gtin": "09506000134352", + "scheme": "gs1" + }, "ratedCapacityKwh": null, "recycledContentCobaltPct": 12.0, "recycledContentLeadPct": 0.0, @@ -194,16 +197,17 @@ }, "productName": "Acme LMT 48V 20Ah battery pack", "publishedAt": "2026-09-01T09:05:00Z", - "qrCodeUrl": "https://dpp.acme.example/01/09506000134352/10/ACME-LMT-2026-09/21/7e4a9c3d2f1e8b6a5d40", + "qrCodeUrl": "https://dpp.acme.example/01/09506000134352/21/7e4a9c3d2f1e8b6a5d40", "repairabilityScore": null, "retentionLocked": true, "retentionUntil": "2036-08-29T09:05:00Z", - "schemaVersion": "2.6.0", + "schemaVersion": "2.7.0", "status": "active", "updatedAt": "2026-09-01T09:05:00Z", "version": 1 }, "publicViewPayload": { + "batchId": "ACME-LMT-2026-09", "co2ePerUnit": null, "commodityCode": "85076000", "createdAt": "2026-09-01T09:00:00Z", @@ -264,7 +268,6 @@ "euDeclarationOfConformity": "EU-DoC ACME-2026-LMT-0901, per Regulation (EU) 2023/1542 Art. 18", "expectedLifetimeCycles": 1200, "expectedLifetimeReferenceTest": "EN 50604-1:2016, 25 degC, 100% DoD", - "gtin": "09506000134352", "hazardousSubstances": [ { "casNumber": "21324-40-3", @@ -291,6 +294,10 @@ "powerLimitMaxW": 1500.0, "powerLimitMinW": 20.0, "productGroup": "battery", + "productIdentifier": { + "gtin": "09506000134352", + "scheme": "gs1" + }, "ratedCapacityKwh": null, "recycledContentCobaltPct": 12.0, "recycledContentLeadPct": 0.0, @@ -303,10 +310,10 @@ }, "productName": "Acme LMT 48V 20Ah battery pack", "publishedAt": "2026-09-01T09:05:00Z", - "qrCodeUrl": "https://dpp.acme.example/01/09506000134352/10/ACME-LMT-2026-09/21/7e4a9c3d2f1e8b6a5d40", + "qrCodeUrl": "https://dpp.acme.example/01/09506000134352/21/7e4a9c3d2f1e8b6a5d40", "repairabilityScore": null, "retentionUntil": "2036-08-29T09:05:00Z", - "schemaVersion": "2.6.0", + "schemaVersion": "2.7.0", "status": "active", "updatedAt": "2026-09-01T09:05:00Z", "version": 1 @@ -322,7 +329,7 @@ { "action": "transferred", "actor": "api-key", - "entryHash": "5c869a32da993e9a5ee13bc3b059fee9c3abc1fbbd840ab2449473f0e5453b08", + "entryHash": "1b61fd6f3f72f0730d61b59008f883d7630a03e2dea9f5bd67206482d0770530", "id": "0199a3c2-7b10-7e4a-9c3d-000000000003", "metadata": { "event": "transfer.initiated", @@ -331,7 +338,7 @@ }, "newStatus": null, "passportId": "0199a3c2-7b10-7e4a-9c3d-2f1e8b6a5d40", - "prevHash": "4e81bf531274f21aa02339144c34711eac79af7fb22ebf10a18982adc3f075a3", + "prevHash": "2934a67be97238b4f38ff4ee4d53464a0c197cec343297b25124f894b942c2f2", "previousStatus": null, "requestId": "0199a3c2-7b10-7e4a-8d2e-000000000003", "timestamp": "2026-09-10T14:00:00.042Z" @@ -339,7 +346,7 @@ { "action": "transferred", "actor": "api-key", - "entryHash": "3a5eb46b99bc15d235b342a0a6092d3e382d998b7de32588ed4966d74295fa51", + "entryHash": "f462766c832366e92cef97196b764df1bd5ce5e1acc1fa5e2b395f99d4c3e6fa", "id": "0199a3c2-7b10-7e4a-9c3d-000000000004", "metadata": { "event": "transfer.accepted", @@ -348,7 +355,7 @@ }, "newStatus": null, "passportId": "0199a3c2-7b10-7e4a-9c3d-2f1e8b6a5d40", - "prevHash": "5c869a32da993e9a5ee13bc3b059fee9c3abc1fbbd840ab2449473f0e5453b08", + "prevHash": "1b61fd6f3f72f0730d61b59008f883d7630a03e2dea9f5bd67206482d0770530", "previousStatus": null, "requestId": "0199a3c2-7b10-7e4a-8d2e-000000000004", "timestamp": "2026-09-10T14:30:00.123456Z" @@ -356,7 +363,7 @@ { "action": "deactivated", "actor": "api-key", - "entryHash": "256b89a07f8ff158fe29f327e08996214563987ca111cddc563bb0e9a9f9a362", + "entryHash": "6fd9d12be0f3a26ae6fc2740a796a13363de1e3abd3082ce284c9eeebdc88dac", "id": "0199a3c2-7b10-7e4a-9c3d-000000000005", "metadata": { "declaredAt": "2026-09-20T08:00:00Z", @@ -369,7 +376,7 @@ }, "newStatus": "deactivated", "passportId": "0199a3c2-7b10-7e4a-9c3d-2f1e8b6a5d40", - "prevHash": "3a5eb46b99bc15d235b342a0a6092d3e382d998b7de32588ed4966d74295fa51", + "prevHash": "f462766c832366e92cef97196b764df1bd5ce5e1acc1fa5e2b395f99d4c3e6fa", "previousStatus": "active", "requestId": "0199a3c2-7b10-7e4a-8d2e-000000000005", "timestamp": "2026-09-20T08:00:00.018Z" @@ -429,7 +436,7 @@ } }, "fullView": { - "jws": "eyJhbGciOiJFZERTQSIsImtpZCI6ImZlODEyYzEyZjNhYjRjZTZhYzVkYjY5YWMzNTJmOTA2Y2IxYjExZWY0M2ZiMzNlMjUyZWY3ZmY1NTIyNjM4ODkifQ.eyJiYXRjaElkIjoiQUNNRS1MTVQtMjAyNi0wOSIsImNvMmVQZXJVbml0IjpudWxsLCJjb21tb2RpdHlDb2RlIjoiODUwNzYwMDAiLCJjcmVhdGVkQXQiOiIyMDI2LTA5LTAxVDA5OjAwOjAwWiIsImlkIjoiMDE5OWEzYzItN2IxMC03ZTRhLTljM2QtMmYxZThiNmE1ZDQwIiwiandzU2lnbmF0dXJlIjpudWxsLCJtYW51ZmFjdHVyZXIiOnsiYWRkcmVzcyI6Ik11c3RlcnN0cmFzc2UgMSwgODAzMzEgTcO8bmNoZW4sIERFIiwiY291bnRyeSI6bnVsbCwiZGlkV2ViVXJsIjoiaHR0cHM6Ly9ub2RlLmFjbWUuZXhhbXBsZS8ud2VsbC1rbm93bi9kaWQuanNvbiIsIm5hbWUiOiJBY21lIFplbGxlbiBHbWJIIn0sIm1hdGVyaWFscyI6W3siY291bnRyeU9mT3JpZ2luIjoiREUiLCJuYW1lIjoiTk1DIDgxMSBjYXRob2RlIGFjdGl2ZSBtYXRlcmlhbCIsInJlY3ljbGVkUGN0Ijo4LCJ3ZWlnaHRLZyI6My4xfSx7ImNvdW50cnlPZk9yaWdpbiI6IkRFIiwibmFtZSI6IkdyYXBoaXRlIGFub2RlIGFjdGl2ZSBtYXRlcmlhbCIsInJlY3ljbGVkUGN0Ijo0LCJ3ZWlnaHRLZyI6MS45fSx7ImNvdW50cnlPZk9yaWdpbiI6IkRFIiwibmFtZSI6IkFsdW1pbml1bSBwYWNrIGhvdXNpbmciLCJyZWN5Y2xlZFBjdCI6NjAsIndlaWdodEtnIjoyLjJ9XSwicGxhY2VkT25NYXJrZXREYXRlIjoiMjAyNi0wOS0wMSIsInByb2R1Y3RHcm91cCI6ImJhdHRlcnkiLCJwcm9kdWN0R3JvdXBEYXRhIjp7ImFub2RlTWF0ZXJpYWwiOlt7ImNhc051bWJlciI6Ijc3ODItNDItNSIsIm5hbWUiOiJHcmFwaGl0ZSIsIndlaWdodFBjdCI6OTZ9LHsiY2FzTnVtYmVyIjoiOTAwMy01NS04IiwibmFtZSI6IlNCUi9DTUMgYmluZGVyIiwid2VpZ2h0UGN0Ijo0fV0sImJhdHRlcnlDaGVtaXN0cnkiOiJOTUMiLCJiYXR0ZXJ5TW9kZWxJZCI6IkFDTUUtTE1ULTQ4ViIsImJhdHRlcnlQYXNzcG9ydE51bWJlciI6IlVSTjpPREw6QkFUVDowOTUwNjAwMDEzNDM1MjpBQ01FLUxNVC0yMDI2LTA5IiwiYmF0dGVyeVN0YXR1cyI6Im9yaWdpbmFsIiwiYmF0dGVyeVR5cGUiOiJsbXQiLCJiYXR0ZXJ5V2VpZ2h0S2ciOjEyLjQsImNhdGhvZGVNYXRlcmlhbCI6W3siY2FzTnVtYmVyIjoiMzQ2NDE3LTk3LTgiLCJuYW1lIjoiTGlOaTAuOE1uMC4xQ28wLjFPMiIsIndlaWdodFBjdCI6OTZ9LHsiY2FzTnVtYmVyIjoiMjQ5MzctNzktOSIsIm5hbWUiOiJQVkRGIGJpbmRlciIsIndlaWdodFBjdCI6Mn0seyJjYXNOdW1iZXIiOiIxMzMzLTg2LTQiLCJuYW1lIjoiQ29uZHVjdGl2ZSBjYXJib24gYmxhY2siLCJ3ZWlnaHRQY3QiOjJ9XSwiY28yZVBlclVuaXRLZyI6ODYuNCwiY29tcG9uZW50UGFydE51bWJlcnMiOlsiQUNNRS1DRUxMLTIxNzAwLU5NQyIsIkFDTUUtQk1TLTEzUy1WMSIsIkFDTUUtTE1ULUVOQ0wtNDgiXSwiY3JpdGljYWxSYXdNYXRlcmlhbHMiOlt7ImNhc051bWJlciI6Ijc0NDAtNDgtNCIsIm5hbWUiOiJDb2JhbHQiLCJ3ZWlnaHRHcmFtcyI6MzEwfSx7ImNhc051bWJlciI6Ijc0MzktOTMtMiIsIm5hbWUiOiJMaXRoaXVtIiwid2VpZ2h0R3JhbXMiOjQyMH0seyJjYXNOdW1iZXIiOiI3NzgyLTQyLTUiLCJuYW1lIjoiTmF0dXJhbCBncmFwaGl0ZSIsIndlaWdodEdyYW1zIjoxODAwfV0sImN5Y2xlTGlmZVRlc3RDUmF0ZSI6MSwiZGlzYXNzZW1ibHlJbnN0cnVjdGlvbnNVcmwiOiJodHRwczovL2FjbWUuZXhhbXBsZS9zZXJ2aWNlL2xtdC00OC9kaXNhc3NlbWJseSIsImR5bmFtaWNQZXJmb3JtYW5jZSI6eyJjYXBhY2l0eUZhZGVQY3QiOjAuNSwiZXhwZWN0ZWRMaWZldGltZUN5Y2xlcyI6MTE5NSwiaW50ZXJuYWxSZXNpc3RhbmNlTW9obSI6MTEwLjQsInJhdGVkQ2FwYWNpdHlBaCI6MTkuOSwicm91bmRUcmlwRWZmaWNpZW5jeVBjdCI6OTQuOH0sImVsZWN0cm9seXRlTWF0ZXJpYWwiOlt7ImNhc051bWJlciI6Ijk2LTQ5LTEiLCJuYW1lIjoiRXRoeWxlbmUgY2FyYm9uYXRlIiwid2VpZ2h0UGN0IjozOH0seyJjYXNOdW1iZXIiOiI2MTYtMzgtNiIsIm5hbWUiOiJEaW1ldGh5bCBjYXJib25hdGUiLCJ3ZWlnaHRQY3QiOjQ5fSx7ImNhc051bWJlciI6IjIxMzI0LTQwLTMiLCJuYW1lIjoiTGl0aGl1bSBoZXhhZmx1b3JvcGhvc3BoYXRlIiwid2VpZ2h0UGN0IjoxM31dLCJldURlY2xhcmF0aW9uT2ZDb25mb3JtaXR5IjoiRVUtRG9DIEFDTUUtMjAyNi1MTVQtMDkwMSwgcGVyIFJlZ3VsYXRpb24gKEVVKSAyMDIzLzE1NDIgQXJ0LiAxOCIsImV4cGVjdGVkTGlmZXRpbWVDeWNsZXMiOjEyMDAsImV4cGVjdGVkTGlmZXRpbWVSZWZlcmVuY2VUZXN0IjoiRU4gNTA2MDQtMToyMDE2LCAyNSBkZWdDLCAxMDAlIERvRCIsImd0aW4iOiIwOTUwNjAwMDEzNDM1MiIsImhhemFyZG91c1N1YnN0YW5jZXMiOlt7ImNhc051bWJlciI6IjIxMzI0LTQwLTMiLCJjb25jZW50cmF0aW9uUGN0IjowLjgsIm5hbWUiOiJMaXRoaXVtIGhleGFmbHVvcm9waG9zcGhhdGUifV0sImluaXRpYWxSb3VuZFRyaXBFZmZpY2llbmN5UGN0Ijo5NSwiaW50ZXJuYWxDZWxsUmVzaXN0YW5jZU1vaG0iOjE0LCJpbnRlcm5hbFBhY2tSZXNpc3RhbmNlTW9obSI6MTEwLCJtYW51ZmFjdHVyaW5nRGF0ZSI6IjIwMjYtMDgtMThUMDA6MDA6MDBaIiwibWFudWZhY3R1cmluZ1BsYWNlIjoiTcO8bmNoZW4sIERFIiwibWFya2luZ0luZm9ybWF0aW9uIjoiU2VwYXJhdGUtY29sbGVjdGlvbiBzeW1ib2wgcGVyIEFydC4gMTMoNCk7IGNhcGFjaXR5IDIwIEFoIC8gOTYwIFdoOyA0OCBWIExNVCIsIm1heGltdW1Wb2x0YWdlViI6NTQuNiwibWluaW1hbFZvbHRhZ2VWIjozOSwibm9taW5hbENhcGFjaXR5QWgiOjIwLCJub21pbmFsVm9sdGFnZVYiOjQ4LCJub3RJblVzZVRlbXBlcmF0dXJlUmFuZ2UiOnsibWF4QyI6NDUsIm1pbkMiOi0xMH0sIm5vdEluVXNlVGVtcGVyYXR1cmVSZWZlcmVuY2VUZXN0IjoiRU4gNTA2MDQtMToyMDE2IHN0b3JhZ2UgY2xhdXNlIiwib3JpZ2luYWxQb3dlckNhcGFiaWxpdHlXIjo5NjAsInBvd2VyTGltaXRNYXhXIjoxNTAwLCJwb3dlckxpbWl0TWluVyI6MjAsInByb2R1Y3RHcm91cCI6ImJhdHRlcnkiLCJyYXRlZENhcGFjaXR5S3doIjpudWxsLCJyZWN5Y2xlZENvbnRlbnRDb2JhbHRQY3QiOjEyLCJyZWN5Y2xlZENvbnRlbnRMZWFkUGN0IjowLCJyZWN5Y2xlZENvbnRlbnRMaXRoaXVtUGN0Ijo2LCJyZWN5Y2xlZENvbnRlbnROaWNrZWxQY3QiOjgsInJlbmV3YWJsZUNvbnRlbnRQY3QiOjE0LCJyb3VuZFRyaXBFZmZpY2llbmN5QXRIYWxmQ3ljbGVMaWZlUGN0Ijo5MSwic2FmZXR5TWVhc3VyZXMiOiJEbyBub3Qgb3BlbiB0aGUgcGFjay4gUmVwbGFjZSBpdCB0aHJvdWdoIGFuIGF1dGhvcmlzZWQgZGVhbGVyLiBLZWVwIGl0IGF3YXkgZnJvbSBoZWF0IGFib3ZlIDYwIGRlZ0MuIiwic3BhcmVQYXJ0c0NvbnRhY3RzIjoic3BhcmVzQGFjbWUuZXhhbXBsZSIsInN0YXRlT2ZIZWFsdGgiOnsicGFyYW1ldGVyU2V0Ijoic3RhdGlvbmFyeU9yTG10IiwicmVtYWluaW5nQ2FwYWNpdHlQY3QiOjk5LjUsInJlbWFpbmluZ1Bvd2VyQ2FwYWJpbGl0eVBjdCI6OTkuMSwic2VsZkRpc2NoYXJnZVJhdGVQY3RQZXJNb250aCI6Mn0sInN0YXRlT2ZIZWFsdGhQY3QiOm51bGwsInRlc3RSZXBvcnRSZXN1bHRzIjoiRU4gNTA2MDQtMToyMDE2IHBhc3M7IFVOIDM4LjMgcGFzczsgcmVwb3J0IEFDTUUtVFItMjAyNi0wODE1IiwidXNhYmxlRXh0aW5ndWlzaGluZ0FnZW50IjoiV2F0ZXI7IGNvb2wgYSBidXJuaW5nIHBhY2sgd2l0aCBsYXJnZSB2b2x1bWVzIG9mIHdhdGVyIiwidXNhZ2VIaXN0b3J5Ijp7ImNoYXJnZURpc2NoYXJnZUN5Y2xlcyI6NH0sIndhc3RlQmF0dGVyeUluZm9ybWF0aW9uIjoiUmV0dXJuIHRoZSBiYXR0ZXJ5IHRvIGEgYmljeWNsZSByZXRhaWxlciBvciBhIG11bmljaXBhbCBjb2xsZWN0aW9uIHBvaW50LiBEbyBub3QgcGxhY2UgaXQgaW4gaG91c2Vob2xkIHdhc3RlLiJ9LCJwcm9kdWN0TmFtZSI6IkFjbWUgTE1UIDQ4ViAyMEFoIGJhdHRlcnkgcGFjayIsInB1Ymxpc2hlZEF0IjoiMjAyNi0wOS0wMVQwOTowNTowMFoiLCJxckNvZGVVcmwiOiJodHRwczovL2RwcC5hY21lLmV4YW1wbGUvMDEvMDk1MDYwMDAxMzQzNTIvMTAvQUNNRS1MTVQtMjAyNi0wOS8yMS83ZTRhOWMzZDJmMWU4YjZhNWQ0MCIsInJlcGFpcmFiaWxpdHlTY29yZSI6bnVsbCwicmV0ZW50aW9uTG9ja2VkIjp0cnVlLCJyZXRlbnRpb25VbnRpbCI6IjIwMzYtMDgtMjlUMDk6MDU6MDBaIiwic2NoZW1hVmVyc2lvbiI6IjIuNi4wIiwic3RhdHVzIjoiYWN0aXZlIiwidXBkYXRlZEF0IjoiMjAyNi0wOS0wMVQwOTowNTowMFoiLCJ2ZXJzaW9uIjoxfQ.WlMDfygpDjYk8xHRQjpQgppwhVkUgYhyj_9iiPH_IXvXb8IKcD0cA2lFJCznB1B6llfW5Q3qiZcfRAdB78nDBw", + "jws": "eyJhbGciOiJFZERTQSIsImtpZCI6ImZlODEyYzEyZjNhYjRjZTZhYzVkYjY5YWMzNTJmOTA2Y2IxYjExZWY0M2ZiMzNlMjUyZWY3ZmY1NTIyNjM4ODkifQ.eyJiYXRjaElkIjoiQUNNRS1MTVQtMjAyNi0wOSIsImNvMmVQZXJVbml0IjpudWxsLCJjb21tb2RpdHlDb2RlIjoiODUwNzYwMDAiLCJjcmVhdGVkQXQiOiIyMDI2LTA5LTAxVDA5OjAwOjAwWiIsImlkIjoiMDE5OWEzYzItN2IxMC03ZTRhLTljM2QtMmYxZThiNmE1ZDQwIiwiandzU2lnbmF0dXJlIjpudWxsLCJtYW51ZmFjdHVyZXIiOnsiYWRkcmVzcyI6Ik11c3RlcnN0cmFzc2UgMSwgODAzMzEgTcO8bmNoZW4sIERFIiwiY291bnRyeSI6bnVsbCwiZGlkV2ViVXJsIjoiaHR0cHM6Ly9ub2RlLmFjbWUuZXhhbXBsZS8ud2VsbC1rbm93bi9kaWQuanNvbiIsIm5hbWUiOiJBY21lIFplbGxlbiBHbWJIIn0sIm1hdGVyaWFscyI6W3siY291bnRyeU9mT3JpZ2luIjoiREUiLCJuYW1lIjoiTk1DIDgxMSBjYXRob2RlIGFjdGl2ZSBtYXRlcmlhbCIsInJlY3ljbGVkUGN0Ijo4LCJ3ZWlnaHRLZyI6My4xfSx7ImNvdW50cnlPZk9yaWdpbiI6IkRFIiwibmFtZSI6IkdyYXBoaXRlIGFub2RlIGFjdGl2ZSBtYXRlcmlhbCIsInJlY3ljbGVkUGN0Ijo0LCJ3ZWlnaHRLZyI6MS45fSx7ImNvdW50cnlPZk9yaWdpbiI6IkRFIiwibmFtZSI6IkFsdW1pbml1bSBwYWNrIGhvdXNpbmciLCJyZWN5Y2xlZFBjdCI6NjAsIndlaWdodEtnIjoyLjJ9XSwicGxhY2VkT25NYXJrZXREYXRlIjoiMjAyNi0wOS0wMSIsInByb2R1Y3RHcm91cCI6ImJhdHRlcnkiLCJwcm9kdWN0R3JvdXBEYXRhIjp7ImFub2RlTWF0ZXJpYWwiOlt7ImNhc051bWJlciI6Ijc3ODItNDItNSIsIm5hbWUiOiJHcmFwaGl0ZSIsIndlaWdodFBjdCI6OTZ9LHsiY2FzTnVtYmVyIjoiOTAwMy01NS04IiwibmFtZSI6IlNCUi9DTUMgYmluZGVyIiwid2VpZ2h0UGN0Ijo0fV0sImJhdHRlcnlDaGVtaXN0cnkiOiJOTUMiLCJiYXR0ZXJ5TW9kZWxJZCI6IkFDTUUtTE1ULTQ4ViIsImJhdHRlcnlQYXNzcG9ydE51bWJlciI6IlVSTjpPREw6QkFUVDowOTUwNjAwMDEzNDM1MjpBQ01FLUxNVC0yMDI2LTA5IiwiYmF0dGVyeVN0YXR1cyI6Im9yaWdpbmFsIiwiYmF0dGVyeVR5cGUiOiJsbXQiLCJiYXR0ZXJ5V2VpZ2h0S2ciOjEyLjQsImNhdGhvZGVNYXRlcmlhbCI6W3siY2FzTnVtYmVyIjoiMzQ2NDE3LTk3LTgiLCJuYW1lIjoiTGlOaTAuOE1uMC4xQ28wLjFPMiIsIndlaWdodFBjdCI6OTZ9LHsiY2FzTnVtYmVyIjoiMjQ5MzctNzktOSIsIm5hbWUiOiJQVkRGIGJpbmRlciIsIndlaWdodFBjdCI6Mn0seyJjYXNOdW1iZXIiOiIxMzMzLTg2LTQiLCJuYW1lIjoiQ29uZHVjdGl2ZSBjYXJib24gYmxhY2siLCJ3ZWlnaHRQY3QiOjJ9XSwiY28yZVBlclVuaXRLZyI6ODYuNCwiY29tcG9uZW50UGFydE51bWJlcnMiOlsiQUNNRS1DRUxMLTIxNzAwLU5NQyIsIkFDTUUtQk1TLTEzUy1WMSIsIkFDTUUtTE1ULUVOQ0wtNDgiXSwiY3JpdGljYWxSYXdNYXRlcmlhbHMiOlt7ImNhc051bWJlciI6Ijc0NDAtNDgtNCIsIm5hbWUiOiJDb2JhbHQiLCJ3ZWlnaHRHcmFtcyI6MzEwfSx7ImNhc051bWJlciI6Ijc0MzktOTMtMiIsIm5hbWUiOiJMaXRoaXVtIiwid2VpZ2h0R3JhbXMiOjQyMH0seyJjYXNOdW1iZXIiOiI3NzgyLTQyLTUiLCJuYW1lIjoiTmF0dXJhbCBncmFwaGl0ZSIsIndlaWdodEdyYW1zIjoxODAwfV0sImN5Y2xlTGlmZVRlc3RDUmF0ZSI6MSwiZGlzYXNzZW1ibHlJbnN0cnVjdGlvbnNVcmwiOiJodHRwczovL2FjbWUuZXhhbXBsZS9zZXJ2aWNlL2xtdC00OC9kaXNhc3NlbWJseSIsImR5bmFtaWNQZXJmb3JtYW5jZSI6eyJjYXBhY2l0eUZhZGVQY3QiOjAuNSwiZXhwZWN0ZWRMaWZldGltZUN5Y2xlcyI6MTE5NSwiaW50ZXJuYWxSZXNpc3RhbmNlTW9obSI6MTEwLjQsInJhdGVkQ2FwYWNpdHlBaCI6MTkuOSwicm91bmRUcmlwRWZmaWNpZW5jeVBjdCI6OTQuOH0sImVsZWN0cm9seXRlTWF0ZXJpYWwiOlt7ImNhc051bWJlciI6Ijk2LTQ5LTEiLCJuYW1lIjoiRXRoeWxlbmUgY2FyYm9uYXRlIiwid2VpZ2h0UGN0IjozOH0seyJjYXNOdW1iZXIiOiI2MTYtMzgtNiIsIm5hbWUiOiJEaW1ldGh5bCBjYXJib25hdGUiLCJ3ZWlnaHRQY3QiOjQ5fSx7ImNhc051bWJlciI6IjIxMzI0LTQwLTMiLCJuYW1lIjoiTGl0aGl1bSBoZXhhZmx1b3JvcGhvc3BoYXRlIiwid2VpZ2h0UGN0IjoxM31dLCJldURlY2xhcmF0aW9uT2ZDb25mb3JtaXR5IjoiRVUtRG9DIEFDTUUtMjAyNi1MTVQtMDkwMSwgcGVyIFJlZ3VsYXRpb24gKEVVKSAyMDIzLzE1NDIgQXJ0LiAxOCIsImV4cGVjdGVkTGlmZXRpbWVDeWNsZXMiOjEyMDAsImV4cGVjdGVkTGlmZXRpbWVSZWZlcmVuY2VUZXN0IjoiRU4gNTA2MDQtMToyMDE2LCAyNSBkZWdDLCAxMDAlIERvRCIsImhhemFyZG91c1N1YnN0YW5jZXMiOlt7ImNhc051bWJlciI6IjIxMzI0LTQwLTMiLCJjb25jZW50cmF0aW9uUGN0IjowLjgsIm5hbWUiOiJMaXRoaXVtIGhleGFmbHVvcm9waG9zcGhhdGUifV0sImluaXRpYWxSb3VuZFRyaXBFZmZpY2llbmN5UGN0Ijo5NSwiaW50ZXJuYWxDZWxsUmVzaXN0YW5jZU1vaG0iOjE0LCJpbnRlcm5hbFBhY2tSZXNpc3RhbmNlTW9obSI6MTEwLCJtYW51ZmFjdHVyaW5nRGF0ZSI6IjIwMjYtMDgtMThUMDA6MDA6MDBaIiwibWFudWZhY3R1cmluZ1BsYWNlIjoiTcO8bmNoZW4sIERFIiwibWFya2luZ0luZm9ybWF0aW9uIjoiU2VwYXJhdGUtY29sbGVjdGlvbiBzeW1ib2wgcGVyIEFydC4gMTMoNCk7IGNhcGFjaXR5IDIwIEFoIC8gOTYwIFdoOyA0OCBWIExNVCIsIm1heGltdW1Wb2x0YWdlViI6NTQuNiwibWluaW1hbFZvbHRhZ2VWIjozOSwibm9taW5hbENhcGFjaXR5QWgiOjIwLCJub21pbmFsVm9sdGFnZVYiOjQ4LCJub3RJblVzZVRlbXBlcmF0dXJlUmFuZ2UiOnsibWF4QyI6NDUsIm1pbkMiOi0xMH0sIm5vdEluVXNlVGVtcGVyYXR1cmVSZWZlcmVuY2VUZXN0IjoiRU4gNTA2MDQtMToyMDE2IHN0b3JhZ2UgY2xhdXNlIiwib3JpZ2luYWxQb3dlckNhcGFiaWxpdHlXIjo5NjAsInBvd2VyTGltaXRNYXhXIjoxNTAwLCJwb3dlckxpbWl0TWluVyI6MjAsInByb2R1Y3RHcm91cCI6ImJhdHRlcnkiLCJwcm9kdWN0SWRlbnRpZmllciI6eyJndGluIjoiMDk1MDYwMDAxMzQzNTIiLCJzY2hlbWUiOiJnczEifSwicmF0ZWRDYXBhY2l0eUt3aCI6bnVsbCwicmVjeWNsZWRDb250ZW50Q29iYWx0UGN0IjoxMiwicmVjeWNsZWRDb250ZW50TGVhZFBjdCI6MCwicmVjeWNsZWRDb250ZW50TGl0aGl1bVBjdCI6NiwicmVjeWNsZWRDb250ZW50Tmlja2VsUGN0Ijo4LCJyZW5ld2FibGVDb250ZW50UGN0IjoxNCwicm91bmRUcmlwRWZmaWNpZW5jeUF0SGFsZkN5Y2xlTGlmZVBjdCI6OTEsInNhZmV0eU1lYXN1cmVzIjoiRG8gbm90IG9wZW4gdGhlIHBhY2suIFJlcGxhY2UgaXQgdGhyb3VnaCBhbiBhdXRob3Jpc2VkIGRlYWxlci4gS2VlcCBpdCBhd2F5IGZyb20gaGVhdCBhYm92ZSA2MCBkZWdDLiIsInNwYXJlUGFydHNDb250YWN0cyI6InNwYXJlc0BhY21lLmV4YW1wbGUiLCJzdGF0ZU9mSGVhbHRoIjp7InBhcmFtZXRlclNldCI6InN0YXRpb25hcnlPckxtdCIsInJlbWFpbmluZ0NhcGFjaXR5UGN0Ijo5OS41LCJyZW1haW5pbmdQb3dlckNhcGFiaWxpdHlQY3QiOjk5LjEsInNlbGZEaXNjaGFyZ2VSYXRlUGN0UGVyTW9udGgiOjJ9LCJzdGF0ZU9mSGVhbHRoUGN0IjpudWxsLCJ0ZXN0UmVwb3J0UmVzdWx0cyI6IkVOIDUwNjA0LTE6MjAxNiBwYXNzOyBVTiAzOC4zIHBhc3M7IHJlcG9ydCBBQ01FLVRSLTIwMjYtMDgxNSIsInVzYWJsZUV4dGluZ3Vpc2hpbmdBZ2VudCI6IldhdGVyOyBjb29sIGEgYnVybmluZyBwYWNrIHdpdGggbGFyZ2Ugdm9sdW1lcyBvZiB3YXRlciIsInVzYWdlSGlzdG9yeSI6eyJjaGFyZ2VEaXNjaGFyZ2VDeWNsZXMiOjR9LCJ3YXN0ZUJhdHRlcnlJbmZvcm1hdGlvbiI6IlJldHVybiB0aGUgYmF0dGVyeSB0byBhIGJpY3ljbGUgcmV0YWlsZXIgb3IgYSBtdW5pY2lwYWwgY29sbGVjdGlvbiBwb2ludC4gRG8gbm90IHBsYWNlIGl0IGluIGhvdXNlaG9sZCB3YXN0ZS4ifSwicHJvZHVjdE5hbWUiOiJBY21lIExNVCA0OFYgMjBBaCBiYXR0ZXJ5IHBhY2siLCJwdWJsaXNoZWRBdCI6IjIwMjYtMDktMDFUMDk6MDU6MDBaIiwicXJDb2RlVXJsIjoiaHR0cHM6Ly9kcHAuYWNtZS5leGFtcGxlLzAxLzA5NTA2MDAwMTM0MzUyLzIxLzdlNGE5YzNkMmYxZThiNmE1ZDQwIiwicmVwYWlyYWJpbGl0eVNjb3JlIjpudWxsLCJyZXRlbnRpb25Mb2NrZWQiOnRydWUsInJldGVudGlvblVudGlsIjoiMjAzNi0wOC0yOVQwOTowNTowMFoiLCJzY2hlbWFWZXJzaW9uIjoiMi43LjAiLCJzdGF0dXMiOiJhY3RpdmUiLCJ1cGRhdGVkQXQiOiIyMDI2LTA5LTAxVDA5OjA1OjAwWiIsInZlcnNpb24iOjF9.55m5_OYvkiKUN9QV9BNB3JeqMOvkYjwYCiPxup_xciGjUrYtHOcaDdy8ULvSAy5NRGpT9p90RrajgBb0Iv5kCg", "payload": { "batchId": "ACME-LMT-2026-09", "co2ePerUnit": null, @@ -553,7 +560,6 @@ "euDeclarationOfConformity": "EU-DoC ACME-2026-LMT-0901, per Regulation (EU) 2023/1542 Art. 18", "expectedLifetimeCycles": 1200, "expectedLifetimeReferenceTest": "EN 50604-1:2016, 25 degC, 100% DoD", - "gtin": "09506000134352", "hazardousSubstances": [ { "casNumber": "21324-40-3", @@ -580,6 +586,10 @@ "powerLimitMaxW": 1500.0, "powerLimitMinW": 20.0, "productGroup": "battery", + "productIdentifier": { + "gtin": "09506000134352", + "scheme": "gs1" + }, "ratedCapacityKwh": null, "recycledContentCobaltPct": 12.0, "recycledContentLeadPct": 0.0, @@ -605,11 +615,11 @@ }, "productName": "Acme LMT 48V 20Ah battery pack", "publishedAt": "2026-09-01T09:05:00Z", - "qrCodeUrl": "https://dpp.acme.example/01/09506000134352/10/ACME-LMT-2026-09/21/7e4a9c3d2f1e8b6a5d40", + "qrCodeUrl": "https://dpp.acme.example/01/09506000134352/21/7e4a9c3d2f1e8b6a5d40", "repairabilityScore": null, "retentionLocked": true, "retentionUntil": "2036-08-29T09:05:00Z", - "schemaVersion": "2.6.0", + "schemaVersion": "2.7.0", "status": "active", "updatedAt": "2026-09-01T09:05:00Z", "version": 1 @@ -617,23 +627,24 @@ }, "manifest": { "contentHashes": { - "auditEntries": "d3e3661902ae8ebc797d545c6124173a74c3b086b2bba8399628df6b53db79e0", + "auditEntries": "46110fef3e331eab68e2616292edcc10d2bfcdfc16fa7bb0409cecdf7cb86a33", "eolEvent": "7cb65bb485538e109105404e15c7bc411aa3050694fa4d63339c70dbe431d3a0", - "fullView": "70f5a9779744ad58b77cebed129ecec4c24d7c5bbf3b65be4b3c61c4be5f0e80", - "publicView": "7ada532408d7c20c385804ca00d0a6a969f1448c796775c14657d7932ecf392a", + "fullView": "e8c5a8fbbddd67948a3ee3eb7abfc07427c2ff2ab23eeba3dc4dc9bbf12cbdbd", + "publicView": "74c1a1eda478cc2643b8652bf188f47e449b851ae64ae05f922de314a9249b83", "transferChain": "52e0fd4f91be57a81e6219557f5f3c4f2331b0cbbc9461d376c967dae5445445" }, - "coreVersion": "0.20.0", + "coreVersion": "0.21.0", "createdAt": "2026-09-25T12:00:00Z", "formatVersion": "1", "issuerDid": "did:web:node.acme.example", "nodeVersion": "0.14.0", "passportId": "0199a3c2-7b10-7e4a-9c3d-2f1e8b6a5d40" }, - "manifestJws": "eyJhbGciOiJFZERTQSIsImtpZCI6ImZlODEyYzEyZjNhYjRjZTZhYzVkYjY5YWMzNTJmOTA2Y2IxYjExZWY0M2ZiMzNlMjUyZWY3ZmY1NTIyNjM4ODkifQ.eyJjb250ZW50SGFzaGVzIjp7ImF1ZGl0RW50cmllcyI6ImQzZTM2NjE5MDJhZThlYmM3OTdkNTQ1YzYxMjQxNzNhNzRjM2IwODZiMmJiYTgzOTk2MjhkZjZiNTNkYjc5ZTAiLCJlb2xFdmVudCI6IjdjYjY1YmI0ODU1MzhlMTA5MTA1NDA0ZTE1YzdiYzQxMWFhMzA1MDY5NGZhNGQ2MzMzOWM3MGRiZTQzMWQzYTAiLCJmdWxsVmlldyI6IjcwZjVhOTc3OTc0NGFkNThiNzdjZWJlZDEyOWVjZWM0YzI0ZDdjNWJiZjNiNjViZTRiM2M2MWM0YmU1ZjBlODAiLCJwdWJsaWNWaWV3IjoiN2FkYTUzMjQwOGQ3YzIwYzM4NTgwNGNhMDBkMGE2YTk2OWYxNDQ4Yzc5Njc3NWMxNDY1N2Q3OTMyZWNmMzkyYSIsInRyYW5zZmVyQ2hhaW4iOiI1MmUwZmQ0ZjkxYmU1N2E4MWU2MjE5NTU3ZjVmM2M0ZjIzMzFiMGNiYmM5NDYxZDM3NmM5NjdkYWU1NDQ1NDQ1In0sImNvcmVWZXJzaW9uIjoiMC4yMC4wIiwiY3JlYXRlZEF0IjoiMjAyNi0wOS0yNVQxMjowMDowMFoiLCJmb3JtYXRWZXJzaW9uIjoiMSIsImlzc3VlckRpZCI6ImRpZDp3ZWI6bm9kZS5hY21lLmV4YW1wbGUiLCJub2RlVmVyc2lvbiI6IjAuMTQuMCIsInBhc3Nwb3J0SWQiOiIwMTk5YTNjMi03YjEwLTdlNGEtOWMzZC0yZjFlOGI2YTVkNDAifQ.Y4XyqkZCD-XAtSYTICoyCngJx7sDCk7sYcdyezYe7ZDDY0k4w8WhK1oUaB5x_zg-malEGWJ_dXIVyI0P_M_qBg", + "manifestJws": "eyJhbGciOiJFZERTQSIsImtpZCI6ImZlODEyYzEyZjNhYjRjZTZhYzVkYjY5YWMzNTJmOTA2Y2IxYjExZWY0M2ZiMzNlMjUyZWY3ZmY1NTIyNjM4ODkifQ.eyJjb250ZW50SGFzaGVzIjp7ImF1ZGl0RW50cmllcyI6IjQ2MTEwZmVmM2UzMzFlYWI2OGUyNjE2MjkyZWRjYzEwZDJiZmNkZmMxNmZhN2JiMDQwOWNlY2RmN2NiODZhMzMiLCJlb2xFdmVudCI6IjdjYjY1YmI0ODU1MzhlMTA5MTA1NDA0ZTE1YzdiYzQxMWFhMzA1MDY5NGZhNGQ2MzMzOWM3MGRiZTQzMWQzYTAiLCJmdWxsVmlldyI6ImU4YzVhOGZiYmRkZDY3OTQ4YTNlZTNlYjdhYmZjMDc0MjdjMmZmMmFiMjNlZWJhM2RjNGRjOWJiZjEyY2JkYmQiLCJwdWJsaWNWaWV3IjoiNzRjMWExZWRhNDc4Y2MyNjQzYjg2NTJiZjE4OGY0N2U0NDliODUxYWU2NGFlMDVmOTIyZGUzMTRhOTI0OWI4MyIsInRyYW5zZmVyQ2hhaW4iOiI1MmUwZmQ0ZjkxYmU1N2E4MWU2MjE5NTU3ZjVmM2M0ZjIzMzFiMGNiYmM5NDYxZDM3NmM5NjdkYWU1NDQ1NDQ1In0sImNvcmVWZXJzaW9uIjoiMC4yMS4wIiwiY3JlYXRlZEF0IjoiMjAyNi0wOS0yNVQxMjowMDowMFoiLCJmb3JtYXRWZXJzaW9uIjoiMSIsImlzc3VlckRpZCI6ImRpZDp3ZWI6bm9kZS5hY21lLmV4YW1wbGUiLCJub2RlVmVyc2lvbiI6IjAuMTQuMCIsInBhc3Nwb3J0SWQiOiIwMTk5YTNjMi03YjEwLTdlNGEtOWMzZC0yZjFlOGI2YTVkNDAifQ.nR0d3UZbNRttz9D0VL9qGHN9dQwzFQGa4eRni8N926diP9G-qB4nGbqgqyz9VqaL6DjKReENzDldyo87sev_BA", "publicView": { - "jws": "eyJhbGciOiJFZERTQSIsImtpZCI6ImZlODEyYzEyZjNhYjRjZTZhYzVkYjY5YWMzNTJmOTA2Y2IxYjExZWY0M2ZiMzNlMjUyZWY3ZmY1NTIyNjM4ODkifQ.eyJjbzJlUGVyVW5pdCI6bnVsbCwiY29tbW9kaXR5Q29kZSI6Ijg1MDc2MDAwIiwiY3JlYXRlZEF0IjoiMjAyNi0wOS0wMVQwOTowMDowMFoiLCJpZCI6IjAxOTlhM2MyLTdiMTAtN2U0YS05YzNkLTJmMWU4YjZhNWQ0MCIsIm1hbnVmYWN0dXJlciI6eyJhZGRyZXNzIjoiTXVzdGVyc3RyYXNzZSAxLCA4MDMzMSBNw7xuY2hlbiwgREUiLCJjb3VudHJ5IjpudWxsLCJkaWRXZWJVcmwiOiJodHRwczovL25vZGUuYWNtZS5leGFtcGxlLy53ZWxsLWtub3duL2RpZC5qc29uIiwibmFtZSI6IkFjbWUgWmVsbGVuIEdtYkgifSwibWF0ZXJpYWxzIjpbeyJjb3VudHJ5T2ZPcmlnaW4iOiJERSIsIm5hbWUiOiJOTUMgODExIGNhdGhvZGUgYWN0aXZlIG1hdGVyaWFsIiwicmVjeWNsZWRQY3QiOjgsIndlaWdodEtnIjozLjF9LHsiY291bnRyeU9mT3JpZ2luIjoiREUiLCJuYW1lIjoiR3JhcGhpdGUgYW5vZGUgYWN0aXZlIG1hdGVyaWFsIiwicmVjeWNsZWRQY3QiOjQsIndlaWdodEtnIjoxLjl9LHsiY291bnRyeU9mT3JpZ2luIjoiREUiLCJuYW1lIjoiQWx1bWluaXVtIHBhY2sgaG91c2luZyIsInJlY3ljbGVkUGN0Ijo2MCwid2VpZ2h0S2ciOjIuMn1dLCJwbGFjZWRPbk1hcmtldERhdGUiOiIyMDI2LTA5LTAxIiwicHJvZHVjdEdyb3VwIjoiYmF0dGVyeSIsInByb2R1Y3RHcm91cERhdGEiOnsiYmF0dGVyeUNoZW1pc3RyeSI6Ik5NQyIsImJhdHRlcnlNb2RlbElkIjoiQUNNRS1MTVQtNDhWIiwiYmF0dGVyeVBhc3Nwb3J0TnVtYmVyIjoiVVJOOk9ETDpCQVRUOjA5NTA2MDAwMTM0MzUyOkFDTUUtTE1ULTIwMjYtMDkiLCJiYXR0ZXJ5VHlwZSI6ImxtdCIsImJhdHRlcnlXZWlnaHRLZyI6MTIuNCwiY28yZVBlclVuaXRLZyI6ODYuNCwiY3JpdGljYWxSYXdNYXRlcmlhbHMiOlt7ImNhc051bWJlciI6Ijc0NDAtNDgtNCIsIm5hbWUiOiJDb2JhbHQiLCJ3ZWlnaHRHcmFtcyI6MzEwfSx7ImNhc051bWJlciI6Ijc0MzktOTMtMiIsIm5hbWUiOiJMaXRoaXVtIiwid2VpZ2h0R3JhbXMiOjQyMH0seyJjYXNOdW1iZXIiOiI3NzgyLTQyLTUiLCJuYW1lIjoiTmF0dXJhbCBncmFwaGl0ZSIsIndlaWdodEdyYW1zIjoxODAwfV0sImN5Y2xlTGlmZVRlc3RDUmF0ZSI6MSwiZXVEZWNsYXJhdGlvbk9mQ29uZm9ybWl0eSI6IkVVLURvQyBBQ01FLTIwMjYtTE1ULTA5MDEsIHBlciBSZWd1bGF0aW9uIChFVSkgMjAyMy8xNTQyIEFydC4gMTgiLCJleHBlY3RlZExpZmV0aW1lQ3ljbGVzIjoxMjAwLCJleHBlY3RlZExpZmV0aW1lUmVmZXJlbmNlVGVzdCI6IkVOIDUwNjA0LTE6MjAxNiwgMjUgZGVnQywgMTAwJSBEb0QiLCJndGluIjoiMDk1MDYwMDAxMzQzNTIiLCJoYXphcmRvdXNTdWJzdGFuY2VzIjpbeyJjYXNOdW1iZXIiOiIyMTMyNC00MC0zIiwiY29uY2VudHJhdGlvblBjdCI6MC44LCJuYW1lIjoiTGl0aGl1bSBoZXhhZmx1b3JvcGhvc3BoYXRlIn1dLCJpbml0aWFsUm91bmRUcmlwRWZmaWNpZW5jeVBjdCI6OTUsImludGVybmFsQ2VsbFJlc2lzdGFuY2VNb2htIjoxNCwiaW50ZXJuYWxQYWNrUmVzaXN0YW5jZU1vaG0iOjExMCwibWFudWZhY3R1cmluZ0RhdGUiOiIyMDI2LTA4LTE4VDAwOjAwOjAwWiIsIm1hbnVmYWN0dXJpbmdQbGFjZSI6Ik3DvG5jaGVuLCBERSIsIm1hcmtpbmdJbmZvcm1hdGlvbiI6IlNlcGFyYXRlLWNvbGxlY3Rpb24gc3ltYm9sIHBlciBBcnQuIDEzKDQpOyBjYXBhY2l0eSAyMCBBaCAvIDk2MCBXaDsgNDggViBMTVQiLCJtYXhpbXVtVm9sdGFnZVYiOjU0LjYsIm1pbmltYWxWb2x0YWdlViI6MzksIm5vbWluYWxDYXBhY2l0eUFoIjoyMCwibm9taW5hbFZvbHRhZ2VWIjo0OCwibm90SW5Vc2VUZW1wZXJhdHVyZVJhbmdlIjp7Im1heEMiOjQ1LCJtaW5DIjotMTB9LCJub3RJblVzZVRlbXBlcmF0dXJlUmVmZXJlbmNlVGVzdCI6IkVOIDUwNjA0LTE6MjAxNiBzdG9yYWdlIGNsYXVzZSIsIm9yaWdpbmFsUG93ZXJDYXBhYmlsaXR5VyI6OTYwLCJwb3dlckxpbWl0TWF4VyI6MTUwMCwicG93ZXJMaW1pdE1pblciOjIwLCJwcm9kdWN0R3JvdXAiOiJiYXR0ZXJ5IiwicmF0ZWRDYXBhY2l0eUt3aCI6bnVsbCwicmVjeWNsZWRDb250ZW50Q29iYWx0UGN0IjoxMiwicmVjeWNsZWRDb250ZW50TGVhZFBjdCI6MCwicmVjeWNsZWRDb250ZW50TGl0aGl1bVBjdCI6NiwicmVjeWNsZWRDb250ZW50Tmlja2VsUGN0Ijo4LCJyZW5ld2FibGVDb250ZW50UGN0IjoxNCwicm91bmRUcmlwRWZmaWNpZW5jeUF0SGFsZkN5Y2xlTGlmZVBjdCI6OTEsInVzYWJsZUV4dGluZ3Vpc2hpbmdBZ2VudCI6IldhdGVyOyBjb29sIGEgYnVybmluZyBwYWNrIHdpdGggbGFyZ2Ugdm9sdW1lcyBvZiB3YXRlciIsIndhc3RlQmF0dGVyeUluZm9ybWF0aW9uIjoiUmV0dXJuIHRoZSBiYXR0ZXJ5IHRvIGEgYmljeWNsZSByZXRhaWxlciBvciBhIG11bmljaXBhbCBjb2xsZWN0aW9uIHBvaW50LiBEbyBub3QgcGxhY2UgaXQgaW4gaG91c2Vob2xkIHdhc3RlLiJ9LCJwcm9kdWN0TmFtZSI6IkFjbWUgTE1UIDQ4ViAyMEFoIGJhdHRlcnkgcGFjayIsInB1Ymxpc2hlZEF0IjoiMjAyNi0wOS0wMVQwOTowNTowMFoiLCJxckNvZGVVcmwiOiJodHRwczovL2RwcC5hY21lLmV4YW1wbGUvMDEvMDk1MDYwMDAxMzQzNTIvMTAvQUNNRS1MTVQtMjAyNi0wOS8yMS83ZTRhOWMzZDJmMWU4YjZhNWQ0MCIsInJlcGFpcmFiaWxpdHlTY29yZSI6bnVsbCwicmV0ZW50aW9uVW50aWwiOiIyMDM2LTA4LTI5VDA5OjA1OjAwWiIsInNjaGVtYVZlcnNpb24iOiIyLjYuMCIsInN0YXR1cyI6ImFjdGl2ZSIsInVwZGF0ZWRBdCI6IjIwMjYtMDktMDFUMDk6MDU6MDBaIiwidmVyc2lvbiI6MX0.OnjeF7qUrlZOKc-Xx8u-ThMayslJBs7HPAmpZBFKvyJpivIqOrN5lTCW15PsoyBeSOpjmRq3Mm_UC99B-Ya-Dg", + "jws": "eyJhbGciOiJFZERTQSIsImtpZCI6ImZlODEyYzEyZjNhYjRjZTZhYzVkYjY5YWMzNTJmOTA2Y2IxYjExZWY0M2ZiMzNlMjUyZWY3ZmY1NTIyNjM4ODkifQ.eyJiYXRjaElkIjoiQUNNRS1MTVQtMjAyNi0wOSIsImNvMmVQZXJVbml0IjpudWxsLCJjb21tb2RpdHlDb2RlIjoiODUwNzYwMDAiLCJjcmVhdGVkQXQiOiIyMDI2LTA5LTAxVDA5OjAwOjAwWiIsImlkIjoiMDE5OWEzYzItN2IxMC03ZTRhLTljM2QtMmYxZThiNmE1ZDQwIiwibWFudWZhY3R1cmVyIjp7ImFkZHJlc3MiOiJNdXN0ZXJzdHJhc3NlIDEsIDgwMzMxIE3DvG5jaGVuLCBERSIsImNvdW50cnkiOm51bGwsImRpZFdlYlVybCI6Imh0dHBzOi8vbm9kZS5hY21lLmV4YW1wbGUvLndlbGwta25vd24vZGlkLmpzb24iLCJuYW1lIjoiQWNtZSBaZWxsZW4gR21iSCJ9LCJtYXRlcmlhbHMiOlt7ImNvdW50cnlPZk9yaWdpbiI6IkRFIiwibmFtZSI6Ik5NQyA4MTEgY2F0aG9kZSBhY3RpdmUgbWF0ZXJpYWwiLCJyZWN5Y2xlZFBjdCI6OCwid2VpZ2h0S2ciOjMuMX0seyJjb3VudHJ5T2ZPcmlnaW4iOiJERSIsIm5hbWUiOiJHcmFwaGl0ZSBhbm9kZSBhY3RpdmUgbWF0ZXJpYWwiLCJyZWN5Y2xlZFBjdCI6NCwid2VpZ2h0S2ciOjEuOX0seyJjb3VudHJ5T2ZPcmlnaW4iOiJERSIsIm5hbWUiOiJBbHVtaW5pdW0gcGFjayBob3VzaW5nIiwicmVjeWNsZWRQY3QiOjYwLCJ3ZWlnaHRLZyI6Mi4yfV0sInBsYWNlZE9uTWFya2V0RGF0ZSI6IjIwMjYtMDktMDEiLCJwcm9kdWN0R3JvdXAiOiJiYXR0ZXJ5IiwicHJvZHVjdEdyb3VwRGF0YSI6eyJiYXR0ZXJ5Q2hlbWlzdHJ5IjoiTk1DIiwiYmF0dGVyeU1vZGVsSWQiOiJBQ01FLUxNVC00OFYiLCJiYXR0ZXJ5UGFzc3BvcnROdW1iZXIiOiJVUk46T0RMOkJBVFQ6MDk1MDYwMDAxMzQzNTI6QUNNRS1MTVQtMjAyNi0wOSIsImJhdHRlcnlUeXBlIjoibG10IiwiYmF0dGVyeVdlaWdodEtnIjoxMi40LCJjbzJlUGVyVW5pdEtnIjo4Ni40LCJjcml0aWNhbFJhd01hdGVyaWFscyI6W3siY2FzTnVtYmVyIjoiNzQ0MC00OC00IiwibmFtZSI6IkNvYmFsdCIsIndlaWdodEdyYW1zIjozMTB9LHsiY2FzTnVtYmVyIjoiNzQzOS05My0yIiwibmFtZSI6IkxpdGhpdW0iLCJ3ZWlnaHRHcmFtcyI6NDIwfSx7ImNhc051bWJlciI6Ijc3ODItNDItNSIsIm5hbWUiOiJOYXR1cmFsIGdyYXBoaXRlIiwid2VpZ2h0R3JhbXMiOjE4MDB9XSwiY3ljbGVMaWZlVGVzdENSYXRlIjoxLCJldURlY2xhcmF0aW9uT2ZDb25mb3JtaXR5IjoiRVUtRG9DIEFDTUUtMjAyNi1MTVQtMDkwMSwgcGVyIFJlZ3VsYXRpb24gKEVVKSAyMDIzLzE1NDIgQXJ0LiAxOCIsImV4cGVjdGVkTGlmZXRpbWVDeWNsZXMiOjEyMDAsImV4cGVjdGVkTGlmZXRpbWVSZWZlcmVuY2VUZXN0IjoiRU4gNTA2MDQtMToyMDE2LCAyNSBkZWdDLCAxMDAlIERvRCIsImhhemFyZG91c1N1YnN0YW5jZXMiOlt7ImNhc051bWJlciI6IjIxMzI0LTQwLTMiLCJjb25jZW50cmF0aW9uUGN0IjowLjgsIm5hbWUiOiJMaXRoaXVtIGhleGFmbHVvcm9waG9zcGhhdGUifV0sImluaXRpYWxSb3VuZFRyaXBFZmZpY2llbmN5UGN0Ijo5NSwiaW50ZXJuYWxDZWxsUmVzaXN0YW5jZU1vaG0iOjE0LCJpbnRlcm5hbFBhY2tSZXNpc3RhbmNlTW9obSI6MTEwLCJtYW51ZmFjdHVyaW5nRGF0ZSI6IjIwMjYtMDgtMThUMDA6MDA6MDBaIiwibWFudWZhY3R1cmluZ1BsYWNlIjoiTcO8bmNoZW4sIERFIiwibWFya2luZ0luZm9ybWF0aW9uIjoiU2VwYXJhdGUtY29sbGVjdGlvbiBzeW1ib2wgcGVyIEFydC4gMTMoNCk7IGNhcGFjaXR5IDIwIEFoIC8gOTYwIFdoOyA0OCBWIExNVCIsIm1heGltdW1Wb2x0YWdlViI6NTQuNiwibWluaW1hbFZvbHRhZ2VWIjozOSwibm9taW5hbENhcGFjaXR5QWgiOjIwLCJub21pbmFsVm9sdGFnZVYiOjQ4LCJub3RJblVzZVRlbXBlcmF0dXJlUmFuZ2UiOnsibWF4QyI6NDUsIm1pbkMiOi0xMH0sIm5vdEluVXNlVGVtcGVyYXR1cmVSZWZlcmVuY2VUZXN0IjoiRU4gNTA2MDQtMToyMDE2IHN0b3JhZ2UgY2xhdXNlIiwib3JpZ2luYWxQb3dlckNhcGFiaWxpdHlXIjo5NjAsInBvd2VyTGltaXRNYXhXIjoxNTAwLCJwb3dlckxpbWl0TWluVyI6MjAsInByb2R1Y3RHcm91cCI6ImJhdHRlcnkiLCJwcm9kdWN0SWRlbnRpZmllciI6eyJndGluIjoiMDk1MDYwMDAxMzQzNTIiLCJzY2hlbWUiOiJnczEifSwicmF0ZWRDYXBhY2l0eUt3aCI6bnVsbCwicmVjeWNsZWRDb250ZW50Q29iYWx0UGN0IjoxMiwicmVjeWNsZWRDb250ZW50TGVhZFBjdCI6MCwicmVjeWNsZWRDb250ZW50TGl0aGl1bVBjdCI6NiwicmVjeWNsZWRDb250ZW50Tmlja2VsUGN0Ijo4LCJyZW5ld2FibGVDb250ZW50UGN0IjoxNCwicm91bmRUcmlwRWZmaWNpZW5jeUF0SGFsZkN5Y2xlTGlmZVBjdCI6OTEsInVzYWJsZUV4dGluZ3Vpc2hpbmdBZ2VudCI6IldhdGVyOyBjb29sIGEgYnVybmluZyBwYWNrIHdpdGggbGFyZ2Ugdm9sdW1lcyBvZiB3YXRlciIsIndhc3RlQmF0dGVyeUluZm9ybWF0aW9uIjoiUmV0dXJuIHRoZSBiYXR0ZXJ5IHRvIGEgYmljeWNsZSByZXRhaWxlciBvciBhIG11bmljaXBhbCBjb2xsZWN0aW9uIHBvaW50LiBEbyBub3QgcGxhY2UgaXQgaW4gaG91c2Vob2xkIHdhc3RlLiJ9LCJwcm9kdWN0TmFtZSI6IkFjbWUgTE1UIDQ4ViAyMEFoIGJhdHRlcnkgcGFjayIsInB1Ymxpc2hlZEF0IjoiMjAyNi0wOS0wMVQwOTowNTowMFoiLCJxckNvZGVVcmwiOiJodHRwczovL2RwcC5hY21lLmV4YW1wbGUvMDEvMDk1MDYwMDAxMzQzNTIvMjEvN2U0YTljM2QyZjFlOGI2YTVkNDAiLCJyZXBhaXJhYmlsaXR5U2NvcmUiOm51bGwsInJldGVudGlvblVudGlsIjoiMjAzNi0wOC0yOVQwOTowNTowMFoiLCJzY2hlbWFWZXJzaW9uIjoiMi43LjAiLCJzdGF0dXMiOiJhY3RpdmUiLCJ1cGRhdGVkQXQiOiIyMDI2LTA5LTAxVDA5OjA1OjAwWiIsInZlcnNpb24iOjF9.LHi5ToX900cUN4vak8l1zOZ5xc1H9jW25fL4XUWuxz2JU1_3PxxrjRUTyY9RctPxPSTWmS40fUWurEZnTdE3Dw", "payload": { + "batchId": "ACME-LMT-2026-09", "co2ePerUnit": null, "commodityCode": "85076000", "createdAt": "2026-09-01T09:00:00Z", @@ -694,7 +705,6 @@ "euDeclarationOfConformity": "EU-DoC ACME-2026-LMT-0901, per Regulation (EU) 2023/1542 Art. 18", "expectedLifetimeCycles": 1200, "expectedLifetimeReferenceTest": "EN 50604-1:2016, 25 degC, 100% DoD", - "gtin": "09506000134352", "hazardousSubstances": [ { "casNumber": "21324-40-3", @@ -721,6 +731,10 @@ "powerLimitMaxW": 1500.0, "powerLimitMinW": 20.0, "productGroup": "battery", + "productIdentifier": { + "gtin": "09506000134352", + "scheme": "gs1" + }, "ratedCapacityKwh": null, "recycledContentCobaltPct": 12.0, "recycledContentLeadPct": 0.0, @@ -733,10 +747,10 @@ }, "productName": "Acme LMT 48V 20Ah battery pack", "publishedAt": "2026-09-01T09:05:00Z", - "qrCodeUrl": "https://dpp.acme.example/01/09506000134352/10/ACME-LMT-2026-09/21/7e4a9c3d2f1e8b6a5d40", + "qrCodeUrl": "https://dpp.acme.example/01/09506000134352/21/7e4a9c3d2f1e8b6a5d40", "repairabilityScore": null, "retentionUntil": "2036-08-29T09:05:00Z", - "schemaVersion": "2.6.0", + "schemaVersion": "2.7.0", "status": "active", "updatedAt": "2026-09-01T09:05:00Z", "version": 1 diff --git a/site/dpp-landing/public/verify/examples/08-hidden-field-injection.json b/site/dpp-landing/public/verify/examples/08-hidden-field-injection.json index 1085473..d9b133a 100644 --- a/site/dpp-landing/public/verify/examples/08-hidden-field-injection.json +++ b/site/dpp-landing/public/verify/examples/08-hidden-field-injection.json @@ -16,7 +16,7 @@ { "action": "published", "actor": "api-key", - "entryHash": "4e81bf531274f21aa02339144c34711eac79af7fb22ebf10a18982adc3f075a3", + "entryHash": "2934a67be97238b4f38ff4ee4d53464a0c197cec343297b25124f894b942c2f2", "id": "0199a3c2-7b10-7e4a-9c3d-000000000002", "metadata": { "fullViewPayload": { @@ -142,7 +142,6 @@ "euDeclarationOfConformity": "EU-DoC ACME-2026-LMT-0901, per Regulation (EU) 2023/1542 Art. 18", "expectedLifetimeCycles": 1200, "expectedLifetimeReferenceTest": "EN 50604-1:2016, 25 degC, 100% DoD", - "gtin": "09506000134352", "hazardousSubstances": [ { "casNumber": "21324-40-3", @@ -169,6 +168,10 @@ "powerLimitMaxW": 1500.0, "powerLimitMinW": 20.0, "productGroup": "battery", + "productIdentifier": { + "gtin": "09506000134352", + "scheme": "gs1" + }, "ratedCapacityKwh": null, "recycledContentCobaltPct": 12.0, "recycledContentLeadPct": 0.0, @@ -194,16 +197,17 @@ }, "productName": "Acme LMT 48V 20Ah battery pack", "publishedAt": "2026-09-01T09:05:00Z", - "qrCodeUrl": "https://dpp.acme.example/01/09506000134352/10/ACME-LMT-2026-09/21/7e4a9c3d2f1e8b6a5d40", + "qrCodeUrl": "https://dpp.acme.example/01/09506000134352/21/7e4a9c3d2f1e8b6a5d40", "repairabilityScore": null, "retentionLocked": true, "retentionUntil": "2036-08-29T09:05:00Z", - "schemaVersion": "2.6.0", + "schemaVersion": "2.7.0", "status": "active", "updatedAt": "2026-09-01T09:05:00Z", "version": 1 }, "publicViewPayload": { + "batchId": "ACME-LMT-2026-09", "co2ePerUnit": null, "commodityCode": "85076000", "createdAt": "2026-09-01T09:00:00Z", @@ -264,7 +268,6 @@ "euDeclarationOfConformity": "EU-DoC ACME-2026-LMT-0901, per Regulation (EU) 2023/1542 Art. 18", "expectedLifetimeCycles": 1200, "expectedLifetimeReferenceTest": "EN 50604-1:2016, 25 degC, 100% DoD", - "gtin": "09506000134352", "hazardousSubstances": [ { "casNumber": "21324-40-3", @@ -291,6 +294,10 @@ "powerLimitMaxW": 1500.0, "powerLimitMinW": 20.0, "productGroup": "battery", + "productIdentifier": { + "gtin": "09506000134352", + "scheme": "gs1" + }, "ratedCapacityKwh": null, "recycledContentCobaltPct": 12.0, "recycledContentLeadPct": 0.0, @@ -303,10 +310,10 @@ }, "productName": "Acme LMT 48V 20Ah battery pack", "publishedAt": "2026-09-01T09:05:00Z", - "qrCodeUrl": "https://dpp.acme.example/01/09506000134352/10/ACME-LMT-2026-09/21/7e4a9c3d2f1e8b6a5d40", + "qrCodeUrl": "https://dpp.acme.example/01/09506000134352/21/7e4a9c3d2f1e8b6a5d40", "repairabilityScore": null, "retentionUntil": "2036-08-29T09:05:00Z", - "schemaVersion": "2.6.0", + "schemaVersion": "2.7.0", "status": "active", "updatedAt": "2026-09-01T09:05:00Z", "version": 1 @@ -322,7 +329,7 @@ { "action": "transferred", "actor": "api-key", - "entryHash": "5c869a32da993e9a5ee13bc3b059fee9c3abc1fbbd840ab2449473f0e5453b08", + "entryHash": "1b61fd6f3f72f0730d61b59008f883d7630a03e2dea9f5bd67206482d0770530", "id": "0199a3c2-7b10-7e4a-9c3d-000000000003", "metadata": { "event": "transfer.initiated", @@ -331,7 +338,7 @@ }, "newStatus": null, "passportId": "0199a3c2-7b10-7e4a-9c3d-2f1e8b6a5d40", - "prevHash": "4e81bf531274f21aa02339144c34711eac79af7fb22ebf10a18982adc3f075a3", + "prevHash": "2934a67be97238b4f38ff4ee4d53464a0c197cec343297b25124f894b942c2f2", "previousStatus": null, "requestId": "0199a3c2-7b10-7e4a-8d2e-000000000003", "timestamp": "2026-09-10T14:00:00.042Z" @@ -339,7 +346,7 @@ { "action": "transferred", "actor": "api-key", - "entryHash": "3a5eb46b99bc15d235b342a0a6092d3e382d998b7de32588ed4966d74295fa51", + "entryHash": "f462766c832366e92cef97196b764df1bd5ce5e1acc1fa5e2b395f99d4c3e6fa", "id": "0199a3c2-7b10-7e4a-9c3d-000000000004", "metadata": { "event": "transfer.accepted", @@ -348,7 +355,7 @@ }, "newStatus": null, "passportId": "0199a3c2-7b10-7e4a-9c3d-2f1e8b6a5d40", - "prevHash": "5c869a32da993e9a5ee13bc3b059fee9c3abc1fbbd840ab2449473f0e5453b08", + "prevHash": "1b61fd6f3f72f0730d61b59008f883d7630a03e2dea9f5bd67206482d0770530", "previousStatus": null, "requestId": "0199a3c2-7b10-7e4a-8d2e-000000000004", "timestamp": "2026-09-10T14:30:00.123456Z" @@ -356,7 +363,7 @@ { "action": "deactivated", "actor": "api-key", - "entryHash": "256b89a07f8ff158fe29f327e08996214563987ca111cddc563bb0e9a9f9a362", + "entryHash": "6fd9d12be0f3a26ae6fc2740a796a13363de1e3abd3082ce284c9eeebdc88dac", "id": "0199a3c2-7b10-7e4a-9c3d-000000000005", "metadata": { "declaredAt": "2026-09-20T08:00:00Z", @@ -369,7 +376,7 @@ }, "newStatus": "deactivated", "passportId": "0199a3c2-7b10-7e4a-9c3d-2f1e8b6a5d40", - "prevHash": "3a5eb46b99bc15d235b342a0a6092d3e382d998b7de32588ed4966d74295fa51", + "prevHash": "f462766c832366e92cef97196b764df1bd5ce5e1acc1fa5e2b395f99d4c3e6fa", "previousStatus": "active", "requestId": "0199a3c2-7b10-7e4a-8d2e-000000000005", "timestamp": "2026-09-20T08:00:00.018Z" @@ -429,7 +436,7 @@ } }, "fullView": { - "jws": "eyJhbGciOiJFZERTQSIsImtpZCI6ImZlODEyYzEyZjNhYjRjZTZhYzVkYjY5YWMzNTJmOTA2Y2IxYjExZWY0M2ZiMzNlMjUyZWY3ZmY1NTIyNjM4ODkifQ.eyJiYXRjaElkIjoiQUNNRS1MTVQtMjAyNi0wOSIsImNvMmVQZXJVbml0IjpudWxsLCJjb21tb2RpdHlDb2RlIjoiODUwNzYwMDAiLCJjcmVhdGVkQXQiOiIyMDI2LTA5LTAxVDA5OjAwOjAwWiIsImlkIjoiMDE5OWEzYzItN2IxMC03ZTRhLTljM2QtMmYxZThiNmE1ZDQwIiwiandzU2lnbmF0dXJlIjpudWxsLCJtYW51ZmFjdHVyZXIiOnsiYWRkcmVzcyI6Ik11c3RlcnN0cmFzc2UgMSwgODAzMzEgTcO8bmNoZW4sIERFIiwiY291bnRyeSI6bnVsbCwiZGlkV2ViVXJsIjoiaHR0cHM6Ly9ub2RlLmFjbWUuZXhhbXBsZS8ud2VsbC1rbm93bi9kaWQuanNvbiIsIm5hbWUiOiJBY21lIFplbGxlbiBHbWJIIn0sIm1hdGVyaWFscyI6W3siY291bnRyeU9mT3JpZ2luIjoiREUiLCJuYW1lIjoiTk1DIDgxMSBjYXRob2RlIGFjdGl2ZSBtYXRlcmlhbCIsInJlY3ljbGVkUGN0Ijo4LCJ3ZWlnaHRLZyI6My4xfSx7ImNvdW50cnlPZk9yaWdpbiI6IkRFIiwibmFtZSI6IkdyYXBoaXRlIGFub2RlIGFjdGl2ZSBtYXRlcmlhbCIsInJlY3ljbGVkUGN0Ijo0LCJ3ZWlnaHRLZyI6MS45fSx7ImNvdW50cnlPZk9yaWdpbiI6IkRFIiwibmFtZSI6IkFsdW1pbml1bSBwYWNrIGhvdXNpbmciLCJyZWN5Y2xlZFBjdCI6NjAsIndlaWdodEtnIjoyLjJ9XSwicGxhY2VkT25NYXJrZXREYXRlIjoiMjAyNi0wOS0wMSIsInByb2R1Y3RHcm91cCI6ImJhdHRlcnkiLCJwcm9kdWN0R3JvdXBEYXRhIjp7ImFub2RlTWF0ZXJpYWwiOlt7ImNhc051bWJlciI6Ijc3ODItNDItNSIsIm5hbWUiOiJHcmFwaGl0ZSIsIndlaWdodFBjdCI6OTZ9LHsiY2FzTnVtYmVyIjoiOTAwMy01NS04IiwibmFtZSI6IlNCUi9DTUMgYmluZGVyIiwid2VpZ2h0UGN0Ijo0fV0sImJhdHRlcnlDaGVtaXN0cnkiOiJOTUMiLCJiYXR0ZXJ5TW9kZWxJZCI6IkFDTUUtTE1ULTQ4ViIsImJhdHRlcnlQYXNzcG9ydE51bWJlciI6IlVSTjpPREw6QkFUVDowOTUwNjAwMDEzNDM1MjpBQ01FLUxNVC0yMDI2LTA5IiwiYmF0dGVyeVN0YXR1cyI6Im9yaWdpbmFsIiwiYmF0dGVyeVR5cGUiOiJsbXQiLCJiYXR0ZXJ5V2VpZ2h0S2ciOjEyLjQsImNhdGhvZGVNYXRlcmlhbCI6W3siY2FzTnVtYmVyIjoiMzQ2NDE3LTk3LTgiLCJuYW1lIjoiTGlOaTAuOE1uMC4xQ28wLjFPMiIsIndlaWdodFBjdCI6OTZ9LHsiY2FzTnVtYmVyIjoiMjQ5MzctNzktOSIsIm5hbWUiOiJQVkRGIGJpbmRlciIsIndlaWdodFBjdCI6Mn0seyJjYXNOdW1iZXIiOiIxMzMzLTg2LTQiLCJuYW1lIjoiQ29uZHVjdGl2ZSBjYXJib24gYmxhY2siLCJ3ZWlnaHRQY3QiOjJ9XSwiY28yZVBlclVuaXRLZyI6ODYuNCwiY29tcG9uZW50UGFydE51bWJlcnMiOlsiQUNNRS1DRUxMLTIxNzAwLU5NQyIsIkFDTUUtQk1TLTEzUy1WMSIsIkFDTUUtTE1ULUVOQ0wtNDgiXSwiY3JpdGljYWxSYXdNYXRlcmlhbHMiOlt7ImNhc051bWJlciI6Ijc0NDAtNDgtNCIsIm5hbWUiOiJDb2JhbHQiLCJ3ZWlnaHRHcmFtcyI6MzEwfSx7ImNhc051bWJlciI6Ijc0MzktOTMtMiIsIm5hbWUiOiJMaXRoaXVtIiwid2VpZ2h0R3JhbXMiOjQyMH0seyJjYXNOdW1iZXIiOiI3NzgyLTQyLTUiLCJuYW1lIjoiTmF0dXJhbCBncmFwaGl0ZSIsIndlaWdodEdyYW1zIjoxODAwfV0sImN5Y2xlTGlmZVRlc3RDUmF0ZSI6MSwiZGlzYXNzZW1ibHlJbnN0cnVjdGlvbnNVcmwiOiJodHRwczovL2FjbWUuZXhhbXBsZS9zZXJ2aWNlL2xtdC00OC9kaXNhc3NlbWJseSIsImR5bmFtaWNQZXJmb3JtYW5jZSI6eyJjYXBhY2l0eUZhZGVQY3QiOjAuNSwiZXhwZWN0ZWRMaWZldGltZUN5Y2xlcyI6MTE5NSwiaW50ZXJuYWxSZXNpc3RhbmNlTW9obSI6MTEwLjQsInJhdGVkQ2FwYWNpdHlBaCI6MTkuOSwicm91bmRUcmlwRWZmaWNpZW5jeVBjdCI6OTQuOH0sImVsZWN0cm9seXRlTWF0ZXJpYWwiOlt7ImNhc051bWJlciI6Ijk2LTQ5LTEiLCJuYW1lIjoiRXRoeWxlbmUgY2FyYm9uYXRlIiwid2VpZ2h0UGN0IjozOH0seyJjYXNOdW1iZXIiOiI2MTYtMzgtNiIsIm5hbWUiOiJEaW1ldGh5bCBjYXJib25hdGUiLCJ3ZWlnaHRQY3QiOjQ5fSx7ImNhc051bWJlciI6IjIxMzI0LTQwLTMiLCJuYW1lIjoiTGl0aGl1bSBoZXhhZmx1b3JvcGhvc3BoYXRlIiwid2VpZ2h0UGN0IjoxM31dLCJldURlY2xhcmF0aW9uT2ZDb25mb3JtaXR5IjoiRVUtRG9DIEFDTUUtMjAyNi1MTVQtMDkwMSwgcGVyIFJlZ3VsYXRpb24gKEVVKSAyMDIzLzE1NDIgQXJ0LiAxOCIsImV4cGVjdGVkTGlmZXRpbWVDeWNsZXMiOjEyMDAsImV4cGVjdGVkTGlmZXRpbWVSZWZlcmVuY2VUZXN0IjoiRU4gNTA2MDQtMToyMDE2LCAyNSBkZWdDLCAxMDAlIERvRCIsImd0aW4iOiIwOTUwNjAwMDEzNDM1MiIsImhhemFyZG91c1N1YnN0YW5jZXMiOlt7ImNhc051bWJlciI6IjIxMzI0LTQwLTMiLCJjb25jZW50cmF0aW9uUGN0IjowLjgsIm5hbWUiOiJMaXRoaXVtIGhleGFmbHVvcm9waG9zcGhhdGUifV0sImluaXRpYWxSb3VuZFRyaXBFZmZpY2llbmN5UGN0Ijo5NSwiaW50ZXJuYWxDZWxsUmVzaXN0YW5jZU1vaG0iOjE0LCJpbnRlcm5hbFBhY2tSZXNpc3RhbmNlTW9obSI6MTEwLCJtYW51ZmFjdHVyaW5nRGF0ZSI6IjIwMjYtMDgtMThUMDA6MDA6MDBaIiwibWFudWZhY3R1cmluZ1BsYWNlIjoiTcO8bmNoZW4sIERFIiwibWFya2luZ0luZm9ybWF0aW9uIjoiU2VwYXJhdGUtY29sbGVjdGlvbiBzeW1ib2wgcGVyIEFydC4gMTMoNCk7IGNhcGFjaXR5IDIwIEFoIC8gOTYwIFdoOyA0OCBWIExNVCIsIm1heGltdW1Wb2x0YWdlViI6NTQuNiwibWluaW1hbFZvbHRhZ2VWIjozOSwibm9taW5hbENhcGFjaXR5QWgiOjIwLCJub21pbmFsVm9sdGFnZVYiOjQ4LCJub3RJblVzZVRlbXBlcmF0dXJlUmFuZ2UiOnsibWF4QyI6NDUsIm1pbkMiOi0xMH0sIm5vdEluVXNlVGVtcGVyYXR1cmVSZWZlcmVuY2VUZXN0IjoiRU4gNTA2MDQtMToyMDE2IHN0b3JhZ2UgY2xhdXNlIiwib3JpZ2luYWxQb3dlckNhcGFiaWxpdHlXIjo5NjAsInBvd2VyTGltaXRNYXhXIjoxNTAwLCJwb3dlckxpbWl0TWluVyI6MjAsInByb2R1Y3RHcm91cCI6ImJhdHRlcnkiLCJyYXRlZENhcGFjaXR5S3doIjpudWxsLCJyZWN5Y2xlZENvbnRlbnRDb2JhbHRQY3QiOjEyLCJyZWN5Y2xlZENvbnRlbnRMZWFkUGN0IjowLCJyZWN5Y2xlZENvbnRlbnRMaXRoaXVtUGN0Ijo2LCJyZWN5Y2xlZENvbnRlbnROaWNrZWxQY3QiOjgsInJlbmV3YWJsZUNvbnRlbnRQY3QiOjE0LCJyb3VuZFRyaXBFZmZpY2llbmN5QXRIYWxmQ3ljbGVMaWZlUGN0Ijo5MSwic2FmZXR5TWVhc3VyZXMiOiJEbyBub3Qgb3BlbiB0aGUgcGFjay4gUmVwbGFjZSBpdCB0aHJvdWdoIGFuIGF1dGhvcmlzZWQgZGVhbGVyLiBLZWVwIGl0IGF3YXkgZnJvbSBoZWF0IGFib3ZlIDYwIGRlZ0MuIiwic3BhcmVQYXJ0c0NvbnRhY3RzIjoic3BhcmVzQGFjbWUuZXhhbXBsZSIsInN0YXRlT2ZIZWFsdGgiOnsicGFyYW1ldGVyU2V0Ijoic3RhdGlvbmFyeU9yTG10IiwicmVtYWluaW5nQ2FwYWNpdHlQY3QiOjk5LjUsInJlbWFpbmluZ1Bvd2VyQ2FwYWJpbGl0eVBjdCI6OTkuMSwic2VsZkRpc2NoYXJnZVJhdGVQY3RQZXJNb250aCI6Mn0sInN0YXRlT2ZIZWFsdGhQY3QiOm51bGwsInRlc3RSZXBvcnRSZXN1bHRzIjoiRU4gNTA2MDQtMToyMDE2IHBhc3M7IFVOIDM4LjMgcGFzczsgcmVwb3J0IEFDTUUtVFItMjAyNi0wODE1IiwidXNhYmxlRXh0aW5ndWlzaGluZ0FnZW50IjoiV2F0ZXI7IGNvb2wgYSBidXJuaW5nIHBhY2sgd2l0aCBsYXJnZSB2b2x1bWVzIG9mIHdhdGVyIiwidXNhZ2VIaXN0b3J5Ijp7ImNoYXJnZURpc2NoYXJnZUN5Y2xlcyI6NH0sIndhc3RlQmF0dGVyeUluZm9ybWF0aW9uIjoiUmV0dXJuIHRoZSBiYXR0ZXJ5IHRvIGEgYmljeWNsZSByZXRhaWxlciBvciBhIG11bmljaXBhbCBjb2xsZWN0aW9uIHBvaW50LiBEbyBub3QgcGxhY2UgaXQgaW4gaG91c2Vob2xkIHdhc3RlLiJ9LCJwcm9kdWN0TmFtZSI6IkFjbWUgTE1UIDQ4ViAyMEFoIGJhdHRlcnkgcGFjayIsInB1Ymxpc2hlZEF0IjoiMjAyNi0wOS0wMVQwOTowNTowMFoiLCJxckNvZGVVcmwiOiJodHRwczovL2RwcC5hY21lLmV4YW1wbGUvMDEvMDk1MDYwMDAxMzQzNTIvMTAvQUNNRS1MTVQtMjAyNi0wOS8yMS83ZTRhOWMzZDJmMWU4YjZhNWQ0MCIsInJlcGFpcmFiaWxpdHlTY29yZSI6bnVsbCwicmV0ZW50aW9uTG9ja2VkIjp0cnVlLCJyZXRlbnRpb25VbnRpbCI6IjIwMzYtMDgtMjlUMDk6MDU6MDBaIiwic2NoZW1hVmVyc2lvbiI6IjIuNi4wIiwic3RhdHVzIjoiYWN0aXZlIiwidXBkYXRlZEF0IjoiMjAyNi0wOS0wMVQwOTowNTowMFoiLCJ2ZXJzaW9uIjoxfQ.WlMDfygpDjYk8xHRQjpQgppwhVkUgYhyj_9iiPH_IXvXb8IKcD0cA2lFJCznB1B6llfW5Q3qiZcfRAdB78nDBw", + "jws": "eyJhbGciOiJFZERTQSIsImtpZCI6ImZlODEyYzEyZjNhYjRjZTZhYzVkYjY5YWMzNTJmOTA2Y2IxYjExZWY0M2ZiMzNlMjUyZWY3ZmY1NTIyNjM4ODkifQ.eyJiYXRjaElkIjoiQUNNRS1MTVQtMjAyNi0wOSIsImNvMmVQZXJVbml0IjpudWxsLCJjb21tb2RpdHlDb2RlIjoiODUwNzYwMDAiLCJjcmVhdGVkQXQiOiIyMDI2LTA5LTAxVDA5OjAwOjAwWiIsImlkIjoiMDE5OWEzYzItN2IxMC03ZTRhLTljM2QtMmYxZThiNmE1ZDQwIiwiandzU2lnbmF0dXJlIjpudWxsLCJtYW51ZmFjdHVyZXIiOnsiYWRkcmVzcyI6Ik11c3RlcnN0cmFzc2UgMSwgODAzMzEgTcO8bmNoZW4sIERFIiwiY291bnRyeSI6bnVsbCwiZGlkV2ViVXJsIjoiaHR0cHM6Ly9ub2RlLmFjbWUuZXhhbXBsZS8ud2VsbC1rbm93bi9kaWQuanNvbiIsIm5hbWUiOiJBY21lIFplbGxlbiBHbWJIIn0sIm1hdGVyaWFscyI6W3siY291bnRyeU9mT3JpZ2luIjoiREUiLCJuYW1lIjoiTk1DIDgxMSBjYXRob2RlIGFjdGl2ZSBtYXRlcmlhbCIsInJlY3ljbGVkUGN0Ijo4LCJ3ZWlnaHRLZyI6My4xfSx7ImNvdW50cnlPZk9yaWdpbiI6IkRFIiwibmFtZSI6IkdyYXBoaXRlIGFub2RlIGFjdGl2ZSBtYXRlcmlhbCIsInJlY3ljbGVkUGN0Ijo0LCJ3ZWlnaHRLZyI6MS45fSx7ImNvdW50cnlPZk9yaWdpbiI6IkRFIiwibmFtZSI6IkFsdW1pbml1bSBwYWNrIGhvdXNpbmciLCJyZWN5Y2xlZFBjdCI6NjAsIndlaWdodEtnIjoyLjJ9XSwicGxhY2VkT25NYXJrZXREYXRlIjoiMjAyNi0wOS0wMSIsInByb2R1Y3RHcm91cCI6ImJhdHRlcnkiLCJwcm9kdWN0R3JvdXBEYXRhIjp7ImFub2RlTWF0ZXJpYWwiOlt7ImNhc051bWJlciI6Ijc3ODItNDItNSIsIm5hbWUiOiJHcmFwaGl0ZSIsIndlaWdodFBjdCI6OTZ9LHsiY2FzTnVtYmVyIjoiOTAwMy01NS04IiwibmFtZSI6IlNCUi9DTUMgYmluZGVyIiwid2VpZ2h0UGN0Ijo0fV0sImJhdHRlcnlDaGVtaXN0cnkiOiJOTUMiLCJiYXR0ZXJ5TW9kZWxJZCI6IkFDTUUtTE1ULTQ4ViIsImJhdHRlcnlQYXNzcG9ydE51bWJlciI6IlVSTjpPREw6QkFUVDowOTUwNjAwMDEzNDM1MjpBQ01FLUxNVC0yMDI2LTA5IiwiYmF0dGVyeVN0YXR1cyI6Im9yaWdpbmFsIiwiYmF0dGVyeVR5cGUiOiJsbXQiLCJiYXR0ZXJ5V2VpZ2h0S2ciOjEyLjQsImNhdGhvZGVNYXRlcmlhbCI6W3siY2FzTnVtYmVyIjoiMzQ2NDE3LTk3LTgiLCJuYW1lIjoiTGlOaTAuOE1uMC4xQ28wLjFPMiIsIndlaWdodFBjdCI6OTZ9LHsiY2FzTnVtYmVyIjoiMjQ5MzctNzktOSIsIm5hbWUiOiJQVkRGIGJpbmRlciIsIndlaWdodFBjdCI6Mn0seyJjYXNOdW1iZXIiOiIxMzMzLTg2LTQiLCJuYW1lIjoiQ29uZHVjdGl2ZSBjYXJib24gYmxhY2siLCJ3ZWlnaHRQY3QiOjJ9XSwiY28yZVBlclVuaXRLZyI6ODYuNCwiY29tcG9uZW50UGFydE51bWJlcnMiOlsiQUNNRS1DRUxMLTIxNzAwLU5NQyIsIkFDTUUtQk1TLTEzUy1WMSIsIkFDTUUtTE1ULUVOQ0wtNDgiXSwiY3JpdGljYWxSYXdNYXRlcmlhbHMiOlt7ImNhc051bWJlciI6Ijc0NDAtNDgtNCIsIm5hbWUiOiJDb2JhbHQiLCJ3ZWlnaHRHcmFtcyI6MzEwfSx7ImNhc051bWJlciI6Ijc0MzktOTMtMiIsIm5hbWUiOiJMaXRoaXVtIiwid2VpZ2h0R3JhbXMiOjQyMH0seyJjYXNOdW1iZXIiOiI3NzgyLTQyLTUiLCJuYW1lIjoiTmF0dXJhbCBncmFwaGl0ZSIsIndlaWdodEdyYW1zIjoxODAwfV0sImN5Y2xlTGlmZVRlc3RDUmF0ZSI6MSwiZGlzYXNzZW1ibHlJbnN0cnVjdGlvbnNVcmwiOiJodHRwczovL2FjbWUuZXhhbXBsZS9zZXJ2aWNlL2xtdC00OC9kaXNhc3NlbWJseSIsImR5bmFtaWNQZXJmb3JtYW5jZSI6eyJjYXBhY2l0eUZhZGVQY3QiOjAuNSwiZXhwZWN0ZWRMaWZldGltZUN5Y2xlcyI6MTE5NSwiaW50ZXJuYWxSZXNpc3RhbmNlTW9obSI6MTEwLjQsInJhdGVkQ2FwYWNpdHlBaCI6MTkuOSwicm91bmRUcmlwRWZmaWNpZW5jeVBjdCI6OTQuOH0sImVsZWN0cm9seXRlTWF0ZXJpYWwiOlt7ImNhc051bWJlciI6Ijk2LTQ5LTEiLCJuYW1lIjoiRXRoeWxlbmUgY2FyYm9uYXRlIiwid2VpZ2h0UGN0IjozOH0seyJjYXNOdW1iZXIiOiI2MTYtMzgtNiIsIm5hbWUiOiJEaW1ldGh5bCBjYXJib25hdGUiLCJ3ZWlnaHRQY3QiOjQ5fSx7ImNhc051bWJlciI6IjIxMzI0LTQwLTMiLCJuYW1lIjoiTGl0aGl1bSBoZXhhZmx1b3JvcGhvc3BoYXRlIiwid2VpZ2h0UGN0IjoxM31dLCJldURlY2xhcmF0aW9uT2ZDb25mb3JtaXR5IjoiRVUtRG9DIEFDTUUtMjAyNi1MTVQtMDkwMSwgcGVyIFJlZ3VsYXRpb24gKEVVKSAyMDIzLzE1NDIgQXJ0LiAxOCIsImV4cGVjdGVkTGlmZXRpbWVDeWNsZXMiOjEyMDAsImV4cGVjdGVkTGlmZXRpbWVSZWZlcmVuY2VUZXN0IjoiRU4gNTA2MDQtMToyMDE2LCAyNSBkZWdDLCAxMDAlIERvRCIsImhhemFyZG91c1N1YnN0YW5jZXMiOlt7ImNhc051bWJlciI6IjIxMzI0LTQwLTMiLCJjb25jZW50cmF0aW9uUGN0IjowLjgsIm5hbWUiOiJMaXRoaXVtIGhleGFmbHVvcm9waG9zcGhhdGUifV0sImluaXRpYWxSb3VuZFRyaXBFZmZpY2llbmN5UGN0Ijo5NSwiaW50ZXJuYWxDZWxsUmVzaXN0YW5jZU1vaG0iOjE0LCJpbnRlcm5hbFBhY2tSZXNpc3RhbmNlTW9obSI6MTEwLCJtYW51ZmFjdHVyaW5nRGF0ZSI6IjIwMjYtMDgtMThUMDA6MDA6MDBaIiwibWFudWZhY3R1cmluZ1BsYWNlIjoiTcO8bmNoZW4sIERFIiwibWFya2luZ0luZm9ybWF0aW9uIjoiU2VwYXJhdGUtY29sbGVjdGlvbiBzeW1ib2wgcGVyIEFydC4gMTMoNCk7IGNhcGFjaXR5IDIwIEFoIC8gOTYwIFdoOyA0OCBWIExNVCIsIm1heGltdW1Wb2x0YWdlViI6NTQuNiwibWluaW1hbFZvbHRhZ2VWIjozOSwibm9taW5hbENhcGFjaXR5QWgiOjIwLCJub21pbmFsVm9sdGFnZVYiOjQ4LCJub3RJblVzZVRlbXBlcmF0dXJlUmFuZ2UiOnsibWF4QyI6NDUsIm1pbkMiOi0xMH0sIm5vdEluVXNlVGVtcGVyYXR1cmVSZWZlcmVuY2VUZXN0IjoiRU4gNTA2MDQtMToyMDE2IHN0b3JhZ2UgY2xhdXNlIiwib3JpZ2luYWxQb3dlckNhcGFiaWxpdHlXIjo5NjAsInBvd2VyTGltaXRNYXhXIjoxNTAwLCJwb3dlckxpbWl0TWluVyI6MjAsInByb2R1Y3RHcm91cCI6ImJhdHRlcnkiLCJwcm9kdWN0SWRlbnRpZmllciI6eyJndGluIjoiMDk1MDYwMDAxMzQzNTIiLCJzY2hlbWUiOiJnczEifSwicmF0ZWRDYXBhY2l0eUt3aCI6bnVsbCwicmVjeWNsZWRDb250ZW50Q29iYWx0UGN0IjoxMiwicmVjeWNsZWRDb250ZW50TGVhZFBjdCI6MCwicmVjeWNsZWRDb250ZW50TGl0aGl1bVBjdCI6NiwicmVjeWNsZWRDb250ZW50Tmlja2VsUGN0Ijo4LCJyZW5ld2FibGVDb250ZW50UGN0IjoxNCwicm91bmRUcmlwRWZmaWNpZW5jeUF0SGFsZkN5Y2xlTGlmZVBjdCI6OTEsInNhZmV0eU1lYXN1cmVzIjoiRG8gbm90IG9wZW4gdGhlIHBhY2suIFJlcGxhY2UgaXQgdGhyb3VnaCBhbiBhdXRob3Jpc2VkIGRlYWxlci4gS2VlcCBpdCBhd2F5IGZyb20gaGVhdCBhYm92ZSA2MCBkZWdDLiIsInNwYXJlUGFydHNDb250YWN0cyI6InNwYXJlc0BhY21lLmV4YW1wbGUiLCJzdGF0ZU9mSGVhbHRoIjp7InBhcmFtZXRlclNldCI6InN0YXRpb25hcnlPckxtdCIsInJlbWFpbmluZ0NhcGFjaXR5UGN0Ijo5OS41LCJyZW1haW5pbmdQb3dlckNhcGFiaWxpdHlQY3QiOjk5LjEsInNlbGZEaXNjaGFyZ2VSYXRlUGN0UGVyTW9udGgiOjJ9LCJzdGF0ZU9mSGVhbHRoUGN0IjpudWxsLCJ0ZXN0UmVwb3J0UmVzdWx0cyI6IkVOIDUwNjA0LTE6MjAxNiBwYXNzOyBVTiAzOC4zIHBhc3M7IHJlcG9ydCBBQ01FLVRSLTIwMjYtMDgxNSIsInVzYWJsZUV4dGluZ3Vpc2hpbmdBZ2VudCI6IldhdGVyOyBjb29sIGEgYnVybmluZyBwYWNrIHdpdGggbGFyZ2Ugdm9sdW1lcyBvZiB3YXRlciIsInVzYWdlSGlzdG9yeSI6eyJjaGFyZ2VEaXNjaGFyZ2VDeWNsZXMiOjR9LCJ3YXN0ZUJhdHRlcnlJbmZvcm1hdGlvbiI6IlJldHVybiB0aGUgYmF0dGVyeSB0byBhIGJpY3ljbGUgcmV0YWlsZXIgb3IgYSBtdW5pY2lwYWwgY29sbGVjdGlvbiBwb2ludC4gRG8gbm90IHBsYWNlIGl0IGluIGhvdXNlaG9sZCB3YXN0ZS4ifSwicHJvZHVjdE5hbWUiOiJBY21lIExNVCA0OFYgMjBBaCBiYXR0ZXJ5IHBhY2siLCJwdWJsaXNoZWRBdCI6IjIwMjYtMDktMDFUMDk6MDU6MDBaIiwicXJDb2RlVXJsIjoiaHR0cHM6Ly9kcHAuYWNtZS5leGFtcGxlLzAxLzA5NTA2MDAwMTM0MzUyLzIxLzdlNGE5YzNkMmYxZThiNmE1ZDQwIiwicmVwYWlyYWJpbGl0eVNjb3JlIjpudWxsLCJyZXRlbnRpb25Mb2NrZWQiOnRydWUsInJldGVudGlvblVudGlsIjoiMjAzNi0wOC0yOVQwOTowNTowMFoiLCJzY2hlbWFWZXJzaW9uIjoiMi43LjAiLCJzdGF0dXMiOiJhY3RpdmUiLCJ1cGRhdGVkQXQiOiIyMDI2LTA5LTAxVDA5OjA1OjAwWiIsInZlcnNpb24iOjF9.55m5_OYvkiKUN9QV9BNB3JeqMOvkYjwYCiPxup_xciGjUrYtHOcaDdy8ULvSAy5NRGpT9p90RrajgBb0Iv5kCg", "payload": { "batchId": "ACME-LMT-2026-09", "co2ePerUnit": null, @@ -553,7 +560,6 @@ "euDeclarationOfConformity": "EU-DoC ACME-2026-LMT-0901, per Regulation (EU) 2023/1542 Art. 18", "expectedLifetimeCycles": 1200, "expectedLifetimeReferenceTest": "EN 50604-1:2016, 25 degC, 100% DoD", - "gtin": "09506000134352", "hazardousSubstances": [ { "casNumber": "21324-40-3", @@ -580,6 +586,10 @@ "powerLimitMaxW": 1500.0, "powerLimitMinW": 20.0, "productGroup": "battery", + "productIdentifier": { + "gtin": "09506000134352", + "scheme": "gs1" + }, "ratedCapacityKwh": null, "recycledContentCobaltPct": 12.0, "recycledContentLeadPct": 0.0, @@ -605,11 +615,11 @@ }, "productName": "Acme LMT 48V 20Ah battery pack", "publishedAt": "2026-09-01T09:05:00Z", - "qrCodeUrl": "https://dpp.acme.example/01/09506000134352/10/ACME-LMT-2026-09/21/7e4a9c3d2f1e8b6a5d40", + "qrCodeUrl": "https://dpp.acme.example/01/09506000134352/21/7e4a9c3d2f1e8b6a5d40", "repairabilityScore": null, "retentionLocked": true, "retentionUntil": "2036-08-29T09:05:00Z", - "schemaVersion": "2.6.0", + "schemaVersion": "2.7.0", "status": "active", "updatedAt": "2026-09-01T09:05:00Z", "version": 1 @@ -617,23 +627,24 @@ }, "manifest": { "contentHashes": { - "auditEntries": "d3e3661902ae8ebc797d545c6124173a74c3b086b2bba8399628df6b53db79e0", + "auditEntries": "46110fef3e331eab68e2616292edcc10d2bfcdfc16fa7bb0409cecdf7cb86a33", "eolEvent": "7cb65bb485538e109105404e15c7bc411aa3050694fa4d63339c70dbe431d3a0", - "fullView": "70f5a9779744ad58b77cebed129ecec4c24d7c5bbf3b65be4b3c61c4be5f0e80", - "publicView": "7ada532408d7c20c385804ca00d0a6a969f1448c796775c14657d7932ecf392a", + "fullView": "e8c5a8fbbddd67948a3ee3eb7abfc07427c2ff2ab23eeba3dc4dc9bbf12cbdbd", + "publicView": "74c1a1eda478cc2643b8652bf188f47e449b851ae64ae05f922de314a9249b83", "transferChain": "52e0fd4f91be57a81e6219557f5f3c4f2331b0cbbc9461d376c967dae5445445" }, - "coreVersion": "0.20.0", + "coreVersion": "0.21.0", "createdAt": "2026-09-25T12:00:00Z", "formatVersion": "1", "issuerDid": "did:web:node.acme.example", "nodeVersion": "0.14.0", "passportId": "0199a3c2-7b10-7e4a-9c3d-2f1e8b6a5d40" }, - "manifestJws": "eyJhbGciOiJFZERTQSIsImtpZCI6ImZlODEyYzEyZjNhYjRjZTZhYzVkYjY5YWMzNTJmOTA2Y2IxYjExZWY0M2ZiMzNlMjUyZWY3ZmY1NTIyNjM4ODkifQ.eyJjb250ZW50SGFzaGVzIjp7ImF1ZGl0RW50cmllcyI6ImQzZTM2NjE5MDJhZThlYmM3OTdkNTQ1YzYxMjQxNzNhNzRjM2IwODZiMmJiYTgzOTk2MjhkZjZiNTNkYjc5ZTAiLCJlb2xFdmVudCI6IjdjYjY1YmI0ODU1MzhlMTA5MTA1NDA0ZTE1YzdiYzQxMWFhMzA1MDY5NGZhNGQ2MzMzOWM3MGRiZTQzMWQzYTAiLCJmdWxsVmlldyI6IjcwZjVhOTc3OTc0NGFkNThiNzdjZWJlZDEyOWVjZWM0YzI0ZDdjNWJiZjNiNjViZTRiM2M2MWM0YmU1ZjBlODAiLCJwdWJsaWNWaWV3IjoiN2FkYTUzMjQwOGQ3YzIwYzM4NTgwNGNhMDBkMGE2YTk2OWYxNDQ4Yzc5Njc3NWMxNDY1N2Q3OTMyZWNmMzkyYSIsInRyYW5zZmVyQ2hhaW4iOiI1MmUwZmQ0ZjkxYmU1N2E4MWU2MjE5NTU3ZjVmM2M0ZjIzMzFiMGNiYmM5NDYxZDM3NmM5NjdkYWU1NDQ1NDQ1In0sImNvcmVWZXJzaW9uIjoiMC4yMC4wIiwiY3JlYXRlZEF0IjoiMjAyNi0wOS0yNVQxMjowMDowMFoiLCJmb3JtYXRWZXJzaW9uIjoiMSIsImlzc3VlckRpZCI6ImRpZDp3ZWI6bm9kZS5hY21lLmV4YW1wbGUiLCJub2RlVmVyc2lvbiI6IjAuMTQuMCIsInBhc3Nwb3J0SWQiOiIwMTk5YTNjMi03YjEwLTdlNGEtOWMzZC0yZjFlOGI2YTVkNDAifQ.Y4XyqkZCD-XAtSYTICoyCngJx7sDCk7sYcdyezYe7ZDDY0k4w8WhK1oUaB5x_zg-malEGWJ_dXIVyI0P_M_qBg", + "manifestJws": "eyJhbGciOiJFZERTQSIsImtpZCI6ImZlODEyYzEyZjNhYjRjZTZhYzVkYjY5YWMzNTJmOTA2Y2IxYjExZWY0M2ZiMzNlMjUyZWY3ZmY1NTIyNjM4ODkifQ.eyJjb250ZW50SGFzaGVzIjp7ImF1ZGl0RW50cmllcyI6IjQ2MTEwZmVmM2UzMzFlYWI2OGUyNjE2MjkyZWRjYzEwZDJiZmNkZmMxNmZhN2JiMDQwOWNlY2RmN2NiODZhMzMiLCJlb2xFdmVudCI6IjdjYjY1YmI0ODU1MzhlMTA5MTA1NDA0ZTE1YzdiYzQxMWFhMzA1MDY5NGZhNGQ2MzMzOWM3MGRiZTQzMWQzYTAiLCJmdWxsVmlldyI6ImU4YzVhOGZiYmRkZDY3OTQ4YTNlZTNlYjdhYmZjMDc0MjdjMmZmMmFiMjNlZWJhM2RjNGRjOWJiZjEyY2JkYmQiLCJwdWJsaWNWaWV3IjoiNzRjMWExZWRhNDc4Y2MyNjQzYjg2NTJiZjE4OGY0N2U0NDliODUxYWU2NGFlMDVmOTIyZGUzMTRhOTI0OWI4MyIsInRyYW5zZmVyQ2hhaW4iOiI1MmUwZmQ0ZjkxYmU1N2E4MWU2MjE5NTU3ZjVmM2M0ZjIzMzFiMGNiYmM5NDYxZDM3NmM5NjdkYWU1NDQ1NDQ1In0sImNvcmVWZXJzaW9uIjoiMC4yMS4wIiwiY3JlYXRlZEF0IjoiMjAyNi0wOS0yNVQxMjowMDowMFoiLCJmb3JtYXRWZXJzaW9uIjoiMSIsImlzc3VlckRpZCI6ImRpZDp3ZWI6bm9kZS5hY21lLmV4YW1wbGUiLCJub2RlVmVyc2lvbiI6IjAuMTQuMCIsInBhc3Nwb3J0SWQiOiIwMTk5YTNjMi03YjEwLTdlNGEtOWMzZC0yZjFlOGI2YTVkNDAifQ.nR0d3UZbNRttz9D0VL9qGHN9dQwzFQGa4eRni8N926diP9G-qB4nGbqgqyz9VqaL6DjKReENzDldyo87sev_BA", "publicView": { - "jws": "eyJhbGciOiJFZERTQSIsImtpZCI6ImZlODEyYzEyZjNhYjRjZTZhYzVkYjY5YWMzNTJmOTA2Y2IxYjExZWY0M2ZiMzNlMjUyZWY3ZmY1NTIyNjM4ODkifQ.eyJjbzJlUGVyVW5pdCI6bnVsbCwiY29tbW9kaXR5Q29kZSI6Ijg1MDc2MDAwIiwiY3JlYXRlZEF0IjoiMjAyNi0wOS0wMVQwOTowMDowMFoiLCJpZCI6IjAxOTlhM2MyLTdiMTAtN2U0YS05YzNkLTJmMWU4YjZhNWQ0MCIsIm1hbnVmYWN0dXJlciI6eyJhZGRyZXNzIjoiTXVzdGVyc3RyYXNzZSAxLCA4MDMzMSBNw7xuY2hlbiwgREUiLCJjb3VudHJ5IjpudWxsLCJkaWRXZWJVcmwiOiJodHRwczovL25vZGUuYWNtZS5leGFtcGxlLy53ZWxsLWtub3duL2RpZC5qc29uIiwibmFtZSI6IkFjbWUgWmVsbGVuIEdtYkgifSwibWF0ZXJpYWxzIjpbeyJjb3VudHJ5T2ZPcmlnaW4iOiJERSIsIm5hbWUiOiJOTUMgODExIGNhdGhvZGUgYWN0aXZlIG1hdGVyaWFsIiwicmVjeWNsZWRQY3QiOjgsIndlaWdodEtnIjozLjF9LHsiY291bnRyeU9mT3JpZ2luIjoiREUiLCJuYW1lIjoiR3JhcGhpdGUgYW5vZGUgYWN0aXZlIG1hdGVyaWFsIiwicmVjeWNsZWRQY3QiOjQsIndlaWdodEtnIjoxLjl9LHsiY291bnRyeU9mT3JpZ2luIjoiREUiLCJuYW1lIjoiQWx1bWluaXVtIHBhY2sgaG91c2luZyIsInJlY3ljbGVkUGN0Ijo2MCwid2VpZ2h0S2ciOjIuMn1dLCJwbGFjZWRPbk1hcmtldERhdGUiOiIyMDI2LTA5LTAxIiwicHJvZHVjdEdyb3VwIjoiYmF0dGVyeSIsInByb2R1Y3RHcm91cERhdGEiOnsiYmF0dGVyeUNoZW1pc3RyeSI6Ik5NQyIsImJhdHRlcnlNb2RlbElkIjoiQUNNRS1MTVQtNDhWIiwiYmF0dGVyeVBhc3Nwb3J0TnVtYmVyIjoiVVJOOk9ETDpCQVRUOjA5NTA2MDAwMTM0MzUyOkFDTUUtTE1ULTIwMjYtMDkiLCJiYXR0ZXJ5VHlwZSI6ImxtdCIsImJhdHRlcnlXZWlnaHRLZyI6MTIuNCwiY28yZVBlclVuaXRLZyI6ODYuNCwiY3JpdGljYWxSYXdNYXRlcmlhbHMiOlt7ImNhc051bWJlciI6Ijc0NDAtNDgtNCIsIm5hbWUiOiJDb2JhbHQiLCJ3ZWlnaHRHcmFtcyI6MzEwfSx7ImNhc051bWJlciI6Ijc0MzktOTMtMiIsIm5hbWUiOiJMaXRoaXVtIiwid2VpZ2h0R3JhbXMiOjQyMH0seyJjYXNOdW1iZXIiOiI3NzgyLTQyLTUiLCJuYW1lIjoiTmF0dXJhbCBncmFwaGl0ZSIsIndlaWdodEdyYW1zIjoxODAwfV0sImN5Y2xlTGlmZVRlc3RDUmF0ZSI6MSwiZXVEZWNsYXJhdGlvbk9mQ29uZm9ybWl0eSI6IkVVLURvQyBBQ01FLTIwMjYtTE1ULTA5MDEsIHBlciBSZWd1bGF0aW9uIChFVSkgMjAyMy8xNTQyIEFydC4gMTgiLCJleHBlY3RlZExpZmV0aW1lQ3ljbGVzIjoxMjAwLCJleHBlY3RlZExpZmV0aW1lUmVmZXJlbmNlVGVzdCI6IkVOIDUwNjA0LTE6MjAxNiwgMjUgZGVnQywgMTAwJSBEb0QiLCJndGluIjoiMDk1MDYwMDAxMzQzNTIiLCJoYXphcmRvdXNTdWJzdGFuY2VzIjpbeyJjYXNOdW1iZXIiOiIyMTMyNC00MC0zIiwiY29uY2VudHJhdGlvblBjdCI6MC44LCJuYW1lIjoiTGl0aGl1bSBoZXhhZmx1b3JvcGhvc3BoYXRlIn1dLCJpbml0aWFsUm91bmRUcmlwRWZmaWNpZW5jeVBjdCI6OTUsImludGVybmFsQ2VsbFJlc2lzdGFuY2VNb2htIjoxNCwiaW50ZXJuYWxQYWNrUmVzaXN0YW5jZU1vaG0iOjExMCwibWFudWZhY3R1cmluZ0RhdGUiOiIyMDI2LTA4LTE4VDAwOjAwOjAwWiIsIm1hbnVmYWN0dXJpbmdQbGFjZSI6Ik3DvG5jaGVuLCBERSIsIm1hcmtpbmdJbmZvcm1hdGlvbiI6IlNlcGFyYXRlLWNvbGxlY3Rpb24gc3ltYm9sIHBlciBBcnQuIDEzKDQpOyBjYXBhY2l0eSAyMCBBaCAvIDk2MCBXaDsgNDggViBMTVQiLCJtYXhpbXVtVm9sdGFnZVYiOjU0LjYsIm1pbmltYWxWb2x0YWdlViI6MzksIm5vbWluYWxDYXBhY2l0eUFoIjoyMCwibm9taW5hbFZvbHRhZ2VWIjo0OCwibm90SW5Vc2VUZW1wZXJhdHVyZVJhbmdlIjp7Im1heEMiOjQ1LCJtaW5DIjotMTB9LCJub3RJblVzZVRlbXBlcmF0dXJlUmVmZXJlbmNlVGVzdCI6IkVOIDUwNjA0LTE6MjAxNiBzdG9yYWdlIGNsYXVzZSIsIm9yaWdpbmFsUG93ZXJDYXBhYmlsaXR5VyI6OTYwLCJwb3dlckxpbWl0TWF4VyI6MTUwMCwicG93ZXJMaW1pdE1pblciOjIwLCJwcm9kdWN0R3JvdXAiOiJiYXR0ZXJ5IiwicmF0ZWRDYXBhY2l0eUt3aCI6bnVsbCwicmVjeWNsZWRDb250ZW50Q29iYWx0UGN0IjoxMiwicmVjeWNsZWRDb250ZW50TGVhZFBjdCI6MCwicmVjeWNsZWRDb250ZW50TGl0aGl1bVBjdCI6NiwicmVjeWNsZWRDb250ZW50Tmlja2VsUGN0Ijo4LCJyZW5ld2FibGVDb250ZW50UGN0IjoxNCwicm91bmRUcmlwRWZmaWNpZW5jeUF0SGFsZkN5Y2xlTGlmZVBjdCI6OTEsInVzYWJsZUV4dGluZ3Vpc2hpbmdBZ2VudCI6IldhdGVyOyBjb29sIGEgYnVybmluZyBwYWNrIHdpdGggbGFyZ2Ugdm9sdW1lcyBvZiB3YXRlciIsIndhc3RlQmF0dGVyeUluZm9ybWF0aW9uIjoiUmV0dXJuIHRoZSBiYXR0ZXJ5IHRvIGEgYmljeWNsZSByZXRhaWxlciBvciBhIG11bmljaXBhbCBjb2xsZWN0aW9uIHBvaW50LiBEbyBub3QgcGxhY2UgaXQgaW4gaG91c2Vob2xkIHdhc3RlLiJ9LCJwcm9kdWN0TmFtZSI6IkFjbWUgTE1UIDQ4ViAyMEFoIGJhdHRlcnkgcGFjayIsInB1Ymxpc2hlZEF0IjoiMjAyNi0wOS0wMVQwOTowNTowMFoiLCJxckNvZGVVcmwiOiJodHRwczovL2RwcC5hY21lLmV4YW1wbGUvMDEvMDk1MDYwMDAxMzQzNTIvMTAvQUNNRS1MTVQtMjAyNi0wOS8yMS83ZTRhOWMzZDJmMWU4YjZhNWQ0MCIsInJlcGFpcmFiaWxpdHlTY29yZSI6bnVsbCwicmV0ZW50aW9uVW50aWwiOiIyMDM2LTA4LTI5VDA5OjA1OjAwWiIsInNjaGVtYVZlcnNpb24iOiIyLjYuMCIsInN0YXR1cyI6ImFjdGl2ZSIsInVwZGF0ZWRBdCI6IjIwMjYtMDktMDFUMDk6MDU6MDBaIiwidmVyc2lvbiI6MX0.OnjeF7qUrlZOKc-Xx8u-ThMayslJBs7HPAmpZBFKvyJpivIqOrN5lTCW15PsoyBeSOpjmRq3Mm_UC99B-Ya-Dg", + "jws": "eyJhbGciOiJFZERTQSIsImtpZCI6ImZlODEyYzEyZjNhYjRjZTZhYzVkYjY5YWMzNTJmOTA2Y2IxYjExZWY0M2ZiMzNlMjUyZWY3ZmY1NTIyNjM4ODkifQ.eyJiYXRjaElkIjoiQUNNRS1MTVQtMjAyNi0wOSIsImNvMmVQZXJVbml0IjpudWxsLCJjb21tb2RpdHlDb2RlIjoiODUwNzYwMDAiLCJjcmVhdGVkQXQiOiIyMDI2LTA5LTAxVDA5OjAwOjAwWiIsImlkIjoiMDE5OWEzYzItN2IxMC03ZTRhLTljM2QtMmYxZThiNmE1ZDQwIiwibWFudWZhY3R1cmVyIjp7ImFkZHJlc3MiOiJNdXN0ZXJzdHJhc3NlIDEsIDgwMzMxIE3DvG5jaGVuLCBERSIsImNvdW50cnkiOm51bGwsImRpZFdlYlVybCI6Imh0dHBzOi8vbm9kZS5hY21lLmV4YW1wbGUvLndlbGwta25vd24vZGlkLmpzb24iLCJuYW1lIjoiQWNtZSBaZWxsZW4gR21iSCJ9LCJtYXRlcmlhbHMiOlt7ImNvdW50cnlPZk9yaWdpbiI6IkRFIiwibmFtZSI6Ik5NQyA4MTEgY2F0aG9kZSBhY3RpdmUgbWF0ZXJpYWwiLCJyZWN5Y2xlZFBjdCI6OCwid2VpZ2h0S2ciOjMuMX0seyJjb3VudHJ5T2ZPcmlnaW4iOiJERSIsIm5hbWUiOiJHcmFwaGl0ZSBhbm9kZSBhY3RpdmUgbWF0ZXJpYWwiLCJyZWN5Y2xlZFBjdCI6NCwid2VpZ2h0S2ciOjEuOX0seyJjb3VudHJ5T2ZPcmlnaW4iOiJERSIsIm5hbWUiOiJBbHVtaW5pdW0gcGFjayBob3VzaW5nIiwicmVjeWNsZWRQY3QiOjYwLCJ3ZWlnaHRLZyI6Mi4yfV0sInBsYWNlZE9uTWFya2V0RGF0ZSI6IjIwMjYtMDktMDEiLCJwcm9kdWN0R3JvdXAiOiJiYXR0ZXJ5IiwicHJvZHVjdEdyb3VwRGF0YSI6eyJiYXR0ZXJ5Q2hlbWlzdHJ5IjoiTk1DIiwiYmF0dGVyeU1vZGVsSWQiOiJBQ01FLUxNVC00OFYiLCJiYXR0ZXJ5UGFzc3BvcnROdW1iZXIiOiJVUk46T0RMOkJBVFQ6MDk1MDYwMDAxMzQzNTI6QUNNRS1MTVQtMjAyNi0wOSIsImJhdHRlcnlUeXBlIjoibG10IiwiYmF0dGVyeVdlaWdodEtnIjoxMi40LCJjbzJlUGVyVW5pdEtnIjo4Ni40LCJjcml0aWNhbFJhd01hdGVyaWFscyI6W3siY2FzTnVtYmVyIjoiNzQ0MC00OC00IiwibmFtZSI6IkNvYmFsdCIsIndlaWdodEdyYW1zIjozMTB9LHsiY2FzTnVtYmVyIjoiNzQzOS05My0yIiwibmFtZSI6IkxpdGhpdW0iLCJ3ZWlnaHRHcmFtcyI6NDIwfSx7ImNhc051bWJlciI6Ijc3ODItNDItNSIsIm5hbWUiOiJOYXR1cmFsIGdyYXBoaXRlIiwid2VpZ2h0R3JhbXMiOjE4MDB9XSwiY3ljbGVMaWZlVGVzdENSYXRlIjoxLCJldURlY2xhcmF0aW9uT2ZDb25mb3JtaXR5IjoiRVUtRG9DIEFDTUUtMjAyNi1MTVQtMDkwMSwgcGVyIFJlZ3VsYXRpb24gKEVVKSAyMDIzLzE1NDIgQXJ0LiAxOCIsImV4cGVjdGVkTGlmZXRpbWVDeWNsZXMiOjEyMDAsImV4cGVjdGVkTGlmZXRpbWVSZWZlcmVuY2VUZXN0IjoiRU4gNTA2MDQtMToyMDE2LCAyNSBkZWdDLCAxMDAlIERvRCIsImhhemFyZG91c1N1YnN0YW5jZXMiOlt7ImNhc051bWJlciI6IjIxMzI0LTQwLTMiLCJjb25jZW50cmF0aW9uUGN0IjowLjgsIm5hbWUiOiJMaXRoaXVtIGhleGFmbHVvcm9waG9zcGhhdGUifV0sImluaXRpYWxSb3VuZFRyaXBFZmZpY2llbmN5UGN0Ijo5NSwiaW50ZXJuYWxDZWxsUmVzaXN0YW5jZU1vaG0iOjE0LCJpbnRlcm5hbFBhY2tSZXNpc3RhbmNlTW9obSI6MTEwLCJtYW51ZmFjdHVyaW5nRGF0ZSI6IjIwMjYtMDgtMThUMDA6MDA6MDBaIiwibWFudWZhY3R1cmluZ1BsYWNlIjoiTcO8bmNoZW4sIERFIiwibWFya2luZ0luZm9ybWF0aW9uIjoiU2VwYXJhdGUtY29sbGVjdGlvbiBzeW1ib2wgcGVyIEFydC4gMTMoNCk7IGNhcGFjaXR5IDIwIEFoIC8gOTYwIFdoOyA0OCBWIExNVCIsIm1heGltdW1Wb2x0YWdlViI6NTQuNiwibWluaW1hbFZvbHRhZ2VWIjozOSwibm9taW5hbENhcGFjaXR5QWgiOjIwLCJub21pbmFsVm9sdGFnZVYiOjQ4LCJub3RJblVzZVRlbXBlcmF0dXJlUmFuZ2UiOnsibWF4QyI6NDUsIm1pbkMiOi0xMH0sIm5vdEluVXNlVGVtcGVyYXR1cmVSZWZlcmVuY2VUZXN0IjoiRU4gNTA2MDQtMToyMDE2IHN0b3JhZ2UgY2xhdXNlIiwib3JpZ2luYWxQb3dlckNhcGFiaWxpdHlXIjo5NjAsInBvd2VyTGltaXRNYXhXIjoxNTAwLCJwb3dlckxpbWl0TWluVyI6MjAsInByb2R1Y3RHcm91cCI6ImJhdHRlcnkiLCJwcm9kdWN0SWRlbnRpZmllciI6eyJndGluIjoiMDk1MDYwMDAxMzQzNTIiLCJzY2hlbWUiOiJnczEifSwicmF0ZWRDYXBhY2l0eUt3aCI6bnVsbCwicmVjeWNsZWRDb250ZW50Q29iYWx0UGN0IjoxMiwicmVjeWNsZWRDb250ZW50TGVhZFBjdCI6MCwicmVjeWNsZWRDb250ZW50TGl0aGl1bVBjdCI6NiwicmVjeWNsZWRDb250ZW50Tmlja2VsUGN0Ijo4LCJyZW5ld2FibGVDb250ZW50UGN0IjoxNCwicm91bmRUcmlwRWZmaWNpZW5jeUF0SGFsZkN5Y2xlTGlmZVBjdCI6OTEsInVzYWJsZUV4dGluZ3Vpc2hpbmdBZ2VudCI6IldhdGVyOyBjb29sIGEgYnVybmluZyBwYWNrIHdpdGggbGFyZ2Ugdm9sdW1lcyBvZiB3YXRlciIsIndhc3RlQmF0dGVyeUluZm9ybWF0aW9uIjoiUmV0dXJuIHRoZSBiYXR0ZXJ5IHRvIGEgYmljeWNsZSByZXRhaWxlciBvciBhIG11bmljaXBhbCBjb2xsZWN0aW9uIHBvaW50LiBEbyBub3QgcGxhY2UgaXQgaW4gaG91c2Vob2xkIHdhc3RlLiJ9LCJwcm9kdWN0TmFtZSI6IkFjbWUgTE1UIDQ4ViAyMEFoIGJhdHRlcnkgcGFjayIsInB1Ymxpc2hlZEF0IjoiMjAyNi0wOS0wMVQwOTowNTowMFoiLCJxckNvZGVVcmwiOiJodHRwczovL2RwcC5hY21lLmV4YW1wbGUvMDEvMDk1MDYwMDAxMzQzNTIvMjEvN2U0YTljM2QyZjFlOGI2YTVkNDAiLCJyZXBhaXJhYmlsaXR5U2NvcmUiOm51bGwsInJldGVudGlvblVudGlsIjoiMjAzNi0wOC0yOVQwOTowNTowMFoiLCJzY2hlbWFWZXJzaW9uIjoiMi43LjAiLCJzdGF0dXMiOiJhY3RpdmUiLCJ1cGRhdGVkQXQiOiIyMDI2LTA5LTAxVDA5OjA1OjAwWiIsInZlcnNpb24iOjF9.LHi5ToX900cUN4vak8l1zOZ5xc1H9jW25fL4XUWuxz2JU1_3PxxrjRUTyY9RctPxPSTWmS40fUWurEZnTdE3Dw", "payload": { + "batchId": "ACME-LMT-2026-09", "co2ePerUnit": null, "commodityCode": "85076000", "createdAt": "2026-09-01T09:00:00Z", @@ -694,7 +705,6 @@ "euDeclarationOfConformity": "EU-DoC ACME-2026-LMT-0901, per Regulation (EU) 2023/1542 Art. 18", "expectedLifetimeCycles": 1200, "expectedLifetimeReferenceTest": "EN 50604-1:2016, 25 degC, 100% DoD", - "gtin": "09506000134352", "hazardousSubstances": [ { "casNumber": "21324-40-3", @@ -721,6 +731,10 @@ "powerLimitMaxW": 1500.0, "powerLimitMinW": 20.0, "productGroup": "battery", + "productIdentifier": { + "gtin": "09506000134352", + "scheme": "gs1" + }, "ratedCapacityKwh": null, "recycledContentCobaltPct": 12.0, "recycledContentLeadPct": 0.0, @@ -733,10 +747,10 @@ }, "productName": "Acme LMT 48V 20Ah battery pack", "publishedAt": "2026-09-01T09:05:00Z", - "qrCodeUrl": "https://dpp.acme.example/01/09506000134352/10/ACME-LMT-2026-09/21/7e4a9c3d2f1e8b6a5d40", + "qrCodeUrl": "https://dpp.acme.example/01/09506000134352/21/7e4a9c3d2f1e8b6a5d40", "repairabilityScore": null, "retentionUntil": "2036-08-29T09:05:00Z", - "schemaVersion": "2.6.0", + "schemaVersion": "2.7.0", "status": "active", "updatedAt": "2026-09-01T09:05:00Z", "version": 1 diff --git a/site/dpp-landing/public/verify/examples/09-unknown-top-level-field.json b/site/dpp-landing/public/verify/examples/09-unknown-top-level-field.json index 43abd4d..a10eae9 100644 --- a/site/dpp-landing/public/verify/examples/09-unknown-top-level-field.json +++ b/site/dpp-landing/public/verify/examples/09-unknown-top-level-field.json @@ -16,7 +16,7 @@ { "action": "published", "actor": "api-key", - "entryHash": "4e81bf531274f21aa02339144c34711eac79af7fb22ebf10a18982adc3f075a3", + "entryHash": "2934a67be97238b4f38ff4ee4d53464a0c197cec343297b25124f894b942c2f2", "id": "0199a3c2-7b10-7e4a-9c3d-000000000002", "metadata": { "fullViewPayload": { @@ -142,7 +142,6 @@ "euDeclarationOfConformity": "EU-DoC ACME-2026-LMT-0901, per Regulation (EU) 2023/1542 Art. 18", "expectedLifetimeCycles": 1200, "expectedLifetimeReferenceTest": "EN 50604-1:2016, 25 degC, 100% DoD", - "gtin": "09506000134352", "hazardousSubstances": [ { "casNumber": "21324-40-3", @@ -169,6 +168,10 @@ "powerLimitMaxW": 1500.0, "powerLimitMinW": 20.0, "productGroup": "battery", + "productIdentifier": { + "gtin": "09506000134352", + "scheme": "gs1" + }, "ratedCapacityKwh": null, "recycledContentCobaltPct": 12.0, "recycledContentLeadPct": 0.0, @@ -194,16 +197,17 @@ }, "productName": "Acme LMT 48V 20Ah battery pack", "publishedAt": "2026-09-01T09:05:00Z", - "qrCodeUrl": "https://dpp.acme.example/01/09506000134352/10/ACME-LMT-2026-09/21/7e4a9c3d2f1e8b6a5d40", + "qrCodeUrl": "https://dpp.acme.example/01/09506000134352/21/7e4a9c3d2f1e8b6a5d40", "repairabilityScore": null, "retentionLocked": true, "retentionUntil": "2036-08-29T09:05:00Z", - "schemaVersion": "2.6.0", + "schemaVersion": "2.7.0", "status": "active", "updatedAt": "2026-09-01T09:05:00Z", "version": 1 }, "publicViewPayload": { + "batchId": "ACME-LMT-2026-09", "co2ePerUnit": null, "commodityCode": "85076000", "createdAt": "2026-09-01T09:00:00Z", @@ -264,7 +268,6 @@ "euDeclarationOfConformity": "EU-DoC ACME-2026-LMT-0901, per Regulation (EU) 2023/1542 Art. 18", "expectedLifetimeCycles": 1200, "expectedLifetimeReferenceTest": "EN 50604-1:2016, 25 degC, 100% DoD", - "gtin": "09506000134352", "hazardousSubstances": [ { "casNumber": "21324-40-3", @@ -291,6 +294,10 @@ "powerLimitMaxW": 1500.0, "powerLimitMinW": 20.0, "productGroup": "battery", + "productIdentifier": { + "gtin": "09506000134352", + "scheme": "gs1" + }, "ratedCapacityKwh": null, "recycledContentCobaltPct": 12.0, "recycledContentLeadPct": 0.0, @@ -303,10 +310,10 @@ }, "productName": "Acme LMT 48V 20Ah battery pack", "publishedAt": "2026-09-01T09:05:00Z", - "qrCodeUrl": "https://dpp.acme.example/01/09506000134352/10/ACME-LMT-2026-09/21/7e4a9c3d2f1e8b6a5d40", + "qrCodeUrl": "https://dpp.acme.example/01/09506000134352/21/7e4a9c3d2f1e8b6a5d40", "repairabilityScore": null, "retentionUntil": "2036-08-29T09:05:00Z", - "schemaVersion": "2.6.0", + "schemaVersion": "2.7.0", "status": "active", "updatedAt": "2026-09-01T09:05:00Z", "version": 1 @@ -322,7 +329,7 @@ { "action": "transferred", "actor": "api-key", - "entryHash": "5c869a32da993e9a5ee13bc3b059fee9c3abc1fbbd840ab2449473f0e5453b08", + "entryHash": "1b61fd6f3f72f0730d61b59008f883d7630a03e2dea9f5bd67206482d0770530", "id": "0199a3c2-7b10-7e4a-9c3d-000000000003", "metadata": { "event": "transfer.initiated", @@ -331,7 +338,7 @@ }, "newStatus": null, "passportId": "0199a3c2-7b10-7e4a-9c3d-2f1e8b6a5d40", - "prevHash": "4e81bf531274f21aa02339144c34711eac79af7fb22ebf10a18982adc3f075a3", + "prevHash": "2934a67be97238b4f38ff4ee4d53464a0c197cec343297b25124f894b942c2f2", "previousStatus": null, "requestId": "0199a3c2-7b10-7e4a-8d2e-000000000003", "timestamp": "2026-09-10T14:00:00.042Z" @@ -339,7 +346,7 @@ { "action": "transferred", "actor": "api-key", - "entryHash": "3a5eb46b99bc15d235b342a0a6092d3e382d998b7de32588ed4966d74295fa51", + "entryHash": "f462766c832366e92cef97196b764df1bd5ce5e1acc1fa5e2b395f99d4c3e6fa", "id": "0199a3c2-7b10-7e4a-9c3d-000000000004", "metadata": { "event": "transfer.accepted", @@ -348,7 +355,7 @@ }, "newStatus": null, "passportId": "0199a3c2-7b10-7e4a-9c3d-2f1e8b6a5d40", - "prevHash": "5c869a32da993e9a5ee13bc3b059fee9c3abc1fbbd840ab2449473f0e5453b08", + "prevHash": "1b61fd6f3f72f0730d61b59008f883d7630a03e2dea9f5bd67206482d0770530", "previousStatus": null, "requestId": "0199a3c2-7b10-7e4a-8d2e-000000000004", "timestamp": "2026-09-10T14:30:00.123456Z" @@ -356,7 +363,7 @@ { "action": "deactivated", "actor": "api-key", - "entryHash": "256b89a07f8ff158fe29f327e08996214563987ca111cddc563bb0e9a9f9a362", + "entryHash": "6fd9d12be0f3a26ae6fc2740a796a13363de1e3abd3082ce284c9eeebdc88dac", "id": "0199a3c2-7b10-7e4a-9c3d-000000000005", "metadata": { "declaredAt": "2026-09-20T08:00:00Z", @@ -369,7 +376,7 @@ }, "newStatus": "deactivated", "passportId": "0199a3c2-7b10-7e4a-9c3d-2f1e8b6a5d40", - "prevHash": "3a5eb46b99bc15d235b342a0a6092d3e382d998b7de32588ed4966d74295fa51", + "prevHash": "f462766c832366e92cef97196b764df1bd5ce5e1acc1fa5e2b395f99d4c3e6fa", "previousStatus": "active", "requestId": "0199a3c2-7b10-7e4a-8d2e-000000000005", "timestamp": "2026-09-20T08:00:00.018Z" @@ -429,7 +436,7 @@ } }, "fullView": { - "jws": "eyJhbGciOiJFZERTQSIsImtpZCI6ImZlODEyYzEyZjNhYjRjZTZhYzVkYjY5YWMzNTJmOTA2Y2IxYjExZWY0M2ZiMzNlMjUyZWY3ZmY1NTIyNjM4ODkifQ.eyJiYXRjaElkIjoiQUNNRS1MTVQtMjAyNi0wOSIsImNvMmVQZXJVbml0IjpudWxsLCJjb21tb2RpdHlDb2RlIjoiODUwNzYwMDAiLCJjcmVhdGVkQXQiOiIyMDI2LTA5LTAxVDA5OjAwOjAwWiIsImlkIjoiMDE5OWEzYzItN2IxMC03ZTRhLTljM2QtMmYxZThiNmE1ZDQwIiwiandzU2lnbmF0dXJlIjpudWxsLCJtYW51ZmFjdHVyZXIiOnsiYWRkcmVzcyI6Ik11c3RlcnN0cmFzc2UgMSwgODAzMzEgTcO8bmNoZW4sIERFIiwiY291bnRyeSI6bnVsbCwiZGlkV2ViVXJsIjoiaHR0cHM6Ly9ub2RlLmFjbWUuZXhhbXBsZS8ud2VsbC1rbm93bi9kaWQuanNvbiIsIm5hbWUiOiJBY21lIFplbGxlbiBHbWJIIn0sIm1hdGVyaWFscyI6W3siY291bnRyeU9mT3JpZ2luIjoiREUiLCJuYW1lIjoiTk1DIDgxMSBjYXRob2RlIGFjdGl2ZSBtYXRlcmlhbCIsInJlY3ljbGVkUGN0Ijo4LCJ3ZWlnaHRLZyI6My4xfSx7ImNvdW50cnlPZk9yaWdpbiI6IkRFIiwibmFtZSI6IkdyYXBoaXRlIGFub2RlIGFjdGl2ZSBtYXRlcmlhbCIsInJlY3ljbGVkUGN0Ijo0LCJ3ZWlnaHRLZyI6MS45fSx7ImNvdW50cnlPZk9yaWdpbiI6IkRFIiwibmFtZSI6IkFsdW1pbml1bSBwYWNrIGhvdXNpbmciLCJyZWN5Y2xlZFBjdCI6NjAsIndlaWdodEtnIjoyLjJ9XSwicGxhY2VkT25NYXJrZXREYXRlIjoiMjAyNi0wOS0wMSIsInByb2R1Y3RHcm91cCI6ImJhdHRlcnkiLCJwcm9kdWN0R3JvdXBEYXRhIjp7ImFub2RlTWF0ZXJpYWwiOlt7ImNhc051bWJlciI6Ijc3ODItNDItNSIsIm5hbWUiOiJHcmFwaGl0ZSIsIndlaWdodFBjdCI6OTZ9LHsiY2FzTnVtYmVyIjoiOTAwMy01NS04IiwibmFtZSI6IlNCUi9DTUMgYmluZGVyIiwid2VpZ2h0UGN0Ijo0fV0sImJhdHRlcnlDaGVtaXN0cnkiOiJOTUMiLCJiYXR0ZXJ5TW9kZWxJZCI6IkFDTUUtTE1ULTQ4ViIsImJhdHRlcnlQYXNzcG9ydE51bWJlciI6IlVSTjpPREw6QkFUVDowOTUwNjAwMDEzNDM1MjpBQ01FLUxNVC0yMDI2LTA5IiwiYmF0dGVyeVN0YXR1cyI6Im9yaWdpbmFsIiwiYmF0dGVyeVR5cGUiOiJsbXQiLCJiYXR0ZXJ5V2VpZ2h0S2ciOjEyLjQsImNhdGhvZGVNYXRlcmlhbCI6W3siY2FzTnVtYmVyIjoiMzQ2NDE3LTk3LTgiLCJuYW1lIjoiTGlOaTAuOE1uMC4xQ28wLjFPMiIsIndlaWdodFBjdCI6OTZ9LHsiY2FzTnVtYmVyIjoiMjQ5MzctNzktOSIsIm5hbWUiOiJQVkRGIGJpbmRlciIsIndlaWdodFBjdCI6Mn0seyJjYXNOdW1iZXIiOiIxMzMzLTg2LTQiLCJuYW1lIjoiQ29uZHVjdGl2ZSBjYXJib24gYmxhY2siLCJ3ZWlnaHRQY3QiOjJ9XSwiY28yZVBlclVuaXRLZyI6ODYuNCwiY29tcG9uZW50UGFydE51bWJlcnMiOlsiQUNNRS1DRUxMLTIxNzAwLU5NQyIsIkFDTUUtQk1TLTEzUy1WMSIsIkFDTUUtTE1ULUVOQ0wtNDgiXSwiY3JpdGljYWxSYXdNYXRlcmlhbHMiOlt7ImNhc051bWJlciI6Ijc0NDAtNDgtNCIsIm5hbWUiOiJDb2JhbHQiLCJ3ZWlnaHRHcmFtcyI6MzEwfSx7ImNhc051bWJlciI6Ijc0MzktOTMtMiIsIm5hbWUiOiJMaXRoaXVtIiwid2VpZ2h0R3JhbXMiOjQyMH0seyJjYXNOdW1iZXIiOiI3NzgyLTQyLTUiLCJuYW1lIjoiTmF0dXJhbCBncmFwaGl0ZSIsIndlaWdodEdyYW1zIjoxODAwfV0sImN5Y2xlTGlmZVRlc3RDUmF0ZSI6MSwiZGlzYXNzZW1ibHlJbnN0cnVjdGlvbnNVcmwiOiJodHRwczovL2FjbWUuZXhhbXBsZS9zZXJ2aWNlL2xtdC00OC9kaXNhc3NlbWJseSIsImR5bmFtaWNQZXJmb3JtYW5jZSI6eyJjYXBhY2l0eUZhZGVQY3QiOjAuNSwiZXhwZWN0ZWRMaWZldGltZUN5Y2xlcyI6MTE5NSwiaW50ZXJuYWxSZXNpc3RhbmNlTW9obSI6MTEwLjQsInJhdGVkQ2FwYWNpdHlBaCI6MTkuOSwicm91bmRUcmlwRWZmaWNpZW5jeVBjdCI6OTQuOH0sImVsZWN0cm9seXRlTWF0ZXJpYWwiOlt7ImNhc051bWJlciI6Ijk2LTQ5LTEiLCJuYW1lIjoiRXRoeWxlbmUgY2FyYm9uYXRlIiwid2VpZ2h0UGN0IjozOH0seyJjYXNOdW1iZXIiOiI2MTYtMzgtNiIsIm5hbWUiOiJEaW1ldGh5bCBjYXJib25hdGUiLCJ3ZWlnaHRQY3QiOjQ5fSx7ImNhc051bWJlciI6IjIxMzI0LTQwLTMiLCJuYW1lIjoiTGl0aGl1bSBoZXhhZmx1b3JvcGhvc3BoYXRlIiwid2VpZ2h0UGN0IjoxM31dLCJldURlY2xhcmF0aW9uT2ZDb25mb3JtaXR5IjoiRVUtRG9DIEFDTUUtMjAyNi1MTVQtMDkwMSwgcGVyIFJlZ3VsYXRpb24gKEVVKSAyMDIzLzE1NDIgQXJ0LiAxOCIsImV4cGVjdGVkTGlmZXRpbWVDeWNsZXMiOjEyMDAsImV4cGVjdGVkTGlmZXRpbWVSZWZlcmVuY2VUZXN0IjoiRU4gNTA2MDQtMToyMDE2LCAyNSBkZWdDLCAxMDAlIERvRCIsImd0aW4iOiIwOTUwNjAwMDEzNDM1MiIsImhhemFyZG91c1N1YnN0YW5jZXMiOlt7ImNhc051bWJlciI6IjIxMzI0LTQwLTMiLCJjb25jZW50cmF0aW9uUGN0IjowLjgsIm5hbWUiOiJMaXRoaXVtIGhleGFmbHVvcm9waG9zcGhhdGUifV0sImluaXRpYWxSb3VuZFRyaXBFZmZpY2llbmN5UGN0Ijo5NSwiaW50ZXJuYWxDZWxsUmVzaXN0YW5jZU1vaG0iOjE0LCJpbnRlcm5hbFBhY2tSZXNpc3RhbmNlTW9obSI6MTEwLCJtYW51ZmFjdHVyaW5nRGF0ZSI6IjIwMjYtMDgtMThUMDA6MDA6MDBaIiwibWFudWZhY3R1cmluZ1BsYWNlIjoiTcO8bmNoZW4sIERFIiwibWFya2luZ0luZm9ybWF0aW9uIjoiU2VwYXJhdGUtY29sbGVjdGlvbiBzeW1ib2wgcGVyIEFydC4gMTMoNCk7IGNhcGFjaXR5IDIwIEFoIC8gOTYwIFdoOyA0OCBWIExNVCIsIm1heGltdW1Wb2x0YWdlViI6NTQuNiwibWluaW1hbFZvbHRhZ2VWIjozOSwibm9taW5hbENhcGFjaXR5QWgiOjIwLCJub21pbmFsVm9sdGFnZVYiOjQ4LCJub3RJblVzZVRlbXBlcmF0dXJlUmFuZ2UiOnsibWF4QyI6NDUsIm1pbkMiOi0xMH0sIm5vdEluVXNlVGVtcGVyYXR1cmVSZWZlcmVuY2VUZXN0IjoiRU4gNTA2MDQtMToyMDE2IHN0b3JhZ2UgY2xhdXNlIiwib3JpZ2luYWxQb3dlckNhcGFiaWxpdHlXIjo5NjAsInBvd2VyTGltaXRNYXhXIjoxNTAwLCJwb3dlckxpbWl0TWluVyI6MjAsInByb2R1Y3RHcm91cCI6ImJhdHRlcnkiLCJyYXRlZENhcGFjaXR5S3doIjpudWxsLCJyZWN5Y2xlZENvbnRlbnRDb2JhbHRQY3QiOjEyLCJyZWN5Y2xlZENvbnRlbnRMZWFkUGN0IjowLCJyZWN5Y2xlZENvbnRlbnRMaXRoaXVtUGN0Ijo2LCJyZWN5Y2xlZENvbnRlbnROaWNrZWxQY3QiOjgsInJlbmV3YWJsZUNvbnRlbnRQY3QiOjE0LCJyb3VuZFRyaXBFZmZpY2llbmN5QXRIYWxmQ3ljbGVMaWZlUGN0Ijo5MSwic2FmZXR5TWVhc3VyZXMiOiJEbyBub3Qgb3BlbiB0aGUgcGFjay4gUmVwbGFjZSBpdCB0aHJvdWdoIGFuIGF1dGhvcmlzZWQgZGVhbGVyLiBLZWVwIGl0IGF3YXkgZnJvbSBoZWF0IGFib3ZlIDYwIGRlZ0MuIiwic3BhcmVQYXJ0c0NvbnRhY3RzIjoic3BhcmVzQGFjbWUuZXhhbXBsZSIsInN0YXRlT2ZIZWFsdGgiOnsicGFyYW1ldGVyU2V0Ijoic3RhdGlvbmFyeU9yTG10IiwicmVtYWluaW5nQ2FwYWNpdHlQY3QiOjk5LjUsInJlbWFpbmluZ1Bvd2VyQ2FwYWJpbGl0eVBjdCI6OTkuMSwic2VsZkRpc2NoYXJnZVJhdGVQY3RQZXJNb250aCI6Mn0sInN0YXRlT2ZIZWFsdGhQY3QiOm51bGwsInRlc3RSZXBvcnRSZXN1bHRzIjoiRU4gNTA2MDQtMToyMDE2IHBhc3M7IFVOIDM4LjMgcGFzczsgcmVwb3J0IEFDTUUtVFItMjAyNi0wODE1IiwidXNhYmxlRXh0aW5ndWlzaGluZ0FnZW50IjoiV2F0ZXI7IGNvb2wgYSBidXJuaW5nIHBhY2sgd2l0aCBsYXJnZSB2b2x1bWVzIG9mIHdhdGVyIiwidXNhZ2VIaXN0b3J5Ijp7ImNoYXJnZURpc2NoYXJnZUN5Y2xlcyI6NH0sIndhc3RlQmF0dGVyeUluZm9ybWF0aW9uIjoiUmV0dXJuIHRoZSBiYXR0ZXJ5IHRvIGEgYmljeWNsZSByZXRhaWxlciBvciBhIG11bmljaXBhbCBjb2xsZWN0aW9uIHBvaW50LiBEbyBub3QgcGxhY2UgaXQgaW4gaG91c2Vob2xkIHdhc3RlLiJ9LCJwcm9kdWN0TmFtZSI6IkFjbWUgTE1UIDQ4ViAyMEFoIGJhdHRlcnkgcGFjayIsInB1Ymxpc2hlZEF0IjoiMjAyNi0wOS0wMVQwOTowNTowMFoiLCJxckNvZGVVcmwiOiJodHRwczovL2RwcC5hY21lLmV4YW1wbGUvMDEvMDk1MDYwMDAxMzQzNTIvMTAvQUNNRS1MTVQtMjAyNi0wOS8yMS83ZTRhOWMzZDJmMWU4YjZhNWQ0MCIsInJlcGFpcmFiaWxpdHlTY29yZSI6bnVsbCwicmV0ZW50aW9uTG9ja2VkIjp0cnVlLCJyZXRlbnRpb25VbnRpbCI6IjIwMzYtMDgtMjlUMDk6MDU6MDBaIiwic2NoZW1hVmVyc2lvbiI6IjIuNi4wIiwic3RhdHVzIjoiYWN0aXZlIiwidXBkYXRlZEF0IjoiMjAyNi0wOS0wMVQwOTowNTowMFoiLCJ2ZXJzaW9uIjoxfQ.WlMDfygpDjYk8xHRQjpQgppwhVkUgYhyj_9iiPH_IXvXb8IKcD0cA2lFJCznB1B6llfW5Q3qiZcfRAdB78nDBw", + "jws": "eyJhbGciOiJFZERTQSIsImtpZCI6ImZlODEyYzEyZjNhYjRjZTZhYzVkYjY5YWMzNTJmOTA2Y2IxYjExZWY0M2ZiMzNlMjUyZWY3ZmY1NTIyNjM4ODkifQ.eyJiYXRjaElkIjoiQUNNRS1MTVQtMjAyNi0wOSIsImNvMmVQZXJVbml0IjpudWxsLCJjb21tb2RpdHlDb2RlIjoiODUwNzYwMDAiLCJjcmVhdGVkQXQiOiIyMDI2LTA5LTAxVDA5OjAwOjAwWiIsImlkIjoiMDE5OWEzYzItN2IxMC03ZTRhLTljM2QtMmYxZThiNmE1ZDQwIiwiandzU2lnbmF0dXJlIjpudWxsLCJtYW51ZmFjdHVyZXIiOnsiYWRkcmVzcyI6Ik11c3RlcnN0cmFzc2UgMSwgODAzMzEgTcO8bmNoZW4sIERFIiwiY291bnRyeSI6bnVsbCwiZGlkV2ViVXJsIjoiaHR0cHM6Ly9ub2RlLmFjbWUuZXhhbXBsZS8ud2VsbC1rbm93bi9kaWQuanNvbiIsIm5hbWUiOiJBY21lIFplbGxlbiBHbWJIIn0sIm1hdGVyaWFscyI6W3siY291bnRyeU9mT3JpZ2luIjoiREUiLCJuYW1lIjoiTk1DIDgxMSBjYXRob2RlIGFjdGl2ZSBtYXRlcmlhbCIsInJlY3ljbGVkUGN0Ijo4LCJ3ZWlnaHRLZyI6My4xfSx7ImNvdW50cnlPZk9yaWdpbiI6IkRFIiwibmFtZSI6IkdyYXBoaXRlIGFub2RlIGFjdGl2ZSBtYXRlcmlhbCIsInJlY3ljbGVkUGN0Ijo0LCJ3ZWlnaHRLZyI6MS45fSx7ImNvdW50cnlPZk9yaWdpbiI6IkRFIiwibmFtZSI6IkFsdW1pbml1bSBwYWNrIGhvdXNpbmciLCJyZWN5Y2xlZFBjdCI6NjAsIndlaWdodEtnIjoyLjJ9XSwicGxhY2VkT25NYXJrZXREYXRlIjoiMjAyNi0wOS0wMSIsInByb2R1Y3RHcm91cCI6ImJhdHRlcnkiLCJwcm9kdWN0R3JvdXBEYXRhIjp7ImFub2RlTWF0ZXJpYWwiOlt7ImNhc051bWJlciI6Ijc3ODItNDItNSIsIm5hbWUiOiJHcmFwaGl0ZSIsIndlaWdodFBjdCI6OTZ9LHsiY2FzTnVtYmVyIjoiOTAwMy01NS04IiwibmFtZSI6IlNCUi9DTUMgYmluZGVyIiwid2VpZ2h0UGN0Ijo0fV0sImJhdHRlcnlDaGVtaXN0cnkiOiJOTUMiLCJiYXR0ZXJ5TW9kZWxJZCI6IkFDTUUtTE1ULTQ4ViIsImJhdHRlcnlQYXNzcG9ydE51bWJlciI6IlVSTjpPREw6QkFUVDowOTUwNjAwMDEzNDM1MjpBQ01FLUxNVC0yMDI2LTA5IiwiYmF0dGVyeVN0YXR1cyI6Im9yaWdpbmFsIiwiYmF0dGVyeVR5cGUiOiJsbXQiLCJiYXR0ZXJ5V2VpZ2h0S2ciOjEyLjQsImNhdGhvZGVNYXRlcmlhbCI6W3siY2FzTnVtYmVyIjoiMzQ2NDE3LTk3LTgiLCJuYW1lIjoiTGlOaTAuOE1uMC4xQ28wLjFPMiIsIndlaWdodFBjdCI6OTZ9LHsiY2FzTnVtYmVyIjoiMjQ5MzctNzktOSIsIm5hbWUiOiJQVkRGIGJpbmRlciIsIndlaWdodFBjdCI6Mn0seyJjYXNOdW1iZXIiOiIxMzMzLTg2LTQiLCJuYW1lIjoiQ29uZHVjdGl2ZSBjYXJib24gYmxhY2siLCJ3ZWlnaHRQY3QiOjJ9XSwiY28yZVBlclVuaXRLZyI6ODYuNCwiY29tcG9uZW50UGFydE51bWJlcnMiOlsiQUNNRS1DRUxMLTIxNzAwLU5NQyIsIkFDTUUtQk1TLTEzUy1WMSIsIkFDTUUtTE1ULUVOQ0wtNDgiXSwiY3JpdGljYWxSYXdNYXRlcmlhbHMiOlt7ImNhc051bWJlciI6Ijc0NDAtNDgtNCIsIm5hbWUiOiJDb2JhbHQiLCJ3ZWlnaHRHcmFtcyI6MzEwfSx7ImNhc051bWJlciI6Ijc0MzktOTMtMiIsIm5hbWUiOiJMaXRoaXVtIiwid2VpZ2h0R3JhbXMiOjQyMH0seyJjYXNOdW1iZXIiOiI3NzgyLTQyLTUiLCJuYW1lIjoiTmF0dXJhbCBncmFwaGl0ZSIsIndlaWdodEdyYW1zIjoxODAwfV0sImN5Y2xlTGlmZVRlc3RDUmF0ZSI6MSwiZGlzYXNzZW1ibHlJbnN0cnVjdGlvbnNVcmwiOiJodHRwczovL2FjbWUuZXhhbXBsZS9zZXJ2aWNlL2xtdC00OC9kaXNhc3NlbWJseSIsImR5bmFtaWNQZXJmb3JtYW5jZSI6eyJjYXBhY2l0eUZhZGVQY3QiOjAuNSwiZXhwZWN0ZWRMaWZldGltZUN5Y2xlcyI6MTE5NSwiaW50ZXJuYWxSZXNpc3RhbmNlTW9obSI6MTEwLjQsInJhdGVkQ2FwYWNpdHlBaCI6MTkuOSwicm91bmRUcmlwRWZmaWNpZW5jeVBjdCI6OTQuOH0sImVsZWN0cm9seXRlTWF0ZXJpYWwiOlt7ImNhc051bWJlciI6Ijk2LTQ5LTEiLCJuYW1lIjoiRXRoeWxlbmUgY2FyYm9uYXRlIiwid2VpZ2h0UGN0IjozOH0seyJjYXNOdW1iZXIiOiI2MTYtMzgtNiIsIm5hbWUiOiJEaW1ldGh5bCBjYXJib25hdGUiLCJ3ZWlnaHRQY3QiOjQ5fSx7ImNhc051bWJlciI6IjIxMzI0LTQwLTMiLCJuYW1lIjoiTGl0aGl1bSBoZXhhZmx1b3JvcGhvc3BoYXRlIiwid2VpZ2h0UGN0IjoxM31dLCJldURlY2xhcmF0aW9uT2ZDb25mb3JtaXR5IjoiRVUtRG9DIEFDTUUtMjAyNi1MTVQtMDkwMSwgcGVyIFJlZ3VsYXRpb24gKEVVKSAyMDIzLzE1NDIgQXJ0LiAxOCIsImV4cGVjdGVkTGlmZXRpbWVDeWNsZXMiOjEyMDAsImV4cGVjdGVkTGlmZXRpbWVSZWZlcmVuY2VUZXN0IjoiRU4gNTA2MDQtMToyMDE2LCAyNSBkZWdDLCAxMDAlIERvRCIsImhhemFyZG91c1N1YnN0YW5jZXMiOlt7ImNhc051bWJlciI6IjIxMzI0LTQwLTMiLCJjb25jZW50cmF0aW9uUGN0IjowLjgsIm5hbWUiOiJMaXRoaXVtIGhleGFmbHVvcm9waG9zcGhhdGUifV0sImluaXRpYWxSb3VuZFRyaXBFZmZpY2llbmN5UGN0Ijo5NSwiaW50ZXJuYWxDZWxsUmVzaXN0YW5jZU1vaG0iOjE0LCJpbnRlcm5hbFBhY2tSZXNpc3RhbmNlTW9obSI6MTEwLCJtYW51ZmFjdHVyaW5nRGF0ZSI6IjIwMjYtMDgtMThUMDA6MDA6MDBaIiwibWFudWZhY3R1cmluZ1BsYWNlIjoiTcO8bmNoZW4sIERFIiwibWFya2luZ0luZm9ybWF0aW9uIjoiU2VwYXJhdGUtY29sbGVjdGlvbiBzeW1ib2wgcGVyIEFydC4gMTMoNCk7IGNhcGFjaXR5IDIwIEFoIC8gOTYwIFdoOyA0OCBWIExNVCIsIm1heGltdW1Wb2x0YWdlViI6NTQuNiwibWluaW1hbFZvbHRhZ2VWIjozOSwibm9taW5hbENhcGFjaXR5QWgiOjIwLCJub21pbmFsVm9sdGFnZVYiOjQ4LCJub3RJblVzZVRlbXBlcmF0dXJlUmFuZ2UiOnsibWF4QyI6NDUsIm1pbkMiOi0xMH0sIm5vdEluVXNlVGVtcGVyYXR1cmVSZWZlcmVuY2VUZXN0IjoiRU4gNTA2MDQtMToyMDE2IHN0b3JhZ2UgY2xhdXNlIiwib3JpZ2luYWxQb3dlckNhcGFiaWxpdHlXIjo5NjAsInBvd2VyTGltaXRNYXhXIjoxNTAwLCJwb3dlckxpbWl0TWluVyI6MjAsInByb2R1Y3RHcm91cCI6ImJhdHRlcnkiLCJwcm9kdWN0SWRlbnRpZmllciI6eyJndGluIjoiMDk1MDYwMDAxMzQzNTIiLCJzY2hlbWUiOiJnczEifSwicmF0ZWRDYXBhY2l0eUt3aCI6bnVsbCwicmVjeWNsZWRDb250ZW50Q29iYWx0UGN0IjoxMiwicmVjeWNsZWRDb250ZW50TGVhZFBjdCI6MCwicmVjeWNsZWRDb250ZW50TGl0aGl1bVBjdCI6NiwicmVjeWNsZWRDb250ZW50Tmlja2VsUGN0Ijo4LCJyZW5ld2FibGVDb250ZW50UGN0IjoxNCwicm91bmRUcmlwRWZmaWNpZW5jeUF0SGFsZkN5Y2xlTGlmZVBjdCI6OTEsInNhZmV0eU1lYXN1cmVzIjoiRG8gbm90IG9wZW4gdGhlIHBhY2suIFJlcGxhY2UgaXQgdGhyb3VnaCBhbiBhdXRob3Jpc2VkIGRlYWxlci4gS2VlcCBpdCBhd2F5IGZyb20gaGVhdCBhYm92ZSA2MCBkZWdDLiIsInNwYXJlUGFydHNDb250YWN0cyI6InNwYXJlc0BhY21lLmV4YW1wbGUiLCJzdGF0ZU9mSGVhbHRoIjp7InBhcmFtZXRlclNldCI6InN0YXRpb25hcnlPckxtdCIsInJlbWFpbmluZ0NhcGFjaXR5UGN0Ijo5OS41LCJyZW1haW5pbmdQb3dlckNhcGFiaWxpdHlQY3QiOjk5LjEsInNlbGZEaXNjaGFyZ2VSYXRlUGN0UGVyTW9udGgiOjJ9LCJzdGF0ZU9mSGVhbHRoUGN0IjpudWxsLCJ0ZXN0UmVwb3J0UmVzdWx0cyI6IkVOIDUwNjA0LTE6MjAxNiBwYXNzOyBVTiAzOC4zIHBhc3M7IHJlcG9ydCBBQ01FLVRSLTIwMjYtMDgxNSIsInVzYWJsZUV4dGluZ3Vpc2hpbmdBZ2VudCI6IldhdGVyOyBjb29sIGEgYnVybmluZyBwYWNrIHdpdGggbGFyZ2Ugdm9sdW1lcyBvZiB3YXRlciIsInVzYWdlSGlzdG9yeSI6eyJjaGFyZ2VEaXNjaGFyZ2VDeWNsZXMiOjR9LCJ3YXN0ZUJhdHRlcnlJbmZvcm1hdGlvbiI6IlJldHVybiB0aGUgYmF0dGVyeSB0byBhIGJpY3ljbGUgcmV0YWlsZXIgb3IgYSBtdW5pY2lwYWwgY29sbGVjdGlvbiBwb2ludC4gRG8gbm90IHBsYWNlIGl0IGluIGhvdXNlaG9sZCB3YXN0ZS4ifSwicHJvZHVjdE5hbWUiOiJBY21lIExNVCA0OFYgMjBBaCBiYXR0ZXJ5IHBhY2siLCJwdWJsaXNoZWRBdCI6IjIwMjYtMDktMDFUMDk6MDU6MDBaIiwicXJDb2RlVXJsIjoiaHR0cHM6Ly9kcHAuYWNtZS5leGFtcGxlLzAxLzA5NTA2MDAwMTM0MzUyLzIxLzdlNGE5YzNkMmYxZThiNmE1ZDQwIiwicmVwYWlyYWJpbGl0eVNjb3JlIjpudWxsLCJyZXRlbnRpb25Mb2NrZWQiOnRydWUsInJldGVudGlvblVudGlsIjoiMjAzNi0wOC0yOVQwOTowNTowMFoiLCJzY2hlbWFWZXJzaW9uIjoiMi43LjAiLCJzdGF0dXMiOiJhY3RpdmUiLCJ1cGRhdGVkQXQiOiIyMDI2LTA5LTAxVDA5OjA1OjAwWiIsInZlcnNpb24iOjF9.55m5_OYvkiKUN9QV9BNB3JeqMOvkYjwYCiPxup_xciGjUrYtHOcaDdy8ULvSAy5NRGpT9p90RrajgBb0Iv5kCg", "payload": { "batchId": "ACME-LMT-2026-09", "co2ePerUnit": null, @@ -553,7 +560,6 @@ "euDeclarationOfConformity": "EU-DoC ACME-2026-LMT-0901, per Regulation (EU) 2023/1542 Art. 18", "expectedLifetimeCycles": 1200, "expectedLifetimeReferenceTest": "EN 50604-1:2016, 25 degC, 100% DoD", - "gtin": "09506000134352", "hazardousSubstances": [ { "casNumber": "21324-40-3", @@ -580,6 +586,10 @@ "powerLimitMaxW": 1500.0, "powerLimitMinW": 20.0, "productGroup": "battery", + "productIdentifier": { + "gtin": "09506000134352", + "scheme": "gs1" + }, "ratedCapacityKwh": null, "recycledContentCobaltPct": 12.0, "recycledContentLeadPct": 0.0, @@ -605,11 +615,11 @@ }, "productName": "Acme LMT 48V 20Ah battery pack", "publishedAt": "2026-09-01T09:05:00Z", - "qrCodeUrl": "https://dpp.acme.example/01/09506000134352/10/ACME-LMT-2026-09/21/7e4a9c3d2f1e8b6a5d40", + "qrCodeUrl": "https://dpp.acme.example/01/09506000134352/21/7e4a9c3d2f1e8b6a5d40", "repairabilityScore": null, "retentionLocked": true, "retentionUntil": "2036-08-29T09:05:00Z", - "schemaVersion": "2.6.0", + "schemaVersion": "2.7.0", "status": "active", "updatedAt": "2026-09-01T09:05:00Z", "version": 1 @@ -617,23 +627,24 @@ }, "manifest": { "contentHashes": { - "auditEntries": "d3e3661902ae8ebc797d545c6124173a74c3b086b2bba8399628df6b53db79e0", + "auditEntries": "46110fef3e331eab68e2616292edcc10d2bfcdfc16fa7bb0409cecdf7cb86a33", "eolEvent": "7cb65bb485538e109105404e15c7bc411aa3050694fa4d63339c70dbe431d3a0", - "fullView": "70f5a9779744ad58b77cebed129ecec4c24d7c5bbf3b65be4b3c61c4be5f0e80", - "publicView": "7ada532408d7c20c385804ca00d0a6a969f1448c796775c14657d7932ecf392a", + "fullView": "e8c5a8fbbddd67948a3ee3eb7abfc07427c2ff2ab23eeba3dc4dc9bbf12cbdbd", + "publicView": "74c1a1eda478cc2643b8652bf188f47e449b851ae64ae05f922de314a9249b83", "transferChain": "52e0fd4f91be57a81e6219557f5f3c4f2331b0cbbc9461d376c967dae5445445" }, - "coreVersion": "0.20.0", + "coreVersion": "0.21.0", "createdAt": "2026-09-25T12:00:00Z", "formatVersion": "1", "issuerDid": "did:web:node.acme.example", "nodeVersion": "0.14.0", "passportId": "0199a3c2-7b10-7e4a-9c3d-2f1e8b6a5d40" }, - "manifestJws": "eyJhbGciOiJFZERTQSIsImtpZCI6ImZlODEyYzEyZjNhYjRjZTZhYzVkYjY5YWMzNTJmOTA2Y2IxYjExZWY0M2ZiMzNlMjUyZWY3ZmY1NTIyNjM4ODkifQ.eyJjb250ZW50SGFzaGVzIjp7ImF1ZGl0RW50cmllcyI6ImQzZTM2NjE5MDJhZThlYmM3OTdkNTQ1YzYxMjQxNzNhNzRjM2IwODZiMmJiYTgzOTk2MjhkZjZiNTNkYjc5ZTAiLCJlb2xFdmVudCI6IjdjYjY1YmI0ODU1MzhlMTA5MTA1NDA0ZTE1YzdiYzQxMWFhMzA1MDY5NGZhNGQ2MzMzOWM3MGRiZTQzMWQzYTAiLCJmdWxsVmlldyI6IjcwZjVhOTc3OTc0NGFkNThiNzdjZWJlZDEyOWVjZWM0YzI0ZDdjNWJiZjNiNjViZTRiM2M2MWM0YmU1ZjBlODAiLCJwdWJsaWNWaWV3IjoiN2FkYTUzMjQwOGQ3YzIwYzM4NTgwNGNhMDBkMGE2YTk2OWYxNDQ4Yzc5Njc3NWMxNDY1N2Q3OTMyZWNmMzkyYSIsInRyYW5zZmVyQ2hhaW4iOiI1MmUwZmQ0ZjkxYmU1N2E4MWU2MjE5NTU3ZjVmM2M0ZjIzMzFiMGNiYmM5NDYxZDM3NmM5NjdkYWU1NDQ1NDQ1In0sImNvcmVWZXJzaW9uIjoiMC4yMC4wIiwiY3JlYXRlZEF0IjoiMjAyNi0wOS0yNVQxMjowMDowMFoiLCJmb3JtYXRWZXJzaW9uIjoiMSIsImlzc3VlckRpZCI6ImRpZDp3ZWI6bm9kZS5hY21lLmV4YW1wbGUiLCJub2RlVmVyc2lvbiI6IjAuMTQuMCIsInBhc3Nwb3J0SWQiOiIwMTk5YTNjMi03YjEwLTdlNGEtOWMzZC0yZjFlOGI2YTVkNDAifQ.Y4XyqkZCD-XAtSYTICoyCngJx7sDCk7sYcdyezYe7ZDDY0k4w8WhK1oUaB5x_zg-malEGWJ_dXIVyI0P_M_qBg", + "manifestJws": "eyJhbGciOiJFZERTQSIsImtpZCI6ImZlODEyYzEyZjNhYjRjZTZhYzVkYjY5YWMzNTJmOTA2Y2IxYjExZWY0M2ZiMzNlMjUyZWY3ZmY1NTIyNjM4ODkifQ.eyJjb250ZW50SGFzaGVzIjp7ImF1ZGl0RW50cmllcyI6IjQ2MTEwZmVmM2UzMzFlYWI2OGUyNjE2MjkyZWRjYzEwZDJiZmNkZmMxNmZhN2JiMDQwOWNlY2RmN2NiODZhMzMiLCJlb2xFdmVudCI6IjdjYjY1YmI0ODU1MzhlMTA5MTA1NDA0ZTE1YzdiYzQxMWFhMzA1MDY5NGZhNGQ2MzMzOWM3MGRiZTQzMWQzYTAiLCJmdWxsVmlldyI6ImU4YzVhOGZiYmRkZDY3OTQ4YTNlZTNlYjdhYmZjMDc0MjdjMmZmMmFiMjNlZWJhM2RjNGRjOWJiZjEyY2JkYmQiLCJwdWJsaWNWaWV3IjoiNzRjMWExZWRhNDc4Y2MyNjQzYjg2NTJiZjE4OGY0N2U0NDliODUxYWU2NGFlMDVmOTIyZGUzMTRhOTI0OWI4MyIsInRyYW5zZmVyQ2hhaW4iOiI1MmUwZmQ0ZjkxYmU1N2E4MWU2MjE5NTU3ZjVmM2M0ZjIzMzFiMGNiYmM5NDYxZDM3NmM5NjdkYWU1NDQ1NDQ1In0sImNvcmVWZXJzaW9uIjoiMC4yMS4wIiwiY3JlYXRlZEF0IjoiMjAyNi0wOS0yNVQxMjowMDowMFoiLCJmb3JtYXRWZXJzaW9uIjoiMSIsImlzc3VlckRpZCI6ImRpZDp3ZWI6bm9kZS5hY21lLmV4YW1wbGUiLCJub2RlVmVyc2lvbiI6IjAuMTQuMCIsInBhc3Nwb3J0SWQiOiIwMTk5YTNjMi03YjEwLTdlNGEtOWMzZC0yZjFlOGI2YTVkNDAifQ.nR0d3UZbNRttz9D0VL9qGHN9dQwzFQGa4eRni8N926diP9G-qB4nGbqgqyz9VqaL6DjKReENzDldyo87sev_BA", "publicView": { - "jws": "eyJhbGciOiJFZERTQSIsImtpZCI6ImZlODEyYzEyZjNhYjRjZTZhYzVkYjY5YWMzNTJmOTA2Y2IxYjExZWY0M2ZiMzNlMjUyZWY3ZmY1NTIyNjM4ODkifQ.eyJjbzJlUGVyVW5pdCI6bnVsbCwiY29tbW9kaXR5Q29kZSI6Ijg1MDc2MDAwIiwiY3JlYXRlZEF0IjoiMjAyNi0wOS0wMVQwOTowMDowMFoiLCJpZCI6IjAxOTlhM2MyLTdiMTAtN2U0YS05YzNkLTJmMWU4YjZhNWQ0MCIsIm1hbnVmYWN0dXJlciI6eyJhZGRyZXNzIjoiTXVzdGVyc3RyYXNzZSAxLCA4MDMzMSBNw7xuY2hlbiwgREUiLCJjb3VudHJ5IjpudWxsLCJkaWRXZWJVcmwiOiJodHRwczovL25vZGUuYWNtZS5leGFtcGxlLy53ZWxsLWtub3duL2RpZC5qc29uIiwibmFtZSI6IkFjbWUgWmVsbGVuIEdtYkgifSwibWF0ZXJpYWxzIjpbeyJjb3VudHJ5T2ZPcmlnaW4iOiJERSIsIm5hbWUiOiJOTUMgODExIGNhdGhvZGUgYWN0aXZlIG1hdGVyaWFsIiwicmVjeWNsZWRQY3QiOjgsIndlaWdodEtnIjozLjF9LHsiY291bnRyeU9mT3JpZ2luIjoiREUiLCJuYW1lIjoiR3JhcGhpdGUgYW5vZGUgYWN0aXZlIG1hdGVyaWFsIiwicmVjeWNsZWRQY3QiOjQsIndlaWdodEtnIjoxLjl9LHsiY291bnRyeU9mT3JpZ2luIjoiREUiLCJuYW1lIjoiQWx1bWluaXVtIHBhY2sgaG91c2luZyIsInJlY3ljbGVkUGN0Ijo2MCwid2VpZ2h0S2ciOjIuMn1dLCJwbGFjZWRPbk1hcmtldERhdGUiOiIyMDI2LTA5LTAxIiwicHJvZHVjdEdyb3VwIjoiYmF0dGVyeSIsInByb2R1Y3RHcm91cERhdGEiOnsiYmF0dGVyeUNoZW1pc3RyeSI6Ik5NQyIsImJhdHRlcnlNb2RlbElkIjoiQUNNRS1MTVQtNDhWIiwiYmF0dGVyeVBhc3Nwb3J0TnVtYmVyIjoiVVJOOk9ETDpCQVRUOjA5NTA2MDAwMTM0MzUyOkFDTUUtTE1ULTIwMjYtMDkiLCJiYXR0ZXJ5VHlwZSI6ImxtdCIsImJhdHRlcnlXZWlnaHRLZyI6MTIuNCwiY28yZVBlclVuaXRLZyI6ODYuNCwiY3JpdGljYWxSYXdNYXRlcmlhbHMiOlt7ImNhc051bWJlciI6Ijc0NDAtNDgtNCIsIm5hbWUiOiJDb2JhbHQiLCJ3ZWlnaHRHcmFtcyI6MzEwfSx7ImNhc051bWJlciI6Ijc0MzktOTMtMiIsIm5hbWUiOiJMaXRoaXVtIiwid2VpZ2h0R3JhbXMiOjQyMH0seyJjYXNOdW1iZXIiOiI3NzgyLTQyLTUiLCJuYW1lIjoiTmF0dXJhbCBncmFwaGl0ZSIsIndlaWdodEdyYW1zIjoxODAwfV0sImN5Y2xlTGlmZVRlc3RDUmF0ZSI6MSwiZXVEZWNsYXJhdGlvbk9mQ29uZm9ybWl0eSI6IkVVLURvQyBBQ01FLTIwMjYtTE1ULTA5MDEsIHBlciBSZWd1bGF0aW9uIChFVSkgMjAyMy8xNTQyIEFydC4gMTgiLCJleHBlY3RlZExpZmV0aW1lQ3ljbGVzIjoxMjAwLCJleHBlY3RlZExpZmV0aW1lUmVmZXJlbmNlVGVzdCI6IkVOIDUwNjA0LTE6MjAxNiwgMjUgZGVnQywgMTAwJSBEb0QiLCJndGluIjoiMDk1MDYwMDAxMzQzNTIiLCJoYXphcmRvdXNTdWJzdGFuY2VzIjpbeyJjYXNOdW1iZXIiOiIyMTMyNC00MC0zIiwiY29uY2VudHJhdGlvblBjdCI6MC44LCJuYW1lIjoiTGl0aGl1bSBoZXhhZmx1b3JvcGhvc3BoYXRlIn1dLCJpbml0aWFsUm91bmRUcmlwRWZmaWNpZW5jeVBjdCI6OTUsImludGVybmFsQ2VsbFJlc2lzdGFuY2VNb2htIjoxNCwiaW50ZXJuYWxQYWNrUmVzaXN0YW5jZU1vaG0iOjExMCwibWFudWZhY3R1cmluZ0RhdGUiOiIyMDI2LTA4LTE4VDAwOjAwOjAwWiIsIm1hbnVmYWN0dXJpbmdQbGFjZSI6Ik3DvG5jaGVuLCBERSIsIm1hcmtpbmdJbmZvcm1hdGlvbiI6IlNlcGFyYXRlLWNvbGxlY3Rpb24gc3ltYm9sIHBlciBBcnQuIDEzKDQpOyBjYXBhY2l0eSAyMCBBaCAvIDk2MCBXaDsgNDggViBMTVQiLCJtYXhpbXVtVm9sdGFnZVYiOjU0LjYsIm1pbmltYWxWb2x0YWdlViI6MzksIm5vbWluYWxDYXBhY2l0eUFoIjoyMCwibm9taW5hbFZvbHRhZ2VWIjo0OCwibm90SW5Vc2VUZW1wZXJhdHVyZVJhbmdlIjp7Im1heEMiOjQ1LCJtaW5DIjotMTB9LCJub3RJblVzZVRlbXBlcmF0dXJlUmVmZXJlbmNlVGVzdCI6IkVOIDUwNjA0LTE6MjAxNiBzdG9yYWdlIGNsYXVzZSIsIm9yaWdpbmFsUG93ZXJDYXBhYmlsaXR5VyI6OTYwLCJwb3dlckxpbWl0TWF4VyI6MTUwMCwicG93ZXJMaW1pdE1pblciOjIwLCJwcm9kdWN0R3JvdXAiOiJiYXR0ZXJ5IiwicmF0ZWRDYXBhY2l0eUt3aCI6bnVsbCwicmVjeWNsZWRDb250ZW50Q29iYWx0UGN0IjoxMiwicmVjeWNsZWRDb250ZW50TGVhZFBjdCI6MCwicmVjeWNsZWRDb250ZW50TGl0aGl1bVBjdCI6NiwicmVjeWNsZWRDb250ZW50Tmlja2VsUGN0Ijo4LCJyZW5ld2FibGVDb250ZW50UGN0IjoxNCwicm91bmRUcmlwRWZmaWNpZW5jeUF0SGFsZkN5Y2xlTGlmZVBjdCI6OTEsInVzYWJsZUV4dGluZ3Vpc2hpbmdBZ2VudCI6IldhdGVyOyBjb29sIGEgYnVybmluZyBwYWNrIHdpdGggbGFyZ2Ugdm9sdW1lcyBvZiB3YXRlciIsIndhc3RlQmF0dGVyeUluZm9ybWF0aW9uIjoiUmV0dXJuIHRoZSBiYXR0ZXJ5IHRvIGEgYmljeWNsZSByZXRhaWxlciBvciBhIG11bmljaXBhbCBjb2xsZWN0aW9uIHBvaW50LiBEbyBub3QgcGxhY2UgaXQgaW4gaG91c2Vob2xkIHdhc3RlLiJ9LCJwcm9kdWN0TmFtZSI6IkFjbWUgTE1UIDQ4ViAyMEFoIGJhdHRlcnkgcGFjayIsInB1Ymxpc2hlZEF0IjoiMjAyNi0wOS0wMVQwOTowNTowMFoiLCJxckNvZGVVcmwiOiJodHRwczovL2RwcC5hY21lLmV4YW1wbGUvMDEvMDk1MDYwMDAxMzQzNTIvMTAvQUNNRS1MTVQtMjAyNi0wOS8yMS83ZTRhOWMzZDJmMWU4YjZhNWQ0MCIsInJlcGFpcmFiaWxpdHlTY29yZSI6bnVsbCwicmV0ZW50aW9uVW50aWwiOiIyMDM2LTA4LTI5VDA5OjA1OjAwWiIsInNjaGVtYVZlcnNpb24iOiIyLjYuMCIsInN0YXR1cyI6ImFjdGl2ZSIsInVwZGF0ZWRBdCI6IjIwMjYtMDktMDFUMDk6MDU6MDBaIiwidmVyc2lvbiI6MX0.OnjeF7qUrlZOKc-Xx8u-ThMayslJBs7HPAmpZBFKvyJpivIqOrN5lTCW15PsoyBeSOpjmRq3Mm_UC99B-Ya-Dg", + "jws": "eyJhbGciOiJFZERTQSIsImtpZCI6ImZlODEyYzEyZjNhYjRjZTZhYzVkYjY5YWMzNTJmOTA2Y2IxYjExZWY0M2ZiMzNlMjUyZWY3ZmY1NTIyNjM4ODkifQ.eyJiYXRjaElkIjoiQUNNRS1MTVQtMjAyNi0wOSIsImNvMmVQZXJVbml0IjpudWxsLCJjb21tb2RpdHlDb2RlIjoiODUwNzYwMDAiLCJjcmVhdGVkQXQiOiIyMDI2LTA5LTAxVDA5OjAwOjAwWiIsImlkIjoiMDE5OWEzYzItN2IxMC03ZTRhLTljM2QtMmYxZThiNmE1ZDQwIiwibWFudWZhY3R1cmVyIjp7ImFkZHJlc3MiOiJNdXN0ZXJzdHJhc3NlIDEsIDgwMzMxIE3DvG5jaGVuLCBERSIsImNvdW50cnkiOm51bGwsImRpZFdlYlVybCI6Imh0dHBzOi8vbm9kZS5hY21lLmV4YW1wbGUvLndlbGwta25vd24vZGlkLmpzb24iLCJuYW1lIjoiQWNtZSBaZWxsZW4gR21iSCJ9LCJtYXRlcmlhbHMiOlt7ImNvdW50cnlPZk9yaWdpbiI6IkRFIiwibmFtZSI6Ik5NQyA4MTEgY2F0aG9kZSBhY3RpdmUgbWF0ZXJpYWwiLCJyZWN5Y2xlZFBjdCI6OCwid2VpZ2h0S2ciOjMuMX0seyJjb3VudHJ5T2ZPcmlnaW4iOiJERSIsIm5hbWUiOiJHcmFwaGl0ZSBhbm9kZSBhY3RpdmUgbWF0ZXJpYWwiLCJyZWN5Y2xlZFBjdCI6NCwid2VpZ2h0S2ciOjEuOX0seyJjb3VudHJ5T2ZPcmlnaW4iOiJERSIsIm5hbWUiOiJBbHVtaW5pdW0gcGFjayBob3VzaW5nIiwicmVjeWNsZWRQY3QiOjYwLCJ3ZWlnaHRLZyI6Mi4yfV0sInBsYWNlZE9uTWFya2V0RGF0ZSI6IjIwMjYtMDktMDEiLCJwcm9kdWN0R3JvdXAiOiJiYXR0ZXJ5IiwicHJvZHVjdEdyb3VwRGF0YSI6eyJiYXR0ZXJ5Q2hlbWlzdHJ5IjoiTk1DIiwiYmF0dGVyeU1vZGVsSWQiOiJBQ01FLUxNVC00OFYiLCJiYXR0ZXJ5UGFzc3BvcnROdW1iZXIiOiJVUk46T0RMOkJBVFQ6MDk1MDYwMDAxMzQzNTI6QUNNRS1MTVQtMjAyNi0wOSIsImJhdHRlcnlUeXBlIjoibG10IiwiYmF0dGVyeVdlaWdodEtnIjoxMi40LCJjbzJlUGVyVW5pdEtnIjo4Ni40LCJjcml0aWNhbFJhd01hdGVyaWFscyI6W3siY2FzTnVtYmVyIjoiNzQ0MC00OC00IiwibmFtZSI6IkNvYmFsdCIsIndlaWdodEdyYW1zIjozMTB9LHsiY2FzTnVtYmVyIjoiNzQzOS05My0yIiwibmFtZSI6IkxpdGhpdW0iLCJ3ZWlnaHRHcmFtcyI6NDIwfSx7ImNhc051bWJlciI6Ijc3ODItNDItNSIsIm5hbWUiOiJOYXR1cmFsIGdyYXBoaXRlIiwid2VpZ2h0R3JhbXMiOjE4MDB9XSwiY3ljbGVMaWZlVGVzdENSYXRlIjoxLCJldURlY2xhcmF0aW9uT2ZDb25mb3JtaXR5IjoiRVUtRG9DIEFDTUUtMjAyNi1MTVQtMDkwMSwgcGVyIFJlZ3VsYXRpb24gKEVVKSAyMDIzLzE1NDIgQXJ0LiAxOCIsImV4cGVjdGVkTGlmZXRpbWVDeWNsZXMiOjEyMDAsImV4cGVjdGVkTGlmZXRpbWVSZWZlcmVuY2VUZXN0IjoiRU4gNTA2MDQtMToyMDE2LCAyNSBkZWdDLCAxMDAlIERvRCIsImhhemFyZG91c1N1YnN0YW5jZXMiOlt7ImNhc051bWJlciI6IjIxMzI0LTQwLTMiLCJjb25jZW50cmF0aW9uUGN0IjowLjgsIm5hbWUiOiJMaXRoaXVtIGhleGFmbHVvcm9waG9zcGhhdGUifV0sImluaXRpYWxSb3VuZFRyaXBFZmZpY2llbmN5UGN0Ijo5NSwiaW50ZXJuYWxDZWxsUmVzaXN0YW5jZU1vaG0iOjE0LCJpbnRlcm5hbFBhY2tSZXNpc3RhbmNlTW9obSI6MTEwLCJtYW51ZmFjdHVyaW5nRGF0ZSI6IjIwMjYtMDgtMThUMDA6MDA6MDBaIiwibWFudWZhY3R1cmluZ1BsYWNlIjoiTcO8bmNoZW4sIERFIiwibWFya2luZ0luZm9ybWF0aW9uIjoiU2VwYXJhdGUtY29sbGVjdGlvbiBzeW1ib2wgcGVyIEFydC4gMTMoNCk7IGNhcGFjaXR5IDIwIEFoIC8gOTYwIFdoOyA0OCBWIExNVCIsIm1heGltdW1Wb2x0YWdlViI6NTQuNiwibWluaW1hbFZvbHRhZ2VWIjozOSwibm9taW5hbENhcGFjaXR5QWgiOjIwLCJub21pbmFsVm9sdGFnZVYiOjQ4LCJub3RJblVzZVRlbXBlcmF0dXJlUmFuZ2UiOnsibWF4QyI6NDUsIm1pbkMiOi0xMH0sIm5vdEluVXNlVGVtcGVyYXR1cmVSZWZlcmVuY2VUZXN0IjoiRU4gNTA2MDQtMToyMDE2IHN0b3JhZ2UgY2xhdXNlIiwib3JpZ2luYWxQb3dlckNhcGFiaWxpdHlXIjo5NjAsInBvd2VyTGltaXRNYXhXIjoxNTAwLCJwb3dlckxpbWl0TWluVyI6MjAsInByb2R1Y3RHcm91cCI6ImJhdHRlcnkiLCJwcm9kdWN0SWRlbnRpZmllciI6eyJndGluIjoiMDk1MDYwMDAxMzQzNTIiLCJzY2hlbWUiOiJnczEifSwicmF0ZWRDYXBhY2l0eUt3aCI6bnVsbCwicmVjeWNsZWRDb250ZW50Q29iYWx0UGN0IjoxMiwicmVjeWNsZWRDb250ZW50TGVhZFBjdCI6MCwicmVjeWNsZWRDb250ZW50TGl0aGl1bVBjdCI6NiwicmVjeWNsZWRDb250ZW50Tmlja2VsUGN0Ijo4LCJyZW5ld2FibGVDb250ZW50UGN0IjoxNCwicm91bmRUcmlwRWZmaWNpZW5jeUF0SGFsZkN5Y2xlTGlmZVBjdCI6OTEsInVzYWJsZUV4dGluZ3Vpc2hpbmdBZ2VudCI6IldhdGVyOyBjb29sIGEgYnVybmluZyBwYWNrIHdpdGggbGFyZ2Ugdm9sdW1lcyBvZiB3YXRlciIsIndhc3RlQmF0dGVyeUluZm9ybWF0aW9uIjoiUmV0dXJuIHRoZSBiYXR0ZXJ5IHRvIGEgYmljeWNsZSByZXRhaWxlciBvciBhIG11bmljaXBhbCBjb2xsZWN0aW9uIHBvaW50LiBEbyBub3QgcGxhY2UgaXQgaW4gaG91c2Vob2xkIHdhc3RlLiJ9LCJwcm9kdWN0TmFtZSI6IkFjbWUgTE1UIDQ4ViAyMEFoIGJhdHRlcnkgcGFjayIsInB1Ymxpc2hlZEF0IjoiMjAyNi0wOS0wMVQwOTowNTowMFoiLCJxckNvZGVVcmwiOiJodHRwczovL2RwcC5hY21lLmV4YW1wbGUvMDEvMDk1MDYwMDAxMzQzNTIvMjEvN2U0YTljM2QyZjFlOGI2YTVkNDAiLCJyZXBhaXJhYmlsaXR5U2NvcmUiOm51bGwsInJldGVudGlvblVudGlsIjoiMjAzNi0wOC0yOVQwOTowNTowMFoiLCJzY2hlbWFWZXJzaW9uIjoiMi43LjAiLCJzdGF0dXMiOiJhY3RpdmUiLCJ1cGRhdGVkQXQiOiIyMDI2LTA5LTAxVDA5OjA1OjAwWiIsInZlcnNpb24iOjF9.LHi5ToX900cUN4vak8l1zOZ5xc1H9jW25fL4XUWuxz2JU1_3PxxrjRUTyY9RctPxPSTWmS40fUWurEZnTdE3Dw", "payload": { + "batchId": "ACME-LMT-2026-09", "co2ePerUnit": null, "commodityCode": "85076000", "createdAt": "2026-09-01T09:00:00Z", @@ -694,7 +705,6 @@ "euDeclarationOfConformity": "EU-DoC ACME-2026-LMT-0901, per Regulation (EU) 2023/1542 Art. 18", "expectedLifetimeCycles": 1200, "expectedLifetimeReferenceTest": "EN 50604-1:2016, 25 degC, 100% DoD", - "gtin": "09506000134352", "hazardousSubstances": [ { "casNumber": "21324-40-3", @@ -721,6 +731,10 @@ "powerLimitMaxW": 1500.0, "powerLimitMinW": 20.0, "productGroup": "battery", + "productIdentifier": { + "gtin": "09506000134352", + "scheme": "gs1" + }, "ratedCapacityKwh": null, "recycledContentCobaltPct": 12.0, "recycledContentLeadPct": 0.0, @@ -733,10 +747,10 @@ }, "productName": "Acme LMT 48V 20Ah battery pack", "publishedAt": "2026-09-01T09:05:00Z", - "qrCodeUrl": "https://dpp.acme.example/01/09506000134352/10/ACME-LMT-2026-09/21/7e4a9c3d2f1e8b6a5d40", + "qrCodeUrl": "https://dpp.acme.example/01/09506000134352/21/7e4a9c3d2f1e8b6a5d40", "repairabilityScore": null, "retentionUntil": "2036-08-29T09:05:00Z", - "schemaVersion": "2.6.0", + "schemaVersion": "2.7.0", "status": "active", "updatedAt": "2026-09-01T09:05:00Z", "version": 1 diff --git a/site/dpp-landing/public/verify/examples/11-canonicalisation-vectors.json b/site/dpp-landing/public/verify/examples/11-canonicalisation-vectors.json index f4be94e..77bd669 100644 --- a/site/dpp-landing/public/verify/examples/11-canonicalisation-vectors.json +++ b/site/dpp-landing/public/verify/examples/11-canonicalisation-vectors.json @@ -108,14 +108,14 @@ "fullView": "aa2588691c23ed546ddafa4d32ca3a96fb905ec06980b76bf2e1562e8d3984a1", "publicView": "aa2588691c23ed546ddafa4d32ca3a96fb905ec06980b76bf2e1562e8d3984a1" }, - "coreVersion": "0.20.0", + "coreVersion": "0.21.0", "createdAt": "2026-09-25T12:00:00Z", "formatVersion": "1", "issuerDid": "did:web:node.acme.example", "nodeVersion": "0.14.0", "passportId": "0199a3c2-7b10-7e4a-9c3d-2f1e8b6a5d40" }, - "manifestJws": "eyJhbGciOiJFZERTQSIsImtpZCI6ImZlODEyYzEyZjNhYjRjZTZhYzVkYjY5YWMzNTJmOTA2Y2IxYjExZWY0M2ZiMzNlMjUyZWY3ZmY1NTIyNjM4ODkifQ.eyJjb250ZW50SGFzaGVzIjp7ImF1ZGl0RW50cmllcyI6IjFmNjNhODBiN2VmZDc5YzFjMmZiMmVjMmQyZjhiNmQ3ZWY0OWFlYjkyNTcwMTA3NmE5ODA1OWIxNGI4YWIwZjciLCJmdWxsVmlldyI6ImFhMjU4ODY5MWMyM2VkNTQ2ZGRhZmE0ZDMyY2EzYTk2ZmI5MDVlYzA2OTgwYjc2YmYyZTE1NjJlOGQzOTg0YTEiLCJwdWJsaWNWaWV3IjoiYWEyNTg4NjkxYzIzZWQ1NDZkZGFmYTRkMzJjYTNhOTZmYjkwNWVjMDY5ODBiNzZiZjJlMTU2MmU4ZDM5ODRhMSJ9LCJjb3JlVmVyc2lvbiI6IjAuMjAuMCIsImNyZWF0ZWRBdCI6IjIwMjYtMDktMjVUMTI6MDA6MDBaIiwiZm9ybWF0VmVyc2lvbiI6IjEiLCJpc3N1ZXJEaWQiOiJkaWQ6d2ViOm5vZGUuYWNtZS5leGFtcGxlIiwibm9kZVZlcnNpb24iOiIwLjE0LjAiLCJwYXNzcG9ydElkIjoiMDE5OWEzYzItN2IxMC03ZTRhLTljM2QtMmYxZThiNmE1ZDQwIn0.IQ6HakefPjlcRC_KPc6GC6zQvb4DukdJf9v00kEgc1_wwo_vUhL9QloZhaSVQQlLcMz3X_oR_dO1ZdxKcEz4BQ", + "manifestJws": "eyJhbGciOiJFZERTQSIsImtpZCI6ImZlODEyYzEyZjNhYjRjZTZhYzVkYjY5YWMzNTJmOTA2Y2IxYjExZWY0M2ZiMzNlMjUyZWY3ZmY1NTIyNjM4ODkifQ.eyJjb250ZW50SGFzaGVzIjp7ImF1ZGl0RW50cmllcyI6IjFmNjNhODBiN2VmZDc5YzFjMmZiMmVjMmQyZjhiNmQ3ZWY0OWFlYjkyNTcwMTA3NmE5ODA1OWIxNGI4YWIwZjciLCJmdWxsVmlldyI6ImFhMjU4ODY5MWMyM2VkNTQ2ZGRhZmE0ZDMyY2EzYTk2ZmI5MDVlYzA2OTgwYjc2YmYyZTE1NjJlOGQzOTg0YTEiLCJwdWJsaWNWaWV3IjoiYWEyNTg4NjkxYzIzZWQ1NDZkZGFmYTRkMzJjYTNhOTZmYjkwNWVjMDY5ODBiNzZiZjJlMTU2MmU4ZDM5ODRhMSJ9LCJjb3JlVmVyc2lvbiI6IjAuMjEuMCIsImNyZWF0ZWRBdCI6IjIwMjYtMDktMjVUMTI6MDA6MDBaIiwiZm9ybWF0VmVyc2lvbiI6IjEiLCJpc3N1ZXJEaWQiOiJkaWQ6d2ViOm5vZGUuYWNtZS5leGFtcGxlIiwibm9kZVZlcnNpb24iOiIwLjE0LjAiLCJwYXNzcG9ydElkIjoiMDE5OWEzYzItN2IxMC03ZTRhLTljM2QtMmYxZThiNmE1ZDQwIn0.JJwZp2H_nLIl8bJyVvrT23fepD43SaAiqVBiDP48D1uGEMkQ_bGWb2n2qK6pq65zzYWSh6I1LHHHMyZyB-QsDw", "publicView": { "jws": "eyJhbGciOiJFZERTQSIsImtpZCI6ImZlODEyYzEyZjNhYjRjZTZhYzVkYjY5YWMzNTJmOTA2Y2IxYjExZWY0M2ZiMzNlMjUyZWY3ZmY1NTIyNjM4ODkifQ.eyJjb250ZW50Ijp7IkIiOjIsImIiOjEsImh1Z2VOdW1iZXIiOjFlKzIxLCJuZWdhdGl2ZVplcm9TYWZlIjotMC4yNSwidGlueU51bWJlciI6NWUtNywiw4ltaXNzaW9uIjoiMC41ZS0zIHRlc3QiLCLDqSI6Mywi4oKsIjo0LCLwn5iAIjo1LCLvvKEiOjZ9LCJpZCI6IjAxOTlhM2MyLTdiMTAtN2U0YS05YzNkLTJmMWU4YjZhNWQ0MCIsInN0YXR1cyI6ImFjdGl2ZSJ9.-0gGJO8CC_JeYka-60cDzkSdj1vqst_47SyafFl9yb4jA2GCc_grSLhYrCrx3kC8rZpT6sTwRFT3gUo5UfUdBg", "payload": { diff --git a/site/dpp-landing/src/data/example-passport.json b/site/dpp-landing/src/data/example-passport.json index 3909268..a2dda8e 100644 --- a/site/dpp-landing/src/data/example-passport.json +++ b/site/dpp-landing/src/data/example-passport.json @@ -1,5 +1,5 @@ { - "_comment": "Example data for /example-passport: a fictional EV battery from the engine demo set, copied from odal-node/dpp-engine ops/demo/passports/04-battery-ev-nmc.json at v0.14.0 (5e43ab6) with one change: the engine demo's company name is also a real company's, so the company, its product name and its domain are renamed here to Musterzelle GmbH, musterzelle.example (invented; \"Muster\" is the German word for a sample). Everything else is unchanged. This is the body a company submits before signing, not a signed passport; the page says so. Refresh it from the engine and re-apply the rename, rather than editing it here.", + "_comment": "Example data for /example-passport: a fictional EV battery from the engine demo set, copied from odal-node/dpp-engine ops/demo/passports/04-battery-ev-nmc.json on main after #358 (04f1a52) with one change: the engine demo's company name is also a real company's, so the company, its product name and its domain are renamed here to Musterzelle GmbH, musterzelle.example (invented; \"Muster\" is the German word for a sample). Everything else is unchanged. This is the body a company submits before signing, not a signed passport; the page says so. Refresh it from the engine and re-apply the rename, rather than editing it here.", "source": { "repository": "odal-node/dpp-engine", "path": "ops/demo/passports/04-battery-ev-nmc.json", @@ -38,7 +38,7 @@ "repairabilityScore": 5.5, "productGroupData": { "productGroup": "battery", - "gtin": "09590000000045", + "productIdentifier": { "scheme": "gs1", "gtin": "09590000000045" }, "batteryType": "ev", "batteryChemistry": "NMC", "co2ePerUnitKg": 61.2, diff --git a/site/dpp-landing/tests/verify-expected.json b/site/dpp-landing/tests/verify-expected.json index aa52502..018d455 100644 --- a/site/dpp-landing/tests/verify-expected.json +++ b/site/dpp-landing/tests/verify-expected.json @@ -432,7 +432,7 @@ "exit": 1 }, "09-unknown-top-level-field.json": { - "error": "not a valid dossier — malformed JSON or an unrecognised field: unknown field `verifiedBy`, expected one of `manifest`, `manifestJws`, `fullView`, `publicView`, `didDocuments`, `auditEntries`, `transferChain`, `eolEvent`, `checkpoint`, `calcReceipts`, `componentGraph`, `qualifiedSeal` at line 781 column 14", + "error": "not a valid dossier — malformed JSON or an unrecognised field: unknown field `verifiedBy`, expected one of `manifest`, `manifestJws`, `fullView`, `publicView`, `didDocuments`, `auditEntries`, `transferChain`, `eolEvent`, `checkpoint`, `calcReceipts`, `componentGraph`, `qualifiedSeal` at line 795 column 14", "exit": 2 }, "10-not-json.txt": { diff --git a/site/dpp-landing/tests/verify.test.ts b/site/dpp-landing/tests/verify.test.ts index 2f8f0e4..3210dd3 100644 --- a/site/dpp-landing/tests/verify.test.ts +++ b/site/dpp-landing/tests/verify.test.ts @@ -3,7 +3,7 @@ // public/verify/examples/ holds dossiers built with dpp-engine's own types and // Ed25519 signing; verify-expected.json holds what dpp-vault's // `verify_dossier_json` said about each one. Both are byte-identical to -// ops/demo/dossiers on dpp-engine main as of #431 (2026-09-30). This +// ops/demo/dossiers on dpp-engine main as of #358 (2026-09-30). This // test fails if the TypeScript verifier disagrees with the Rust one on the // outcome or on any single check. A second implementation that is not held to // the first is two verifiers that will disagree one day without anyone