Mémoire de Master — Analyse et questions d'examinateur

Candidat : N'GORAN Charlemagne Josué-Arnold  ·  Parcours : Master Génie Informatique, UFR-SFA, Université Nangui Abrogoua  ·  Année : 2025-2026
Thème : AgriTrace — Solution de traçabilité blockchain pour les produits agricoles : café, cacao et anacarde
Volume : 81 pages · 6 chapitres · 30 références · 3 annexes (code Solidity, captures, tests)

1. Appréciation générale

Mémoire remarquablement ancré dans son contexte. Le chapitre 1 est le meilleur du document : il documente précisément les filières ivoiriennes, l'architecture institutionnelle (CCC, CCA, tutelle ministérielle, bases légales avec numéros d'ordonnance et de loi), la distinction entre circuit direct coopératif et circuit informel pisteurs/traitants, et les limites concrètes des reçus d'achat brousse — le tout appuyé sur un diagnostic officiel de la Coordination Nationale REDD+. Ce travail de terrain documentaire est ce qui distingue ce mémoire d'un exercice technique générique.

La réalisation est complète et fonctionnelle : smart contract Solidity déployé et vérifiable sur Sepolia, backend Node/Express sur Render, PostgreSQL sur Neon, IPFS via Pinata, application Flutter multi-rôles. L'architecture hybride on-chain/off-chain est bien raisonnée, et l'arbitrage sur le statut EN_ATTENTE (non ancré car non probant) témoigne d'une vraie compréhension du coût d'écriture blockchain.

La faiblesse tient à la validation : onze tests fonctionnels manuels, aucune métrique chiffrée, aucun test unitaire Solidity, aucun audit de sécurité, aucun utilisateur réel. Et surtout, plusieurs revendications du mémoire ne sont pas soutenues par l'implémentation décrite — notamment sur la non-répudiation et sur la conformité EUDR.

2. Analyse de la forme

2.1 Points forts

2.2 Défauts de forme

PointConstatGravité
Titre en couverture« A GRITRACE » et « AG RICOLES » : espaces parasites dans le titre de la page de garde (problème de lettrine ou d'espacement). À corriger impérativement.Majeure
Grades du jury« Maître-Conférence » au lieu de « Maître de Conférences » (deux occurrences en page de garde). La ligne « Examinateur » laissée en pointillés n'est pas un reproche : ce membre n'est désigné qu'après le dépôt. Même situation dans les trois mémoires du jury.Moyenne
Numérotation des tableauxLe premier tableau est numéroté « 0.2 » (introduction générale). Il n'existe pas de tableau 0.1. Numérotation incohérente.Mineure
Figures 5.1 et 5.2Les logos de Solidity et d'Ethereum sont présentés comme figures numérotées et référencées dans la liste des figures. Un logo n'est pas une figure scientifique — c'est du remplissage visuel.Mineure
Lisibilité des figures densesLes figures 3.2 (classes), 4.2 (schéma BDD) et 4.3 (séquence) sont très denses ; en impression A4 leur lecture est difficile. Prévoir un format paysage ou un découpage.Moyenne
Chapitre 6 sous-dimensionnéLe chapitre d'évaluation — celui qui devrait porter la démonstration scientifique — fait 5 pages pour un mémoire de 81. Déséquilibre net.Majeure
Citations de seconde mainRéf. [1] et [2] : données ICCO et CCA « relayées par Agence Ecofin » / « African Agribusiness ». Citer la source primaire directement, ou assumer explicitement la source secondaire.Mineure
Aucun lien vers le dépôt de codeL'adresse du contrat sur Sepolia est donnée (excellent), mais aucun dépôt Git public n'est référencé pour le backend et l'application Flutter. Reproductibilité partielle.Moyenne

3. Analyse du fond — pertinence scientifique et technique

3.1 Ce qui est solide

3.2 Faiblesses, contradictions et angles morts à interroger

A. Contradiction majeure sur la signature des transactions.
Le §3.3.2 (Sécurité) affirme : « les transactions blockchain sont signées cryptographiquement par le wallet Ethereum de l'acteur initiateur, garantissant la non-répudiation ». Le §5.2 (Implémentation) indique : « le backend charge l'ABI du contrat et son adresse […] et signe les transactions à l'aide d'une clé privée sécurisée côté serveur ». Les deux affirmations sont incompatibles. Si toutes les transactions sont signées par une clé serveur unique, alors : (i) il n'y a aucune non-répudiation — l'identité on-chain de tous les acteurs est identique ; (ii) le système est entièrement recentralisé sur le serveur Render ; (iii) quiconque compromet cette clé peut écrire ce qu'il veut sur la chaîne au nom de n'importe quel acteur. L'argument central du mémoire — décentralisation et confiance sans intermédiaire — s'effondre sur ce point.

B. La conformité EUDR est revendiquée mais non implémentée.
Le §3.4.2 affirme que l'EUDR « implique notamment la géolocalisation des parcelles de production et la traçabilité jusqu'au producteur individuel — deux fonctionnalités que le système AgriTrace adresse directement ». Or : le schéma de base de données (Fig. 4.2, table lots) ne contient aucun champ de coordonnées GPS, et la struct Lot du smart contract (Annexe A) non plus. Il n'existe ni parcelle, ni polygone, ni latitude/longitude nulle part dans le modèle. La revendication de conformité EUDR n'est donc soutenue par aucune donnée dans le système.

C. Le modèle de lot ne gère ni agrégation ni scission.
C'est le problème le plus fondamental. Le chapitre 1 explique très bien que les pisteurs agrègent du cacao provenant de multiples producteurs, que les coopératives regroupent, que les exportateurs conditionnent en conteneurs. Or le modèle de données traite le lot comme une entité atomique et immuable, de la récolte à l'export, avec un producteur unique. Le cas d'usage « Agréger les sacs en conteneurs » figure dans le diagramme de cas d'utilisation mais n'a aucune contrepartie ni dans la struct Lot, ni dans le schéma relationnel, ni dans les tests. Un système de traçabilité cacao qui ne modélise pas le mélange de lots ne trace pas la réalité de la filière.

D. Divergence du modèle de prix entre on-chain et off-chain.
La table prix_bord_champ possède les colonnes produit, campagne, date_effet — modèle multi-campagne correct. Le smart contract utilise un simple mapping prixOfficielParProduit[uint256] : un seul prix courant par produit, sans notion de campagne ni de date d'effet. Conséquence : un lot récolté en campagne N mais validé après changement de prix sera contrôlé contre le mauvais seuil, et il est impossible d'auditer a posteriori quel prix était en vigueur au moment d'une transaction donnée. C'est un défaut de conception réel, pas un détail.

E. Valeurs d'initialisation dangereuses dans le constructeur.
Le contrat déployé s'initialise à 900 / 1500 / 300 FCFA/kg (café / cacao / anacarde), alors que les prix 2025-2026 sont 1700 et 2800. Entre le déploiement et l'appel à setPrixOfficiel(), le contrat accepte activement des transactions à 1500 FCFA/kg pour le cacao — soit exactement la fraude que le système prétend empêcher. Le candidat le signale honnêtement en annexe, mais initialiser à zéro (ou bloquer toute validation tant que le prix n'est pas défini) était la conception sûre.

F. Le « triple verrou » est un simple verrou avec deux confirmations d'ergonomie.
Les niveaux 1 (Flutter) et 2 (API) sont contournables par construction — le mémoire l'admet pour le niveau 1. Seul le niveau 3 (smart contract) offre une garantie. Présenter cela comme une « défense en profondeur » et comme « contribution originale majeure » est une surévaluation rhétorique. Par ailleurs, le contournement décisif n'est pas d'attaquer les trois niveaux : c'est de déclarer 2800 dans le système et d'en payer 2000 en espèces. Le mémoire le reconnaît, mais après avoir construit tout son argumentaire de validation dessus.

G. Aucune mesure quantitative.
Le §6.4 « Analyse des performances » ne contient aucun chiffre mesuré : « quelques centaines de millisecondes », « quelques secondes à quelques dizaines de secondes ». Aucun coût en gas mesuré, aucun débit, aucune latence instrumentée, aucun test de charge. Le titre de la section n'est pas honoré.

H. « Taux de transactions non conformes : nul par construction ».
Le §6.4 présente comme indicateur de performance un résultat qui est une tautologie : le contrat rejette les transactions non conformes, donc il n'en enregistre aucune. Ce n'est pas un résultat expérimental, c'est la reformulation d'une spécification.

I. Onze tests manuels, zéro test automatisé.
Hardhat fournit un environnement de test unitaire complet (Mocha/Chai, couverture, fuzzing). Aucun test unitaire Solidity n'est mentionné, ni couverture de code, ni test de régression. Pour un contrat immuable une fois déployé, c'est un manquement sérieux.

J. Aucune analyse de sécurité du smart contract.
Pas un mot sur : contrôle d'accès (onlyOwner, rôles — qui peut appeler creerLot() ? setPrixOfficiel() ?), réentrance, dépassement de gas sur les tableaux d'historique croissants, DoS par saturation, absence de mécanisme de pause d'urgence, absence de proxy d'upgrade. Or le mémoire souligne lui-même l'immutabilité : un bug déployé est définitif.

K. RGPD et données personnelles sur blockchain publique.
Le système enregistre des identités de producteurs sur un registre public, immuable et mondialement consultable, dans un dispositif dont la finalité affichée est la conformité à une réglementation… de l'Union européenne. Le RGPD impose un droit à l'effacement techniquement incompatible avec l'immutabilité d'une blockchain publique. Aucune mention dans le mémoire.

L. Confidentialité commerciale ignorée.
Le Tableau 2.1 note lui-même que la confidentialité d'une blockchain publique est « nulle ». Le système y publie prix, volumes, identités d'acheteurs et d'exportateurs — des données commercialement sensibles. Aucun exportateur n'acceptera de rendre publics ses volumes et ses fournisseurs. Cet obstacle à l'adoption, pourtant rédhibitoire, n'est jamais discuté.

M. « Décentralisé » avec quatre dépendances centralisées.
Render (backend), Neon (base), Pinata (pinning IPFS), Alchemy (accès RPC), plus Firebase et Resend. Le §3.3.2 affirme que « le système ne présente pas de point de défaillance unique ». C'est inexact : si Render tombe, l'application mobile ne fonctionne plus ; si Pinata cesse le pinning, les certificats deviennent irrécupérables (seul le hash subsiste).

N. Gouvernance des prix mal attribuée.
Dans le système, c'est l'Administrateur (acteur technique) qui « définit les prix bord champ ». Dans la réalité institutionnelle décrite au chapitre 1, ce sont le CCC et le CCA qui les fixent. Le système confie donc le paramètre le plus sensible à un rôle technique sans légitimité réglementaire. De plus, le CCA fixe légalement un prix à au moins 60 % du cours international (§1.2.3) — donc variable — ce que le modèle à valeur fixe ne capte pas.

O. Aucune validation utilisateur de l'« interface inclusive ».
L'inclusivité est annoncée comme l'une des quatre contributions principales. Elle repose sur des principes de conception raisonnables (pictogrammes, OTP, réduction du texte), mais aucun producteur n'a testé l'application. Aucun test utilisateur, aucun questionnaire SUS, aucun taux de réussite de tâche. Une contribution en accessibilité non évaluée auprès du public cible n'est pas démontrée.

P. Persistance de Sepolia.
Le mémoire fonde son argument d'immutabilité sur un déploiement testnet. Or les testnets Ethereum sont dépréciés régulièrement (Ropsten, Rinkeby, Kovan, Goerli l'ont tous été). L'historique « immuable » d'AgriTrace peut disparaître avec le réseau qui l'héberge.

4. Questions pour la soutenance

Le candidat maîtrise très bien son contexte métier : ouvrir sur ce terrain le mettra en confiance. Les questions décisives sont Q7 (signature), Q9 (agrégation de lots) et Q11 (EUDR).

4.1 Questions d'ouverture — contexte et choix de conception niveau 1

Q1. Vous décrivez très bien, au chapitre 1, le Système National de Traçabilité déjà déployé par le CCC : un million de cartes producteurs, mille coopératives équipées, terminaux avec prix bord champ paramétré. Qu'apporte AgriTrace que le SNT n'apporte pas déjà ? Et votre système se substitue-t-il au SNT, ou s'y raccorde-t-il ? Attendu : le SNT est propriétaire, centralisé, s'arrête au premier acheteur et n'est pas auditable par un tiers extérieur. Le candidat doit défendre la complémentarité plutôt que la substitution — refaire un SNT concurrent serait irréaliste.
Q2. Votre chapitre 1 montre que la fraude prospère surtout dans le circuit informel des pisteurs et traitants, hors de tout registre. Votre système exige un compte créé par un administrateur, un smartphone et une connexion. Comment atteint-il précisément les acteurs qui échappent aujourd'hui au contrôle ? Question de fond : le système sécurise le circuit déjà le mieux contrôlé et manque celui qui pose problème. Écouter si le candidat en a conscience.
Q3. Vous avez choisi Ethereum public plutôt qu'Hyperledger Fabric. Vous justifiez ce choix par la transparence et la maturité de l'écosystème. Mais un exportateur acceptera-t-il de publier sur un registre mondial ses volumes, ses prix et l'identité de ses fournisseurs ? Comment la confidentialité commerciale a-t-elle pesé dans votre arbitrage ? Le Tableau 2.1 note « confidentialité : nulle » puis choisit quand même le public. La contradiction n'est pas traitée dans le mémoire.
Q4. Expliquez au jury en quoi le fait de stocker le hash IPFS d'un certificat sur la blockchain, plutôt que le certificat lui-même, garantit son intégrité. Que se passe-t-il si Pinata cesse de « pinner » votre fichier ? Attendu : le CID est dérivé du contenu ; toute modification change le hash. Mais IPFS ne garantit pas la persistance — si plus aucun nœud ne conserve le fichier, il est perdu et seule la preuve d'intégrité d'un document inaccessible subsiste.

4.2 Questions techniques décisives niveau 2

Q7. [Contradiction A — question centrale] Votre §3.3.2 affirme que « les transactions sont signées par le wallet Ethereum de l'acteur initiateur, garantissant la non-répudiation ». Votre §5.2 indique que le backend « signe les transactions à l'aide d'une clé privée sécurisée côté serveur ». Laquelle des deux descriptions correspond au système déployé ?
Si c'est la seconde : toutes les transactions proviennent de la même adresse Ethereum, il n'y a donc aucune non-répudiation, et quiconque compromet cette clé peut écrire au nom de n'importe quel acteur. Que reste-t-il alors de votre argument de décentralisation ? C'est LA question du mémoire. Une bonne réponse : reconnaître que le modèle actuel est « custodial », expliquer pourquoi (impossible de faire gérer une clé privée et du gas à un planteur), et proposer la piste sérieuse — méta-transactions / relayeur EIP-2771, ou account abstraction ERC-4337 avec signature déléguée. Une mauvaise réponse serait de nier la contradiction.
Q8. [Sécurité J] Dans votre contrat, qui est autorisé à appeler creerLot(), validerPrixBordChamp() et setPrixOfficiel() ? Votre mémoire ne décrit aucun modificateur de contrôle d'accès. Si ces fonctions sont publiques et sans restriction, n'importe quelle adresse Ethereum peut créer des lots fictifs ou redéfinir le prix officiel à 1 FCFA, ce qui neutralise entièrement votre mécanisme de protection. Attendu : onlyOwner / AccessControl d'OpenZeppelin, rôles PRODUCTEUR / COOPERATIVE / CERTIFICATEUR / ADMIN. Si le contrat n'en a pas, c'est une faille critique.
Q9. [Conception C — question de fond] Votre chapitre 1 explique que les pisteurs agrègent le cacao de plusieurs producteurs et que les exportateurs conditionnent en conteneurs. Votre struct Lot ne comporte qu'un seul producteur et aucun mécanisme de fusion ou de scission de lots. Comment votre système représente-t-il un sac contenant le cacao de douze planteurs différents ? Et comment un consommateur scannant le QR d'un conteneur remonte-t-il aux parcelles d'origine ? C'est le verrou technique central de la traçabilité cacao (mass balance vs identity preserved vs segregation). Le cas d'usage « agréger les sacs en conteneurs » figure dans le diagramme mais n'existe ni dans le modèle de données ni dans les tests. Écouter si le candidat connaît ces notions.
Q10. [Conception D] Votre table prix_bord_champ gère le produit, la campagne et la date d'effet. Votre smart contract n'a qu'un mapping produit → prix courant, sans campagne. Un lot récolté en campagne 2024-2025 mais validé après la mise à jour du prix 2025-2026 sera contrôlé contre quel seuil ? Et comment auditez-vous, six mois plus tard, quel prix était en vigueur au moment d'une transaction donnée ? Attendu : reconnaissance de la divergence de modèle ; solution = historiser les prix on-chain (mapping produit → campagne → prix) et référencer la campagne dans le lot.
Q11. [Revendication B] Vous affirmez au §3.4.2 que la géolocalisation des parcelles est une fonctionnalité « qu'AgriTrace adresse directement ». Or ni votre struct Lot, ni votre table lots, ni aucune autre table du schéma de la Figure 4.2 ne contient de coordonnées GPS ou de polygone de parcelle. Sur quelle donnée repose cette affirmation de conformité EUDR ? Il n'y a pas de bonne réponse : la revendication n'est pas soutenue. Vérifier si le candidat le reconnaît franchement et sait dire ce qu'il faudrait ajouter (entité Parcelle, polygone GeoJSON, date de déboisement, chaînage lot → parcelle).
Q12. [Défaut E] Votre contrat s'initialise avec un prix cacao de 1500 FCFA/kg alors que le prix officiel 2025-2026 est de 2800. Pendant la fenêtre entre le déploiement et le premier appel à setPrixOfficiel(), votre contrat valide activement des transactions à 1500 FCFA/kg — précisément la fraude que vous voulez empêcher. Pourquoi ne pas avoir initialisé à zéro, ou bloqué toute validation tant qu'aucun prix n'est explicitement défini ?
Q13. Vous avez conduit onze tests fonctionnels manuels. Hardhat fournit un cadre de test unitaire complet. Combien de tests unitaires Solidity votre contrat comporte-t-il ? Quelle est la couverture de code ? Pour un contrat immuable une fois déployé, comment justifiez-vous l'absence de suite de tests automatisés ?
Q14. Votre historique de transactions est stocké dans une structure persistante du contrat. Après 100 000 lots et plusieurs centaines de milliers de transitions, que se passe-t-il lorsqu'une fonction parcourt ce tableau ? Avez-vous évalué le risque de dépassement de la limite de gas par bloc ? Attendu : notion de DoS par croissance non bornée ; bonne pratique = events indexés plutôt que stockage, indexation off-chain (The Graph).
Q15. Votre §6.4 s'intitule « Analyse des performances » mais ne comporte aucun chiffre mesuré. Donnez-nous trois valeurs : le coût en gas d'une création de lot, la latence médiane de confirmation observée sur Sepolia, et le temps de réponse mesuré de GET /api/lots/:id/historique. Si ces valeurs n'ont pas été mesurées, comment avez-vous validé vos exigences de performance du §3.3.2 ?
Q16. Extrapolons : un million de producteurs, plusieurs millions de lots par campagne, quatre à cinq transitions chacun. Quel serait le coût annuel sur le mainnet Ethereum ? À combien estimez-vous le coût par lot, et qui le paie — le producteur, la coopérative, l'État ? Ordre de grandeur : même à quelques centimes par transaction, on atteint rapidement des millions d'euros par campagne. C'est l'argument décisif en faveur d'une migration vers un L2 ou une chaîne à permission — que le candidat évoque en perspective sans jamais le chiffrer.

4.3 Questions critiques sur la portée de la contribution niveau 3

Q17. [Faiblesse F] Votre « triple verrou » comporte deux niveaux contournables par construction et un seul niveau contraignant. N'est-ce pas simplement une validation métier correctement placée dans le smart contract, plutôt qu'une contribution originale ? Qu'apporte le niveau 2 (API) que le niveau 3 n'apporte pas déjà ? Réponse défendable : l'API fait échouer vite et à coût nul, avant de dépenser du gas ; le niveau 1 améliore l'UX. Mais il faut cesser de présenter cela comme trois garanties de sécurité indépendantes.
Q18. Votre §6.4 avance comme résultat que « le taux de transactions non conformes est nul par construction ». Est-ce un résultat expérimental ou la reformulation de votre spécification ? Quel indicateur, mesurable et falsifiable, permettrait réellement d'évaluer l'efficacité anti-fraude de votre système ? Attendu : écart entre prix déclaré et prix réellement perçu (enquête terrain auprès des producteurs), taux de tentatives rejetées, part des volumes effectivement tracés, taux d'adoption. C'est-à-dire une évaluation qui sorte du système lui-même.
Q19. [Angle mort K] Vous inscrivez sur un registre public, mondial et immuable des identités de producteurs, dans un dispositif dont la finalité est de satisfaire une réglementation européenne. Le RGPD garantit un droit à l'effacement. Comment supprimez-vous les données personnelles d'un producteur d'une blockchain immuable ? Et cette incompatibilité ne compromet-elle pas l'exportabilité de votre solution vers le marché même qu'elle vise ? Attendu : ne jamais mettre de donnée personnelle on-chain, n'ancrer que des hachages ou pseudonymes, garder l'identité en base off-chain effaçable. Le système actuel stocke des adresses wallet on-chain — reste à établir si des identifiants nominatifs y figurent aussi.
Q20. [Angle mort N] Dans votre système, c'est l'Administrateur technique qui définit les prix bord champ. Dans la réalité institutionnelle que vous décrivez au chapitre 1, ce sont le CCC et le CCA. Pourquoi confier le paramètre le plus sensible du système à un rôle sans légitimité réglementaire ? Et comment modélisez-vous la règle propre au CCA, qui fixe légalement un prix à au moins 60 % du cours international — donc variable en continu ?
Q21. [Angle mort O] L'interface inclusive figure parmi vos quatre contributions principales. Combien de producteurs l'ont testée ? Sans test utilisateur, sur quelle base affirmez-vous qu'elle est accessible à un public à faible littératie numérique ? Quel protocole d'évaluation auriez-vous mis en place ? Attendu : reconnaissance franche, protocole envisageable = 8 à 12 producteurs, tâches chronométrées, taux de réussite, SUS, observation directe. Un test avec cinq utilisateurs révèle déjà l'essentiel des problèmes d'usage.
Q22. Vous affirmez que « le système ne présente pas de point de défaillance unique ». Il dépend de Render, Neon, Pinata, Alchemy, Firebase et Resend. Que se passe-t-il concrètement si Render est indisponible ? Un producteur peut-il enregistrer une récolte ?
Q23. Votre contrat est déployé sur Sepolia. Ropsten, Rinkeby, Kovan et Goerli ont tous été dépréciés puis arrêtés. Que devient votre « historique immuable » si Sepolia est mis hors service ? L'immutabilité que vous revendiquez est-elle réelle en l'état ?

4.4 Questions prospectives niveau 4 — clôture

Q24. Votre perspective la plus prometteuse est le couplage avec le Mobile Money : lier la validation de la transaction au paiement effectif. Cela résoudrait-il le problème du « garbage in » ? Un producteur pourrait-il tout de même être contraint de rétrocéder une partie en espèces ? Excellente question de clôture : la preuve de paiement électronique constitue une vraie ancre factuelle, mais la contrainte hors système demeure. Écouter la lucidité de la réponse.
Q25. Si vous deviez industrialiser AgriTrace à l'échelle nationale, quelle architecture blockchain retiendriez-vous, et pourquoi ? Chiffrez l'arbitrage entre Ethereum L1, un L2 (Polygon, Arbitrase), et Hyperledger Fabric, sur les critères coût, débit, gouvernance et auditabilité par un tiers européen.
Q26. Quelle est, selon vous, la condition non technique qui déterminera le succès ou l'échec d'un tel système en Côte d'Ivoire ? Attendu : mandat institutionnel du CCC/CCA, adhésion des coopératives, incitation économique pour les acheteurs, alphabétisation numérique, couverture réseau. Le candidat a les éléments dans son chapitre 1 : voir s'il sait les mobiliser en synthèse.

5. Grille de notation indicative

CritèrePoidsAppréciationJustification
Qualité rédactionnelle et structure15 %Très bonProgression logique, chaînage inter-chapitres explicite, annexes utiles. Réserve : titre de couverture déformé, chapitre 6 sous-dimensionné.
Ancrage contextuel et documentaire20 %ExcellentPoint fort du mémoire. Sources institutionnelles primaires, textes légaux, diagnostic REDD+, données de campagne actuelles. Rare à ce niveau.
État de l'art scientifique15 %SatisfaisantRéférences récentes et indexées, mais chapitre 2 court et descriptif ; peu de positionnement critique d'AgriTrace face aux travaux cités.
Conception et architecture20 %SatisfaisantArbitrage on-chain/off-chain maîtrisé, modélisation institutionnelle intelligente. Mais : pas d'agrégation de lots, pas de géolocalisation, divergence du modèle de prix, contrôle d'accès non décrit.
Validation et évaluation20 %InsuffisantOnze tests manuels, zéro test automatisé, aucune mesure chiffrée, aucun audit de sécurité, aucun test utilisateur, indicateur anti-fraude tautologique.
Recul critique10 %BonNuances explicites sur la portée du dispositif, contraintes subies documentées, limites reconnues. Mais angles morts majeurs non vus : RGPD, confidentialité commerciale, coût mainnet, contradiction sur la signature.
Position d'ensemble : mémoire d'ingénierie appliquée avec un ancrage contextuel de très bon niveau et une réalisation réellement fonctionnelle et vérifiable. Le déséquilibre est net entre la qualité de l'analyse amont et la faiblesse de la validation aval. La soutenance se jouera sur Q7 (signature des transactions), Q9 (agrégation de lots) et Q11 (géolocalisation EUDR) : ces trois points touchent des revendications du mémoire que l'implémentation ne soutient pas. Un candidat qui les reconnaît franchement et sait dire comment y remédier démontre plus de maturité qu'un candidat qui les défend.

6. Recommandations de correction avant dépôt définitif

  1. Corriger la page de garde : titre déformé (« A GRITRACE », « AG RICOLES ») et grades du jury (« Maître de Conférences » et non « Maître-Conférence »). La ligne « Examinateur » sera renseignée après désignation du jury : rien à corriger.
  2. Lever la contradiction sur la signature : décrire exactement le modèle de clés déployé et corriger le §3.3.2 en conséquence ; la non-répudiation ne peut pas être revendiquée dans un modèle custodial.
  3. Retirer ou étayer la revendication EUDR : soit ajouter une entité Parcelle géolocalisée au modèle, soit reformuler en « le système constitue un socle sur lequel la géolocalisation exigée par l'EUDR pourrait être greffée ».
  4. Traiter l'agrégation de lots, au minimum comme limite explicite dans la section « Limites » — c'est le verrou fonctionnel principal de la traçabilité cacao.
  5. Historiser les prix on-chain par campagne et référencer la campagne dans le lot, pour aligner le contrat sur le modèle relationnel.
  6. Initialiser le constructeur à zéro et interdire toute validation tant qu'aucun prix officiel n'a été défini.
  7. Documenter le contrôle d'accès du smart contract (rôles, modificateurs) — ou l'ajouter s'il est absent.
  8. Ajouter une suite de tests Hardhat (au minimum : rejet sous-prix, transitions de statut interdites, contrôle d'accès, périmètre CCC/CCA) et publier la couverture.
  9. Chiffrer le §6.4 : gas par opération, latence médiane et p95, temps de réponse API, projection de coût mainnet. Une section « performances » sans chiffres doit être renommée ou complétée.
  10. Ajouter une section « Limites juridiques » traitant le RGPD et la confidentialité commerciale — ce sont des obstacles au déploiement réel plus déterminants que les obstacles techniques.
  11. Déplacer les logos (Fig. 5.1, 5.2) hors de la liste des figures et publier le dépôt de code.