Etant donné que tous les calculs d'Ethereum doivent être reproduits sur tous les nœuds du réseau, l'informatique d'Ethereum est intrinsèquement coûteuse et inefficace. (En fait, les docteurs d'Ethereum sur GitHub déclarent que nous ne devrions pas attendre plus de puissance de calcul d'Ethereum que d'un téléphone de 1999.)
Donc, la sécurité sur la machine virtuelle Ethereum: la sécurité des contrats intelligents déployés sur Ethereum blockchain – est d'une importance primordiale. Toutes les erreurs coûtent de l'argent réel – qu'il s'agisse d'erreurs lancées par des contrats mal écrits ou de hackers exploitant des failles dans des contrats, comme dans le fameux DAO hack, qui a provoqué la scission d'une communauté et la création de la blockhaus Ethereum Classic. 19659003] Turing Completeness – et toute une série d'autres décisions de conception qui ont rendu Ethereum beaucoup plus capable et sophistiqué – ont un coût. La richesse d'Ethereum l'a rendu plus vulnérable aux erreurs et aux pirates.
Pour ajouter au problème, les contrats intelligents déployés sur Ethereum ne peuvent pas être modifiés. La blockchain est une structure de données immuable
Cet article et cet article approfondit la sécurité des contrats intelligents et l'écosystème des outils et des bibliothèques pour nous aider à sécuriser nos contrats intelligents.
Regardons quelques améliorations incroyables à notre jeu d'outils que nous pouvons utiliser aujourd'hui pour utiliser les meilleures pratiques que l'environnement Solidité peut offrir.
Les outils dans le jeu d'outils d'un développeur Ethereum sont la bibliothèque de OpenZeppelin. C'est un framework composé de nombreux modèles de code Solidity et de modules de contrats intelligents, écrits de manière sécurisée. Les auteurs sont les auditeurs de Solidity et les consultants eux-mêmes, et vous pouvez lire à propos d'un audit par un tiers de ces modules ici . Manuel Araoz de Zeppelin Solutions, une société argentine derrière OpenZeppelin, décrit les principaux modèles et considérations de sécurité de Solidity.
OpenZeppelin s'impose comme un standard de l'industrie pour la base de Solidité réutilisable et sécurisée (MIT) code, qui peut facilement être déployé en utilisant Truffle . Il s'agit de contrats intelligents qui, une fois installés via npm, peuvent facilement être importés et utilisés dans nos contrats.
Le Truffle Framework a publié un tutoriel d'utilisation OpenZeppelin à la truffe et à la ganache .
Ces contrats sont destinés à être importés et leurs méthodes sont censées être remplacées, au besoin. Les fichiers ne doivent pas être modifiés en eux-mêmes
Patterns ICO
La bibliothèque OpenZeppelin contient un ensemble de contrats pour publier des jetons sur la plateforme Ethereum – pour les jetons ERC20 incluant un contrat BasicToken, BurnableToken, CappedToken. C'est un jeton mintable avec une limite fixe, MintableToken, PausableToken, avec laquelle les transferts de jetons peuvent être suspendus. Ensuite, il y a TokenVesting, un contrat qui peut libérer son solde symbolique progressivement comme un plan d'acquisition typique, avec une période de falaise et d'acquisition et plus encore.
Il existe aussi des contrats pour ERC721 jetons – ou jetons uniques non-fongibles du type CryptoKitties.
Les jetons ERC827 contrats, standard pour l'envoi de données avec des jetons transactionnels, sont ]
Il existe aussi une série de contrats crowdsale – contrats pour la conduite des offrandes initiales de pièces de monnaie. Ceux-ci peuvent enregistrer des achats livrer / émettre des jetons aux acheteurs, transférer des fonds ETH . Il existe des fonctions de validation et de traitement des achats de jetons
Le contrat FinalizableCrowdsale prévoit l'exécution d'une logique après-vente. PostDeliveryCrowdsale permet le gel des retraits jusqu'à la fin de la crowdsale. RefundableCrowdsale est une prolongation du contrat Crowdsale qui ajoute un objectif de financement, et la possibilité pour les utilisateurs d'obtenir un remboursement si l'objectif n'est pas atteint .
Contrats destructibles peut être détruit par le propriétaire, et avoir tous les fonds envoyés au propriétaire. Il existe également des contrats pour la mise en œuvre de plausibilité pour les contrats d'enfants
OpenZeppelin fournit de nombreux assistants et utilitaires pour mener des OIC – comme un contrat qui permet de récupérer des jetons ERC20 ] envoyé par erreur à une adresse ICO au lieu de ETH. Un contrat héréditaire prévoit le transfert de propriété à un autre propriétaire dans certaines circonstances. Le contrat propriétaire a une adresse de propriétaire, et fournit des autorisations / autorisations de base et transfert de propriété.
Le contrat RBAC fournit des utilitaires pour le contrôle d'accès basé sur les rôles. Nous pouvons assigner des rôles différents à des adresses différentes, avec un nombre illimité de rôles.
Zeppelin fournit également un exemple de projet Truffle starter crowdsale qui n'a pas encore été audité, il est donc préférable de l'utiliser comme introduction à OpenZeppelin. Il est facile de commencer avec un crowdsale et un token fast.
ZeppelinOs
ZeppelinOs est un open-source, décentralisé plate-forme d'outils et de services en plus de l'EVM pour développer et gérer des applications de contrats intelligents en toute sécurité .
En effet, il s'agit d'une sorte de couche middleware au-dessus de EVM, qui serait un peu plus loin que l'OpenZeppelin actuel cadre. Ce que promet Zeppelin Solutions ici permet aux développeurs d'opter pour la mutabilité de leur code déployé à travers des modèles d'évolutivité . Ceux qui écrivent des contrats intelligents pour l'EVM savent que l'une des préoccupations / restrictions est l'immutabilité des contrats déployés: une fois sur la chaîne de blocs, les contrats ne peuvent pas être modifiés. C'est l'une des choses qui rendent la promesse de ZeppelinOs intéressante.
Jusqu'à présent, pour "mettre à jour" un contrat, il fallait déployer deux contrats – un en tant que proxy avec l'interface, et l'autre en tant que la mise en oeuvre. Les fonctions du proxy seraient appelées, renvoyant les requêtes à l'implémentation. Ensuite, si une modification était nécessaire, l'implémentation est désactivée dans le proxy (une autre implémentation est reciblée, et éventuellement l'originale est détruite avec une fonction suicide
) et la nouvelle implémentation s'active de manière transparente. [19659004NousattendonsdevoirlafutureadoptiondeZeppelinOsparlacommunautéLesZeppelinSolutionssontdéjànommésentraindetournerdesjoueursnontriviauxcommeOpenBazaardistrict0xstorjiocommecertainsquiutilisentZeppelinOs
Boîtes à Truffes
Les Truffes est un environnement de développement, un cadre de test et un pipeline d'actifs pour Ethereum. C'est l'ensemble d'outils le plus complet, avec le plus de traction parmi les développeurs Ethereum. L'écosystème de Truffle comprend un certain nombre de boîtes à truffes – des plateaux qui incluent le code JavaScript frontal, des contrats Solidity et des utilitaires de workflow comme un projet webpack standard avec son ensemble d'outils – migrations, tests, pipeline de construction etc.
Certaines boîtes officiellement prises en charge sont:
Les boîtes créées par la communauté apportent également des messages d'intégration des contrats avec les applications mobiles / Status IM ou fournissent Angular et Vue.js
Ces boîtes sont intégrées à Truffle, donc nous commençons avec elles en exécutant des commandes comme truffle unbox reag
– qui va télécharger la boîte React et installer ses dépendances
TokenMarket
TokenMarket est une autre société qui a publié un référentiel de contrats Solidity et d'outils de gestion des ventes de jetons / ICO. C'est une société à responsabilité limitée incorporée à Gibraltar qui fait du conseil d'ICO. Il a été décerné "Le meilleur conseiller ICO" à Crypto-monnaie World Expo Berlin 2018
Le référentiel ICO de Tokenmarket sur GitHub dit que un de ses objectifs de conception / principes est d'utiliser ou de s'appuyer sur les contrats OpenZeppelin existants, en les qualifiant de référence des contrats Solidity. Donc, à partir de là, une grande partie de la base de code ICO de TokenMarket est basée sur la base de code d'OpenZeppelin, et ensuite elle se construit plus loin (en héritant de cette manière OOP).
TokenMarket se tient régulièrement au courant base de code en amont, OpenZeppelin. Il ajoute cependant à cela, comme suit:
- AMLtoken contrat : ce donne au propriétaire la chance de récupérer des jetons d'un participant avant que le jeton soit libéré après qu'un participant a échoué à une AML prolongée processus .
- Gnosis Wallet : fondamentalement un portefeuille multi-sig, qui nécessite le consensus de plusieurs parties pour certaines transactions
- a Central Token émis contrat.
- KYCCrowdsale : un contrat qui ne laisse entrer que des investisseurs qui ne sont pas anonymes
- Relance le contrat de Crowdsale : cela restaure un crowdsale précédent et permet de changer certains paramètres.
- Prix d'étape : ce contrat prévoit une tarification basée sur des jalons et des accords préalables à l'ICO.
Bien qu'il y ait beaucoup de code dans les dépôts dont nous parlons ici, l'EVM est complet. les contrats n'épuisent même pas à distance ses capacités complètes. Pourvu que le système – Ethereum – survive et continue d'être compétitif, avec suffisamment de gens sur le réseau, nous pouvons espérer une plus grande polyvalence dans ce que ces contrats de blockchain tentent de résoudre.
Consenys Ventures
entreprise d'investissement / d'investissement qui se profile comme une société d'investissement ange / semence dans l'espace décentralisé – et cela signifie particulièrement l'espace Ethereum. Au-delà des autres ressources qu'ils offrent à leurs entreprises protégées, ils ont mis en place un petit recueil de bonnes pratiques pour les contrats intelligents Ethereum . Bien que ce ne soit pas strictement du code, il contient encore un certain nombre d'exemples de code de Solidité.
Il s'agit surtout des meilleures pratiques de sécurité des contrats intelligents de Solidité
La liste complète de sujets va un peu au-delà de la portée de cet article, car la ressource est complète et mérite d'être lue même pour rappeler à un développeur de contrats intelligents tout ce dont ils ont besoin pour écrire un logiciel pour EVM. Et cela en particulier va si on écrit des programmes à partir de zéro (ne pas compter sur le code déjà fait et vérifié comme OpenZeppelin).
Certains articles traitent des appels externes, évitant les changements d'état après les appels externes, privilégier les appels externes, rester conscient des compromis entre les contrats abstraits et les interfaces, sans supposer que les contrats sont créés avec un équilibre nul, différencier les fonctions et les événements, la prudence de l'héritage multiple, les avertissements sur la dépendance d'horodatage et la gameabilité Construit – par exemple, avec des blocs – et beaucoup d'autres trucs avec beaucoup d'exemples de code.
Puis il y a des avertissements spécifiques aux jetons, des avertissements liés aux standards jeton, des techniques de génie logiciel, des outils de sécurité linters, etc
Ils énumèrent également les attaques connues, de ceux qui comprennent l'appel sur le code externe et les contrats, les fonctions qui pourraient être ca Dans de tels cas, des problèmes de réentrance, des conditions de concurrence interfonctionnelles, ils analysent ici toute une série de problèmes, dont certains se sont manifestés dans le DAO hack .
Ils mentionnent en outre la dépendance de l'ordre des transactions, dépendance d'horodatage, débordement d'entier et sous-débit, différentes possibilités / points d'attaques DoS, comme DoS avec limite de gaz bloc, puis envoi forcé d'Ether à un contrat; et ils analysent également les attaques historiques et obsolètes.
Conclusion
Dans cette introduction à l'écosystème, nous avons analysé quelques-unes des ressources disponibles pour écrire de bons contrats intelligents prêts à la production sur la machine virtuelle Ethereum. Cela inclut à la fois réutiliser du code vérifié et vérifié (OpenZeppelin affirme que plus de 4 milliards de dollars de crypto-monnaie sont en cours d'exécution sur ses contrats) à des ressources pratiques pour apprendre à écrire ses propres logiciels sécurisés et prêts pour la production.
n'est pas encore complet. Avons-nous oublié quelque chose qui mérite d'être mentionné? Faites-le nous savoir
Source link