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 :
Chaque objet aura désormais une adresse de vendeur
, qui représente le propriétaire de l'objet.
Nous allons introduire une nouvelle fonction, listItemForSale
, qui permet aux utilisateurs de dresser la liste des nouveaux articles à vendre.
Nous allons introduire une nouvelle fonction, buyItem
, qui permet aux utilisateurs d'acheter un article.
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);
}
}
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.
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.
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.
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.
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 !
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 :
Chaque objet aura désormais une adresse de vendeur
, qui représente le propriétaire de l'objet.
Nous allons introduire une nouvelle fonction, listItemForSale
, qui permet aux utilisateurs de dresser la liste des nouveaux articles à vendre.
Nous allons introduire une nouvelle fonction, buyItem
, qui permet aux utilisateurs d'acheter un article.
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);
}
}
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.
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.
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.
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.
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 !