Passer au contenu principal

Comment mettre en œuvre un marché ERC-721

contrats intelligentserc-721solidityjetons
Intermédiaire
Alberto Cuesta Cañada
Hackernoon(opens in a new tab)
19 mars 2020
6 minutes de lecture minute read

Dans cet article, je vais vous montrer comment coder Craigslist dans la blockchain Ethereum.

Avant Gumtree, Ebay et Craigslist, les panneaux d'affichage des petites annonces étaient principalement faits de liège ou de papier. Il y avait des panneaux de la sorte dans les couloirs des écoles, les journaux, sur les réverbères, les vitrines des magasins.

Tout cela a changé avec internet. Le nombre de personnes en mesure de voir un tableau de petites annonces spécifique a augmenté de manière exponentielle. Les marchés qu'ils représentent sont ainsi devenus beaucoup plus efficaces et d'envergure mondiale. Ebay est une énorme entreprise dont les origines remontent à ces tableaux de petites annonces physiques.

Avec la blockchain, ces marchés sont appelés à changer une fois de plus. Laissez-moi vous montrer comment.

Monétisation

Le business model d'un forum public de petites annonces sur la blockchain devra être différent de celui d'Ebay et d'une entreprise.

Tout d'abord, il y a la qestion de la décentralisation. Les plateformes existantes doivent assurer le bon fonctionnement de leurs propres serveurs. Le bon fonctionnement d'une plateforme décentralisée est assuré par ses utilisateurs, de sorte que le coût de fonctionnement de la plateforme centrale tombe à zéro pour le propriétaire de la plateforme.

Il y a ensuite le front-end, le site Web ou l'interface qui donne accès à la plateforme. Les options sont nombreuses. Les propriétaires d'une plateforme peuvent en restreindre l'accès et obliger tout le monde à utiliser leur interface, en facturant des frais. Ils peuvent également décider d'en ouvrir l'accès (Power to the People !) et laisser n'importe qui créer des interfaces avec la plateforme. Ou encore décider d'une approche située entre ces deux extrêmes.

Les chefs d'entreprise qui ont plus de vision que moi sauront comment monétiser cela. Tout ce que je vois, c'est que c'est différent du statu quo et probablement rentable.

Il y a aussi la question de l'automatisation et des paiements. Certaines choses peuvent être tokénisées très efficacement(opens in a new tab) et échangées dans un forumde petites annonces. Les actifs tokénisés sont faciles à céder dans une blockchain. Des méthodes de paiement très complexes peuvent être facilement mises en œuvre dans une blockchain.

Je sens juste ici une occasion de faire des affaires. Il est facile de mettre en place un tableau de petites annonces sans frais de fonctionnement, avec des modalités de paiement complexes incluses pour chaque transaction. Je suis sûr que quelqu'un trouvera une idée pour concrétiser le tout.

Je suis ravi de m'atteler à la tâche. Jetons un coup d'oeil au code.

Implémentation

Il y a quelque temps, nous avons lancé un référentiel de sources ouvertes(opens in a new tab) avec des exemples de concrétiser d'opportunités commerciales et d'autres goodies, veuillez y jeter un coup d'œil.

Le code pour ce forum de petites annonces Ethereum(opens in a new tab) est là, n'hésitez pas à l'utiliser et à en abuser. Sachez simplement que le code n'a pas été vérifié et que vous devez faire votre propre recherche avant de laisser de l'argent y entrer.

Les principes de base du conseil ne sont pas complexes. Toutes les annonces dans le forum se résumeront juste à une structure avec quelques champs :

1struct Trade {
2 address poster;
3 uint256 item;
4 uint256 price;
5 bytes32 status; // Open, Executed, Cancelled
6}
Copier

Quelqu'un publie donc une annonce. Un article à vendre. Un prix pour cet article. Le statut de la transaction qui peut être ouverte, exécutée ou annulée.

Tous ces échanges seront conservés dans une cartographie. Parce que tout dans Solidity semble être un mapping. Et aussi parce que c'est pratique.

1mapping(uint256 => Trade) public trades;
Copier

Utiliser un mapping implique simplement de trouver un identifiant pour chaque annonce avant de la publier, et de connaître l'identifiant d'une annonce avant de pouvoir l'utiliser. Il existe de multiples façons de traiter ce problème, que ce soit dans le contrat intelligent ou dans le front-end. N'hésitez pas à demander si vous avez besoin de conseils.

Vient ensuite la question de savoir quels sont ces articles que nous traitons, et quelle est cette monnaie qui est utilisée pour payer la transaction.

Pour les articles, nous allons simplement demander la mise en œuvre de l'interface ERC-721(opens in a new tab), qui n'est en fait qu'un moyen de représenter des articles du monde réel dans une blockchain, bien qu'elle fonctionne mieux avec les actifs numériques(opens in a new tab). Nous allons spécifier notre propre contrat ERC721 dans le constructeur, ce qui signifie que tous les actifs publiées dans notre forum de petites annonces doivent avoir été tokénisés au préalable.

Pour les paiements, nous allons faire quelque chose de similaire. La plupart des projets de blockchain définissent leur propre cryptomonnaie ERC-20(opens in a new tab). D'autres préfèrent utiliser un produit grand public comme DAI. Dans ce forum de petites annonces, il vous suffit de décider, au moment de la construction, quelle sera votre monnaie. Facile.

1constructor (
2 address _currencyTokenAddress, address _itemTokenAddress
3) public {
4 currencyToken = IERC20(_currencyTokenAddress);
5 itemToken = IERC721(_itemTokenAddress);
6 tradeCounter = 0;
7}
Copier

Nous y arrivons. Nous avons des annonces, des articles à échanger et une monnaie pour les paiements. Créer une annonce signifie mettre un objet en dépôt pour montrer à la fois que vous l'avez et que vous ne l'avez pas publié deux fois, éventuellement dans un forum différent.

C'est exactement ce que fait le code ci-dessous. Met l'objet en dépôt, crée l'annonce, fait un peu de ménage.

1function openTrade(uint256 _item, uint256 _price)
2 public
3{
4 itemToken.transferFrom(msg.sender, address(this), _item);
5 trades[tradeCounter] = Trade({
6 poster: msg.sender,
7 item: _item,
8 price: _price,
9 status: "Open"
10 });
11 tradeCounter += 1;
12 emit TradeStatusChange(tradeCounter - 1, "Open");
13}
Afficher tout
Copier

Accepter l'échange signifie choisir une annonce (échange), payer le prix, recevoir l'article. Le code ci-dessous récupère une transaction. Vérifie si l'objet est disponible. Paie l'objet. Récupère l'objet. Met à jour l'annonce.

1function executeTrade(uint256 _trade)
2 public
3{
4 Trade memory trade = trades[_trade];
5 require(trade.status == "Open", "Trade is not Open.");
6 currencyToken.transferFrom(msg.sender, trade.poster, trade.price);
7 itemToken.transferFrom(address(this), msg.sender, trade.item);
8 trades[_trade].status = "Executed";
9 emit TradeStatusChange(_trade, "Executed");
10}
Afficher tout
Copier

Enfin, nous offrons aux vendeurs la possibilité de se retirer d'une transaction avant qu'un acheteur ne l'accepte. Dans certains modèles, les publicités seraient plutôt diffuser en direct pendant un certain temps avant d'expirer. Votre choix, selon la conception de votre marché.

Le code est très similaire à celui utilisé pour exécuter une transaction, à ceci près qu'il n'y a pas de changement de monnaie et que l'objet revient à l'annonceur.

1function cancelTrade(uint256 _trade)
2 public
3{
4 Trade memory trade = trades[_trade];
5 require(
6 msg.sender == trade.poster,
7 "Trade can be cancelled only by poster."
8 );
9 require(trade.status == "Open", "Trade is not Open.");
10 itemToken.transferFrom(address(this), trade.poster, trade.item);
11 trades[_trade].status = "Cancelled";
12 emit TradeStatusChange(_trade, "Cancelled");
13}
Afficher tout
Copier

C’est tout. Vous êtes arrivé à la fin de l'implémentation. Il est assez surprenant de constater à quel point certains concepts commerciaux sont compacts lorsqu'ils sont exprimés en code, et c'est l'un de ces cas. Consultez le contrat complet dans notre référentiel(opens in a new tab).

Conclusion

Les forums de petites annonces sont une configuration de marché commune qui s'est développée massivement avec internet, au point de devenir un business model extrêmement populaire avec quelques acteurs gagnants en situation de monopole.

Les forums de petites annonces se révèlent également être un outil facile à reproduire dans un environnement blockchain, avec des caractéristiques très spécifiques qui vont permettre de défier les géants existants.

Dans cet article, j'ai tenté de faire le lien entre la réalité commerciale d'une entreprise de publication de petites annonces et son implémentation technologique. Ces connaissances devraient vous aider à créer une vision et une feuille de route pour l'implémentation si vous avez les bonnes compétences.

Comme toujours, si vous êtes en train de construire quelque chose d'amusant et que vous souhaitez recevoir des conseils, n'hésitez pas à m'envoyer un mot(opens in a new tab) ! Je suis toujours ravi d'aider.

Dernière modification: @phrobinet(opens in a new tab), 15 août 2023

Ce tutoriel vous a été utile ?