Livre blanc · 06
Standard de base
La justification de chaque élément d'A-REX Core : pourquoi l'enregistrement du lot comporte exactement ces champs, pourquoi la filiation est une opération et non une table de correspondance, pourquoi la mise en application provient d'ERC-7943, pourquoi les codes remplacent les énumérations, et quelles leçons ont façonné la conception.
Objectif de conception : la plus petite interface qu'un tiers implémentera
Un standard est adopté lorsque l'implémenter coûte moins cher que de ne pas être interopérable. Chaque champ, chaque fonction et chaque règle d'A-REX Core devait réussir un seul test : une équipe indépendante, qui construit une plateforme de silo collecteur de grains en Argentine ou le système d'un exportateur de café en Colombie, accepterait-elle cette contrainte en échange de l'interopérabilité ? Les énumérations de cultures, les noms de classes de qualité des États-Unis, un registre d'exploitations obligatoire, une pile d'identité imposée et une formule de valorisation ont tous échoué à ce test. L'identité du lot, la filiation, la mise en application et un point d'extension l'ont réussi.
L'enregistrement du lot, champ par champ
| Champ | Pourquoi il est on-chain | Pourquoi il a cette forme |
|---|---|---|
commodity: bytes32 | les hooks, les places de marché et les régulateurs doivent filtrer par produit sans analyser les métadonnées | keccak256("HS:100199") accepte n'importe quelle nomenclature (HS, FAO/CPC, GTIN, codes nationaux) sans table dans le standard ; une énumération figerait au déploiement la liste mondiale des cultures |
unit: bytes32 | les quantités n'ont aucun sens sans unité ; un transfert de 1000 représente 1000 kg ou 1000 caisses | la Recommandation 20 de l'UN/CEFACT est la liste de codes utilisée par l'EDI, EPCIS et les douanes |
producedAt: uint64 | la périssabilité, la saisonnalité et les contrats à terme dépendent tous de la date de production | 0 signifie « pas encore produit » : les créances sur récolte, les contrats à terme et les warrants sur récoltes futures sont les instruments de financement agricole dominants en Amérique latine et doivent pouvoir être représentés |
expiresAt: uint64 | la règle de transfert la plus courante en agriculture est « pas après cette date » | 0 signifie aucune ; les hooks décident de ce qu'implique l'expiration |
originRef: bytes32 | l'origine doit pouvoir être prouvée (EUDR, biologique, indications géographiques) | un hash ou une référence, jamais des coordonnées : la géolocalisation de la parcelle d'un producteur est une donnée personnelle (lignes directrices 02/2025 de l'EDPB v2.0, juillet 2026) et une chaîne publique immuable ne peut pas honorer l'effacement |
metadataHash: bytes32 + uri | tout le reste est off-chain, mais le jeton doit s'y engager | hash d'un document JSON canonique conforme à un schéma publié ; uri peut être IPFS, HTTPS ou un GS1 Digital Link |
status: uint8 | un lot parcourt un cycle de vie et certains états doivent bloquer les mouvements | valeurs ouvertes avec deux points fixes (0 actif, 255 retiré) ; l'énumération précédente à neuf états encodait le vocabulaire d'une seule chaîne d'approvisionnement et pouvait être modifiée par n'importe quel détenteur |
issuer, createdAt | responsabilité et audit | défini par le contrat, jamais par l'appelant |
Ce qui est volontairement absent : latitude et longitude, identifiant d'exploitation, énumération de grades, humidité et protéines, indicateur de vérification et adresse du vérificateur, un champ quantity (le suivi de l'offre d'ERC-1155 fait foi) et toute notion de valeur.
La filiation comme opération
Un cycle de vie doté d'un état PROCESSED mais sans moyen de produire le bien transformé est une erreur courante. Les régimes de traçabilité sont explicites : la transformation est un événement reliant des entrées à des sorties — l'événement de suivi critique de transformation de FSMA 204, le TransformationEvent d'EPCIS 2.0 avec inputQuantityList et outputQuantityList. Une table de correspondance des parents écrite par un administrateur ne porterait ni les quantités ni l'atomicité.
transform(from, to, inputIds, inputAmounts, outputs, outputAmounts, processRef) détruit et émet en une seule transaction, enregistre les parents sur chaque sortie, émet un événement avec toutes les quantités et une référence de processus, et exécute le pipeline de hooks sur chaque mouvement. Le fractionnement (1→n), la fusion (n→1) et le traitement (n→m) sont la même fonction. L'implémentation de référence permet à tout détenteur de réorganiser des lots (même denrée et même unité, quantité conservée) mais exige TRANSFORMER_ROLE pour changer la nature ou la quantité des biens — une minoterie peut transformer du blé en farine, un agriculteur ne peut pas transformer du blé en or.
Une mise en application issue d'ERC-7943, non réinventée
Les lots agricoles font couramment l'objet de sûretés, de warrants, d'embargos, de procédures d'insolvabilité et de rappels. Un jeton qui ne peut pas être gelé ni déplacé par une partie autorisée contre la volonté du détenteur ne peut pas représenter un tel lot devant une banque, un tribunal ou un régulateur. ERC-3643 a résolu ce problème pour les valeurs mobilières en 2021 ; ERC-7943 l'a généralisé à tout actif du monde réel et a atteint le statut Final en mai 2026 avec une variante ERC-1155. A-REX adopte cette interface telle quelle plutôt que de définir la sienne, afin que les moteurs de conformité compatibles avec ERC-7943 (Chainlink ACE, outillage ERC-3643) reconnaissent un jeton A-REX sans adaptation.
La variante multi-jeton s'adapte naturellement à ERC-1155 : le gel s'applique par compte et par identifiant de lot, les transferts forcés désignent le lot, l'éligibilité s'applique par compte.
Un seul hook, ordonné, avec des codes
Un système de modules fondé sur cinq interfaces de capacité, chacune sondée avec supportsInterface à chaque transfert, ne passe pas à l'échelle ; avec huit modules et cinq identifiants dans un transfert groupé, cela faisait quatre-vingts appels statiques avant l'exécution d'une seule règle. Les rejets étaient des chaînes de texte libre qu'aucun indexeur ne pouvait interpréter et qu'aucun test ne pouvait comparer de façon fiable.
A-REX Core définit une seule interface de hook, avec un bitmap de drapeaux constant mis en cache à l'enregistrement. Le jeton évalue les hooks dans un ordre fixe et s'arrête au premier code bytes32 non nul, en annulant la transaction avec ARexHookRejected(hook, code). L'ordre est auditable (getHooks), la suppression le préserve, et un hook apprend quel jeton l'appelle via msg.sender, de sorte qu'un même déploiement sert de nombreux jetons. L'éligibilité (canSend/canReceive) est intégrée à la même interface afin que les vues ERC-7943 du jeton soient la conjonction de ses hooks.
Pourquoi des codes plutôt que des erreurs personnalisées levées par le hook ? Parce que check est une fonction de lecture seule (view) qui doit être composable : le jeton doit interroger chaque hook, comparer les réponses et exposer la première via transferCheck sans annuler la transaction. Les codes sont peu coûteux, indexables, traduisibles et dotés d'un espace de noms (keccak256("AREX:BATCH_EXPIRED"), keccak256("MYHOOK:QUOTA")).
Attestations par lot, émetteurs par thème
Certifier un producteur est un problème d'identité qui dispose de solutions éprouvées (ONCHAINID, Ethereum Attestation Service, justificatifs vérifiables, e-ID nationaux). Certifier un lot est ce que vérifient les acheteurs, les douanes et les régulateurs, et cela n'avait aucune forme standard. IARexAttest enregistre (batch, topic) → (issuer, reference, validity) et laisse un administrateur décider quel émetteur peut attester pour quel thème, à l'image du registre d'émetteurs de confiance d'ERC-3643, sans imposer de fournisseur d'identité. Les thèmes sont des bytes32 ouverts, de sorte que les thèmes d'attestation d'ERC-735, les identifiants de schéma EAS et les hashes de noms de certification coexistent.
isAttested est la seule question que pose un hook : elle vaut faux si l'attestation est absente, révoquée, expirée, ou si son émetteur a perdu la confiance. Cela permet à un hook d'appliquer la règle « les lots de café ont besoin d'une référence de diligence raisonnée EUDR avant de pouvoir être vendus » en six lignes.
Ce que le standard ne dit pas
- Il ne dit pas qui peut créer des lots, changer le statut ou mettre en application — seulement que ce sont des rôles, jamais des soldes.
- Il ne dit pas ce que signifient les statuts 1..254 ; l'émetteur publie une table dans les métadonnées.
- Il ne dit pas comment valoriser un lot, comment il décroît, quand il peut être négocié selon la saison, comment il est livré ou assuré : tout cela relève de hooks ou de contrats compagnons.
- Il ne dit pas quelle chaîne, quel fournisseur d'identité, quel oracle, quel registre.
- Il ne dit pas si le jeton est une valeur mobilière ou un produit de base.
Leçons qui ont façonné la conception
| Leçon | Conséquence dans A-REX Core |
|---|---|
| Un standard qui inclut un registre d'exploitations et un système d'identité comme éléments REQUIS n'est pas un standard de jetons, c'est un produit | rien en dehors du jeton n'est exigé |
| Une énumération fermée dans une signature de fonction fait de tout « registre dynamique » de denrées du code mort | les denrées, les unités, les statuts et les thèmes sont des codes ouverts |
| Une autorité dérivée du solde est une vulnérabilité dans un jeton à détenteurs multiples | les changements de statut sont réservés à des rôles ; RETIRED est terminal |
| Une logique métier dans le cœur contredit l'idée d'un « cœur sans logique métier » | la valorisation, la décroissance et les fenêtres vivent dans des hooks |
| Un build qui ne compile pas depuis un clone propre n'est pas une implémentation de référence | dépendances épinglées, fichier de verrouillage versionné, CI à chaque push |
| Les dates réglementaires d'un livre blanc vieillissent ; le code qui en dépend ne doit pas vieillir | le jeton stocke des références et des hashes, jamais de logique réglementaire |
Rétrocompatibilité
Les jetons A-REX Core sont de pleins jetons ERC-1155 et ERC-7943. Les portefeuilles, les places de marché et les indexeurs qui connaissent ERC-1155 fonctionnent sans changement ; l'outillage de conformité compatible avec ERC-7943 reconnaît la surface de mise en application. Les moteurs de règles écrits pour d'autres jetons se rattachent via un adaptateur IARexHook, tant que leurs décisions ne dépendent que des paramètres de l'appel et de l'enregistrement du lot.