Bài học 4

Interactions et déploiement de Smart Contract

Les contrats intelligents peuvent interagir avec d’autres contrats sur la blockchain Ethereum, permettant des appels de fonction, la lecture de variables et le transfert d’Ether ou de jetons.

Interagir avec des contrats externes

Les contrats intelligents peuvent interagir avec d'autres contrats sur la blockchain Ethereum, leur permettant d'appeler des fonctions, de lire des variables et d'envoyer de l'Ether ou des jetons. Une façon de faciliter cette interaction est d'utiliser Web3j, une bibliothèque Java légère pour travailler avec Ethereum. Web3j peut auto-générer du code d'enveloppe de contrat intelligent, permettant un déploiement et une interaction transparents avec des contrats intelligents à partir de la JVM.

Pour interagir avec des contrats externes en utilisant Web3j, vous devrez d'abord compiler votre smart contract et générer le code wrapper. Vous pourrez ensuite créer et déployer votre smart contract ou utiliser un contrat existant, ce qui facilite les transactions et les appels directs aux méthodes du smart contract.

Événements et journaux

Les événements sont cruciaux pour suivre et surveiller l'activité des contrats intelligents sur la blockchain. Ils fournissent un moyen d'émettre des journaux qui peuvent être stockés et récupérés ultérieurement par des systèmes hors chaîne. Les événements facilitent le suivi d'événements contractuels spécifiques ou de changements dans les variables d'état, ce qui est particulièrement utile pour les dApps (applications décentralisées) qui nécessitent des mises à jour en temps réel.

Les journaux sont les enregistrements émis par les événements et sont stockés sur la blockchain. Ils sont une partie essentielle de l'écosystème Ethereum, car ils permettent une communication efficace entre les contrats intelligents et les systèmes hors chaîne. Les journaux sont également indexés, ce qui facilite aux applications de filtrer et de rechercher des événements spécifiques ou des points de données.

Exemple : Déploiement d'un contrat intelligent en utilisant Remix et MetaMask

Étape 1 : Ouvrez Remix IDE
Tout d'abord, ouvrez l'IDE Remix (https://remix.ethereum.org/dans votre navigateur web.

Étape 2 : Créer un nouveau fichier
Cliquez sur le bouton “+” dans le coin supérieur gauche de l'IDE pour créer un nouvel espace de travail vierge. Ensuite, cliquez sur la page “Nouveau fichier” pour créer un nouveau fichier

Nommez le fichier “Auction.sol”.

Étape 3: Définir le contrat
Copiez et collez le code suivant dans le nouveau fichier "Auction.sol":

TypeScript// SPDX-License-Identifier : MIT// Spécifier la solidité versionpragma solidity ^0.8.0 ;// Définir le contrat d’enchères Auction { // Déclarer les variables d’état adresse payable public owner ; // Le propriétaire du contrat (peut annuler l’enchère) uint public startBlock ; // Le numéro de bloc auquel l’enchère commence uint public endBlock ; // Le numéro de bloc auquel l’enchère se termine chaîne public ipfsHash ; // Hachage IPFS pour l’élément mis aux enchères bool public annulé ;  Que la vente aux enchères ait été annulée ou non, le public a pris fin ; Si l’enchère s’est terminée par l’enchère la plus élevée publique ; L’enchère la plus élevée jusqu’à présent s’adresse au public le plus offrant ; L’adresse de l’enchérisseur le plus élevé // Déclarer l’événement événement AuctionCanceled() ; Événement émis lors de l’annulation de l’enchère événement HighestBidIncreased(adresse de l’enchérisseur, montant uint) ; Événement émis lorsqu’une nouvelle enchère la plus élevée est définie event AuctionEnded(adresse gagnante, montant uint) ; Événement émis à la fin de l’enchère // Déclarer le mapping mapping(address => uint256) soldes publics ;    Constructor function constructor() { owner = payable(msg.sender) ; // Définit le propriétaire à l’adresse qui déploie le contrat startBlock = block.number ; // Définit le bloc de départ sur le numéro de bloc actuel endBlock = startBlock + 40320 ; // Définit le bloc de fin à 1 semaine (40320 blocs) après le bloc de départ ipfsHash = «  » ; Initialiser le hachage IPFS à une chaîne vide } // Fonction pour placer une fonction d’enchère placeBid() public payable { require(block.number >= startBlock && block.number <= endBlock, « L’enchère n’est pas active. ») ; // Vérifier que l’enchère est active require(msg.value > highestBid, « Il y a déjà une enchère plus élevée. ») ; // Vérifier que la nouvelle enchère est supérieure à l’enchère la plus élevée actuelle require( !canceled, « L’enchère est annulée. ») ; // Vérifier que l’enchère n’a pas été annulée        S’il y a déjà eu un enchérisseur le plus élevé, ajoutez le montant de son enchère à son solde if (highestBidder != address(0)) { balances[highestBidder] += highestBid ;    } // Définir la nouvelle enchère la plus élevée et l’enchérisseur highestBid = msg.value ;        highestBidder = payable(msg.sender) ;        Émettre un événement pour signaler qu’une nouvelle enchère la plus élevée a été définie emit HighestBidIncreased(msg.sender, msg.value) ;    } // Fonction d’annulation de l’enchère function cancelAuction() public { require(msg.sender == owner, « Seul le propriétaire peut annuler l’enchère. ») ; // Vérifier que l’expéditeur est bien le propriétaire require( !ended, « L’enchère est déjà terminée. ») ; // Vérifier que l’enchère n’est pas déjà terminée // Définir l’indicateur d’annulation et émettre un événement pour signaler que l’enchère a été annulée canceled = true ;        émettre AuctionCanceled() ;    } // Fonction pour mettre fin à l’enchère function endAuction() public { require(block.number > endBlock, « L’enchère n’est pas encore terminée. ») ; // Vérifier que l’enchère est terminée require( !canceled, « L’enchère est annulée. ») ; // Vérifier que l’enchère n’a pas été annulée require( !ended, « L’enchère est déjà terminée. ») ; // Vérifier que l’enchère n’est pas déjà terminée // Définit l’indicateur terminé et émet un événement pour signaler que l’enchère est terminée terminée = true ;        émettre AuctionEnded(highestBidder, highestBid) ;        Transférez le montant de l’enchère la plus élevée au propriétaire owner.transfer(highestBid) ;        S’il y a déjà eu un meilleur enchérisseur, ajoutez le montant de son enchère à son solde if (highestBidder != address(0)) { balances[highestBidder] += highestBid ;        } } // Fonction pour définir le hachage IPFS de l’élément mis aux enchères function setIpfsHash(string memory hash) public { require(msg.sender == owner, « Seul le propriétaire peut définir le hachage IPFS. ») ; // Vérifier que l’expéditeur est bien le propriétaire ipfsHash = hash ; // Définir le hachage IPFS à la valeur fournie }}

Ce code définit le Enchères , qui permet aux utilisateurs de placer des offres sur un objet et de mettre fin à l’enchère après une période spécifiée. Le contrat dispose également d’une fonction permettant d’annuler l’enchère et d’une fonction permettant de définir un hachage IPFS pour l’article mis aux enchères.

Étape 4: Compiler le contrat

Cliquez sur l'onglet "Solidity Compiler" dans le menu de gauche. Sous "Compiler Auction.sol", cliquez sur le bouton "Compiler". Le contrat devrait être compilé avec succès, et vous devriez voir un coche vert à côté de "Auction.sol" dans l'explorateur de fichiers.

Étape 5: Déployer le contrat

Cliquez sur l’onglet « Déployer et exécuter des transactions » dans le menu de gauche. Sous « Environnement », sélectionnez « Web3 injecté » comme environnement. Sous « Contrat », sélectionnez « Enchère » comme contrat à déployer. Cliquez sur le bouton « Déployer ».

Étape 6: Interagir avec le contrat
Une fois le contrat déployé, vous pouvez interagir avec lui en utilisant les différentes fonctions définies dans le contrat. Par exemple, vous pouvez appeler le placeBid() pour placer une enchère sur l’objet

En utilisant Remix et MetaMask, vous pouvez facilement déployer et interagir avec des contrats intelligents sur le réseau Ethereum, ce qui permet le développement et le test d'applications décentralisées dans un environnement convivial.

Points forts
Les contrats intelligents peuvent interagir avec d’autres contrats sur la blockchain Ethereum, permettant des appels de fonction, la lecture de variables et le transfert d’Ether ou de jetons.
Web3j est une bibliothèque Java légère qui facilite l’interaction avec Ethereum. Il peut générer automatiquement du code wrapper de contrat intelligent pour un déploiement et une interaction transparents avec les contrats de la JVM.
Les événements sont essentiels pour suivre et surveiller l'activité des contrats sur la blockchain. Ils émettent des journaux qui peuvent être stockés et récupérés par des systèmes hors chaîne, permettant des mises à jour en temps réel pour les dApps.
Les journaux, qui sont les enregistrements émis par les événements, jouent un rôle crucial dans la communication efficace entre les contrats intelligents et les systèmes hors chaîne. Ils sont indexés, ce qui permet de filtrer et de rechercher facilement des événements ou des points de données spécifiques.
L'exemple fourni illustre le processus de déploiement d'un smart contract à l'aide de Remix IDE et MetaMask. Il comprend des étapes telles que la création d'un nouveau fichier, la définition du contrat, sa compilation, son déploiement et l'interaction avec ses fonctions.

Tuyên bố từ chối trách nhiệm
* Đầu tư tiền điện tử liên quan đến rủi ro đáng kể. Hãy tiến hành một cách thận trọng. Khóa học không nhằm mục đích tư vấn đầu tư.
* Khóa học được tạo bởi tác giả đã tham gia Gate Learn. Mọi ý kiến chia sẻ của tác giả không đại diện cho Gate Learn.
Danh mục
Bài học 4

Interactions et déploiement de Smart Contract

Les contrats intelligents peuvent interagir avec d’autres contrats sur la blockchain Ethereum, permettant des appels de fonction, la lecture de variables et le transfert d’Ether ou de jetons.

Interagir avec des contrats externes

Les contrats intelligents peuvent interagir avec d'autres contrats sur la blockchain Ethereum, leur permettant d'appeler des fonctions, de lire des variables et d'envoyer de l'Ether ou des jetons. Une façon de faciliter cette interaction est d'utiliser Web3j, une bibliothèque Java légère pour travailler avec Ethereum. Web3j peut auto-générer du code d'enveloppe de contrat intelligent, permettant un déploiement et une interaction transparents avec des contrats intelligents à partir de la JVM.

Pour interagir avec des contrats externes en utilisant Web3j, vous devrez d'abord compiler votre smart contract et générer le code wrapper. Vous pourrez ensuite créer et déployer votre smart contract ou utiliser un contrat existant, ce qui facilite les transactions et les appels directs aux méthodes du smart contract.

Événements et journaux

Les événements sont cruciaux pour suivre et surveiller l'activité des contrats intelligents sur la blockchain. Ils fournissent un moyen d'émettre des journaux qui peuvent être stockés et récupérés ultérieurement par des systèmes hors chaîne. Les événements facilitent le suivi d'événements contractuels spécifiques ou de changements dans les variables d'état, ce qui est particulièrement utile pour les dApps (applications décentralisées) qui nécessitent des mises à jour en temps réel.

Les journaux sont les enregistrements émis par les événements et sont stockés sur la blockchain. Ils sont une partie essentielle de l'écosystème Ethereum, car ils permettent une communication efficace entre les contrats intelligents et les systèmes hors chaîne. Les journaux sont également indexés, ce qui facilite aux applications de filtrer et de rechercher des événements spécifiques ou des points de données.

Exemple : Déploiement d'un contrat intelligent en utilisant Remix et MetaMask

Étape 1 : Ouvrez Remix IDE
Tout d'abord, ouvrez l'IDE Remix (https://remix.ethereum.org/dans votre navigateur web.

Étape 2 : Créer un nouveau fichier
Cliquez sur le bouton “+” dans le coin supérieur gauche de l'IDE pour créer un nouvel espace de travail vierge. Ensuite, cliquez sur la page “Nouveau fichier” pour créer un nouveau fichier

Nommez le fichier “Auction.sol”.

Étape 3: Définir le contrat
Copiez et collez le code suivant dans le nouveau fichier "Auction.sol":

TypeScript// SPDX-License-Identifier : MIT// Spécifier la solidité versionpragma solidity ^0.8.0 ;// Définir le contrat d’enchères Auction { // Déclarer les variables d’état adresse payable public owner ; // Le propriétaire du contrat (peut annuler l’enchère) uint public startBlock ; // Le numéro de bloc auquel l’enchère commence uint public endBlock ; // Le numéro de bloc auquel l’enchère se termine chaîne public ipfsHash ; // Hachage IPFS pour l’élément mis aux enchères bool public annulé ;  Que la vente aux enchères ait été annulée ou non, le public a pris fin ; Si l’enchère s’est terminée par l’enchère la plus élevée publique ; L’enchère la plus élevée jusqu’à présent s’adresse au public le plus offrant ; L’adresse de l’enchérisseur le plus élevé // Déclarer l’événement événement AuctionCanceled() ; Événement émis lors de l’annulation de l’enchère événement HighestBidIncreased(adresse de l’enchérisseur, montant uint) ; Événement émis lorsqu’une nouvelle enchère la plus élevée est définie event AuctionEnded(adresse gagnante, montant uint) ; Événement émis à la fin de l’enchère // Déclarer le mapping mapping(address => uint256) soldes publics ;    Constructor function constructor() { owner = payable(msg.sender) ; // Définit le propriétaire à l’adresse qui déploie le contrat startBlock = block.number ; // Définit le bloc de départ sur le numéro de bloc actuel endBlock = startBlock + 40320 ; // Définit le bloc de fin à 1 semaine (40320 blocs) après le bloc de départ ipfsHash = «  » ; Initialiser le hachage IPFS à une chaîne vide } // Fonction pour placer une fonction d’enchère placeBid() public payable { require(block.number >= startBlock && block.number <= endBlock, « L’enchère n’est pas active. ») ; // Vérifier que l’enchère est active require(msg.value > highestBid, « Il y a déjà une enchère plus élevée. ») ; // Vérifier que la nouvelle enchère est supérieure à l’enchère la plus élevée actuelle require( !canceled, « L’enchère est annulée. ») ; // Vérifier que l’enchère n’a pas été annulée        S’il y a déjà eu un enchérisseur le plus élevé, ajoutez le montant de son enchère à son solde if (highestBidder != address(0)) { balances[highestBidder] += highestBid ;    } // Définir la nouvelle enchère la plus élevée et l’enchérisseur highestBid = msg.value ;        highestBidder = payable(msg.sender) ;        Émettre un événement pour signaler qu’une nouvelle enchère la plus élevée a été définie emit HighestBidIncreased(msg.sender, msg.value) ;    } // Fonction d’annulation de l’enchère function cancelAuction() public { require(msg.sender == owner, « Seul le propriétaire peut annuler l’enchère. ») ; // Vérifier que l’expéditeur est bien le propriétaire require( !ended, « L’enchère est déjà terminée. ») ; // Vérifier que l’enchère n’est pas déjà terminée // Définir l’indicateur d’annulation et émettre un événement pour signaler que l’enchère a été annulée canceled = true ;        émettre AuctionCanceled() ;    } // Fonction pour mettre fin à l’enchère function endAuction() public { require(block.number > endBlock, « L’enchère n’est pas encore terminée. ») ; // Vérifier que l’enchère est terminée require( !canceled, « L’enchère est annulée. ») ; // Vérifier que l’enchère n’a pas été annulée require( !ended, « L’enchère est déjà terminée. ») ; // Vérifier que l’enchère n’est pas déjà terminée // Définit l’indicateur terminé et émet un événement pour signaler que l’enchère est terminée terminée = true ;        émettre AuctionEnded(highestBidder, highestBid) ;        Transférez le montant de l’enchère la plus élevée au propriétaire owner.transfer(highestBid) ;        S’il y a déjà eu un meilleur enchérisseur, ajoutez le montant de son enchère à son solde if (highestBidder != address(0)) { balances[highestBidder] += highestBid ;        } } // Fonction pour définir le hachage IPFS de l’élément mis aux enchères function setIpfsHash(string memory hash) public { require(msg.sender == owner, « Seul le propriétaire peut définir le hachage IPFS. ») ; // Vérifier que l’expéditeur est bien le propriétaire ipfsHash = hash ; // Définir le hachage IPFS à la valeur fournie }}

Ce code définit le Enchères , qui permet aux utilisateurs de placer des offres sur un objet et de mettre fin à l’enchère après une période spécifiée. Le contrat dispose également d’une fonction permettant d’annuler l’enchère et d’une fonction permettant de définir un hachage IPFS pour l’article mis aux enchères.

Étape 4: Compiler le contrat

Cliquez sur l'onglet "Solidity Compiler" dans le menu de gauche. Sous "Compiler Auction.sol", cliquez sur le bouton "Compiler". Le contrat devrait être compilé avec succès, et vous devriez voir un coche vert à côté de "Auction.sol" dans l'explorateur de fichiers.

Étape 5: Déployer le contrat

Cliquez sur l’onglet « Déployer et exécuter des transactions » dans le menu de gauche. Sous « Environnement », sélectionnez « Web3 injecté » comme environnement. Sous « Contrat », sélectionnez « Enchère » comme contrat à déployer. Cliquez sur le bouton « Déployer ».

Étape 6: Interagir avec le contrat
Une fois le contrat déployé, vous pouvez interagir avec lui en utilisant les différentes fonctions définies dans le contrat. Par exemple, vous pouvez appeler le placeBid() pour placer une enchère sur l’objet

En utilisant Remix et MetaMask, vous pouvez facilement déployer et interagir avec des contrats intelligents sur le réseau Ethereum, ce qui permet le développement et le test d'applications décentralisées dans un environnement convivial.

Points forts
Les contrats intelligents peuvent interagir avec d’autres contrats sur la blockchain Ethereum, permettant des appels de fonction, la lecture de variables et le transfert d’Ether ou de jetons.
Web3j est une bibliothèque Java légère qui facilite l’interaction avec Ethereum. Il peut générer automatiquement du code wrapper de contrat intelligent pour un déploiement et une interaction transparents avec les contrats de la JVM.
Les événements sont essentiels pour suivre et surveiller l'activité des contrats sur la blockchain. Ils émettent des journaux qui peuvent être stockés et récupérés par des systèmes hors chaîne, permettant des mises à jour en temps réel pour les dApps.
Les journaux, qui sont les enregistrements émis par les événements, jouent un rôle crucial dans la communication efficace entre les contrats intelligents et les systèmes hors chaîne. Ils sont indexés, ce qui permet de filtrer et de rechercher facilement des événements ou des points de données spécifiques.
L'exemple fourni illustre le processus de déploiement d'un smart contract à l'aide de Remix IDE et MetaMask. Il comprend des étapes telles que la création d'un nouveau fichier, la définition du contrat, sa compilation, son déploiement et l'interaction avec ses fonctions.

Tuyên bố từ chối trách nhiệm
* Đầu tư tiền điện tử liên quan đến rủi ro đáng kể. Hãy tiến hành một cách thận trọng. Khóa học không nhằm mục đích tư vấn đầu tư.
* Khóa học được tạo bởi tác giả đã tham gia Gate Learn. Mọi ý kiến chia sẻ của tác giả không đại diện cho Gate Learn.