Définition
EIP-2535 : définition
Aussi appelé : Diamond
L'EIP-2535, dite Diamond, est un modèle d'architecture de smart contracts dans lequel un contrat central redirige chaque appel vers plusieurs contrats de logique, appelés facettes, qu'il est possible d'ajouter, remplacer ou retirer.
Thème : Ethereum et smart contracts
Sur Ethereum, la taille du code d'un contrat est plafonnée, ce qui gêne les applications très riches en fonctionnalités. Le standard Diamond contourne cette limite : le contrat principal, le diamant, ne contient presque pas de logique. Il possède une table qui associe chaque fonction, identifiée par son sélecteur, à une facette, c'est-à-dire un contrat externe qui contient le code correspondant. Lorsqu'un utilisateur appelle une fonction, le diamant transmet l'appel à la bonne facette grâce à delegatecall.
Comme delegatecall exécute le code de la facette dans le contexte du diamant, toutes les données restent stockées dans le diamant lui-même, à une adresse unique et stable. Une fonction standard, diamondCut, permet de modifier la table de correspondance pour mettre à jour une partie du protocole sans tout redéployer. Des fonctions dites loupe permettent en outre à quiconque de lister les facettes et fonctions actives, ce qui améliore la transparence. Ce modèle est une forme avancée de contrat évolutif (upgradable). Il apporte de la souplesse aux gros projets, mais au prix d'une complexité nettement supérieure à celle d'un proxy classique, notamment dans l'organisation du stockage partagé entre facettes.
Un exemple concret
Imaginons un jeu en ligne dont le contrat gère inventaire, combats et boutique. Avec un diamant, chaque module vit dans sa propre facette. Lorsque les développeurs corrigent un bug dans le système de combat, ils remplacent uniquement la facette des combats via diamondCut, sans toucher à l'inventaire des joueurs ni changer l'adresse du contrat.
Les risques à connaître
La personne ou l'entité qui contrôle diamondCut peut changer tout le comportement du contrat, y compris de manière malveillante. Une mauvaise organisation du stockage peut provoquer des collisions qui corrompent les données. La complexité rend aussi les audits plus difficiles.
Questions fréquentes sur EIP-2535
À quoi sert un smart contract Diamond ?
Il permet de construire un protocole volumineux et modulaire derrière une seule adresse, en dépassant la limite de taille des contrats et en mettant à jour des fonctions individuellement.
Un contrat Diamond est-il plus risqué qu'un contrat classique ?
Il ajoute un risque de gouvernance, puisque son code peut être modifié, et un risque technique lié à sa complexité. Il convient de vérifier qui détient le droit de mise à jour et si celui-ci est protégé par un timelock ou un multisig.