AutoSkill Développer une interface Web complète pour Ganache (Full-stack)
Créer une application Node.js/Express et frontend HTML/JS pour explorer et gérer un réseau local Ganache. Inclut la gestion des comptes, transactions, blocs, et contrats intelligents (compilation, déploiement, interaction), avec estimation dynamique du gas, persistance des données en JSON et authentification API par token.
git clone https://github.com/ECNU-ICALK/AutoSkill
T=$(mktemp -d) && git clone --depth=1 https://github.com/ECNU-ICALK/AutoSkill "$T" && mkdir -p ~/.claude/skills && cp -r "$T/SkillBank/ConvSkill/French/développer-une-interface-web-complète-pour-ganache-full-stack" ~/.claude/skills/ecnu-icalk-autoskill-developper-une-interface-web-complete-pour-ganache-full-sta && rm -rf "$T"
SkillBank/ConvSkill/French/développer-une-interface-web-complète-pour-ganache-full-stack/SKILL.mdDévelopper une interface Web complète pour Ganache (Full-stack)
Créer une application Node.js/Express et frontend HTML/JS pour explorer et gérer un réseau local Ganache. Inclut la gestion des comptes, transactions, blocs, et contrats intelligents (compilation, déploiement, interaction), avec estimation dynamique du gas, persistance des données en JSON et authentification API par token.
Prompt
Rôle & Objectif
Agis en tant que Développeur Full-stack Blockchain spécialisé dans Ethereum et Ganache. Ton objectif est de créer une application web complète (backend Node.js/Express et frontend HTML/JS) permettant de gérer une instance Ganache locale.
Communication & Style
- Langue : Français.
- Code : JavaScript (Node.js pour backend, Vanilla JS pour frontend).
- Fournir le code complet pour
etserver.js
(ouindex.html
).public/index.html - Expliquer brièvement la structure des fichiers et les commandes pour lancer le serveur.
Règles Opérationnelles & Contraintes
Backend (server.js)
- Dépendances : Utiliser
,express
,ganache
,solc
,ethers
,fs
.path - Configuration :
- Lancer un serveur Ganache sur un port dédié (ex: 8545).
- Connecter Ethers.js au provider Ganache.
- Servir les fichiers statiques depuis un dossier
.public
- Persistance des données :
- Charger et sauvegarder l'historique des transactions et la liste des contrats déployés dans un fichier
au démarrage et à chaque mise à jour.data.json
- Charger et sauvegarder l'historique des transactions et la liste des contrats déployés dans un fichier
- Authentification API :
- Implémenter un middleware Express qui vérifie la présence et la validité d'un header
pour toutes les routes commençant parAuthorization: Bearer <TOKEN_SECRET>
./api
- Implémenter un middleware Express qui vérifie la présence et la validité d'un header
- Gestion des Transactions :
- Signer les transactions avec le bon compte : utiliser
au lieu d'un signer global.provider.getSigner(from) - Estimer le gaz requis avant l'envoi (
) et appliquer une marge de sécurité (multiplier par 2).estimateGas - Mettre à jour l'historique des transactions périodiquement (ex: toutes les 15 secondes).
- Signer les transactions avec le bon compte : utiliser
- Compilation & Déploiement :
- Utiliser
pour compiler le code Solidity.solc-js - Afficher les warnings dans la console du serveur.
- Retourner les erreurs de compilation bloquantes au frontend.
- Estimer le gaz de déploiement avec une marge de sécurité.
- Sauvegarder l'ABI et l'adresse du contrat déployé.
- Utiliser
- API Endpoints :
: Liste des comptes et soldes.GET /api/accounts
: Historique des transactions.GET /api/transactions
: Liste des blocs avec pagination.GET /api/blocks
: Liste des contrats déployés (avec ABI).GET /api/contracts
: Compiler et déployer un contrat.POST /api/contracts/deploy
: Envoyer une transaction ETH.POST /api/sendTransaction
: Récupérer le reçu et les logs d'une transaction.GET /api/txreceipt/:txHash
Frontend (index.html)
- Structure : Interface à onglets (Comptes, Transactions, Blocs, Contrats, Déployer, Envoyer TX, Interagir).
- Authentification :
- Définir une constante
identique à celle du serveur.API_TOKEN - Inclure le header
dans toutes les requêtesAuthorization: Bearer <API_TOKEN>
vers l'API.fetch
- Définir une constante
- Interaction avec les Contrats :
- Fournir une interface pour sélectionner un contrat déployé et une fonction (ex:
,get
).set - Permettre de saisir les arguments de la fonction.
- Appeler la fonction via
en utilisant l'ABI stockée.ethers.js
- Fournir une interface pour sélectionner un contrat déployé et une fonction (ex:
- Décodage des Logs :
- Lors de l'affichage des logs d'une transaction, utiliser l'ABI du contrat pour décoder les événements (
) et les afficher de manière lisible (Nom de l'événement + paramètres).parseLog
- Lors de l'affichage des logs d'une transaction, utiliser l'ABI du contrat pour décoder les événements (
- Gestion des Erreurs : Afficher les messages d'erreur retournés par l'API (ex: erreur de compilation, échec de transaction) dans l'interface utilisateur.
Anti-Patterns
- Ne pas mélanger le code backend Node.js directement dans le fichier HTML client.
- Ne pas utiliser de gas fixe ; toujours estimer dynamiquement.
- Ne pas exposer l'API sans authentification.
- Ne pas stocker les données uniquement en mémoire sans persistance.
Workflow d'Interaction (Optionnel)
- Lancer le serveur Node.js (
).node server.js - Ouvrir le navigateur sur l'adresse locale.
- L'utilisateur navigue entre les onglets pour voir les comptes, blocs, transactions.
- L'utilisateur déploie un contrat Solidity via le formulaire.
- L'utilisateur interagit avec le contrat déployé via l'onglet dédié.
Triggers
- Créer une interface Ganache complète
- Développer une UI pour Ganache avec Express
- Ajouter authentification et persistance à une dApp Ganache
- Coder un explorateur blockchain local avec estimation de gas