Skip to main contentA-REX Foundation

Aide · 38

Vérifier que les informations d’un lot n’ont pas été modifiées

Chaque version des informations d’un lot a une empreinte enregistrée dans le registre. Tout le monde peut la recalculer à partir des informations publiées et la comparer, sans compte et sans dépendre d’A-REX.

Quand un lot est enregistré, A-REX publie ses informations (produit, quantité, code de lot, origine, dates) et en enregistre une empreinte dans le registre. L’empreinte est un code court calculé à partir du contenu exact : changez une lettre ou un chiffre et elle ne correspond plus. Un acheteur, un auditeur ou une autorité peut donc vérifier, sans compte et sans dépendre d’A-REX, que les informations qu’il lit sont celles que votre entreprise a enregistrées, et depuis quand.

L’empreinte montre que les informations n’ont pas été modifiées après leur enregistrement. Elle ne montre pas que ce qui a été déclaré est vrai : le registre conserve qui a déclaré quoi, et quand.

Ce que couvre l’empreinte

  • Tous les champs des informations publiées du lot, exactement tels qu’ils ont été enregistrés.
  • Une seule version. Une correction publie une nouvelle version avec sa propre empreinte, enregistrée avec la correction ; la version précédente et son empreinte restent enregistrées et peuvent toujours être vérifiées. Voir Corriger les informations d’un lot.
  • Pas les fichiers des certificats : chacun a sa propre empreinte. Voir Certificats.

Où la console l’affiche

  1. Ouvrez le lot depuis Lots.
  2. Ouvrez Détails techniques en bas de la page du lot. La longue valeur qui commence par 0x, juste au-dessus de Ouvrir la fiche publique, est l’empreinte enregistrée pour le lot.
  3. Ouvrir la fiche publique ouvre les informations publiées, que tout le monde peut lire. Leur adresse web se termine par la même empreinte.

Les propriétaires et les administrateurs la trouvent aussi dans Lots (technique), sur la page de chaque lot.

Comment tout le monde peut la vérifier

  1. Téléchargez les informations publiées depuis leur adresse publique, celle qu’ouvre Ouvrir la fiche publique. Elles ne contiennent aucune donnée personnelle.
  2. Mettez-les sous leur forme standard, la forme canonique de la RFC 8785 : les champs dans un ordre fixe et sans espaces superflus, pour que les mêmes informations donnent toujours le même texte.
  3. Calculez l’empreinte de ce texte avec la méthode keccak-256.
  4. Comparez-la à l’empreinte enregistrée pour le lot. La même valeur signifie que les informations sont celles qui ont été enregistrées. Toute autre valeur signifie que la copie diffère de ce qui a été enregistré.

Vos développeurs ou vos auditeurs peuvent le faire en quelques lignes de code ; la section suivante montre comment.

Pour les développeurs et les auditeurs

Cette section emploie des termes techniques. L’empreinte est le metadataHash du batch, affiché comme Hachage des métadonnées dans Détails techniques : le keccak256 de la sérialisation canonique RFC 8785 (JCS) du document de métadonnées, calculé sur ses octets UTF-8 (AREX-CORE §3.5). Le document est servi à GET /m/{entreprise}/{metadataHash}.json sur l’API d’A-REX, l’uri du batch on-chain, dès que le batch est dans le registre (les brouillons répondent 404). La réponse est le texte canonique lui-même, lisible depuis n’importe quelle origine.

En JavaScript (Node 18 ou plus récent), avec le paquet canonicalize (RFC 8785) et viem :

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


const url = 'https://API_HOST/m/fazenda-boa-vista/0x5c1e…9a2b.json'; // Ouvrir la fiche publique
const recorded = '0x5c1e…9a2b';                                 // Hachage des métadonnées du lot


const doc = await (await fetch(url)).json();
const computed = keccak256(toBytes(canonicalize(doc)));
console.log(computed === recorded.toLowerCase() ? 'inchangé' : 'différent');

Avec ethers v6, la dernière étape s’écrit keccak256(toUtf8Bytes(canonicalize(doc))). La canonicalisation compte quand vous vérifiez une copie reformatée (indentée, clés réordonnées) : le fichier publié est déjà canonique, donc ses octets tels quels donnent la même valeur.

En ligne de commande, avec cast de Foundry :

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

Pour comparer avec le registre lui-même plutôt qu’avec ce qu’affiche la console, lisez le batch dans le contrat de jeton (Contrat de jeton, ID du jeton et Réseau dans Détails techniques) :

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

La neuvième valeur du tuple est metadataHash et la dixième est uri. Après une correction, batchOf renvoie la version corrigée, et chaque événement BatchMetadataUpdated(id, metadataHash, uri) enregistre une version. Les documents déclarent schemaVersion 1.0.0, 1.1.0 ou 1.2.0 (A-REX écrit 1.2.0) ; la vérification est la même pour tous. Valider le document par rapport à son schéma est une autre étape : n’importe quel validateur JSON Schema 2020-12 avec schema/batch-metadata.schema.json du standard, ou POST /v1/metadata/validate avec une clé d’API.