Audit de sécurité des contrats intelligents
Examen de sécurité indépendant et évaluation architecturale du protocole Arboreteum.
1. Résumé
Arboreteum (ARM) est un jeton utilitaire ERC-20 évolutif intégrant un mécanisme de tarification à courbe de liaison continue, une gradation automatique de la liquidité Uniswap V2 (à un seuil de 20 ETH), des frais de transfert configurables et un contrôle d'accès basé sur les rôles via le standard proxy UUPS d'OpenZeppelin.
Le code source présente une architecture très propre, un respect rigoureux des modèles de sécurité de mise à niveau (tels que la désactivation des initialiseurs dans le constructeur d'implémentation) et une optimisation efficace du gaz grâce à des erreurs personnalisées.
2. Architecture et mécanismes de base
A. Évolutivité et Sécurité
- Verrouillage du constructeur : Le constructeur d'implémentation exécute correctement _disableInitializers() pour empêcher l'initialisation directe du contrat logique.
- Mises à niveau contrôlées : Les mises à niveau sont restreintes par la surcharge _authorizeUpgrade, nécessitant le rôle UPGRADER_ROLE.
- Gestion des versions : Intègre une logique de réinitialisation versionnée (initializeV5) pour mettre à jour en toute sécurité les paramètres de la courbe après le déploiement.
B. Courbe de liaison & Graduation de la liquidité
- Tarification dynamique : Les coûts d'achat et les rendements de vente s'ajustent précisément en fonction des variations de l'offre en circulation grâce à des facteurs d'échelle précis.
- Graduation DEX automatisée : Dès que totalRaised atteint ou dépasse le GRADUATION_THRESHOLD (20 ETH), un gestionnaire autorisé peut déclencher finalizeGraduation(). Cette opération déploie 80 % de l'ETH du contrat et des jetons associés sur Uniswap V2, envoie l'ETH restant au destinataire des frais et bloque les jetons LP à l'adresse de destruction (0x0000...dEaD).
3. Contrôle d'accès Matrice des privilèges
| Rôle | Fonctions associées | Niveau de sécurité |
|---|---|---|
| Rôle d'administrateur par défaut | pause(), reprise(), retrait d'urgence ETH() | Confiance élevée |
| Rôle de gestionnaire | finaliser la remise des diplômes(), définir les frais() | Moyen Confiance |
| Rôle_UPGRADER | initializeV5(), Mises à niveau de la logique proxy | Confiance critique |
4. Constatations et recommandations
- Dérapage LP fixe (Information) : La fonction _graduate() utilise un paramètre lpSlippageBps fixe (5 %). L'ajout d'une fonction de définition restreinte au gestionnaire pour cette valeur dans les futures mises à jour offre une flexibilité utile en cas de congestion du réseau.
- Paiements externes via .call : Les distributions de devises natives utilisent la fonction `.call` de bas niveau, qui est protégée contre les limites de gaz, à condition que les destinataires des frais désignés soient des contrats ou des EOA correctement configurés et capables de recevoir des transferts natifs.
- Avertissements du compilateur statique : Les avertissements standard de l'explorateur de blocs relatifs à des cas limites mineurs de gestion de l'optimiseur Solidity sont informatifs et n'ont aucun impact sur la sécurité d'exécution actuelle.
5. Conclusion
L'architecture du protocole Arboreteum est structurellement saine, propre et correctement optimisée pour un déploiement sur Arbitrum One. Le maintien de règles de sécurité strictes concernant les clés privées des rôles privilégiés garantit le bon fonctionnement du protocole.











