الدرس رقم 2

Points d'inscription et de négociation

Dans cette leçon, nous allons développer notre contrat d'objet pour gérer l'inscription et l'échange d'objets sur notre place de marché. Nous apprendrons à ajouter, lister et supprimer des articles, ainsi que les bases de l'achat et de la vente d'articles. Nous apprendrons également à déployer notre contrat et à interagir avec lui dans l'IDE Remix.

Construire le contrat de marché

Nous allons maintenant transformer notre simple contrat d'article en un contrat de marché plus complexe. Le contrat de place de marché tiendra à jour une liste d'articles à vendre, permettra aux utilisateurs de proposer de nouveaux articles à la vente et d'acheter des articles.

Pour ce faire, nous allons ajouter quelques nouvelles fonctionnalités à notre contrat :

  1. Chaque objet aura désormais une adresse de vendeur, qui représente le propriétaire de l'objet.

  2. Nous allons introduire une nouvelle fonction, listItemForSale, qui permet aux utilisateurs de dresser la liste des nouveaux articles à vendre.

  3. Nous allons introduire une nouvelle fonction, buyItem, qui permet aux utilisateurs d'acheter un article.

Voici à quoi ressemble le contrat de marché:

Solidity
// SPDX-License-Identifier : MIT
pragma solidity ^0.8.6 ;

contract Marketplace {
 // Définir une nouvelle structure pour les articles
 struct Item {
        string name;
        uint price;
        address payable seller;
        bool forSale;
    }

    // Tableau pour contenir tous les articles
 Item[] public items ;

 // Événement qui sera émis lorsqu'un nouvel article est créé
 event NewItem(uint itemId, string itemName, uint itemPrice, address seller) ;

   // Événement émis lorsqu'un article est mis en vente
 event ItemListed(uint itemId, string itemName, uint itemPrice, address seller) ; // Événement émis lorsqu'un article est mis en vente event ItemListed(uint itemId, string itemName, uint itemPrice, address seller) ;

   // Événement qui sera émis lorsqu'un article est acheté
 event ItemBought(uint itemId, string itemName, uint itemPrice, address seller, address buyer) ;

 // Fonction permettant de créer un nouvel article mais pas de le mettre en vente immédiatement
 function createItem(string memory _name, uint _price) public {
    items.push(Item(_name, _price, payable(msg.sender), false)); // We need to explicitly convert msg.sender to 'address payable'
    emit NewItem(items.length - 1, _name, _price, msg.sender);
    }


    // Fonction permettant de mettre en vente un article
 function listItemForSale(uint _itemId) public {
        Item storage item = items[_itemId];
        require(msg.sender == item.seller, "Only the owner can list the item for sale");
        item.forSale = true;
        emit ItemListed(_itemId, item.name, item.price, item.seller);
    }

    // Fonction permettant d'acheter un article function buyItem(uint _itemId) public payable {
        Item storage item = items[_itemId];
        require(msg.sender != item.seller, "Seller cannot buy their own item");
        require(item.forSale, "Item is not for sale");
        require(msg.value == item.price, "Incorrect price sent");
        item.seller.transfer(msg.value);
        item.forSale = false;
        emit ItemBought(_itemId, item.name, item.price, item.seller, msg.sender);
    }
}

Dans ce contrat, nous avons :

  1. Une structure Item qui inclut désormais une adresse de vendeur et un booléen forSale. Le vendeur est le propriétaire de l'objet, et forSale indique si l'objet est actuellement mis en vente.

  2. Une fonction createItem qui crée un nouvel objet et assigne l'expéditeur msg.sender comme vendeur. Le msg.sender est une variable globale dans Solidity qui représente l'adresse de la personne (ou du contrat intelligent) qui appelle la fonction courante. Cependant, l'objet n'est pas mis en vente immédiatement.

  3. Une fonction listItemForSale qui permet au vendeur d'un objet de le mettre en vente. Nous utilisons la fonction " require" pour nous assurer que seul le vendeur peut mettre l'article en vente.

  4. Une fonction buyItem qui permet à quelqu'un d'acheter un article. La fonction vérifie que l'objet est à vendre, que l'acheteur n'est pas le vendeur et que le prix correct a été envoyé. Si ces conditions sont remplies, la fonction envoie l'argent au vendeur et marque l'objet comme n'étant pas à vendre.

Déployer le contrat de place de marché et interagir avec lui

Après avoir rédigé le contrat de place de marché, l'étape suivante consiste à le compiler et à le déployer. Vous pouvez utiliser le plugin Solidity Compiler dans Remix pour compiler le contrat, comme nous l'avons fait dans la leçon 1.

Pour déployer le contrat, allez sur le plugin Deploy & Run Transactions (celui avec l'icône en forme de cube) sur le panneau de droite. Choisissez l'environnement approprié (JavaScript VM pour la simulation), sélectionnez le contrat Marketplace dans la liste déroulante Contrat et cliquez sur le bouton Déployer.

Une fois le contrat déployé, il apparaîtra dans la section Contrats déployés. Vous pouvez le développer pour voir ses variables d'état et ses fonctions publiques. Vous pouvez créer, lister et acheter des articles en appelant ces fonctions.

Pour créer un article, saisissez un nom et un prix, puis cliquez sur le bouton Créer un article. Pour mettre un article en vente, saisissez son numéro d'identification et cliquez sur le bouton listItemForSale. Pour acheter un objet, entrez l'ID de l'objet, envoyez le montant correct d'éther et cliquez sur le bouton Acheter l'objet.

Félicitations ! Vous savez maintenant comment créer une place de marché décentralisée de base sur la blockchain Ethereum.

Dans la prochaine leçon, nous améliorerons notre place de marché en ajoutant des fonctionnalités permettant de retirer des articles de la vente et de mettre à jour le prix d'un article. Restez à l'écoute !

إخلاء المسؤولية
* ينطوي الاستثمار في العملات الرقمية على مخاطر كبيرة. فيرجى المتابعة بحذر. ولا تهدف الدورة التدريبية إلى تقديم المشورة الاستثمارية.
* تم إنشاء الدورة التدريبية من قبل المؤلف الذي انضم إلى مركز التعلّم في Gate. ويُرجى العلم أنّ أي رأي يشاركه المؤلف لا يمثّل مركز التعلّم في Gate.
الكتالوج
الدرس رقم 2

Points d'inscription et de négociation

Dans cette leçon, nous allons développer notre contrat d'objet pour gérer l'inscription et l'échange d'objets sur notre place de marché. Nous apprendrons à ajouter, lister et supprimer des articles, ainsi que les bases de l'achat et de la vente d'articles. Nous apprendrons également à déployer notre contrat et à interagir avec lui dans l'IDE Remix.

Construire le contrat de marché

Nous allons maintenant transformer notre simple contrat d'article en un contrat de marché plus complexe. Le contrat de place de marché tiendra à jour une liste d'articles à vendre, permettra aux utilisateurs de proposer de nouveaux articles à la vente et d'acheter des articles.

Pour ce faire, nous allons ajouter quelques nouvelles fonctionnalités à notre contrat :

  1. Chaque objet aura désormais une adresse de vendeur, qui représente le propriétaire de l'objet.

  2. Nous allons introduire une nouvelle fonction, listItemForSale, qui permet aux utilisateurs de dresser la liste des nouveaux articles à vendre.

  3. Nous allons introduire une nouvelle fonction, buyItem, qui permet aux utilisateurs d'acheter un article.

Voici à quoi ressemble le contrat de marché:

Solidity
// SPDX-License-Identifier : MIT
pragma solidity ^0.8.6 ;

contract Marketplace {
 // Définir une nouvelle structure pour les articles
 struct Item {
        string name;
        uint price;
        address payable seller;
        bool forSale;
    }

    // Tableau pour contenir tous les articles
 Item[] public items ;

 // Événement qui sera émis lorsqu'un nouvel article est créé
 event NewItem(uint itemId, string itemName, uint itemPrice, address seller) ;

   // Événement émis lorsqu'un article est mis en vente
 event ItemListed(uint itemId, string itemName, uint itemPrice, address seller) ; // Événement émis lorsqu'un article est mis en vente event ItemListed(uint itemId, string itemName, uint itemPrice, address seller) ;

   // Événement qui sera émis lorsqu'un article est acheté
 event ItemBought(uint itemId, string itemName, uint itemPrice, address seller, address buyer) ;

 // Fonction permettant de créer un nouvel article mais pas de le mettre en vente immédiatement
 function createItem(string memory _name, uint _price) public {
    items.push(Item(_name, _price, payable(msg.sender), false)); // We need to explicitly convert msg.sender to 'address payable'
    emit NewItem(items.length - 1, _name, _price, msg.sender);
    }


    // Fonction permettant de mettre en vente un article
 function listItemForSale(uint _itemId) public {
        Item storage item = items[_itemId];
        require(msg.sender == item.seller, "Only the owner can list the item for sale");
        item.forSale = true;
        emit ItemListed(_itemId, item.name, item.price, item.seller);
    }

    // Fonction permettant d'acheter un article function buyItem(uint _itemId) public payable {
        Item storage item = items[_itemId];
        require(msg.sender != item.seller, "Seller cannot buy their own item");
        require(item.forSale, "Item is not for sale");
        require(msg.value == item.price, "Incorrect price sent");
        item.seller.transfer(msg.value);
        item.forSale = false;
        emit ItemBought(_itemId, item.name, item.price, item.seller, msg.sender);
    }
}

Dans ce contrat, nous avons :

  1. Une structure Item qui inclut désormais une adresse de vendeur et un booléen forSale. Le vendeur est le propriétaire de l'objet, et forSale indique si l'objet est actuellement mis en vente.

  2. Une fonction createItem qui crée un nouvel objet et assigne l'expéditeur msg.sender comme vendeur. Le msg.sender est une variable globale dans Solidity qui représente l'adresse de la personne (ou du contrat intelligent) qui appelle la fonction courante. Cependant, l'objet n'est pas mis en vente immédiatement.

  3. Une fonction listItemForSale qui permet au vendeur d'un objet de le mettre en vente. Nous utilisons la fonction " require" pour nous assurer que seul le vendeur peut mettre l'article en vente.

  4. Une fonction buyItem qui permet à quelqu'un d'acheter un article. La fonction vérifie que l'objet est à vendre, que l'acheteur n'est pas le vendeur et que le prix correct a été envoyé. Si ces conditions sont remplies, la fonction envoie l'argent au vendeur et marque l'objet comme n'étant pas à vendre.

Déployer le contrat de place de marché et interagir avec lui

Après avoir rédigé le contrat de place de marché, l'étape suivante consiste à le compiler et à le déployer. Vous pouvez utiliser le plugin Solidity Compiler dans Remix pour compiler le contrat, comme nous l'avons fait dans la leçon 1.

Pour déployer le contrat, allez sur le plugin Deploy & Run Transactions (celui avec l'icône en forme de cube) sur le panneau de droite. Choisissez l'environnement approprié (JavaScript VM pour la simulation), sélectionnez le contrat Marketplace dans la liste déroulante Contrat et cliquez sur le bouton Déployer.

Une fois le contrat déployé, il apparaîtra dans la section Contrats déployés. Vous pouvez le développer pour voir ses variables d'état et ses fonctions publiques. Vous pouvez créer, lister et acheter des articles en appelant ces fonctions.

Pour créer un article, saisissez un nom et un prix, puis cliquez sur le bouton Créer un article. Pour mettre un article en vente, saisissez son numéro d'identification et cliquez sur le bouton listItemForSale. Pour acheter un objet, entrez l'ID de l'objet, envoyez le montant correct d'éther et cliquez sur le bouton Acheter l'objet.

Félicitations ! Vous savez maintenant comment créer une place de marché décentralisée de base sur la blockchain Ethereum.

Dans la prochaine leçon, nous améliorerons notre place de marché en ajoutant des fonctionnalités permettant de retirer des articles de la vente et de mettre à jour le prix d'un article. Restez à l'écoute !

إخلاء المسؤولية
* ينطوي الاستثمار في العملات الرقمية على مخاطر كبيرة. فيرجى المتابعة بحذر. ولا تهدف الدورة التدريبية إلى تقديم المشورة الاستثمارية.
* تم إنشاء الدورة التدريبية من قبل المؤلف الذي انضم إلى مركز التعلّم في Gate. ويُرجى العلم أنّ أي رأي يشاركه المؤلف لا يمثّل مركز التعلّم في Gate.