Exercice - Rédiger un contrat intelligent
Dans cette unité, nous allons ajouter un nouveau contrat intelligent au newSolidityProject que nous avons créé précédemment.
Créer un contrat d’expédition
Le contrat intelligent que vous allez créer effectue le suivi de l’état des éléments achetés sur une place de marché en ligne. Lorsque le contrat est créé, l’état de l’expédition est défini sur Pending
. Lorsqu’un article est expédié, l’état de l’expédition est défini sur Shipped
et un événement est émis. Une fois la livraison exécutée, l’état d’expédition de l’élément est défini sur Delivered
et un autre événement est émis.
Pour commencer cet exercice :
Dans le projet que vous avez créé, dans le répertoire des contrats, cliquez avec le bouton de droite sur le dossier et choisissez de créer un nouveau fichier appelé Shipping.sol.
Copiez le contenu du contrat suivant et collez-le dans le nouveau fichier.
pragma solidity >=0.4.25 <0.9.0; contract Shipping { // Our predefined values for shipping listed as enums enum ShippingStatus { Pending, Shipped, Delivered } // Save enum ShippingStatus in variable status ShippingStatus private status; // Event to launch when package has arrived event LogNewAlert(string description); // This initializes our contract state (sets enum to Pending once the program starts) constructor() public { status = ShippingStatus.Pending; } // Function to change to Shipped function Shipped() public { status = ShippingStatus.Shipped; emit LogNewAlert("Your package has been shipped"); } // Function to change to Delivered function Delivered() public { status = ShippingStatus.Delivered; emit LogNewAlert("Your package has arrived"); } // Function to get the status of the shipping function getStatus(ShippingStatus _status) internal pure returns (string memory) { // Check the current status and return the correct name if (ShippingStatus.Pending == _status) return "Pending"; if (ShippingStatus.Shipped == _status) return "Shipped"; if (ShippingStatus.Delivered == _status) return "Delivered"; } // Get status of your shipped item function Status() public view returns (string memory) { ShippingStatus _status = status; return getStatus(_status); } }
Examinez le contrat pour voir ce qui se passe. Confirmez que vous pouvez générer le contrat avec succès.
Dans le volet Explorer, cliquez avec le bouton de droite sur le nom du contrat, puis sélectionnez Générer des contrats pour compiler le contrat intelligent.
Ajouter une migration
Nous allons maintenant ajouter un fichier de migration pour pouvoir déployer le contrat sur le réseau Ethereum.
Dans le volet Explorer, pointez sur le dossier des migrations et choisissez Nouveau fichier. Nommez le fichier 2_Shipping.js.
Ajoutez ce code au fichier :
const Shipping = artifacts.require("Shipping"); module.exports = function (deployer) { deployer.deploy(Shipping); };
Déployer
Ensuite, assurez-vous que vous pouvez déployer correctement le contrat avant de continuer. Cliquez avec le bouton de droite sur le nom du contrat, puis sélectionnez Déployer des contrats. Dans la fenêtre qui s’affiche, sélectionnez développement, puis attendez que le déploiement se termine.
Regardez les informations dans la fenêtre de sortie. Recherchez un déploiement de 2_Shipping.js.