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
- Apri il lotto da Lotti.
- 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. - 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
- Scarica le informazioni pubblicate dal loro indirizzo pubblico, quello che apre Apri la scheda pubblica. Non contengono dati personali.
- 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.
- Calcola l'impronta di quel testo con il metodo keccak-256.
- 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.