# Pièces enregistrées par lot (mode ancré)

Pour les marques à gros volumes en QR : chaque lot est inscrit sur la blockchain en une seule écriture, et le jeton d'une pièce n'est créé que lorsque son acheteur la revendique.

Source : https://docs.sealtrust.io/pieces-ancrees/

---

En quittant cette page, vous saurez ce que change le mode ancré pour vos
pièces, ce que son inscription prouve et ne prouve pas, à quel moment une
pièce reçoit son propre jeton, et comment un tiers vérifie la preuve d'une
pièce sans nous faire confiance.

## Le principe

Par défaut, chaque pièce frappée reçoit tout de suite son propre jeton sur la
blockchain Base. C'est le mode « une pièce, un jeton ».

En mode ancré, les pièces d'un lot sont créées dans SealTrust, avec leur
numéro de série et leur QR code signé, exactement comme aujourd'hui. Le lot
entier est ensuite inscrit sur la blockchain en une seule écriture : une
racine de Merkle, une empreinte qui résume toutes les pièces du lot. Chaque
pièce garde sa propre preuve d'appartenance à cette racine.

Une pièce ne reçoit son jeton que le jour où elle bouge pour la première
fois : quand son acheteur la revendique, ou quand votre marque la transfère.
Une pièce qui n'est jamais revendiquée n'aura jamais de jeton.

Ce mode convient à une marque qui imprime des QR codes en grand nombre pour
lutter contre le marché gris : elle a besoin d'un numéro de série prouvable
pour chaque pièce, pas d'un jeton par pièce dès la fabrication.

## Qui l'active

L'équipe SealTrust, à votre demande. Le réglage vaut pour toute la marque. Il
ne change jamais pendant qu'une frappe de la marque est en cours, et chaque
changement est inscrit au journal d'audit.

Rien ne change pour les pièces déjà créées : une pièce qui a son jeton le
garde, une pièce inscrite par son lot reçoit son jeton à sa première
revendication, quel que soit le mode de la marque à ce moment-là.

Le mode ancré couvre les pièces en QR seul. Une puce NFC est encodée avec son
jeton : un lot NFC continue de se frapper pièce par pièce.

## Frapper un lot

Le geste est le même : « Frapper le lot (groupé) » sur la fiche du lot. Il n'y
a rien d'autre à faire.

Les pièces existent dès le clic. Les QR codes, l'archive à imprimer et les
codes d'achat se préparent comme d'habitude. L'inscription du lot part dans la
foulée, en une seule transaction. Si elle ne peut pas partir tout de suite
(réseau indisponible, frais trop élevés), elle repart automatiquement dans
l'heure : la fiche du lot affiche « En attente d'inscription, automatique
sous 1 h ».

Une fois la transaction confirmée, la fiche du lot affiche « Inscrit sur la
blockchain le … », avec le lien vers la transaction et le gaz utilisé.

Si la blockchain refuse l'inscription, ou si la transaction reste sans
confirmation pendant une heure, elle repart automatiquement au passage horaire
suivant. Rien n'est renvoyé à l'aveugle : quand la racine est déjà inscrite,
c'est la transaction qui l'a inscrite qui est retenue. D'ici là, la page
publique de la pièce affiche « Enregistré, inscription refusée » ou
« Enregistré, inscription en attente », et rien n'est présenté comme prouvé.

Une frappe en mode ancré couvre un seul lot à la fois. Les pièces doivent
toutes appartenir au lot, et à votre marque.

## Ce que l'inscription prouve

Elle prouve que votre marque a enregistré ce numéro de série, dans ce lot, au
plus tard à la date du bloc qui porte la transaction, et que les informations
inscrites n'ont pas changé depuis.

Elle ne prouve pas, à elle seule, que l'objet qu'une personne a en main porte
bien ce numéro, ni qui en est le propriétaire. La propriété commence à la
revendication, avec le jeton.

La page publique de la pièce, celle qu'ouvre son QR code, affiche
« Enregistré et ancré » une fois la transaction confirmée, avec la date, le
lien vers la transaction et la preuve. Avant la confirmation, elle affiche
« Enregistré, inscription en attente ».

## Quand une pièce reçoit son jeton

À sa première revendication, le jeton est créé puis remis à l'acheteur, dans
la même demande. Les règles de revendication de votre marque s'appliquent
comme pour toute pièce : code d'achat exigé, activation en magasin, délai. Une
deuxième revendication est refusée comme aujourd'hui.

Au premier transfert fait par votre marque, le jeton est créé puis transféré,
une fois le code de confirmation du transfert saisi : une demande abandonnée
avant ce code ne crée rien.

Le jeton d'une pièce enregistrée par son lot est créé par une seule signature.
Une marque qui signe par un coffre multisignature (Safe) ne peut donc pas
passer en mode ancré, et un coffre ne peut pas être activé tant que des pièces
de la marque attendent leur jeton.

Le contrôle du marché gris porte sur la pièce, pas sur son jeton : il
s'applique dès la création de la pièce.

## Vérifier la preuve d'une pièce

La preuve se lit sans clef d'API, avec le numéro de série imprimé sur le QR :

```bash
curl https://api.sealtrust.io/v1/verify/unit-anchor/K4QNAFCHDETK
```

La réponse donne `status` (`recorded` une fois la transaction confirmée,
`pending` avant, `failed` si la blockchain l'a refusée), les champs inscrits
`leaf_fields`, la feuille `leaf`, sa position `leaf_index`, la preuve `proof`,
la racine `merkle_root`, l'identifiant de lot sur le contrat
`onchain_batch_id`, la transaction et son lien `explorer_url`, la date
`recorded_at`, et `token_minted`. La même information arrive dans le champ
`unit_anchor` de `GET /v1/resolve/{identifier}`.

Pour refaire la vérification soi-même :

1. recalculer la feuille à partir de `leaf_fields` :

```text
keccak256(abi.encode(
  bytes32 keccak256("sealtrust.unit-anchor.v1"),
  string  serial,
  string  brand_code,
  uint256 product_model_id,
  string  lot_code,
  bytes32 uid_hash,
  uint64  created_at_unix
))
```

2. remonter la preuve : à chaque étape, hacher la valeur courante avec la
   valeur suivante de `proof`, la plus petite des deux en premier
   (convention `MerkleProof` d'OpenZeppelin). Le résultat doit être
   `merkle_root` ;
3. lire sur le contrat `anchoredRootByBatch(onchain_batch_id)` : la valeur
   doit être la même racine. `onchain_root_matches` donne le résultat de
   cette lecture faite par nos serveurs, à titre indicatif.

`uid_hash` est aussi l'empreinte du jeton que la pièce recevra : son numéro
de jeton est cette empreinte lue comme un nombre. Le jeton créé plus tard est
donc bien celui de la pièce inscrite.

Une pièce qui n'a pas été créée en mode ancré répond 404 : elle a son propre
jeton, et sa preuve est ailleurs ([confiance et preuves](/confiance-et-preuves/)).

## Ce qu'il faut retenir

- Le mode ancré inscrit un lot entier en une seule transaction ; chaque pièce
  garde sa preuve.
- Rien à cliquer en plus : l'inscription part avec la frappe, et repart seule
  dans l'heure si besoin.
- Une pièce reçoit son jeton à sa première revendication ou à son premier
  transfert, jamais avant.
- L'inscription prouve l'enregistrement du numéro et sa date, pas la
  possession de l'objet.
