Comprendre les smart contracts : lire, écrire et auditer

Avancé11/26/2023, 12:41:25 PM
Cet article couvre les techniques de programmation de smart contracts, y compris des directives pour la lecture, l'écriture et l'audit. Comprendre la structure et les blocs de code des smart contracts est la première étape pour les écrire en Solidity ou dans d'autres langages. Étant donné que les smart contracts sont au cœur de la finance décentralisée (DeFi) et des applications décentralisées (DApps), il est crucial de garantir leur sécurité et leur perfection, les audits de smart contracts jouant un rôle clé.

Lecture des contrats intelligents

Les contrats intelligents sont des morceaux de code programmables qui s'exécutent uniquement lorsque un ensemble de conditions sont remplies. Ils sont synonymes de contrats du monde réel légalement contraignants ; seulement dans ce cas, le code fait loi. Comme les contrats intelligents résident sur la chaîne de blocs, ils sont immuables — ils ne peuvent pas être altérés. C'est cette caractéristique d'immuabilité qui rend les contrats intelligents spéciaux, entre autres choses.

Compréhension des contrats intelligents : bases et objectif

Contrats intelligentssont destinés à automatiser les transactions spécifiques à la blockchain. Comme ce sont des contrats conditionnels, ils ne nécessitent pas d'intermédiaires. Ce qui rend les smart contracts utiles, c'est leur compatibilité dans un large éventail de cas d'utilisation, y compris les services financiers, la gestion de la chaîne d'approvisionnement, et plus encore. Et contrairement aux blocs de code traditionnels qui sont programmés d'un seul coup, les smart contracts nécessitent des stratégies hautement sécurisées et chronophages.

Comment les contrats intelligents s'alignent-ils avec la technologie blockchain : BeInCrypto

Le mot à la mode “web3” suggère les habitudes de programmation laxistes et peu sécurisées du web. Lorsque la crypto ou les contrats intelligents sont programmés comme une page web, ils sont voués à l'échec. Les blockchains et leurs applications durablement réussies reposent sur des méthodes de programmation bien plus sécurisées, soigneuses et lentes.

Nick Szabo, cryptographe et informaticien : Twitter

Les contrats intelligents peuvent fonctionner avec des jetons spécifiques à la blockchain, tels que les ERC-20 pour la blockchain Ethereum, en incitant les efforts et en déplaçant les transactions. Comme le code, les conditions et les coûts sont impliqués, vous devriez faire attention à les lire, les écrire et les auditer.

Les contrats intelligents et leur signification

La véritable importance des contrats intelligents concerne leur nature et leur positionnement. Pour un scénario donné — disons une personne A transférant des fonds à une personne B lorsque B termine un service — une copie du contrat intelligent est enregistrée et exécutée par les nœuds de la blockchain. Les contrats intelligents sont enregistrés sous forme de codes de contrat au sein de la chaîne. Cette validation multi-chemin est une caractéristique propre à la blockchain et maintient la sécurité des données.

De plus, il existe des contrats intelligents séquentiels ou synchrones et contrats intelligents asynchronesoù les tâches sont exécutées en parallèle. Par conséquent, le type et le but d'un contrat intelligent déterminent comment il est écrit, lu ou même audité.

Les contrats traditionnels, les actes de propriété, les testaments, etc. relèvent du droit privé, «rédigés par des particuliers plutôt que par des politiciens ou des fonctionnaires gouvernementaux». Les contrats intelligents sont une nouvelle forme de création de règles décentralisée.https://t.co/EU2Y28FznK
— Nick Szabo (@NickSzabo4)15 mars 2018

Considérons un pool de liquidité standard gouverné par un smart contract.

Imaginez que le pool de jetons peut être utilisé pour le trading, et à chaque fois qu'un échange réussi se produit, 0,3% de la valeur totale de l'échange est envoyée au fournisseur de liquidités qui a rendu cet échange possible ou a ajouté de la liquidité pour cet actif échangeable donné. Toutes les conditions mettant en lumière les scénarios d'échange, les frais de trading et les conditions de non-conformité et d'échec de l'échange sont codées comme un Smart Contract, qui est stocké dans la chaîne sous forme de code de contrat.

Caractéristiques des contrats intelligents

Nous ne pouvons pas plonger profondément dans la lecture, l'écriture et l'audit des contrats si nous ne sommes pas conscients de leurs caractéristiques. Voici les traits standard des contrats intelligents dont il faut être conscient :

Quelques caractéristiques d'un contrat intelligent standard : BeInCrypto

Contrats programmables

Les contrats intelligents ne sont que des morceaux de code. Vous pouvez écrire des contrats intelligents pour exécuter des commandes et des scénarios en fonction de conditions spécifiques. C'est pourquoi les développeurs de contrats intelligents et les programmeurs sont actuellement très demandés, car la plupart des DeFil'espace repose déjà sur des contrats intelligents pour traiter des cas complexes comme la gestion des frais de transaction à travers les pools de liquidité, le maintien APYratios, et plus encore.

Sans confiance

Les contrats intelligents résidant sur la blockchain éliminent l'intervention humaine. Cela les rend entièrement sans confiance. Par exemple, si un spécifique DeFiprotocole, régi par des contrat(s) intelligents, accepte de liquider vos actifs une fois que la valeur tombe en dessous d'un seuil, aucune intervention humaine ne peut ou ne doit l'arrêter. Le code gère le paiement, la performance, la gestion et l'application des règles, rendant tout l'espace complètement sans confiance.

Autonome

Comme mentionné précédemment, les contrats intelligents sont chargés d'ensembles d'instructions auto-exécutantes. En termes de codage, cela signifie avoir des itérations et des boucles intégrées dans le canevas de base. Cela garantit que des tâches telles que les paiements, les retraits, les dépôts, la pénalisation des validateurs via le slashing, et plusieurs autres tâches sont gérées de manière autonome.

Sécurisé

Et enfin, comme les contrats intelligents sont sécurisés à l’aide de la cryptographie, il est incroyablement difficile de les violer. Sans vulnérabilité intégrée, contourner un contrat intelligent signifierait essayer de le violer au grand jour, devant l’ensemble de la blockchain.

Vérifiable

Les transactions traitées via les contrats intelligents sont auto-vérifiables. Cela signifie que l'exécution est une preuve suffisante que la transaction a eu lieu en premier lieu, car aucun élément humain n'est impliqué. Le mécanisme d'auto-vérification donne aux contrats intelligents un avantage sur les contrats traditionnels régissant les configurations bancaires héritées.

Donc la prochaine fois que vous prévoyez de lire un smart contract, assurez-vous que le gabarit ou la documentation comporte toutes les caractéristiques mentionnées.


Une version simplifiée des contrats intelligents: Reddit

Lecture des contrats intelligents basée sur les caractéristiques

Voici un contrat intelligent simple représentant un compte de consignation. Les utilisateurs déposent leurs fonds dans la consignation, qui les transfère ensuite au destinataire après un certain laps de temps.

/ SPDX-License-Identifier : MITpragma solidity ^0.8.0 ;// Basic Smart Contract Boilerplatecontract SimpleTrustlessEscrow {// Variables d’étatadresse déposant public ; // Compte déposant etheraddress payable bénéficiaire public ; // Compte recevant etheruint256 public releaseTime ; // Horodatage pour libérer ether// Evénements de vérification de l’activité du contratevent Deposited(adresse indexée _from, uint256 _value) ; event Released(adresse indexée _to, uint256 _value) ;// Le constructeur du contrat initialise le constructeur du contrat intelligent(adresse payable _beneficiary, uint256 _releaseTime) { require(_releaseTime > block.timestamp, « L’heure de publication doit être dans le futur ») ;    Sécurisé et sans confiance : le contrat lie le déposant et le déposant bénéficiaire = msg.sender ;    bénéficiaire = _beneficiary ;    releaseTime = _releaseTime ;}Fonction de dépôt – exécution autonome (fonction de secours)receive() external payable { emit Deposited(msg.sender, msg.value) ;}Libérer l’ether dans la fonction bénéficiaire release() public { // Programmable : Ne peut être exécuté qu’après releaseTime require(block.timestamp >= releaseTime, « Trop tôt pour libérer ») ;    Autonome : S’exécute automatiquement en fonction de la condition uint256 amount = address(this).balance ;    bénéficiaire.transfert(montant) ;    emit Libéré(bénéficiaire, montant) ;}}

Alors que nous allons décrypter et lire ce smart contract en détail, vérifions d'abord s'il respecte les caractéristiques de contrat mentionnées.

La partie "programmable"

Regardez de près le contrat pour ce morceau de code :

require(block.timestamp >= releaseTime, "Trop tôt pour libérer");

uint256 montant = address(this).balance;

bénéficiaire.transfert(montant);

Les fonds ne doivent être débloqués que lorsqu’une condition spécifique de releaseTime est remplie, ce qui rend ces contrats programmables.

La partie "sans confiance"

Voici un petit extrait de code rapide ci-dessus :

déposant = msg.sender ;

bénéficiaire = _bénéficiaire;

releaseTime = _releaseTime;

Dans le contrat, tout le monde est lié par le code, du déposant à la personne recevant les fonds. Personne n'a besoin d'interagir ou de faire confiance à l'autre car la fonction de transfert de fonds est liée par releaseTime - un paramètre basé sur le code.

La partie “autonome”

Voici la partie "libération de fonds" du code :

 function release() public {require(block.timestamp >= releaseTime, “Trop tôt pour libérer”);uint256 amount = address(this).balance;beneficiary.transfer(amount);emit Released(beneficiary, amount);}

L'ensemble du processus est autonome, car les fonds ne sont libérés que lorsque le releaseTime répond à un certain critère. Remarquez que le code n'est pas partiellement programmable mais entièrement autonome.

D’autres éléments du code du contrat intelligent, notamment la fonction de dépôt, peuvent également être rendus complètement autonomes en fonction des fonctionnalités que vous souhaitez inclure. Par exemple, vous pouvez lancer un plan de dépôt récurrent chaque fois que l’utilisateur portefeuillecroise les 100 $, avec le montant excédentaire transféré au bénéficiaire.

La partie "sécurisée"

Se préoccuper de l’élément qui se prête sécuritéau contrat ? Consultez cette partie du code :

constructor(address payable _beneficiary, uint256 _releaseTime) {require(_releaseTime > block.timestamp, « L’heure de libération doit être dans le futur ») ; déposant = msg.sender ; bénéficiaire = _beneficiary ; releaseTime = _releaseTime ;}

Remarquez comment il y a une préséance définie de la fonction releaseTime par rapport au timestamp. Rien n'est aléatoire, et les conditions doivent être remplies.

La partie "vérifiable"

Chaque transaction associée au contrat intelligent est enregistrée au sein de la chaîne, grâce à des éléments d’activité de journal distincts.

Événement Déposé(address indexé _from, uint256 _valeur);

event Released(adresse indexée _to, uint256 _value) ;

emit Deposited(msg.sender, msg.value) ;

emit Released(bénéficiaire, montant);

Lecture d'autres parties d'un contrat intelligent

Maintenant que nous avons identifié les éléments qui définissent les caractéristiques d'un contrat intelligent, voici les autres éléments du contrat pour vous aider à mieux comprendre le sujet.

Pragma solidité ^0.8.0; – La version du langage de programmation Solidity nécessaire pour écrire ce contrat intelligent.

// SPDX-License-Identifier: MIT - Termed Software Package Data Exchange, this identifier states the license of the code release. It is advisable to include this to let people know if it’s open source and can be worked around or not.

Contrat TimeLock { - Attribue un nom au contrat intelligent, comme une étiquette.

Adresse du déposant public; - Comme le contrat implique un déposant et un bénéficiaire, c'est à ce moment que l'adresse publique du déposant est mentionnée. Cette variable est le Portefeuille Ethereumadresse et est visible publiquement.

Adresse payable publique du bénéficiaire; – Il s'agit de l'adresse publique du bénéficiaire où l'entiercement transfère des fonds. Elle est également lisible et confère une impression de transparence aux contrats intelligents alimentés par la blockchain.

Uint256 public releaseTime; – Comme il s'agit d'un contrat à durée déterminée, le uint256 attribue la variable basée sur le temps au contrat. Ce sera le délai selon lequel les fonds seront libérés.

En Solidity, uint (entier non signé) est la manière d'attribuer des valeurs basées sur des entiers. Le suffixe 256 représente un grand espace de stockage de nombres.

après 5 ans à écrire des smart contracts, je réalise seulement aujourd'hui que le logo de Solidity est le logo d'Ethereum déplié 🨯pic.twitter.com/wlM369Eff9
— kaden.eth ( @0xKaden) 8 juillet 2023

Vous pouvez envisager de lire Documentation de Soliditypour se familiariser avec la syntaxe, les expressions et les autres éléments de code.

Autres éléments

constructeur(adresse payable _bénéficiaire, uint256 _releaseTime) { - Le "Constructeur" est une fonction spéciale unique qui est appelée lors du déploiement du contrat intelligent. Il met le contrat en mouvement. Remarquez comment, à ce stade, toutes les variables d'adresse que nous avons précédemment déclarées sont appelées et initialisées.

Receive() external payable { – Il s'agit d'une fonction spéciale appelée lorsque des fonds sont transférés à l'adresse du contrat depuis l'extérieur. External suggère de l'extérieur, et "Payable" définit la nature du transfert, c'est-à-dire recevoir des jetons ERC-20.

function release() public { - Il s'agit d'une fonction publique qui indique le mouvement des jetons ERC-20 de l'adresse du contrat au bénéficiaire. Cette fonction dépend de releaseTime.

Tous ces éléments font partie du contrat d'entiercement hypothétique que nous avons discuté. Assurez-vous de parcourir l'ensemble de la documentation sur la Solidité pour mieux comprendre le langage.

Connaître les éléments avant de planifier l'écriture de contrats intelligents: BeInCrypto

DApps et smart contracts : la relation

À ce stade, vous devriez avoir une longueur d'avance dans la lecture et la compréhension d'un contrat intelligent déjà écrit. Et de nombreux contrats intelligents comme ceux que nous avons discutés font l'arrière-plan d'une application décentralisée — un blockchainversion d'une application mobile standard.

Toutes les caractéristiques d’un contrat intelligent, y compris la sécurité des contrats, l’exécution autonome et programmable, l’absence de confiance des transactions, etc., sont facilement mises en œuvre lors du développement d’une application décentralisée. Ainsi, la prochaine fois que vous tomberez sur une DApp, notez qu’il s’agit d’un backend alimenté par un contrat intelligent hébergé sur la blockchain, ce qui vous permet d’initier plusieurs tâches sans intervention humaine. Les contrats intelligents forment la logique des DApps.

Blockchains pour les smart contracts

Nous savons qu'Ethereum vous permet de développer des smart contracts, comme une solution logicielle massive. Cependant, ce n'est pas le seul protocole blockchain disponible. Si vous souhaitez plonger profondément dans le monde du développement de smart contracts, vous voudrez peut-être regarder d'autres blockchains. Les différents blockchains ont des terminologies différentes lorsqu'il s'agit d'établir des contrats.

Mais d'abord, parlons Ethereum— la plateforme de prédilection pour la plupart des développeurs de smart contracts.

Ethereum

Les contrats intelligents sur Ethereum sont écrits dans le langage de programmation Solidity. Et l'interface de jeton pour cette plateforme de développement de contrats intelligents est ERC-20.

Vous pouvez revenir au contrat intelligent basé sur l'entiercement que nous avons discuté plus tôt pour voir comment un contrat intelligent standard basé sur Etheruem est écrit.

Même le lancement d'un jeton ERC-20 sur la blockchain Ethereum est une fonctionnalité intensive en contrat intelligent, quelque chose que nous discuterons en profondeur lors de l'écriture d'un contrat intelligent.

Voici à quoi ressemble une structure de code de base, à condition que nous prévoyions de lancer une nouvelle crypto-monnaie BIC.

Considérez ceci comme un scénario hypothétique. Pas exactement le lancement d'une cryptomonnaie BIC.

pragma solidité ^0.8.0;importer "@openzeppelin/contrats/jeton/ERC20/ERC20.sol";contrat BICToken est ERC20 {    constructeur(uint256 offreInitiale) ERC20("Jeton BIC", "BIC") {        _mint(msg.sender, offreInitiale);    }}

Nous discuterons de chaque élément de ce code plus tard lors de la rédaction de notre contrat intelligent.

Autres blockchains

Comme Ethereum, vous pouvez même créer des contrats intelligents sur des plateformes comme Solana, en utilisant Rust et Cardano, en utilisant Plutus, un sous-ensemble de Haskell, un langage de programmation fonctionnel.

"Est-ce que Cordona a même des contrats intelligents ?"
Tu te moques de moi, mon ami. #CardanoADA pic.twitter.com/j8SXCu72Sd
— Willybot 🇦🇺 (@wilbot28) 9 juillet 2023

Voici ce qu’est une structure de code en Rust (Solana) ressemble à :

Note : Il s'agit d'un contrat simple où un compteur est incrémenté.

use anchor_lang::prelude::*;declare_id!(“Fg6PaFpoGXkYsidMpWTK6W2BeZ7FEfcYkg476zPFsLnS”);#[program] pub mod hello_world {use super::*;pub fn initialize(ctx: Context<Initialize>) -> ProgramResult {    let greeting_account = &mut ctx.accounts.greeting_account;    greeting_account.counter = 0;    Ok(())}pub fn increment(ctx: Context<Increment>) -> ProgramResult {    let greeting_account = &mut ctx.accounts.greeting_account;    greeting_account.counter += 1;    Ok(())}}

Saviez-vous ? Alors que Rust est le langage de programmation pour la création de contrats intelligents basés sur Solana, Ancreest le cadre de développement de contrat intelligent qui est utilisé. Pour créer des contrats intelligents en utilisant Rust, les développeurs doivent extraire des modules du cadre Anchor - quelque chose la première ligne de notre code d'exemple (utiliser anchor_lang::prelude::*;) représente.

Documentation de Solanavous aidera à comprendre le langage de contrat intelligent spécifique à Rust.

De même, Cardano suit Plutus comme choix de langage, suivi du langage Ink!Polkadot, TEAL pour Algorand, C# pour NEO, et plus encore. Il est conseillé de bien comprendre la documentation propre à chaque chaîne avant de commencer à rédiger des contrats intelligents compatibles.

Pourquoi devriez-vous apprendre à lire les contrats intelligents ?

La capacité d'écrire des contrats intelligents est très reconnue, mais même savoir lire comporte ses propres avantages :

  1. La capacité d'apprendre les complexités de l'automatisation associées aux applications DeFi.
  2. Analyser les normes de propriété associées à l'actiftokenisation.
  3. Comprendre comment organisations autonomes décentralisées (DAO)fonction.
  4. Comprendre et mettre en œuvre la logique axée sur les cas d'utilisation liés à l'assurance, à la monétisation du contenu,vote redevances, et d’autres secteurs verticaux.

Comment écrire des contrats intelligents

Maintenant que la lecture des contrats intelligents est terminée, concentrons-nous sur l'écriture de contrats intelligents. Avant de plonger plus en profondeur, il est nécessaire de réitérer que différentes blockchains peuvent avoir des normes et des langages différents liés au développement de contrats intelligents. Il est nécessaire de se concentrer sur les normes définies par une blockchain donnée pour commencer à écrire et déployer des contrats.

Pour la majorité de notre discussion, nous nous concentrerons sur Ethereum en tant que chaîne et Solidity en tant que langage.

Le rôle de la programmation

La programmation d'un smart contract est facilement la partie la plus importante du cycle de développement. Et pour se lancer dans le développement de smart contracts sur Ethereum ou tout autre blockchain, vous devriez avoir une certaine expérience avec des langages de programmation non-blockchain comme Javascript.

Différentes blockchains et le langage pour écrire des contrats intelligents: BeInCrypto

La capacité de programmer un contrat intelligent vous permet d'implémenter la logique, de gérer les éléments de sécurité de celui-ci, d'optimiser le code pour Frais de gaz, personnalisez la même, voire rendez-la interopérable si nécessaire.

EVM et contrats intelligents : un aperçu du terrain

Toute personne qui prévoit d'écrire des smart contracts sur Ethereum doit comprendre ce qu'est la Machine Virtuelle Ethereum (EVM) et comment elle fonctionne avec les smart contracts. Pour commencer, l'EVM est un composant d'Ethereum qui offre aux programmes un environnement isolé et contrôlé pour fonctionner. Considérez ceci comme un ordinateur mondial qui héberge chaque morceau de code de contrat présent sur Ethereum. Chaquenœudsur le réseau Ethereum fonctionne l'EVM.

Si vous aspirez à devenir un développeur de contrats intelligents, voici ce que vous devez savoir concernant les contrats intelligents et l'EVM.

Une fois que vous avez écrit le programme en Solidity, qui est un langage de haut niveau, vous devez le compiler en bytecode - un format de bas niveau compréhensible par la machine. Ce bytecode est intégré dans la blockchain Ethereum et y réside. Toute personne interagissant avec le smart contract doit envoyer une transaction à l'adresse du contrat.

Chaque nœud avec l'EVM installé peut voir cette transaction, et une fois que les validateurs l'approuvent, le code du contrat intelligent est exécuté. Comme chaque nœud a une visibilité sur la transaction, rien ne peut être falsifié, et le code s'exécute tel qu'il a été écrit. Et une fois que le code est exécuté, l'état de la blockchain change, rendant le processus de bout en bout et complètement transparent.

Est-ce que quelqu'un peut écrire un contrat intelligent?

Écrire des contrats intelligents nécessite des compétences techniques. Mais ce n'est pas tout. Vous devez également comprendre parfaitement le fonctionnement de la technologie blockchain, ainsi que les besoins spécifiques en matière de langage pertinents pour la blockchain que vous ciblez.interopérabilité, et plus encore. En plus de cela, vous devez également connaître assez bien les vulnérabilités des contrats intelligents - les choses à éviter lors de l'écriture de code. Enfin, la connaissance des tests de contrat et du déploiement de contrat est également indispensable.

Tout cela peut devenir accablant. Voici donc une feuille de triche rapide pour commencer :

  1. Commencez par choisir la plateforme ou la chaîne avec laquelle vous souhaitez travailler.
  2. Apprenez le langage de programmation associé à la chaîne, comme Solidity pour Ethereum.
  3. Apprenez à utiliser des outils de développement tels que l'environnement de développement intégré comme Remix.
  4. Commencez par rédiger votre premier contrat, puis testez-le en utilisant des testnets.
  5. Une fois que vous êtes satisfait des éléments du code, vous pouvez le déployer on-chain. N'oubliez pas que le déploiement du contrat on-chain entraînera des frais sous forme de frais de gaz.

Voici un fil rapide avec quelques astuces pour écrire de meilleurs contrats intelligents :

🥧 FREI-PI
‼️ Pourquoi les développeurs de smart contract DOIVENT savoir cela !
Fonction :
- Exigences
– Effets
– Interactions
Protocole
- Invariants
C'est le modèle auquel vous devriez tous penser lors de la construction de contrats intelligents.
Voici pourquoi 👇
— Patrick Collins ( @PatrickAlphaC) 6 juillet 2023

Plonger dans la programmation

Il est temps d'entrer dans les aspects techniques du développement de contrats intelligents. Même si des chaînes telles que Solana et Cardano vous permettent de développer des contrats intelligents, Ethereum reste la plateforme de développement de contrats intelligents la plus populaire.

Le saviez-vous ? Rien qu'en 2022, plus de 100 000 applications décentralisées ont été ajoutées au réseau Ethereum.

Pourquoi Ethereum?

Ethereum a une énorme communauté de développeurs. Tout ce que vous développez attirera immédiatement l'attention. De plus, son langage natif, Solidity, est relativement facile pour les personnes qui maîtrisent Python ou JavaScript. Enfin, le logiciel global d'Ethereum, EVM, facilite l'exécution transparente des contrats.

Si vous faites partie de la majorité et préférez utiliser Ethereum et Solidity, voici une liste rapide des choses à suivre avant de commencer le développement de contrats intelligents :

  1. Pragmas ou la version du compilateur
  2. Définition de contrat pour l'étiquetage
  3. Variables d'état pour stocker des données
  4. Événements pour l'enregistrement EVM
  5. Modificateurs pour accorder des droits spécifiques à des entités spécifiques
  6. Fonctions ou les activités du contrat intelligent en jeu
  7. Héritage pour l'interopérabilité
  8. Compréhension des structures de contrôle comme if, else, for loops, des types de données comme string, integer, et plus encore.

Écrire et déployer le premier contrat intelligent

Maintenant que nous savons comment les choses se passent sur la chaîne, plongeons-nous dans l’écriture et le déploiement du premier contrat intelligent. Même si « Hello World » reste la première étape, nous allons commencer par créer un contrat intelligent pour lancer un jeton BIC hypothétique avec une offre débloquée à 100 % de 1 million.

Les bases

La première étape consiste à installer la dernière version de Node.js et le NPM ou Node Package Manager. Cela prend en charge les outils de développement et l'environnement local de développement. De plus, Node.js et NPM vous permettent de configurer le front-end web pour votre smart contract.

Maintenant, vous devez configurer un IDE pour écrire le code du contrat. Pour cela, vous pouvez rapidement installer Visual Studio Code. Ou vous pouvez couper le désordre et hopsur Alchemy - une plateforme de développement blockchain. Avec Alchemy, vous pouvez obtenir de l'ETH de testnet. Cela couvrira les frais de gaz lorsque vous déployez le smart contract sur le testnet Goerli ou même le testnet Sepolia.

Notez que Sepolia est un testnet plus récent et prend donc moins d'espace disque en ce qui concerne le déploiement du nœud.

Pour l'instant, nous persisterons avec le testnet Goerli car il a un plus grand nombre d'applications déployées.

Avec le testnet et l'ETH factice prêt, passons à l'écriture spécifique du contrat intelligent. Voici un extrait de code pour créer un jeton BIC avec un approvisionnement fixe de 1 million.

Note : Nous déploierons notre contrat intelligent localement sur MacOS et non sur le testnet. Pour le déploiement des contrats intelligents sur testnet et mainnet, nous aurons une pièce séparée, qui est en dehors du cadre de cette discussion.

Étapes pour écrire et déployer

Voici l’extrait de code simple pour le jeton hypothétique :

pragma solidité ^0.8.0;importer "@openzeppelin/contrats/token/ERC20/ERC20.sol";contrat BICToken est ERC20 {    constructeur() ERC20("BIC Token", "BIC") {        _mint(msg.sender, 1000000 * 10 ** décimales());    }}

Si vous connaissez la syntaxe, vous sauriez ce que signifie chaque composant de code. En ce qui concerne le OpenzepplinEn partie, c'est la bibliothèque de référence pour l'importation de contrats intelligents ERC-20. Cette bibliothèque offre les normes opérationnelles de base pour les jetons ERC-20.

La fonction mint parle de l'approvisionnement initial, qui est déployé à l'adresse du contrat intelligent ou du msg.sender.

Pour configurer ce code localement et le tester, nous aurons besoin de trois composants:

  1. Node.js et NPM (déjà discutés) : fonctionne comme un moteur pour alimenter vos contrats intelligents
  2. Truffe: Fonctionne comme une boîte à outils, vous aidant à organiser le code, les scripts et d’autres parties d’un contrat
  3. Ganache: Fonctionne comme un terrain de jeu virtuel, sur l'appareil. Pensez-y comme à une blockchain personnelle.

Qu'est-ce que l'exécution de contrat?

Si vous avez suivi le processus détaillé d'écriture d'un contrat intelligent, il est impératif de connaître un peu le processus d'exécution du contrat. Il s'agit d'un processus par lequel le code du contrat intelligent est exécuté sur une chaîne par les nœuds.

C'est l'uniformité associée à l'exécution du contrat qui rend les smart contracts transparents et immuables. Commençons maintenant à comprendre le processus en plusieurs étapes associé à l'exécution du contrat :

Étape 1

Les extraits de code que nous avons écrits doivent être exécutés quelque part. Dans le cas des contrats intelligents, cet endroit d'exécution est la blockchain. Les nœuds ou les membres participants de la chaîne aident à exécuter le contrat.

Étape 2

Les nœuds acceptent la responsabilité d'exécuter des blocs de code de contrat en retour d'incitations liées à la chaîne. Chaque commande ou action qui se produit au sein de la chaîne est dirigée par des contrats intelligents.

Étape 3

Chaque smart contract a une adresse spécifique. Pour exécuter le contrat, des transactions sont envoyées à cette adresse de contrat. Notez que chaque nœud exécute l'EVM, qui possède alors une copie du code du smart contract, ce qui rend plus facile la vérification de l'authenticité des transactions.

Étape 4

Les transactions ciblant le contrat intelligent sont sélectionnées par les validateurs, qui les incluent ensuite dans des blocs spécifiques.

Étape 5

Une fois que la transaction est poussée et validée avec succès, elle devient une partie de la blockchain. La fonction de contrat intelligent associée à la transaction est alors appelée et exécutée à travers les nœuds de la blockchain.

Étape 6

Chaque nœud exécutant le contrat intelligent doit parvenir à une conclusion déterministe — la même sortie pour le même ensemble d'entrées — rendant la nature des contrats totalement sans confiance et transparente.

Remarque : Toute erreur concernant l'exécution du code ou des problèmes liés aux frais de gaz annule les transactions. Cela signifie que la transaction basée sur un code de contrat intelligent spécifique cessera d'exister. C'est exactement ce qui se passe avec prêts flashlorsque l'incapacité de respecter des normes spécifiques inverse complètement la transaction, donnant ainsi l'impression que les fonds n'ont même pas bougé en premier lieu.

Chaque changement d'état associé aux contrats intelligents est enregistré dans la blockchain et devient une partie immuable de celle-ci.

Développement de contrats intelligents et meilleures pratiques

Maintenant que vous en savez un peu sur les smart contracts, voici quelques points pour commencer le développement de contrats :

  1. Lors de la rédaction de contrats, il est conseillé de s'appuyer sur des bibliothèques de confiance comme celles d'OpenZeppelin pour respecter les normes d'optimisation du code et de sécurité souhaitées.
  2. L'idée est de garder le contrat modulaire et plus simple, ce qui le rend plus facile à tester et à examiner.
  3. Une bonne idée est de mettre en œuvre des contrôles d'accès spécifiques au contrat. Cela signifie déclarer des morceaux de code où seule une personne ou entité spécifique peut modifier les traits cruciaux du contrat. Le contrôle d'accès facilite la sécurisation des contrats intelligents.
  4. Lors de la rédaction d'un contrat, prévoyez toujours des dispositions pour gérer les cas limites et les exceptions, tout en rédigeant plusieurs tests.

Prendre soin de la durabilité du code

Chacune des pratiques mentionnées ci-dessus contribue à l'optimisation du code et à la mise en œuvre de mesures de sécurité spécifiques. Cependant, il existe quelques pratiques spécifiques aux contrats que vous devez suivre et mettre en œuvre pour assurer la durabilité du code. L'objectif est de maintenir le code du contrat léger et utilisable afin que chaque nœud exécutant la même opération n'ait pas à consacrer une grande puissance de calcul à la même tâche.

  1. Gérez le stockage efficacement en utilisant des ensembles de données plus petits. Par exemple, lors de l'écriture d'un contrat, utilisez uint8 comme valeur opérationnelle au lieu de uint256.
  2. Lors de la rédaction d'un contrat, il est conseillé d'optimiser le code en regroupant plusieurs opérations en une seule. Nous approfondirons ce sujet dans notre article détaillé sur "rédiger des contrats intelligents".
  3. Une bonne idée est d'utiliser l'évaluation paresseuse en ce qui concerne l'exécution du contrat intelligent. De cette façon, vous n'avez besoin d'exécuter une fonction que lorsque c'est nécessaire et pas à chaque fois que quelque chose est poussé à l'adresse du contrat intelligent.
  4. Enfin, compter sur des calculs hors chaîne est également un bon moyen de se concentrer sur la durabilité. Cela permet de réduire les exigences en frais de gaz et peut même accélérer l'exécution du contrat.

Malgré le respect des meilleures pratiques lors de l'écriture et du développement de contrats intelligents, il est nécessaire de se concentrer sur les vulnérabilités de sécurité du contrat lors de leur déploiement sur le mainnet.

Comment auditer les contrats intelligents ?

Chaque smart contract ayant une présence sur le mainnet doit être évalué en termes de performances du code, de sécurité et d'autres caractéristiques. C'est là que l'audit - un processus rigoureux de test de contrat - prend tout son sens, vous permettant de découvrir les vulnérabilités potentielles et les faiblesses du contrat.

Voici une liste de contrôle d'audit rapide pour commencer:
Liste de contrôle incroyable pour l'audit des contrats intelligents😈
Assurez-vous de les vérifier lors de votre prochain audit✅
Je vous serais reconnaissant de retweeter, de diffuser les connaissances🫡https://t.co/ILx0C67kf8
— cholakov (@cholakovv) 7 juillet 2023

Relation entre la lecture, l'écriture et l'audit : pourquoi même auditer les smart contracts ?

Lors de la lecture et de l'écriture des contrats intelligents, il est nécessaire de bien comprendre que l'audit occupe une place spéciale, car il implique de vérifier en premier lieu la logique. En ce qui concerne l'exécution du code basé sur la blockchain, tout est immuable, et tout événement catastrophique peut avoir des conséquences irréversibles lors de l'exécution du contrat. C'est précisément pour cette raison qu'une vérification minutieuse du code du contrat et d'autres aspects via un audit est nécessaire.

Vulnérabilités des contrats et correctifs

Il peut y avoir toute une gamme devulnérabilités contractuellesqu'un audit détaillé du contrat intelligent peut identifier. Cela inclut la vérification des attaques de réentrance, des débordements ou des sous-débordements, des problèmes liés au contrôle d'accès, et plus encore. Une fois que la nature exacte du problème est déterminée, l'auditeur peut même suggérer les meilleures pratiques pour le corriger.

Violations des études et des apprentissages

Vous vous demandez toujours en quoi l'audit des contrats intelligents peut aider ? Eh bien, revenons à l'infâmeDAO hack en 2016, qui a exploité un problème de réentrée et a causé une perte de près de 3,6 millions d’ETH. De même, il y a eu le piratage du contrat de portefeuille Parity en 2017, entraînant une perte de près de 500 000 ETH. Ces problèmes auraient pu être évités avec la bonne série d’audits.


Schéma de piratage de DAO : BeInCrypto

Stratégies d’audit des contrats intelligents

Il existe de nombreuses stratégies pour auditer les contrats intelligents. Certains des plus populaires incluent :

Outils d'audit

Ces outils agissent comme le premier ensemble de défenses et sont mieux utilisés pour localiser les vulnérabilités courantes. Certains des outils les plus populaires incluent Securify, Mythril, et plus encore - capables d'effectuer une analyse statique du code, de détecter des schémas de violation, et d'aider à obtenir une avance spécifique en matière de sécurité.

Outils d'audit de contrats intelligents : BeInCrypto

Examen de code

C'est là que les examinateurs de code manuels entrent en scène, scrutant la base de code et identifiant les vulnérabilités complexes, le cas échéant. Une révision manuelle peut aider à prendre soin de la logique métier, du contexte et des schémas d'utilisation.

Voici comment les révisions de code manuelles vous aident à localiser les menaces :

Un petit jeu de questions pour nos jeunes auditeurs !
Allons-y et retweetez si vous avez trouvé le bug !pic.twitter.com/i14YtweXcz
— CharlesPaladin (@PaladinCharles) 8 juillet 2023

Scans automatiques

Des outils tels que Snyk et GuardRails aident à la numérisation automatique des contrats - une implémentation de sécurité qui est invoquée à chaque fois que le code est mis à jour. Cette forme d'audit garantit que les nouvelles modifications apportées à un code sont sûres et non invasives.

Vérification formelle

Il s’agit d’un processus complexe qui repose uniquement sur la vérification de la logique métier du code. Notez que la vérification formelle n’est pas réellement destinée à vérifier la syntaxe, mais uniquement la logique pour voir si le code s’exécute comme souhaité.

En plus des stratégies mentionnées, l’audit des contrats intelligents peut également être initié à l’aide d’examens par les pairs, de programmes de bug bounty et de couvertures de test via des outils tels que la couverture Solidity pour maximiser l’efficacité.

Un moyen simple d'auditer les contrats intelligents : BeInCrypto

Comment réviser le code correctement?

Si vous êtes nouveau dans l'audit des contrats intelligents, il est important de noter qu'il existe deux façons d'analyser largement le code et d'identifier les problèmes. Celles-ci incluent :

Analyse statique

Ce type d'analyse de code aide à identifier les vulnérabilités de sécurité de base, les erreurs de codage et d'autres problèmes selon les normes de codage données et les conventions. Les menaces telles que les appels non vérifiés aux sources externes, les débordements d'entiers, et plus encore peuvent être mis en évidence à l'aide de l'analyse statique. La meilleure chose à propos de l'analyse statique est que le code n'a pas besoin d'être exécuté pour être vérifié.

Analyse dynamique

Cette approche de l’audit teste l’alignement du code avec l’EVM. Au lieu de se contenter de vérifier le code, l’analyse dynamique recoupe la réponse des contrats intelligents à un large éventail d’entrées. L’analyse dynamique permet d’identifier des problèmes tels qu’une consommation de gaz incohérente et même une logique contractuelle erronée. Les environnements de blockchain personnels comme Ganache peuvent fonctionner comme des plateformes d’analyse dynamiques, permettant aux développeurs d’effectuer des transactions, d’exécuter des commandes et de faire bien plus avec leurs contrats.

Test d'un morceau de code réel

Voici un extrait de contrat intelligent qui fonctionne comme un stockage de fonds, avec une fonction de retrait:

pragma solidité ^0.6.1;contrat ContratVulnérable {    mapping(address => uint256) public balances;    function deposit() public payable {        balances[msg.sender] += msg.value;    }    function withdraw(uint256 _amount) public {        require(balances[msg.sender] >= _amount, "Solde insuffisant.");        (bool succès, ) = msg.sender.call{value: _amount}("");        require(succès, "Échec du transfert.");        balances[msg.sender] -= _amount;    }}

Si vous regardez de près le code, il y a une vulnérabilité clé :

Dans le cas précédent, la fonction "retirer" peut être appelée à nouveau si l'utilisateur recevant les fonds est également un smart contract, bien que malveillant. Par conséquent, avant que la dernière fonction ou la mise à jour du solde ne se produise, une attaque de réentrance peut être lancée pour transférer des fonds supplémentaires. Les auditeurs expérimentés identifient ce type de vulnérabilité.

Voici le code corrigé pour la même chose :

fonction retirer(uint256 _montant) public {    require(soldes[msg.sender] >= _montant, "Solde insuffisant.");    soldes[msg.sender] -= _montant;    (bool succes, ) = msg.sender.call{value: _montant}("");
require(success, “Transfer failed.”);}

Vérifiez comment la fonction de mise à jour du solde est appelée d'abord, puis le premier mouvement vers l'utilisateur. Ce changement dans l'ordre des opérations est ce qui corrige le contrat.

Chaînes non-Ethereum et examen de code

Le monde des applications décentralisées et des contrats intelligents a dépassé Ethereum. Même si la majeure partie de l'action se déroule encore dans l'écosystème Ethereum, il existe d'autres chaînes comme Cardano, Solana, et d'autres encore qui prennent en charge les contrats intelligents et nécessitent des normes d'audit différentes.

Pourquoi chaque plateforme est-elle unique?

Les différentes blockchains utilisent des langages de programmation différents. Les sémantiques, la syntaxe et les propriétés du code sont différentes, ce qui rend les contrats intelligents réactifs à différentes pratiques d'écriture et d'audit. Par exemple, Ethereum utilise Solidity, tandis que Polkadotutilise de l'encre et de la rouille, ce qui le rend réactif à des normes d'audit spécifiques.

Outils pour passer à une autre plateforme que Ethereum

Maintenant, si vous voulez aller au-delà d'Ethereum, il existe quelques outils d'audit spécialisés pour vous aider à démarrer. Par exemple, avec Cardano, il y a la suite Marlowe pour la vérification formelle et l'audit. En ce qui concerne Solana, les libfuzzer spécifiques à Rust et cargo-fuzz sont destinés à l'audit et aux tests de contrat. Un auditeur multi-chaîne doit être familier avec ces concepts pour éviter les vulnérabilités du contrat.

Quels sont les différents types d'audit de contrats intelligents ?

Pour réitérer, vous pouvez séparer l'audit des contrats intelligents en trois types : manuel, automatique et hybride. Notez que les gens préfèrent les stratégies d'audit hybrides pour les contrats complexes avec une logique commerciale approfondie car elles sont les plus complètes.

Externaliser vos audits

Les organisations et les personnes ayant des connaissances minimales en codage sous-traitent souvent leurs exigences en matière de rédaction et d’audit à des entreprises réputées. Lorsqu’il s’agit d’audit, le choix de la bonne entreprise devient d’autant plus important que même si outils d'IAcommeChatGPTpeut aider à écrire du code de contrat intelligent, la vérification nécessite des insights manuels.

De plus, voici les facteurs à prendre en note lors de l'externalisation des tâches d'audit :

Choisir la bonne entreprise

Avant de vous concentrer sur la bonne société d'externalisation, il est crucial de vérifier les audits passés, d'évaluer l'expérience et même de se concentrer sur les principaux membres de l'équipe.

Comprendre les responsabilités, les coûts et les frais généraux

Avant de procéder à une embauche, prenez note des coûts et des services associés aux audits. Il est impératif de comprendre d'abord la nature des services offerts, tels que l'identification des problèmes, la résolution des problèmes, et plus encore. Vous devez également vérifier si des ré-audits sont également fournis après la mise en œuvre de la première série de correctifs. Le coût d'un audit de contrat intelligent peut varier en fonction des services, il est donc nécessaire de suivre chaque exigence et offre avant de procéder.

Meilleures pratiques d'audit de contrats intelligents

Au cas où vous voudriez abandonner une entreprise et auditer vous-même les contrats intelligents, voici les meilleures stratégies et pratiques à garder à l'esprit :

  1. Mettez toujours l'accent sur une revue de code approfondie, y compris la syntaxe et la logique
  2. Commencez par identifier les vulnérabilités courantes à l'aide d'outils tels que Slither, MythX et plus encore
  3. Parcourez le Registre de classification des vulnérabilités des contrats intelligents ou SWC pour localiser les vulnérabilités connues et les vérifier à l'avance.
  4. Testez rigoureusement les smart contracts, y compris les tests d'intégration, les tests unitaires et plus encore, pour tester le code dans un large éventail de scénarios.
  5. Il est important de vérifier les chances d'attaques de réentrance spécifiquement. La meilleure façon de lutter contre cela est de vérifier les appels récursifs que les pirates peuvent effectuer avant la première fonction de contrat intelligent.
  6. Concentrez-vous sur les fonctions qui conduisent à des appels externes. Une erreur à cet égard peut altérer l'état et le flux de contrôle, ce qui n'est pas souhaitable.
  7. Gardez toujours un œil sur les morceaux de code qui indiquent l'utilisation de gaz. Vous ne voulez pas que votre contrat initie des interactions qui sont prohibitivement chères.

Développement de contrats intelligents et IA : l'avenir

L’intelligence artificielle facilite en effet l’écriture de contrats intelligents. Cependant, indépendamment de l’innovation en matière d’IA, la capacité d’auditer les contrats intelligents de la meilleure façon possible nécessite toujours une intervention humaine. Par conséquent, si vous envisagez de créer votre prochain produit web3 en mettant l’accent sur les contrats intelligents et les applications décentralisées, il est crucial de vous concentrer religieusement sur les meilleures ressources d’audit pour vos contrats intelligents. Avec les piratages et les violations de crypto-monnaie qui font surface chaque jour qui passe et les pirates qui planifient de nouvelles stratégies pour percer, l’audit d’un contrat à la perfection est certainement l’un des ensembles de compétences modernes les plus importants.

Avertissement :

  1. Cet article est reproduit à partir de [Gate.io]Beincrypto] et les droits d'auteur appartiennent à l'auteur original [Ananda Banerjee]. En cas d'objections à la reproduction, veuillez contacter l'équipe Gate Learn, et l'équipe la traitera rapidement selon les procédures pertinentes.
  2. Avertissement : Les points de vue et opinions exprimés dans cet article ne représentent que les points de vue personnels de l'auteur et ne constituent aucun conseil en investissement.
  3. Les autres versions linguistiques de l'article sont traduites par l'équipe Gate Learn. Sans mentionner Gate.io, il n'est pas permis de copier, de diffuser ou de plagier les articles traduits.

Compartir

Comprendre les smart contracts : lire, écrire et auditer

Avancé11/26/2023, 12:41:25 PM
Cet article couvre les techniques de programmation de smart contracts, y compris des directives pour la lecture, l'écriture et l'audit. Comprendre la structure et les blocs de code des smart contracts est la première étape pour les écrire en Solidity ou dans d'autres langages. Étant donné que les smart contracts sont au cœur de la finance décentralisée (DeFi) et des applications décentralisées (DApps), il est crucial de garantir leur sécurité et leur perfection, les audits de smart contracts jouant un rôle clé.

Lecture des contrats intelligents

Les contrats intelligents sont des morceaux de code programmables qui s'exécutent uniquement lorsque un ensemble de conditions sont remplies. Ils sont synonymes de contrats du monde réel légalement contraignants ; seulement dans ce cas, le code fait loi. Comme les contrats intelligents résident sur la chaîne de blocs, ils sont immuables — ils ne peuvent pas être altérés. C'est cette caractéristique d'immuabilité qui rend les contrats intelligents spéciaux, entre autres choses.

Compréhension des contrats intelligents : bases et objectif

Contrats intelligentssont destinés à automatiser les transactions spécifiques à la blockchain. Comme ce sont des contrats conditionnels, ils ne nécessitent pas d'intermédiaires. Ce qui rend les smart contracts utiles, c'est leur compatibilité dans un large éventail de cas d'utilisation, y compris les services financiers, la gestion de la chaîne d'approvisionnement, et plus encore. Et contrairement aux blocs de code traditionnels qui sont programmés d'un seul coup, les smart contracts nécessitent des stratégies hautement sécurisées et chronophages.

Comment les contrats intelligents s'alignent-ils avec la technologie blockchain : BeInCrypto

Le mot à la mode “web3” suggère les habitudes de programmation laxistes et peu sécurisées du web. Lorsque la crypto ou les contrats intelligents sont programmés comme une page web, ils sont voués à l'échec. Les blockchains et leurs applications durablement réussies reposent sur des méthodes de programmation bien plus sécurisées, soigneuses et lentes.

Nick Szabo, cryptographe et informaticien : Twitter

Les contrats intelligents peuvent fonctionner avec des jetons spécifiques à la blockchain, tels que les ERC-20 pour la blockchain Ethereum, en incitant les efforts et en déplaçant les transactions. Comme le code, les conditions et les coûts sont impliqués, vous devriez faire attention à les lire, les écrire et les auditer.

Les contrats intelligents et leur signification

La véritable importance des contrats intelligents concerne leur nature et leur positionnement. Pour un scénario donné — disons une personne A transférant des fonds à une personne B lorsque B termine un service — une copie du contrat intelligent est enregistrée et exécutée par les nœuds de la blockchain. Les contrats intelligents sont enregistrés sous forme de codes de contrat au sein de la chaîne. Cette validation multi-chemin est une caractéristique propre à la blockchain et maintient la sécurité des données.

De plus, il existe des contrats intelligents séquentiels ou synchrones et contrats intelligents asynchronesoù les tâches sont exécutées en parallèle. Par conséquent, le type et le but d'un contrat intelligent déterminent comment il est écrit, lu ou même audité.

Les contrats traditionnels, les actes de propriété, les testaments, etc. relèvent du droit privé, «rédigés par des particuliers plutôt que par des politiciens ou des fonctionnaires gouvernementaux». Les contrats intelligents sont une nouvelle forme de création de règles décentralisée.https://t.co/EU2Y28FznK
— Nick Szabo (@NickSzabo4)15 mars 2018

Considérons un pool de liquidité standard gouverné par un smart contract.

Imaginez que le pool de jetons peut être utilisé pour le trading, et à chaque fois qu'un échange réussi se produit, 0,3% de la valeur totale de l'échange est envoyée au fournisseur de liquidités qui a rendu cet échange possible ou a ajouté de la liquidité pour cet actif échangeable donné. Toutes les conditions mettant en lumière les scénarios d'échange, les frais de trading et les conditions de non-conformité et d'échec de l'échange sont codées comme un Smart Contract, qui est stocké dans la chaîne sous forme de code de contrat.

Caractéristiques des contrats intelligents

Nous ne pouvons pas plonger profondément dans la lecture, l'écriture et l'audit des contrats si nous ne sommes pas conscients de leurs caractéristiques. Voici les traits standard des contrats intelligents dont il faut être conscient :

Quelques caractéristiques d'un contrat intelligent standard : BeInCrypto

Contrats programmables

Les contrats intelligents ne sont que des morceaux de code. Vous pouvez écrire des contrats intelligents pour exécuter des commandes et des scénarios en fonction de conditions spécifiques. C'est pourquoi les développeurs de contrats intelligents et les programmeurs sont actuellement très demandés, car la plupart des DeFil'espace repose déjà sur des contrats intelligents pour traiter des cas complexes comme la gestion des frais de transaction à travers les pools de liquidité, le maintien APYratios, et plus encore.

Sans confiance

Les contrats intelligents résidant sur la blockchain éliminent l'intervention humaine. Cela les rend entièrement sans confiance. Par exemple, si un spécifique DeFiprotocole, régi par des contrat(s) intelligents, accepte de liquider vos actifs une fois que la valeur tombe en dessous d'un seuil, aucune intervention humaine ne peut ou ne doit l'arrêter. Le code gère le paiement, la performance, la gestion et l'application des règles, rendant tout l'espace complètement sans confiance.

Autonome

Comme mentionné précédemment, les contrats intelligents sont chargés d'ensembles d'instructions auto-exécutantes. En termes de codage, cela signifie avoir des itérations et des boucles intégrées dans le canevas de base. Cela garantit que des tâches telles que les paiements, les retraits, les dépôts, la pénalisation des validateurs via le slashing, et plusieurs autres tâches sont gérées de manière autonome.

Sécurisé

Et enfin, comme les contrats intelligents sont sécurisés à l’aide de la cryptographie, il est incroyablement difficile de les violer. Sans vulnérabilité intégrée, contourner un contrat intelligent signifierait essayer de le violer au grand jour, devant l’ensemble de la blockchain.

Vérifiable

Les transactions traitées via les contrats intelligents sont auto-vérifiables. Cela signifie que l'exécution est une preuve suffisante que la transaction a eu lieu en premier lieu, car aucun élément humain n'est impliqué. Le mécanisme d'auto-vérification donne aux contrats intelligents un avantage sur les contrats traditionnels régissant les configurations bancaires héritées.

Donc la prochaine fois que vous prévoyez de lire un smart contract, assurez-vous que le gabarit ou la documentation comporte toutes les caractéristiques mentionnées.


Une version simplifiée des contrats intelligents: Reddit

Lecture des contrats intelligents basée sur les caractéristiques

Voici un contrat intelligent simple représentant un compte de consignation. Les utilisateurs déposent leurs fonds dans la consignation, qui les transfère ensuite au destinataire après un certain laps de temps.

/ SPDX-License-Identifier : MITpragma solidity ^0.8.0 ;// Basic Smart Contract Boilerplatecontract SimpleTrustlessEscrow {// Variables d’étatadresse déposant public ; // Compte déposant etheraddress payable bénéficiaire public ; // Compte recevant etheruint256 public releaseTime ; // Horodatage pour libérer ether// Evénements de vérification de l’activité du contratevent Deposited(adresse indexée _from, uint256 _value) ; event Released(adresse indexée _to, uint256 _value) ;// Le constructeur du contrat initialise le constructeur du contrat intelligent(adresse payable _beneficiary, uint256 _releaseTime) { require(_releaseTime > block.timestamp, « L’heure de publication doit être dans le futur ») ;    Sécurisé et sans confiance : le contrat lie le déposant et le déposant bénéficiaire = msg.sender ;    bénéficiaire = _beneficiary ;    releaseTime = _releaseTime ;}Fonction de dépôt – exécution autonome (fonction de secours)receive() external payable { emit Deposited(msg.sender, msg.value) ;}Libérer l’ether dans la fonction bénéficiaire release() public { // Programmable : Ne peut être exécuté qu’après releaseTime require(block.timestamp >= releaseTime, « Trop tôt pour libérer ») ;    Autonome : S’exécute automatiquement en fonction de la condition uint256 amount = address(this).balance ;    bénéficiaire.transfert(montant) ;    emit Libéré(bénéficiaire, montant) ;}}

Alors que nous allons décrypter et lire ce smart contract en détail, vérifions d'abord s'il respecte les caractéristiques de contrat mentionnées.

La partie "programmable"

Regardez de près le contrat pour ce morceau de code :

require(block.timestamp >= releaseTime, "Trop tôt pour libérer");

uint256 montant = address(this).balance;

bénéficiaire.transfert(montant);

Les fonds ne doivent être débloqués que lorsqu’une condition spécifique de releaseTime est remplie, ce qui rend ces contrats programmables.

La partie "sans confiance"

Voici un petit extrait de code rapide ci-dessus :

déposant = msg.sender ;

bénéficiaire = _bénéficiaire;

releaseTime = _releaseTime;

Dans le contrat, tout le monde est lié par le code, du déposant à la personne recevant les fonds. Personne n'a besoin d'interagir ou de faire confiance à l'autre car la fonction de transfert de fonds est liée par releaseTime - un paramètre basé sur le code.

La partie “autonome”

Voici la partie "libération de fonds" du code :

 function release() public {require(block.timestamp >= releaseTime, “Trop tôt pour libérer”);uint256 amount = address(this).balance;beneficiary.transfer(amount);emit Released(beneficiary, amount);}

L'ensemble du processus est autonome, car les fonds ne sont libérés que lorsque le releaseTime répond à un certain critère. Remarquez que le code n'est pas partiellement programmable mais entièrement autonome.

D’autres éléments du code du contrat intelligent, notamment la fonction de dépôt, peuvent également être rendus complètement autonomes en fonction des fonctionnalités que vous souhaitez inclure. Par exemple, vous pouvez lancer un plan de dépôt récurrent chaque fois que l’utilisateur portefeuillecroise les 100 $, avec le montant excédentaire transféré au bénéficiaire.

La partie "sécurisée"

Se préoccuper de l’élément qui se prête sécuritéau contrat ? Consultez cette partie du code :

constructor(address payable _beneficiary, uint256 _releaseTime) {require(_releaseTime > block.timestamp, « L’heure de libération doit être dans le futur ») ; déposant = msg.sender ; bénéficiaire = _beneficiary ; releaseTime = _releaseTime ;}

Remarquez comment il y a une préséance définie de la fonction releaseTime par rapport au timestamp. Rien n'est aléatoire, et les conditions doivent être remplies.

La partie "vérifiable"

Chaque transaction associée au contrat intelligent est enregistrée au sein de la chaîne, grâce à des éléments d’activité de journal distincts.

Événement Déposé(address indexé _from, uint256 _valeur);

event Released(adresse indexée _to, uint256 _value) ;

emit Deposited(msg.sender, msg.value) ;

emit Released(bénéficiaire, montant);

Lecture d'autres parties d'un contrat intelligent

Maintenant que nous avons identifié les éléments qui définissent les caractéristiques d'un contrat intelligent, voici les autres éléments du contrat pour vous aider à mieux comprendre le sujet.

Pragma solidité ^0.8.0; – La version du langage de programmation Solidity nécessaire pour écrire ce contrat intelligent.

// SPDX-License-Identifier: MIT - Termed Software Package Data Exchange, this identifier states the license of the code release. It is advisable to include this to let people know if it’s open source and can be worked around or not.

Contrat TimeLock { - Attribue un nom au contrat intelligent, comme une étiquette.

Adresse du déposant public; - Comme le contrat implique un déposant et un bénéficiaire, c'est à ce moment que l'adresse publique du déposant est mentionnée. Cette variable est le Portefeuille Ethereumadresse et est visible publiquement.

Adresse payable publique du bénéficiaire; – Il s'agit de l'adresse publique du bénéficiaire où l'entiercement transfère des fonds. Elle est également lisible et confère une impression de transparence aux contrats intelligents alimentés par la blockchain.

Uint256 public releaseTime; – Comme il s'agit d'un contrat à durée déterminée, le uint256 attribue la variable basée sur le temps au contrat. Ce sera le délai selon lequel les fonds seront libérés.

En Solidity, uint (entier non signé) est la manière d'attribuer des valeurs basées sur des entiers. Le suffixe 256 représente un grand espace de stockage de nombres.

après 5 ans à écrire des smart contracts, je réalise seulement aujourd'hui que le logo de Solidity est le logo d'Ethereum déplié 🨯pic.twitter.com/wlM369Eff9
— kaden.eth ( @0xKaden) 8 juillet 2023

Vous pouvez envisager de lire Documentation de Soliditypour se familiariser avec la syntaxe, les expressions et les autres éléments de code.

Autres éléments

constructeur(adresse payable _bénéficiaire, uint256 _releaseTime) { - Le "Constructeur" est une fonction spéciale unique qui est appelée lors du déploiement du contrat intelligent. Il met le contrat en mouvement. Remarquez comment, à ce stade, toutes les variables d'adresse que nous avons précédemment déclarées sont appelées et initialisées.

Receive() external payable { – Il s'agit d'une fonction spéciale appelée lorsque des fonds sont transférés à l'adresse du contrat depuis l'extérieur. External suggère de l'extérieur, et "Payable" définit la nature du transfert, c'est-à-dire recevoir des jetons ERC-20.

function release() public { - Il s'agit d'une fonction publique qui indique le mouvement des jetons ERC-20 de l'adresse du contrat au bénéficiaire. Cette fonction dépend de releaseTime.

Tous ces éléments font partie du contrat d'entiercement hypothétique que nous avons discuté. Assurez-vous de parcourir l'ensemble de la documentation sur la Solidité pour mieux comprendre le langage.

Connaître les éléments avant de planifier l'écriture de contrats intelligents: BeInCrypto

DApps et smart contracts : la relation

À ce stade, vous devriez avoir une longueur d'avance dans la lecture et la compréhension d'un contrat intelligent déjà écrit. Et de nombreux contrats intelligents comme ceux que nous avons discutés font l'arrière-plan d'une application décentralisée — un blockchainversion d'une application mobile standard.

Toutes les caractéristiques d’un contrat intelligent, y compris la sécurité des contrats, l’exécution autonome et programmable, l’absence de confiance des transactions, etc., sont facilement mises en œuvre lors du développement d’une application décentralisée. Ainsi, la prochaine fois que vous tomberez sur une DApp, notez qu’il s’agit d’un backend alimenté par un contrat intelligent hébergé sur la blockchain, ce qui vous permet d’initier plusieurs tâches sans intervention humaine. Les contrats intelligents forment la logique des DApps.

Blockchains pour les smart contracts

Nous savons qu'Ethereum vous permet de développer des smart contracts, comme une solution logicielle massive. Cependant, ce n'est pas le seul protocole blockchain disponible. Si vous souhaitez plonger profondément dans le monde du développement de smart contracts, vous voudrez peut-être regarder d'autres blockchains. Les différents blockchains ont des terminologies différentes lorsqu'il s'agit d'établir des contrats.

Mais d'abord, parlons Ethereum— la plateforme de prédilection pour la plupart des développeurs de smart contracts.

Ethereum

Les contrats intelligents sur Ethereum sont écrits dans le langage de programmation Solidity. Et l'interface de jeton pour cette plateforme de développement de contrats intelligents est ERC-20.

Vous pouvez revenir au contrat intelligent basé sur l'entiercement que nous avons discuté plus tôt pour voir comment un contrat intelligent standard basé sur Etheruem est écrit.

Même le lancement d'un jeton ERC-20 sur la blockchain Ethereum est une fonctionnalité intensive en contrat intelligent, quelque chose que nous discuterons en profondeur lors de l'écriture d'un contrat intelligent.

Voici à quoi ressemble une structure de code de base, à condition que nous prévoyions de lancer une nouvelle crypto-monnaie BIC.

Considérez ceci comme un scénario hypothétique. Pas exactement le lancement d'une cryptomonnaie BIC.

pragma solidité ^0.8.0;importer "@openzeppelin/contrats/jeton/ERC20/ERC20.sol";contrat BICToken est ERC20 {    constructeur(uint256 offreInitiale) ERC20("Jeton BIC", "BIC") {        _mint(msg.sender, offreInitiale);    }}

Nous discuterons de chaque élément de ce code plus tard lors de la rédaction de notre contrat intelligent.

Autres blockchains

Comme Ethereum, vous pouvez même créer des contrats intelligents sur des plateformes comme Solana, en utilisant Rust et Cardano, en utilisant Plutus, un sous-ensemble de Haskell, un langage de programmation fonctionnel.

"Est-ce que Cordona a même des contrats intelligents ?"
Tu te moques de moi, mon ami. #CardanoADA pic.twitter.com/j8SXCu72Sd
— Willybot 🇦🇺 (@wilbot28) 9 juillet 2023

Voici ce qu’est une structure de code en Rust (Solana) ressemble à :

Note : Il s'agit d'un contrat simple où un compteur est incrémenté.

use anchor_lang::prelude::*;declare_id!(“Fg6PaFpoGXkYsidMpWTK6W2BeZ7FEfcYkg476zPFsLnS”);#[program] pub mod hello_world {use super::*;pub fn initialize(ctx: Context<Initialize>) -> ProgramResult {    let greeting_account = &mut ctx.accounts.greeting_account;    greeting_account.counter = 0;    Ok(())}pub fn increment(ctx: Context<Increment>) -> ProgramResult {    let greeting_account = &mut ctx.accounts.greeting_account;    greeting_account.counter += 1;    Ok(())}}

Saviez-vous ? Alors que Rust est le langage de programmation pour la création de contrats intelligents basés sur Solana, Ancreest le cadre de développement de contrat intelligent qui est utilisé. Pour créer des contrats intelligents en utilisant Rust, les développeurs doivent extraire des modules du cadre Anchor - quelque chose la première ligne de notre code d'exemple (utiliser anchor_lang::prelude::*;) représente.

Documentation de Solanavous aidera à comprendre le langage de contrat intelligent spécifique à Rust.

De même, Cardano suit Plutus comme choix de langage, suivi du langage Ink!Polkadot, TEAL pour Algorand, C# pour NEO, et plus encore. Il est conseillé de bien comprendre la documentation propre à chaque chaîne avant de commencer à rédiger des contrats intelligents compatibles.

Pourquoi devriez-vous apprendre à lire les contrats intelligents ?

La capacité d'écrire des contrats intelligents est très reconnue, mais même savoir lire comporte ses propres avantages :

  1. La capacité d'apprendre les complexités de l'automatisation associées aux applications DeFi.
  2. Analyser les normes de propriété associées à l'actiftokenisation.
  3. Comprendre comment organisations autonomes décentralisées (DAO)fonction.
  4. Comprendre et mettre en œuvre la logique axée sur les cas d'utilisation liés à l'assurance, à la monétisation du contenu,vote redevances, et d’autres secteurs verticaux.

Comment écrire des contrats intelligents

Maintenant que la lecture des contrats intelligents est terminée, concentrons-nous sur l'écriture de contrats intelligents. Avant de plonger plus en profondeur, il est nécessaire de réitérer que différentes blockchains peuvent avoir des normes et des langages différents liés au développement de contrats intelligents. Il est nécessaire de se concentrer sur les normes définies par une blockchain donnée pour commencer à écrire et déployer des contrats.

Pour la majorité de notre discussion, nous nous concentrerons sur Ethereum en tant que chaîne et Solidity en tant que langage.

Le rôle de la programmation

La programmation d'un smart contract est facilement la partie la plus importante du cycle de développement. Et pour se lancer dans le développement de smart contracts sur Ethereum ou tout autre blockchain, vous devriez avoir une certaine expérience avec des langages de programmation non-blockchain comme Javascript.

Différentes blockchains et le langage pour écrire des contrats intelligents: BeInCrypto

La capacité de programmer un contrat intelligent vous permet d'implémenter la logique, de gérer les éléments de sécurité de celui-ci, d'optimiser le code pour Frais de gaz, personnalisez la même, voire rendez-la interopérable si nécessaire.

EVM et contrats intelligents : un aperçu du terrain

Toute personne qui prévoit d'écrire des smart contracts sur Ethereum doit comprendre ce qu'est la Machine Virtuelle Ethereum (EVM) et comment elle fonctionne avec les smart contracts. Pour commencer, l'EVM est un composant d'Ethereum qui offre aux programmes un environnement isolé et contrôlé pour fonctionner. Considérez ceci comme un ordinateur mondial qui héberge chaque morceau de code de contrat présent sur Ethereum. Chaquenœudsur le réseau Ethereum fonctionne l'EVM.

Si vous aspirez à devenir un développeur de contrats intelligents, voici ce que vous devez savoir concernant les contrats intelligents et l'EVM.

Une fois que vous avez écrit le programme en Solidity, qui est un langage de haut niveau, vous devez le compiler en bytecode - un format de bas niveau compréhensible par la machine. Ce bytecode est intégré dans la blockchain Ethereum et y réside. Toute personne interagissant avec le smart contract doit envoyer une transaction à l'adresse du contrat.

Chaque nœud avec l'EVM installé peut voir cette transaction, et une fois que les validateurs l'approuvent, le code du contrat intelligent est exécuté. Comme chaque nœud a une visibilité sur la transaction, rien ne peut être falsifié, et le code s'exécute tel qu'il a été écrit. Et une fois que le code est exécuté, l'état de la blockchain change, rendant le processus de bout en bout et complètement transparent.

Est-ce que quelqu'un peut écrire un contrat intelligent?

Écrire des contrats intelligents nécessite des compétences techniques. Mais ce n'est pas tout. Vous devez également comprendre parfaitement le fonctionnement de la technologie blockchain, ainsi que les besoins spécifiques en matière de langage pertinents pour la blockchain que vous ciblez.interopérabilité, et plus encore. En plus de cela, vous devez également connaître assez bien les vulnérabilités des contrats intelligents - les choses à éviter lors de l'écriture de code. Enfin, la connaissance des tests de contrat et du déploiement de contrat est également indispensable.

Tout cela peut devenir accablant. Voici donc une feuille de triche rapide pour commencer :

  1. Commencez par choisir la plateforme ou la chaîne avec laquelle vous souhaitez travailler.
  2. Apprenez le langage de programmation associé à la chaîne, comme Solidity pour Ethereum.
  3. Apprenez à utiliser des outils de développement tels que l'environnement de développement intégré comme Remix.
  4. Commencez par rédiger votre premier contrat, puis testez-le en utilisant des testnets.
  5. Une fois que vous êtes satisfait des éléments du code, vous pouvez le déployer on-chain. N'oubliez pas que le déploiement du contrat on-chain entraînera des frais sous forme de frais de gaz.

Voici un fil rapide avec quelques astuces pour écrire de meilleurs contrats intelligents :

🥧 FREI-PI
‼️ Pourquoi les développeurs de smart contract DOIVENT savoir cela !
Fonction :
- Exigences
– Effets
– Interactions
Protocole
- Invariants
C'est le modèle auquel vous devriez tous penser lors de la construction de contrats intelligents.
Voici pourquoi 👇
— Patrick Collins ( @PatrickAlphaC) 6 juillet 2023

Plonger dans la programmation

Il est temps d'entrer dans les aspects techniques du développement de contrats intelligents. Même si des chaînes telles que Solana et Cardano vous permettent de développer des contrats intelligents, Ethereum reste la plateforme de développement de contrats intelligents la plus populaire.

Le saviez-vous ? Rien qu'en 2022, plus de 100 000 applications décentralisées ont été ajoutées au réseau Ethereum.

Pourquoi Ethereum?

Ethereum a une énorme communauté de développeurs. Tout ce que vous développez attirera immédiatement l'attention. De plus, son langage natif, Solidity, est relativement facile pour les personnes qui maîtrisent Python ou JavaScript. Enfin, le logiciel global d'Ethereum, EVM, facilite l'exécution transparente des contrats.

Si vous faites partie de la majorité et préférez utiliser Ethereum et Solidity, voici une liste rapide des choses à suivre avant de commencer le développement de contrats intelligents :

  1. Pragmas ou la version du compilateur
  2. Définition de contrat pour l'étiquetage
  3. Variables d'état pour stocker des données
  4. Événements pour l'enregistrement EVM
  5. Modificateurs pour accorder des droits spécifiques à des entités spécifiques
  6. Fonctions ou les activités du contrat intelligent en jeu
  7. Héritage pour l'interopérabilité
  8. Compréhension des structures de contrôle comme if, else, for loops, des types de données comme string, integer, et plus encore.

Écrire et déployer le premier contrat intelligent

Maintenant que nous savons comment les choses se passent sur la chaîne, plongeons-nous dans l’écriture et le déploiement du premier contrat intelligent. Même si « Hello World » reste la première étape, nous allons commencer par créer un contrat intelligent pour lancer un jeton BIC hypothétique avec une offre débloquée à 100 % de 1 million.

Les bases

La première étape consiste à installer la dernière version de Node.js et le NPM ou Node Package Manager. Cela prend en charge les outils de développement et l'environnement local de développement. De plus, Node.js et NPM vous permettent de configurer le front-end web pour votre smart contract.

Maintenant, vous devez configurer un IDE pour écrire le code du contrat. Pour cela, vous pouvez rapidement installer Visual Studio Code. Ou vous pouvez couper le désordre et hopsur Alchemy - une plateforme de développement blockchain. Avec Alchemy, vous pouvez obtenir de l'ETH de testnet. Cela couvrira les frais de gaz lorsque vous déployez le smart contract sur le testnet Goerli ou même le testnet Sepolia.

Notez que Sepolia est un testnet plus récent et prend donc moins d'espace disque en ce qui concerne le déploiement du nœud.

Pour l'instant, nous persisterons avec le testnet Goerli car il a un plus grand nombre d'applications déployées.

Avec le testnet et l'ETH factice prêt, passons à l'écriture spécifique du contrat intelligent. Voici un extrait de code pour créer un jeton BIC avec un approvisionnement fixe de 1 million.

Note : Nous déploierons notre contrat intelligent localement sur MacOS et non sur le testnet. Pour le déploiement des contrats intelligents sur testnet et mainnet, nous aurons une pièce séparée, qui est en dehors du cadre de cette discussion.

Étapes pour écrire et déployer

Voici l’extrait de code simple pour le jeton hypothétique :

pragma solidité ^0.8.0;importer "@openzeppelin/contrats/token/ERC20/ERC20.sol";contrat BICToken est ERC20 {    constructeur() ERC20("BIC Token", "BIC") {        _mint(msg.sender, 1000000 * 10 ** décimales());    }}

Si vous connaissez la syntaxe, vous sauriez ce que signifie chaque composant de code. En ce qui concerne le OpenzepplinEn partie, c'est la bibliothèque de référence pour l'importation de contrats intelligents ERC-20. Cette bibliothèque offre les normes opérationnelles de base pour les jetons ERC-20.

La fonction mint parle de l'approvisionnement initial, qui est déployé à l'adresse du contrat intelligent ou du msg.sender.

Pour configurer ce code localement et le tester, nous aurons besoin de trois composants:

  1. Node.js et NPM (déjà discutés) : fonctionne comme un moteur pour alimenter vos contrats intelligents
  2. Truffe: Fonctionne comme une boîte à outils, vous aidant à organiser le code, les scripts et d’autres parties d’un contrat
  3. Ganache: Fonctionne comme un terrain de jeu virtuel, sur l'appareil. Pensez-y comme à une blockchain personnelle.

Qu'est-ce que l'exécution de contrat?

Si vous avez suivi le processus détaillé d'écriture d'un contrat intelligent, il est impératif de connaître un peu le processus d'exécution du contrat. Il s'agit d'un processus par lequel le code du contrat intelligent est exécuté sur une chaîne par les nœuds.

C'est l'uniformité associée à l'exécution du contrat qui rend les smart contracts transparents et immuables. Commençons maintenant à comprendre le processus en plusieurs étapes associé à l'exécution du contrat :

Étape 1

Les extraits de code que nous avons écrits doivent être exécutés quelque part. Dans le cas des contrats intelligents, cet endroit d'exécution est la blockchain. Les nœuds ou les membres participants de la chaîne aident à exécuter le contrat.

Étape 2

Les nœuds acceptent la responsabilité d'exécuter des blocs de code de contrat en retour d'incitations liées à la chaîne. Chaque commande ou action qui se produit au sein de la chaîne est dirigée par des contrats intelligents.

Étape 3

Chaque smart contract a une adresse spécifique. Pour exécuter le contrat, des transactions sont envoyées à cette adresse de contrat. Notez que chaque nœud exécute l'EVM, qui possède alors une copie du code du smart contract, ce qui rend plus facile la vérification de l'authenticité des transactions.

Étape 4

Les transactions ciblant le contrat intelligent sont sélectionnées par les validateurs, qui les incluent ensuite dans des blocs spécifiques.

Étape 5

Une fois que la transaction est poussée et validée avec succès, elle devient une partie de la blockchain. La fonction de contrat intelligent associée à la transaction est alors appelée et exécutée à travers les nœuds de la blockchain.

Étape 6

Chaque nœud exécutant le contrat intelligent doit parvenir à une conclusion déterministe — la même sortie pour le même ensemble d'entrées — rendant la nature des contrats totalement sans confiance et transparente.

Remarque : Toute erreur concernant l'exécution du code ou des problèmes liés aux frais de gaz annule les transactions. Cela signifie que la transaction basée sur un code de contrat intelligent spécifique cessera d'exister. C'est exactement ce qui se passe avec prêts flashlorsque l'incapacité de respecter des normes spécifiques inverse complètement la transaction, donnant ainsi l'impression que les fonds n'ont même pas bougé en premier lieu.

Chaque changement d'état associé aux contrats intelligents est enregistré dans la blockchain et devient une partie immuable de celle-ci.

Développement de contrats intelligents et meilleures pratiques

Maintenant que vous en savez un peu sur les smart contracts, voici quelques points pour commencer le développement de contrats :

  1. Lors de la rédaction de contrats, il est conseillé de s'appuyer sur des bibliothèques de confiance comme celles d'OpenZeppelin pour respecter les normes d'optimisation du code et de sécurité souhaitées.
  2. L'idée est de garder le contrat modulaire et plus simple, ce qui le rend plus facile à tester et à examiner.
  3. Une bonne idée est de mettre en œuvre des contrôles d'accès spécifiques au contrat. Cela signifie déclarer des morceaux de code où seule une personne ou entité spécifique peut modifier les traits cruciaux du contrat. Le contrôle d'accès facilite la sécurisation des contrats intelligents.
  4. Lors de la rédaction d'un contrat, prévoyez toujours des dispositions pour gérer les cas limites et les exceptions, tout en rédigeant plusieurs tests.

Prendre soin de la durabilité du code

Chacune des pratiques mentionnées ci-dessus contribue à l'optimisation du code et à la mise en œuvre de mesures de sécurité spécifiques. Cependant, il existe quelques pratiques spécifiques aux contrats que vous devez suivre et mettre en œuvre pour assurer la durabilité du code. L'objectif est de maintenir le code du contrat léger et utilisable afin que chaque nœud exécutant la même opération n'ait pas à consacrer une grande puissance de calcul à la même tâche.

  1. Gérez le stockage efficacement en utilisant des ensembles de données plus petits. Par exemple, lors de l'écriture d'un contrat, utilisez uint8 comme valeur opérationnelle au lieu de uint256.
  2. Lors de la rédaction d'un contrat, il est conseillé d'optimiser le code en regroupant plusieurs opérations en une seule. Nous approfondirons ce sujet dans notre article détaillé sur "rédiger des contrats intelligents".
  3. Une bonne idée est d'utiliser l'évaluation paresseuse en ce qui concerne l'exécution du contrat intelligent. De cette façon, vous n'avez besoin d'exécuter une fonction que lorsque c'est nécessaire et pas à chaque fois que quelque chose est poussé à l'adresse du contrat intelligent.
  4. Enfin, compter sur des calculs hors chaîne est également un bon moyen de se concentrer sur la durabilité. Cela permet de réduire les exigences en frais de gaz et peut même accélérer l'exécution du contrat.

Malgré le respect des meilleures pratiques lors de l'écriture et du développement de contrats intelligents, il est nécessaire de se concentrer sur les vulnérabilités de sécurité du contrat lors de leur déploiement sur le mainnet.

Comment auditer les contrats intelligents ?

Chaque smart contract ayant une présence sur le mainnet doit être évalué en termes de performances du code, de sécurité et d'autres caractéristiques. C'est là que l'audit - un processus rigoureux de test de contrat - prend tout son sens, vous permettant de découvrir les vulnérabilités potentielles et les faiblesses du contrat.

Voici une liste de contrôle d'audit rapide pour commencer:
Liste de contrôle incroyable pour l'audit des contrats intelligents😈
Assurez-vous de les vérifier lors de votre prochain audit✅
Je vous serais reconnaissant de retweeter, de diffuser les connaissances🫡https://t.co/ILx0C67kf8
— cholakov (@cholakovv) 7 juillet 2023

Relation entre la lecture, l'écriture et l'audit : pourquoi même auditer les smart contracts ?

Lors de la lecture et de l'écriture des contrats intelligents, il est nécessaire de bien comprendre que l'audit occupe une place spéciale, car il implique de vérifier en premier lieu la logique. En ce qui concerne l'exécution du code basé sur la blockchain, tout est immuable, et tout événement catastrophique peut avoir des conséquences irréversibles lors de l'exécution du contrat. C'est précisément pour cette raison qu'une vérification minutieuse du code du contrat et d'autres aspects via un audit est nécessaire.

Vulnérabilités des contrats et correctifs

Il peut y avoir toute une gamme devulnérabilités contractuellesqu'un audit détaillé du contrat intelligent peut identifier. Cela inclut la vérification des attaques de réentrance, des débordements ou des sous-débordements, des problèmes liés au contrôle d'accès, et plus encore. Une fois que la nature exacte du problème est déterminée, l'auditeur peut même suggérer les meilleures pratiques pour le corriger.

Violations des études et des apprentissages

Vous vous demandez toujours en quoi l'audit des contrats intelligents peut aider ? Eh bien, revenons à l'infâmeDAO hack en 2016, qui a exploité un problème de réentrée et a causé une perte de près de 3,6 millions d’ETH. De même, il y a eu le piratage du contrat de portefeuille Parity en 2017, entraînant une perte de près de 500 000 ETH. Ces problèmes auraient pu être évités avec la bonne série d’audits.


Schéma de piratage de DAO : BeInCrypto

Stratégies d’audit des contrats intelligents

Il existe de nombreuses stratégies pour auditer les contrats intelligents. Certains des plus populaires incluent :

Outils d'audit

Ces outils agissent comme le premier ensemble de défenses et sont mieux utilisés pour localiser les vulnérabilités courantes. Certains des outils les plus populaires incluent Securify, Mythril, et plus encore - capables d'effectuer une analyse statique du code, de détecter des schémas de violation, et d'aider à obtenir une avance spécifique en matière de sécurité.

Outils d'audit de contrats intelligents : BeInCrypto

Examen de code

C'est là que les examinateurs de code manuels entrent en scène, scrutant la base de code et identifiant les vulnérabilités complexes, le cas échéant. Une révision manuelle peut aider à prendre soin de la logique métier, du contexte et des schémas d'utilisation.

Voici comment les révisions de code manuelles vous aident à localiser les menaces :

Un petit jeu de questions pour nos jeunes auditeurs !
Allons-y et retweetez si vous avez trouvé le bug !pic.twitter.com/i14YtweXcz
— CharlesPaladin (@PaladinCharles) 8 juillet 2023

Scans automatiques

Des outils tels que Snyk et GuardRails aident à la numérisation automatique des contrats - une implémentation de sécurité qui est invoquée à chaque fois que le code est mis à jour. Cette forme d'audit garantit que les nouvelles modifications apportées à un code sont sûres et non invasives.

Vérification formelle

Il s’agit d’un processus complexe qui repose uniquement sur la vérification de la logique métier du code. Notez que la vérification formelle n’est pas réellement destinée à vérifier la syntaxe, mais uniquement la logique pour voir si le code s’exécute comme souhaité.

En plus des stratégies mentionnées, l’audit des contrats intelligents peut également être initié à l’aide d’examens par les pairs, de programmes de bug bounty et de couvertures de test via des outils tels que la couverture Solidity pour maximiser l’efficacité.

Un moyen simple d'auditer les contrats intelligents : BeInCrypto

Comment réviser le code correctement?

Si vous êtes nouveau dans l'audit des contrats intelligents, il est important de noter qu'il existe deux façons d'analyser largement le code et d'identifier les problèmes. Celles-ci incluent :

Analyse statique

Ce type d'analyse de code aide à identifier les vulnérabilités de sécurité de base, les erreurs de codage et d'autres problèmes selon les normes de codage données et les conventions. Les menaces telles que les appels non vérifiés aux sources externes, les débordements d'entiers, et plus encore peuvent être mis en évidence à l'aide de l'analyse statique. La meilleure chose à propos de l'analyse statique est que le code n'a pas besoin d'être exécuté pour être vérifié.

Analyse dynamique

Cette approche de l’audit teste l’alignement du code avec l’EVM. Au lieu de se contenter de vérifier le code, l’analyse dynamique recoupe la réponse des contrats intelligents à un large éventail d’entrées. L’analyse dynamique permet d’identifier des problèmes tels qu’une consommation de gaz incohérente et même une logique contractuelle erronée. Les environnements de blockchain personnels comme Ganache peuvent fonctionner comme des plateformes d’analyse dynamiques, permettant aux développeurs d’effectuer des transactions, d’exécuter des commandes et de faire bien plus avec leurs contrats.

Test d'un morceau de code réel

Voici un extrait de contrat intelligent qui fonctionne comme un stockage de fonds, avec une fonction de retrait:

pragma solidité ^0.6.1;contrat ContratVulnérable {    mapping(address => uint256) public balances;    function deposit() public payable {        balances[msg.sender] += msg.value;    }    function withdraw(uint256 _amount) public {        require(balances[msg.sender] >= _amount, "Solde insuffisant.");        (bool succès, ) = msg.sender.call{value: _amount}("");        require(succès, "Échec du transfert.");        balances[msg.sender] -= _amount;    }}

Si vous regardez de près le code, il y a une vulnérabilité clé :

Dans le cas précédent, la fonction "retirer" peut être appelée à nouveau si l'utilisateur recevant les fonds est également un smart contract, bien que malveillant. Par conséquent, avant que la dernière fonction ou la mise à jour du solde ne se produise, une attaque de réentrance peut être lancée pour transférer des fonds supplémentaires. Les auditeurs expérimentés identifient ce type de vulnérabilité.

Voici le code corrigé pour la même chose :

fonction retirer(uint256 _montant) public {    require(soldes[msg.sender] >= _montant, "Solde insuffisant.");    soldes[msg.sender] -= _montant;    (bool succes, ) = msg.sender.call{value: _montant}("");
require(success, “Transfer failed.”);}

Vérifiez comment la fonction de mise à jour du solde est appelée d'abord, puis le premier mouvement vers l'utilisateur. Ce changement dans l'ordre des opérations est ce qui corrige le contrat.

Chaînes non-Ethereum et examen de code

Le monde des applications décentralisées et des contrats intelligents a dépassé Ethereum. Même si la majeure partie de l'action se déroule encore dans l'écosystème Ethereum, il existe d'autres chaînes comme Cardano, Solana, et d'autres encore qui prennent en charge les contrats intelligents et nécessitent des normes d'audit différentes.

Pourquoi chaque plateforme est-elle unique?

Les différentes blockchains utilisent des langages de programmation différents. Les sémantiques, la syntaxe et les propriétés du code sont différentes, ce qui rend les contrats intelligents réactifs à différentes pratiques d'écriture et d'audit. Par exemple, Ethereum utilise Solidity, tandis que Polkadotutilise de l'encre et de la rouille, ce qui le rend réactif à des normes d'audit spécifiques.

Outils pour passer à une autre plateforme que Ethereum

Maintenant, si vous voulez aller au-delà d'Ethereum, il existe quelques outils d'audit spécialisés pour vous aider à démarrer. Par exemple, avec Cardano, il y a la suite Marlowe pour la vérification formelle et l'audit. En ce qui concerne Solana, les libfuzzer spécifiques à Rust et cargo-fuzz sont destinés à l'audit et aux tests de contrat. Un auditeur multi-chaîne doit être familier avec ces concepts pour éviter les vulnérabilités du contrat.

Quels sont les différents types d'audit de contrats intelligents ?

Pour réitérer, vous pouvez séparer l'audit des contrats intelligents en trois types : manuel, automatique et hybride. Notez que les gens préfèrent les stratégies d'audit hybrides pour les contrats complexes avec une logique commerciale approfondie car elles sont les plus complètes.

Externaliser vos audits

Les organisations et les personnes ayant des connaissances minimales en codage sous-traitent souvent leurs exigences en matière de rédaction et d’audit à des entreprises réputées. Lorsqu’il s’agit d’audit, le choix de la bonne entreprise devient d’autant plus important que même si outils d'IAcommeChatGPTpeut aider à écrire du code de contrat intelligent, la vérification nécessite des insights manuels.

De plus, voici les facteurs à prendre en note lors de l'externalisation des tâches d'audit :

Choisir la bonne entreprise

Avant de vous concentrer sur la bonne société d'externalisation, il est crucial de vérifier les audits passés, d'évaluer l'expérience et même de se concentrer sur les principaux membres de l'équipe.

Comprendre les responsabilités, les coûts et les frais généraux

Avant de procéder à une embauche, prenez note des coûts et des services associés aux audits. Il est impératif de comprendre d'abord la nature des services offerts, tels que l'identification des problèmes, la résolution des problèmes, et plus encore. Vous devez également vérifier si des ré-audits sont également fournis après la mise en œuvre de la première série de correctifs. Le coût d'un audit de contrat intelligent peut varier en fonction des services, il est donc nécessaire de suivre chaque exigence et offre avant de procéder.

Meilleures pratiques d'audit de contrats intelligents

Au cas où vous voudriez abandonner une entreprise et auditer vous-même les contrats intelligents, voici les meilleures stratégies et pratiques à garder à l'esprit :

  1. Mettez toujours l'accent sur une revue de code approfondie, y compris la syntaxe et la logique
  2. Commencez par identifier les vulnérabilités courantes à l'aide d'outils tels que Slither, MythX et plus encore
  3. Parcourez le Registre de classification des vulnérabilités des contrats intelligents ou SWC pour localiser les vulnérabilités connues et les vérifier à l'avance.
  4. Testez rigoureusement les smart contracts, y compris les tests d'intégration, les tests unitaires et plus encore, pour tester le code dans un large éventail de scénarios.
  5. Il est important de vérifier les chances d'attaques de réentrance spécifiquement. La meilleure façon de lutter contre cela est de vérifier les appels récursifs que les pirates peuvent effectuer avant la première fonction de contrat intelligent.
  6. Concentrez-vous sur les fonctions qui conduisent à des appels externes. Une erreur à cet égard peut altérer l'état et le flux de contrôle, ce qui n'est pas souhaitable.
  7. Gardez toujours un œil sur les morceaux de code qui indiquent l'utilisation de gaz. Vous ne voulez pas que votre contrat initie des interactions qui sont prohibitivement chères.

Développement de contrats intelligents et IA : l'avenir

L’intelligence artificielle facilite en effet l’écriture de contrats intelligents. Cependant, indépendamment de l’innovation en matière d’IA, la capacité d’auditer les contrats intelligents de la meilleure façon possible nécessite toujours une intervention humaine. Par conséquent, si vous envisagez de créer votre prochain produit web3 en mettant l’accent sur les contrats intelligents et les applications décentralisées, il est crucial de vous concentrer religieusement sur les meilleures ressources d’audit pour vos contrats intelligents. Avec les piratages et les violations de crypto-monnaie qui font surface chaque jour qui passe et les pirates qui planifient de nouvelles stratégies pour percer, l’audit d’un contrat à la perfection est certainement l’un des ensembles de compétences modernes les plus importants.

Avertissement :

  1. Cet article est reproduit à partir de [Gate.io]Beincrypto] et les droits d'auteur appartiennent à l'auteur original [Ananda Banerjee]. En cas d'objections à la reproduction, veuillez contacter l'équipe Gate Learn, et l'équipe la traitera rapidement selon les procédures pertinentes.
  2. Avertissement : Les points de vue et opinions exprimés dans cet article ne représentent que les points de vue personnels de l'auteur et ne constituent aucun conseil en investissement.
  3. Les autres versions linguistiques de l'article sont traduites par l'équipe Gate Learn. Sans mentionner Gate.io, il n'est pas permis de copier, de diffuser ou de plagier les articles traduits.
Empieza ahora
¡Registrarse y recibe un bono de
$100
!