OpenZeppelin, le développement sécurisé de smart contracts
Développer des smart-contracts n'est pas aisé. En effet, au-delà des bases de programmation traditionnelles, il est nécessaire de développer des connaissances autour de la plateforme sur laquelle les smart-contracts vont être déployés. Par exemple il est important de comprendre les mécanismes de l'EVM pour déployer des smart-contracts Ethereum, de veiller à la sécurité de ces derniers une fois déployés, etc. C'est pour ces raisons qu'il est important de se simplifier la tâche dès que possible et d'utiliser les outils disponibles pour faciliter le développement de smart-contracts. Aujourd'hui je vous présente une entreprise qui a dédié son activité à simplifier la vie des développeurs blockchain, OpenZeppelin.
Qu'est-ce qu'OpenZeppelin ?
OpenZeppelin est une entreprise qui développe des outils dédiés à la programmation autour des registres distribués et des réseaux décentralisés. Leur expertise la plus reconnue dans la communauté est liée à leur outil de développement de smart-contracts Solidity qu'ils ont rendus open source et donné à la communauté. Ainsi OpenZeppelin a développé une API, un framework et rendu publics de nombreux standards de smart-contracts, simplifiant ainsi le développement des smart-contracts les plus sûrs pour les utilisateurs. Ils proposent également des services d'audit de smart-contracts ainsi qu'un jeu sur navigateur dédié à l'apprentissage de la programmation Solidity.
OpenZeppelin est un acteur historique de la communauté Ethereum puisque l'entreprise a été fondée en 2015. Ils ont noué au fil des années des partenariats solides avec de grands acteurs de l'écosystème comme Coinbase, Brave ou BitGo. On retrouve également dans la liste très fournie des partenaires des acteurs de la finance décentralisée comme Compound, Status ou ShapeShift. Très porté sur cet aspect communautaire, OpenZeppelin a récemment ouvert un forum destiné à devenir un espace de partage. En effet vous pouvez y retrouver des discussions ou des réponses à vos questions, mais également découvrir des projets open source et des tutoriels très utiles.
Les outils proposés par OpenZeppelin
OpenZeppelin propose donc différents outils dédiés aux développeurs de smart-contracts. En effet s’ils sont principalement connus pour leurs standards largement utilisés, ce n'est pas la seule proposition de valeur de l'entreprise. Nous allons ensemble voir qu'OpenZeppelin propose également des outils de développement ainsi que des projets simples préfaits. Découvrons tout cela ensemble puisque ce sont des outils vraiment très intéressants qui pourraient simplifier le développement de beaucoup de DApps.
Les smart-contracts d'OpenZeppelin
OpenZeppelin propose à la communauté des smart-contracts réalisant des opérations et interactions génériques nécessaires aux fondations de projets de DApps. Les rendre open source n'impacte pas la valeur ajoutée de l'entreprise et bien au contraire à largement participer au développement de cette dernière. En effet OpenZeppelin est aujourd'hui une référence dans le développement de smart-contracts et il est courant de retrouver leurs contrats au cœur des projets de la communauté.
Nous retrouvons dans ces smart-contracts rendus publics les incontournables ERC-20, la mise en place d'une ICO ainsi que de nombreux autres contrats aux applications multiples. Si vous pouvez aller récupérer le code des smart-contracts au sein de leur repository open source, OpenZeppelin a également développé une bibliothèque de ces contrats. Ainsi il ne vous suffit que de télécharger cette bibliothèque et de l'utiliser dans votre projet de manière très simple.
Si vous souhaitez progresser dans la programmation Solidity, je vous conseille fortement la lecture de leur dépôt Github. En effet une des clés de l'apprentissage en programmation est la lecture et la compréhension du code d'autres développeurs plus expérimentés. Vous allez pouvoir être confronté à des cas que vous n'aviez peut être pas imaginé et étudier des standards de codes efficaces.
Le SDK d'OpenZeppelin
Un SDK, ou kit de développement en français, est un regroupement d'outils pour développeurs dédié à faciliter le développement d'un logiciel, ou plutôt dans notre cas, d'une application décentralisée. Il en existe de nombreux pour différents langages de programmation et types de développements. OpenZeppelin propose donc un SDK à la communauté Ethereum, dédié vous l'aurez compris au développement d'applications décentralisées. Ce dernier possède de nombreuses commandes utiles permettant de faciliter certaines opérations du développement de smart-contracts, ou tout simplement d'améliorer vos smart-contracts déjà écrits. Il s'agit donc principalement d'une invite de commandes avec lequel vous allez interagir lors du développement de votre application décentralisée.
Les commandes principales sont les suivantes :
- Create. Permet d'initialiser un contrat sur un certain réseau, comme un réseau de test par exemple en une seule commande. Vous pouvez également choisir d'exécuter une fonction immédiatement après le déploiement pour tester rapidement votre contrat.
- Send-tx. Exécute une transaction sur l'une des instances de votre smart-contract rapidement et vous fournit directement le hash de cette transaction.
- Call. Réalise tout simplement une fonction, mais l'utilité vient de la facilité de l'utilisation de la commande puisqu'elle vous propose immédiatement les contrats que vous avez déployés précédemment. La fonction vous affiche le résultat de la fonction à fin de son exécution.
- Upgrade. Vous permet de mettre à jour l'instance d'un de vos smart-contracts déployés sur le réseau de votre choix.
Si ces fonctions ne semblent pas révolutionnaires, c'est la capacité de les exécuter directement dans une invite de commande qui rend le système extrêmement intéressant. En effet cela facilite beaucoup les petites tâches de tests manuels et de mises à jour lors d'expérimentations ou de la découverte de Solidity. Lors de l'apprentissage, il est beaucoup plus aisé de travailler et de rester motivé lorsque les petites tâches vous sont largement simplifiées par des outils tels que le SDK d'OpenZeppelin.
Les starter kits
Développer une application décentralisée est une tâche complexe avec de nombreux éléments à développer. En effet il ne suffit pas de déployer des smart-contracts pour permettre à vos utilisateurs d'interagir avec ces derniers. Il faut donc en plus mettre en place une interface et un nœud Ethereum, pour établir le contact avec la blockchain et cela prend du temps de développement supplémentaire. Généralement les développeurs utilisent des outils pour aller plus vite, outils que nous avons déjà présentés sur Cryptoast.
Par exemple l'interface peut être développée en utilisant React, les smart-contracts développés et testés par le biais de Truffle Framework et Infura permettant d'interagir avec les smart-contracts depuis l'interface. Ces outils sont très utiles mais nécessitent un apprentissage ainsi des configurations en fonction des projets et peuvent sembler complexes pour les débutants. OpenZeppelin propose donc des starter kits afin de rendre le développement d'application décentralisée encore plus aisé. Vous aurez très rapidement un « Hello World! » disponible, fonctionnel que vous allez pouvoir développer en fonction de vos besoins. Mais cet outil dispose également des options pour les développeurs plus expérimentés afin d'accélérer le développement comme la compilation et le déploiement de contrats de manière automatique.
Ethernaut
Partant pour découvrir la programmation Ethereum mais vous ne savez pas trop comment vous y prendre ? Nous avions présenté sur Cryptoast différentes méthodes, et notamment le jeu CryptoZombies qui permettait d'apprendre le développement de smart-contracts de manière ludique. OpenZeppelin a développé son propre guide d'apprentissage par le jeu, il s'agit d'Ethernaut.
Il vous faudra l'extension Metamask pour pouvoir utiliser Etherenaut, et ce dernier vous fera déployer vos smart-contracts sur le réseau de test Ethereum Ropsten. Ce guide vous accompagnera dans un premier temps sur les bases de la programmation Solidity directement dans votre navigateur avec seulement l'utilisation de la console de ce dernier. L'application s'occupe d'interagir avec les smart-contracts du jeu : une fois en possession d'éthers sur le réseau en question, vous pourrez commencer à affronter les niveaux disponibles.
Ces niveaux sont composés d'une instance d'un smart-contracts que vous allez devoir analyser pour le résoudre et passer au suivant. Vous pouvez également inspecter le code ABI du contrat en question afin d'obtenir des pistes de réflexion sur le niveau en cours. Chacun des 22 niveaux actuellement disponibles possède des critères de réussites différents. Il s'agit souvent de réussir à exploiter des failles de ce dernier afin d'obtenir la propriété de tokens ou du contrat, ou de réaliser des opérations comme le vol des fonds des contrats. Pour chaque niveau, vous recevrez une liste d'opérations ou de connaissances utiles pour la réussite de ce dernier. Il ne s'agit pas de la solution, mais des pistes de recherches pour ne pas rester bloquer face à l'inconnu.
Voilà pour cette présentation de l'entreprise OpenZeppelin qui a pour objectif de simplifier au maximum le développement de smart-contracts et d'applications décentralisées. Si vous souhaitez utiliser leurs outils et que vous rencontrez des soucis, n'hésitez pas à nous contacter ou à vous rendre sur le forum communautaire d'OpenZeppelin. Des questions ou remarques à propos de cet article ? Faites-nous part de vos avis dans les commentaires ou sur les réseaux sociaux !