- Vision & Introduction
- Architecture du Système
- Choix de Conception (Design Choices)
- Fonctionnalités Clés
- Guide d'Installation & Déploiement
- Utilisation (How to Use)
- Sécurité & Gouvernance
- Structure du Projet
Cette plateforme est une solution de bout en bout pour la tokenisation d'actifs du monde réel (RWA), tels que l'or, l'argent et les diamants. L'objectif est de combler le fossé entre les actifs physiques tangibles et la finance décentralisée (DeFi) en apportant liquidité, transparence et conformité réglementaire sur la blockchain.
La plateforme permet :
- La représentation d'actifs fongibles (Or/Argent via ERC-20).
- La représentation d'actifs uniques (Diamants via ERC-721).
- Un contrôle strict des accès via un registre de conformité on-chain.
- Un marché secondaire intégré via un Automated Market Maker (AMM).
Le projet adopte une architecture Full-Stack Décentralisée :
- Smart Contracts (Layer 1 - Logic) : Écrits en Solidity, utilisant la suite OpenZeppelin pour la sécurité. Ils gèrent la logique des tokens, la conformité et l'échange de liquidité.
- Backend / Indexeur (Layer 2 - Data) : Une application Node.js/Express utilisant Viem pour écouter les événements de la blockchain en temps réel. Les données sont stockées dans une base SQLite pour fournir une API rapide au frontend.
- Frontend (Layer 3 - UI) : Une interface moderne sous Next.js 15+, intégrant RainbowKit et Wagmi pour une connexion fluide aux portefeuilles Web3 (MetaMask).
Nous avons choisi les standards ERC-20 pour les métaux précieux car ils sont divisibles et fongibles, facilitant l'apport de liquidité. Pour les diamants, l'ERC-721 est utilisé car chaque pierre possède des caractéristiques uniques (poids, pureté, certificat) stockées via des URI de métadonnées.
Contrairement aux tokens classiques, nos contrats MineralToken et DiamondCollection surchargent la fonction interne _update. Chaque transfert déclenche une vérification auprès du ComplianceRegistry.
- Whitelist : Seuls les utilisateurs vérifiés peuvent détenir ou échanger des actifs.
- Blacklist : Permet de geler les avoirs en cas d'activité suspecte ou de vol.
Pour garantir la liquidité immédiate sans dépendre de carnets d'ordres externes, nous avons implémenté un AMM basé sur le produit constant ().
- Frais : Une commission de 0.3% est appliquée sur chaque swap pour rémunérer le protocole ou les fournisseurs de liquidité.
- Sécurité des prix : L'AMM utilise une protection contre le "slippage" via un paramètre
minAmountOut.
Interroger directement la blockchain pour l'historique des transactions est lent et coûteux. Notre backend agit comme un indexeur léger qui surveille les événements SwapEthForToken et SwapTokenForEth pour maintenir une base de données locale des volumes et des prix.
- Minting : Seul l'administrateur peut émettre de nouveaux tokens correspondant à des actifs physiques audités.
- Proof of Reserve : Un oracle simple (
SimpleOracle) permet de mettre à jour le prix de référence des actifs on-chain.
- Swap ETH ↔ Token : Interface intuitive pour convertir de l'Ether en Or/Argent tokenisé instantanément.
- Gestion de Liquidité : Possibilité d'ajouter ou de retirer des réserves pour stabiliser le marché.
- Node.js v20+
- MetaMask/Rabby (configuré sur Sepolia ou Localhost)
📝 Docker n’est pas fourni dans ce dépôt (pas de docker-compose). Utilisez le lancement manuel ou PM2.
pm2 start ecosystem.config.js
pm2 save
pm2 startup- Frontend :
http://localhost:3100 - Backend :
http://localhost:3101
- Installer les dépendances :
npm install - Lancer la blockchain locale (optionnel) :
cd contracts
npx hardhat node
- Déployer les contrats :
npm run deploy:local
- Lancer les services :
- Backend :
cd backend && npm run dev - Frontend :
cd frontend && npm run dev
Sepolia (recommandé)
- RPC URL :
https://sepolia.infura.io/v3/<YOUR_KEY>ouhttps://rpc.sepolia.org - Chain ID :
11155111 - Symbole :
ETH
Local Hardhat (optionnel)
- RPC URL :
http://localhost:8545 - Chain ID :
31337 - Symbole :
ETH
Pour tester les fonctionnalités d'administration (Mint, Whitelist) :
- Ajoutez votre adresse dans
contracts/.env:NEW_OWNER=0x... - Exécutez :
npm run claim-ownership. Cela vous donnera le contrôle des contrats et des fonds de test (1000 ETH locaux).
- Étape 1 : L'admin vous ajoute à la Whitelist via le panel admin.
- Étape 2 : Allez sur l'onglet Trade pour swapper des ETH contre des tokens de minéraux.
- Étape 3 : Visualisez votre Portfolio mis à jour en temps réel grâce à l'indexeur.
- Ownable : Toutes les fonctions critiques (minting, modification de la liste de conformité, mise à jour de l'oracle) sont protégées par le modificateur
onlyOwnerd'OpenZeppelin. - Protection contre la Réentrancée : Les transferts de fonds dans l'AMM utilisent le pattern
callavec vérification de succès pour éviter les vulnérabilités classiques. - Audit de Conformité : Aucun transfert ne peut être effectué si l'un des participants est sur la
blacklist.
.
├── contracts/ # Smart Contracts Solidity & Scripts Hardhat
│ ├── contracts/ # Logique métier (AMM, Tokens, Compliance)
│ └── scripts/ # Déploiement et maintenance
├── backend/ # API Express & Indexeur Viem/SQLite
├── frontend/ # Interface Next.js (Tailwind + DaisyUI)