Meilleures pratiques et modèles de conception –
La technologie de la chaîne de blocs est encore une technologie hautement expérimentale. Les choses évoluent rapidement et vous devez vous attendre à des changements constants dans le paysage de la sécurité, à mesure que de nouveaux bogues et risques de sécurité sont découverts et que de nouvelles meilleures pratiques sont développées. Suivre les pratiques de sécurité décrites dans cet article vous aidera à mieux comprendre comment concevoir des contrats intelligents Ethereum sans faille.
Le développement avec une mentalité de sécurité est extrêmement important car le coût d'une défaillance peut être élevé et les changements peuvent être difficiles. Un mécanisme de défense de base contre les vulnérabilités connues n'est donc pas suffisant. Il est recommandé d'utiliser des modèles de conception sécurisés tels que des limiteurs de débit, des stratégies de sortie ou des disjoncteurs pour protéger votre contrat contre des événements imprévus.
Prepare For Failure
Tout contrat non trivial contient des erreurs. Votre code doit donc être capable de répondre correctement aux bogues et aux vulnérabilités. Lors de l’écriture du code, tenez compte des modèles de conception de sécurité suivants.
Vérification des effets – Modèle d’interaction
Il s’agit de la règle générale lors du codage d’un contrat intelligent car il décrit comment créer une fonction. Vous commencez par valider tous les arguments et en lançant les erreurs appropriées lorsque les arguments ne s'appliquent pas à l'entrée attendue. Ensuite, vous pouvez apporter des modifications à l'état du contrat intelligent et interagir avec d'autres contrats intelligents.
L'interaction avec d'autres contrats devrait toujours être la dernière étape de votre fonction, car elle consiste principalement à transférer le contrôle à un autre contrat. Ainsi, lorsque nous cédons le contrôle, il est essentiel que le contrat actuel soit terminé et ne dépend pas de l’exécution de l’autre contrat. Voici un exemple provenant d’un contrat de vente aux enchères pour définir la fin de l’enchère à l’aide d’un booléen.
Disjoncteur
Un disjoncteur, également appelé arrêt d’arrêt, est capable d’arrêter l’exécution de fonctions à l’intérieur du contrat intelligent. Un disjoncteur peut être déclenché manuellement par des parties de confiance incluses dans le contrat, comme l'administrateur du contrat, ou en utilisant des règles de programmation qui déclenchent automatiquement le disjoncteur lorsque les conditions définies sont remplies. L'utilisation la plus courante d'un disjoncteur est la découverte d'un bogue.
L'exemple de code ci-dessus définit deux modificateurs. Le premier modificateur s'assure que toutes les actions du contrat sont suspendues lorsqu'un bug est découvert – seul l'administrateur est capable de basculer ce booléen. Cependant, nous voulons pouvoir retirer des fonds en cas de bug grave; par conséquent, le deuxième modificateur est destiné à vous permettre de retirer des fonds.
Limite de taux
Le problème que nous essayons de résoudre est une demande urgente sur une fonction donnée qui peut nuire aux performances opérationnelles d'un contrat intelligent. La solution est assez simple: nous régulons la fréquence d'exécution d'une tâche dans un délai donné. Nous pouvons également limiter la quantité d'Ether qu'un propriétaire peut retirer d'un contrat pour éviter un drainage rapide des fonds. Ou un autre exemple est la limitation du nombre de jetons émis au fil du temps au niveau du contrat: chaque mois, le contrat distribuera 10 000 jetons.
Ce code montre un modificateur de limite de taux très bas pour arrêter le contrat
Speed Bumps – Delay Contract Actions
Les ralentissements sont extrêmement utiles lorsque des événements malveillants se produisent car ils donnent à un propriétaire de contrat intelligent le temps d'agir en conséquence. Par exemple, le DAO avait un délai de 27 jours dans lequel aucune fonction ne pouvait être exécutée, laissant les fonds dans le contrat, augmentant ainsi les chances de récupération. Cependant, le ralentissement était plutôt inutile pour l'affaire DAO car aucune action de récupération n'était présente. Par conséquent, un motif de ralentissement devrait être utilisé avec un disjoncteur qui bloque le contrat, sauf la fonction de retrait. Cela garantit que les utilisateurs sont en mesure de retirer des fonds avant que l'action malveillante ne soit accomplie.
Ce contrat de solidité de Speed Bump retarde une demande de retrait de 4 semaines.
Modèle de limite de solde
de l'argent à risque lors de la codification des contrats intelligents. Un modèle de limite d'équilibre est un modèle assez facile à mettre en œuvre, mais pourtant si puissant. Le modèle surveillera la quantité d'éther dans votre contrat et rejettera les paiements lorsque le solde dépasse le maximum prédéfini.
Ce morceau de code utilise un modificateur pour limiter le solde à l'intérieur du contrat. Le modificateur est appliqué à la fonction 'dépôt' comme à celle où l'argent est accepté.
Plugin iOlite pour la conception de contrats sécurisés
Le projet iOlite est une plateforme de veille pour permettre aux non-programmeurs pour rédiger des contrats intelligents sécurisés en langage naturel qu'ils peuvent utiliser pour créer des applications en chaîne de blocs.
En outre, l'équipe d'iOlite a développé un plug-in pour les développeurs qui transforme n'importe quel langage de programmation en code Solidity. aux extraits de code définis par les experts de Solidity.
Le plug-in pour Visual Studio Code peut être trouvé sur le marché . La documentation complète peut être consultée sur Github .
The Bottom Line
Ethereum permet aux contrats intelligents Solidity de fonctionner de manière autonome sur la blockchain. Cependant, cela nécessite un code hautement sécurisé qui implémente tous les modèles de conception ci-dessus.
En fait, le principal problème que ces modèles résolvent est le manque de contrôle d'exécution une fois qu'un contrat a été déployé. C'est à la fois un inconvénient et un avantage pour les contrats intelligents. Si vous êtes développeur, soyez prudent lorsque vous déployez un contrat intelligent et testez soigneusement chaque contrat intelligent – une seule erreur peut vous coûter des millions.
Source link