# Non-Fungible Token Dufy | Nom | Prénom | |---------|--------| | GHERNAOUT | Massiles | Le TP est à réaliser individuellement. ![coverage](https://www-apps.univ-lehavre.fr/forge/gm213204/nft.sol/badges/main/coverage.svg?job=test) ## Présentation Raoul Dufy [2], célèbre pour ses peintures colorées et vives, ainsi que ses illustrations et motifs textiles, a laissé une œuvre artistique significative. Ce projet propose d'explorer comment les œuvres d'art, en particulier des illustrations inspirées du style de Dufy, peuvent être transformées en NFT (tokens non fongibles) [1] et vendues sur la Blockchain tout en assurant la protection des droits d'auteur et la mise en place d'un système de redevances pour l'artiste ou ses ayant droits. Cela permettrait de perpétuer l'héritage de Dufy à l'ère numérique tout en explorant le potentiel économique des NFT. Le projet vise à créer un Smart Contract pour la vente de NFT représentant des illustrations dans le style de Raoul Dufy. Chaque illustration sera unique et authentifiée (à l'aide d'une empreinte numérique) grâce à la Blockchain. Le Smart Contract implémentera également un système de royalties, garantissant que l'artiste ou ses ayants droit reçoivent une commission à chaque revente de l’œuvre numérique, même après la vente initiale. - [1] « NFT - Définitions, synonymes, prononciation, exemples | Dico en ligne Le Robert ». [En ligne]. Disponible sur: https://dictionnaire.lerobert.com/definition/nft - [2] « Raoul Dufy — Wikipédia ». [En ligne]. Disponible sur: https://fr.wikipedia.org/wiki/Raoul_Dufy ## Architecture du projet ```mermaid flowchart TB subgraph Backend["Backend (Hardhat)"] Compile["Compilation"] Test["Tests unitaires"] Node["Nœud local (RPC)"] Deploy["Déploiement Ignition"] Compile --> Test Test --> Node Node --> Deploy end subgraph Contract["Smart Contract DufyNFT"] ERC721["ERC-721"] Fingerprint["Empreinte par token"] Royalty["Royalties EIP-2981"] Sales["Ventes on-chain"] ERC721 --> Fingerprint ERC721 --> Royalty ERC721 --> Sales end subgraph Frontend["Frontend (Dapp)"] React["React + Vite"] Wagmi["wagmi + viem"] UI["Interface: mint, vente, achat, annulation, vérif. empreinte"] React --> Wagmi Wagmi --> UI end MetaMask["MetaMask"] Deploy --> Contract Contract --> Frontend UI <--> MetaMask MetaMask <--> Node ``` Voir [docs/FLOW.md](docs/FLOW.md) pour les diagrammes détaillés du flux (setup, vente, vérification empreinte). ## Restitution Il est nécessaire de tester le Smart Contract, il est donc demandé de rédiger des tests unitaires ainsi que de la documentation à propos du Smart Contract mais aussi de l'application décentralisée. ## Prérequis - **Node.js** (recommandé : [nvm](https://github.com/nvm-sh/nvm), puis `nvm install node` et `nvm use node`). ## Installation À la racine du projet : ```bash npm install ``` ## Compilation ```bash npm run compile ``` ## Tests unitaires ```bash npm test ``` Les tests (Mocha/Chai) couvrent le déploiement, le mint, l’empreinte numérique, les royalties EIP-2981, la mise en vente, l’achat et l’annulation de vente. ## Déploiement (réseau local) 1. Lancer le nœud Hardhat dans un terminal : ```bash npm run node ``` 2. Dans un autre terminal, déployer le contrat : ```bash npm run deploy ``` Noter l’adresse du contrat affichée (ex. `DufyNFTModule#DufyNFT - 0x...`). ## Application décentralisée (Dapp) La dapp (React + wagmi) permet de se connecter avec MetaMask, d’afficher les NFTs (tokenURI, empreinte), de minter (owner), de mettre en vente, d’acheter et d’annuler une vente. Elle vérifie l’empreinte numérique pour chaque token affiché (fetch du JSON via tokenURI, comparaison du hash avec la fingerprint on-chain) et affiche « Empreinte OK », « Empreinte invalide » ou « Non vérifiable ». Les erreurs du contrat sont décodées et affichées en français. 1. Configurer MetaMask : réseau personnalisé avec RPC `http://127.0.0.1:8545` et Chain ID `31337`. 2. Dans le dossier `dapp/`, créer `.env` avec l’adresse du contrat déployé : ``` VITE_CONTRACT_ADDRESS=0x... ``` 3. Lancer la dapp : ```bash cd dapp && npm install && npm run dev ``` Ouvrir l’URL indiquée (ex. http://localhost:5173). Voir [docs/DAPP.md](docs/DAPP.md) pour le détail (configuration, utilisation, dépannage). ## CI/CD Une pipeline GitLab (`.gitlab-ci.yml`) exécute `npm ci`, `npm run compile` et `npm run test` sur les branches et merge requests. ## Documentation - **[docs/SMART_CONTRACT.md](docs/SMART_CONTRACT.md)** : objectif du contrat, rôles, fonctions (mint, listForSale, buy, cancelListing, royaltyInfo, nextTokenId), format de l’empreinte, royalties EIP-2981, événements et erreurs. - **[docs/DAPP.md](docs/DAPP.md)** : configuration réseau, lancement de la dapp, utilisation (connexion, mint, vente, achat, annulation, vérification empreinte, messages d’erreur). - **[docs/FLOW.md](docs/FLOW.md)** : diagrammes Mermaid du flux projet (setup, cycle de vente, vérification de l’empreinte).