Vai al contenuto principale

Tracciabilità e richiamo · Domanda

Verificare che le informazioni di un lotto non siano state modificate

Ogni versione delle informazioni di un lotto ha un'impronta registrata nel registro. Chiunque può ricalcolarla dalle informazioni pubblicate e confrontarla, senza account e senza dipendere da A-REX.

Quando un lotto viene registrato, A-REX ne pubblica le informazioni (prodotto, quantità, codice lotto, origine, date) e ne registra un'impronta nel registro. L'impronta è un codice breve calcolato dal contenuto esatto: se cambia una lettera o una cifra, non corrisponde più. Un acquirente, un revisore o un'autorità può quindi verificare, senza account e senza dipendere da A-REX, che le informazioni che legge siano quelle registrate dalla tua azienda, e da quando.

L'impronta mostra che le informazioni non sono state modificate dopo la registrazione. Non mostra che quanto dichiarato sia vero: il registro conserva chi ha dichiarato cosa, e quando.

Cosa copre l'impronta

  • Ogni campo delle informazioni pubblicate del lotto, esattamente come è stato registrato.
  • Una sola versione. Una correzione pubblica una nuova versione con la propria impronta, registrata con la correzione; la versione precedente e la sua impronta restano registrate e si possono ancora verificare. Vedi Correggere le informazioni di un lotto.
  • Non i file dei certificati: ognuno ha la propria impronta. Vedi Certificati.

Dove la mostra la console

  1. Apri il lotto da Lotti.
  2. Apri Dettagli tecnici in fondo alla pagina del lotto. Il valore lungo che inizia con 0x, subito sopra Apri la scheda pubblica, è l'impronta registrata per il lotto.
  3. Apri la scheda pubblica apre le informazioni pubblicate, che chiunque può leggere. Il loro indirizzo web termina con la stessa impronta.

Proprietari e amministratori la trovano anche in Lotti (tecnico), nella pagina di ogni lotto.

Come la verifica chiunque

  1. Scarica le informazioni pubblicate dal loro indirizzo pubblico, quello che apre Apri la scheda pubblica. Non contengono dati personali.
  2. Mettile nella loro forma standard, la forma canonica della RFC 8785: i campi in un ordine fisso e senza spazi in più, così le stesse informazioni danno sempre lo stesso testo.
  3. Calcola l'impronta di quel testo con il metodo keccak-256.
  4. Confrontala con l'impronta registrata per il lotto. Lo stesso valore significa che le informazioni sono quelle registrate. Qualsiasi altro valore significa che la copia è diversa da quanto registrato.

I tuoi sviluppatori o revisori possono farlo con poche righe di codice; la sezione seguente mostra come.

Per sviluppatori e revisori

Questa sezione usa termini tecnici. L'impronta è il metadataHash del batch, mostrato come Hash dei metadati in Dettagli tecnici: il keccak256 della serializzazione canonica RFC 8785 (JCS) del documento di metadati, calcolato sui suoi byte UTF-8 (AREX-CORE §3.5). Il documento è servito a GET /m/{azienda}/{metadataHash}.json sull'API di A-REX, l'uri del batch on-chain, non appena il batch è nel registro (le bozze rispondono 404). La risposta è il testo canonico stesso, leggibile da qualsiasi origine.

In JavaScript (Node 18 o successivo), con il pacchetto canonicalize (RFC 8785) e viem:

import canonicalize from 'canonicalize';
import { keccak256, toBytes } from 'viem';

const url = 'https://API_HOST/m/fazenda-boa-vista/0x5c1e…9a2b.json'; // Apri la scheda pubblica
const recorded = '0x5c1e…9a2b';                                 // Hash dei metadati del lotto

const doc = await (await fetch(url)).json();
const computed = keccak256(toBytes(canonicalize(doc)));
console.log(computed === recorded.toLowerCase() ? 'invariato' : 'diverso');

Con ethers v6 l'ultimo passo diventa keccak256(toUtf8Bytes(canonicalize(doc))). La canonicalizzazione conta quando verifichi una copia riformattata (indentata, chiavi riordinate): il file pubblicato è già canonico, quindi i suoi byte così come sono danno lo stesso valore.

Da riga di comando, con cast di Foundry:

curl -s "https://API_HOST/m/fazenda-boa-vista/0x5c1e…9a2b.json" -o lot.json
cast keccak "$(cat lot.json)"

Per confrontare con il registro stesso invece che con quanto mostra la console, leggi il batch dal contratto del token (Contratto del token, ID token e Rete in Dettagli tecnici):

cast call "$TOKEN" "batchOf(uint256)((address,uint64,uint8,bytes32,bytes32,uint64,uint64,bytes32,bytes32,string))" "$TOKEN_ID" --rpc-url "$RPC_URL"

Il nono valore della tupla è metadataHash e il decimo è uri. Dopo una correzione, batchOf restituisce la versione corretta, e ogni evento BatchMetadataUpdated(id, metadataHash, uri) registra una versione. I documenti dichiarano schemaVersion 1.0.0, 1.1.0 o 1.2.0 (A-REX scrive 1.2.0); la verifica è la stessa per tutti. Validare il documento rispetto al suo schema è un passo a parte: qualsiasi validatore JSON Schema 2020-12 con schema/batch-metadata.schema.json dello standard, oppure POST /v1/metadata/validate con una chiave API.