Newer
Older
| GHERNAOUT | Massiles |
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
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
## 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).
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.
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
## 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).