Les proxys : une bénédiction à double tranchant
Le smart contract, ou “contrat intelligent” en français, est un programme autonome qui exécute automatiquement les termes d’un contrat dès que les conditions préétablies sont remplies. Cela élimine la nécessité d’un intermédiaire et offre une plus grande efficacité et une réduction des coûts.
Cependant, ces contrats, bien qu’efficaces, ont aussi leur limites. Du fait de leur immutabilité, tout bug ou erreur dans leur code demeure éternellement. Si un développeur commet une erreur dans le code d’un smart contract, cette erreur demeura à jamais dans le programme. Dans le monde de la blockchain, (cela signifie que des millions, voire des milliards de dollars) peuvent être en jeu à cause d’une simple ligne de code erronée.
Comment rectifier une erreur ou mettre à jour une fonctionnalité une fois qu’un smart contract est déployé ?
La première solution, bien que rudimentaire, était la “migration de contrat“. Cela consistait à déployer un nouveau smart contract et à créer une sorte de “porte” pour transférer les actifs de l’ancien contrat vers le nouveau. Pour mieux visualiser, imaginez le monde des Cryptopunks, l’un des projets NFT les plus emblématiques sur la blockchain Ethereum. Si une imperfection était détectée dans le smart contract original gérant ces précieux NFTs, la solution aurait été de créer un nouveau contrat pour eux. Les détenteurs auraient alors dû passer par cette “porte“, effectuant une migration de leurs Cryptopunks précieux de l’ancien contrat vers le nouveau. Ce processus n’est pas seulement fastidieux, mais il exige aussi une immense confiance de la part des utilisateurs, car ils doivent effectivement envoyer leurs actifs vers un nouveau contrat, espérant qu’ils ne seront pas perdus en route.
C’est ici que le concept des smart contracts proxy prend toute son importance. Ces contrats promettent une solution élégante aux problèmes d’immuabilité, tout en préservant la confiance et la sécurité.
En se servant d’un contrat intermédiaire, le proxy, les interactions des utilisateurs sont redirigées vers une implémentation sous-jacente. Si une anomalie est identifiée dans le contrat initial, un nouveau contrat d’implémentation est créé. Le proxy peut ensuite être reconfiguré pour rediriger les interactions vers cette nouvelle version.
N’ayez pas peur, pour mieux saisir ce concept, prenons une analogie simple avec un commerce bien connu : la Fnac.
La Fnac et son Inventaire
La Fnac, en tant que magasin, possède une adresse fixe, reconnaissable et fiable. C’est cette constance qui attire et rassure les clients. Cependant, à l’intérieur, l’inventaire, constitué des produits, varie constamment : des articles sont ajoutés, d’autres sont retirés ou remplacés.
Dans cette analogie, la Fnac elle-même représenterait le “proxy”. L’adresse de la Fnac demeure inchangée, peu importe les variations de son inventaire. Quant à l’inventaire, il symbolise le “contrat d’implémentation” ou la logique du smart contract. Les modifications et les mises à jour sont effectuées sur l’inventaire, sans que l’adresse de la Fnac ne soit modifiée.
La mécanique derrière cette flexibilité est comparable à la manière dont un responsable de magasin à la Fnac pourrait confier la gestion de l’inventaire à un département spécifique tout en gardant la supervision générale. Dans le monde des smart contracts, cette délégation est réalisée grâce au mécanisme de delegatecall. Cette fonction permet à un contrat, semblable à notre responsable de magasin, d’exécuter le code d’un autre contrat, similaire au département d’inventaire, tout en conservant son propre état. Ainsi, tout comme le responsable délègue la gestion de l’inventaire sans changer l’adresse de la Fnac, le smart contract proxy utilise delegatecall pour déléguer la logique opérationnelle à un autre contrat.
Comprendre le Transparent Proxy Pattern
L’un des modèles de proxy les plus couramment utilisés est le Transparent Proxy Pattern, qui s’articule autour de trois contrats distincts :
Proxy contract : Il sert d’interface principale avec laquelle les utilisateurs interagissent.
Implementation contract : Ce contrat assure la logique et les fonctionnalités attendues.
ProxyAdmin contract : Il fait office de pont entre le contrat Proxy et le contrat Implementation.
Des outils comme le plugin OpenZeppelin Upgrades facilitent le déploiement de cette structure.
Mais qui détient réellement ces smart contracts proxies ? En général, il s’agit du développeur ou de l’entité qui gère le projet. Ils détiennent le pouvoir de rediriger le proxy vers une nouvelle version du contrat d’implémentation. Cette configuration soulève une question essentielle : sommes-nous en train de faire un pas en arrière vers la centralisation ? En confiant autant de pouvoir à une entité unique, ne risque-t-on pas de s’éloigner des principes fondamentaux de décentralisation qui caractérisent la blockchain ? Plongeons alors dans cette problématique cruciale.
Lire plus : Qu’est-ce qu’un NFT, Qu’est ce qu’un smart-contract
Un pas en arrière vers la centralisation ?
L’essence même de la blockchain est ancrée dans la décentralisation, offrant une garantie de transparence, de sécurité et d’intégrité. Cependant, en accordant à une seule entité la capacité de modifier la logique d’un smart contract par le biais d’un proxy, il semble qu’on s’approche d’un certain niveau de centralisation.
Ce potentiel de centralisation soulève de sérieuses préoccupations en matière de sécurité. Si l’adresse autorisée à actionner la fonction delegatecall tombe entre de mauvaises mains, les conséquences pourraient être désastreuses. Non seulement il y aurait un risque de modifications malveillantes du code, mais cela pourrait également ouvrir la porte à des détournements de fonds ou à d’autres manipulations indésirables. Ce scénario nous rappelle les dangers d’un modèle centralisé où un point unique de défaillance ou de contrôle peut compromettre l’intégrité de l’ensemble du système..
Face à ces préoccupations, des solutions innovantes ont vu le jour. De nombreux projets envisagent désormais d’utiliser les DAO (Organisations Autonomes Décentralisées) pour superviser les smart contracts proxy. Au lieu de laisser une entité unique prendre les rênes, la gouvernance d’un contrat est placée entre les mains d’une communauté. Chaque membre a son mot à dire, pouvant voter et influencer la direction du contrat.
C’est donc par le biais des DAO que la délégation, via la fonction delegatecall, est rendue plus décentralisée. Cette structure assure que toute mise à jour ou modification n’est mise en œuvre qu’après avoir obtenu le consensus de la communauté, renforçant ainsi la confiance et la sécurité autour de l’utilisation des smart contracts proxy.
Lire plus : Qu’est-ce que Ethereum, Qu’est-ce qu’une DAO
La fin de l’Immutabilité dans la blockchain ?
Eh bien, pas nécessairement. Bien que proxy offrent, sans conteste, une agilité sans précédent, permettant des ajustements et des évolutions dans un monde où la technologie et les besoins changent rapidement. Toutefois, cette flexibilité ouvre une porte à des risques potentiels de centralisation et de vulnérabilités sécuritaires. Mais avant de sonner l’alarme, reconnaissons que la communauté blockchain n’est pas restée inactive face à ces défis. L’avènement des DAO, en instaurant une gouvernance décentralisée, offre une parade prometteuse. Ainsi, même à l’ère des smart contracts proxy, la vision initiale de la blockchain – décentralisée, transparente, sécurisée – peut perdurer.
La fin de l’immutabilité? Non. Plutôt une évolution de sa définition. En résumé, la blockchain évolue, mais son essence demeure.