Salt la conținutul principal

Cum să implementăm o piață ERC-721

contracte inteligenteerc-721soliditytokenuri
Intermediar
Alberto Cuesta Cañada
Hackernoon(opens in a new tab)
19 martie 2020
6 minute de citit minute read

În acest articol, am de gând să-ți arăt cum să creezi un cod Craigslist pentru blockchain-ul Ethereum.

Înainte de Gumtree, Ebay și Craigslist, tablourile publicitare erau în cea mai mare parte din plută sau hârtie. Erau pe coridoarele școlii, în ziare, pe stâlpii de lumini de pe stradă, în vitrine.

Totul s-a schimbat odată cu internetul. Numărul de persoane care ar putea vedea un anumit tablou publicitar s-a înmulțit cu mai multe ordine de mărime. Din acest motiv, piețele pe care le reprezintă au devenit mult mai eficiente și scalate la dimensiunea globală. Ebay este o afacere masivă, care își are originile în aceste panouri publicitare fizice.

Cu blockchain-ul, aceste piețe sunt configurate să se schimbe încă o dată, permite-mi să-ți arăt.

Monetizare

Modelul de afaceri al unui panou publicitar public blockchain va trebui să fie diferit de cel al Ebay și companie.

În primul rând, există unghiul de descentralizare. Platformele existente trebuie să-și mențină propriile servere. O platformă descentralizată este menținută de utilizatorii săi, de aceea costul de funcționare al platformei de bază scade la zero pentru proprietarul platformei.

Apoi, există front-end-ul, site-ul sau interfața web care oferă acces la platforma. Aici există mai multe opțiuni. Proprietarii platformei pot restricționa accesul și pot forța ca toată lumea să-i folosească interfața, percepându-le o taxă. Proprietarii platformei pot decide, de asemenea, să deschidă accesul (Puterea în mâinile poporului!) și să lase pe oricine să construiască interfețe cu platforma. (3) Sau proprietarii ar putea decide orice abordare între aceste extreme.

Liderii de afaceri cu mai multă viziune decât mine știu cum să monetizeze acest lucru. Tot ce văd este că acest lucru este diferit de condițiile existente și, probabil, profitabile.

În plus, există unghiul de automatizare și plăți. Unele lucruri pot fi foarte eficient tokenizate(opens in a new tab) și tranzacționate într-un panou publicitar. Activele tokenizate sunt ușor de transferat într-un blockchain. Metode de plată extrem de complexe pot fi implementate cu ușurință într-un blockchain.

Simt o oportunitate de afaceri aici. Un panou publicitar fără costuri de funcționare poate fi implementat cu ușurință, cu căi de plată complexe incluse în fiecare tranzacție. Sunt sigur că cineva o să vină cu o idee despre cum să folosească acest lucru.

Sunt doar fericit să-l construiesc. Să aruncăm o privire la cod.

Implementarea

Cu câtva timp în urmă am început un depozit open source(opens in a new tab) cu implementări de exemple de afaceri și alte bunătăți, te rog să arunci o privire.

Codul pentru acest panou publicitar Ethereum(opens in a new tab) este acolo, te rog să-l utilizezi și să-l abuzezi. Reține doar că acest cod nu a fost auditat și că este nevoie să-ți iei propriile măsuri de precauție înainte de a investi bani în el.

Elementele de bază ale panoului nu sunt complexe. Toate anunțurile din panou vor fi doar o structură cu câteva câmpuri:

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

Să presupunem că cineva a postat un anunț. Un articol de vânzare. Un preț pentru articol. Starea tranzacției care poate fi deschisă, executată sau anulată.

Toate aceste tranzacții vor fi păstrate într-o cartografiere. Pentru că totul în Solidity pare a fi o cartografiere. De asemenea, pentru că este convenabil.

1mapping(uint256 => Trade) public trades;
Copiați

Utilizarea unei cartografii înseamnă doar că trebuie să venim cu un id pentru fiecare reclamă înainte de a o posta și va trebui să cunoaștem id-ul unei reclame înainte de a o putea opera. Acest lucru se poate face în câteva feluri, fie în contractul inteligent, fie în front-end. Te rog să întrebi dacă ai nevoie de unele indicii.

Apoi urmează întrebarea, care sunt acele elemente cu care avem de-a face și care este această monedă care este folosită pentru a plăti tranzacția.

Pentru articole, vom cere doar ca acestea să implementeze interfața ERC-721(opens in a new tab), care este de fapt doar o modalitate de a reprezenta elemente din lumea reală într-un blockchain, deși funcționează cel mai bine cu active digitale(opens in a new tab). Vom specifica propriul nostru contract ERC721 în constructor, ceea ce înseamnă că orice active din panoul nostru publicitar trebuie să fi fost tokenizate în prealabil.

Pentru plăți, vom face ceva similar. Majoritatea proiectelor blockchain își definesc propria criptomonedă ERC-20(opens in a new tab). Alții preferă să folosească una convențională cum ar fi DAI. În acest panou publicitar, va trebui doar să decizi la construire ce moneda vei folosi. Ușor.

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

Ajungem acolo. Avem reclame, articole pentru tranzacție și o monedă pentru plăți. A face un anunț înseamnă a pune un articol în garanție pentru a arăta atât că îl ai, cât și că nu l-ai postat de două ori, eventual într-un alt panou.

Codul de mai jos face exact asta. Pune articolul în garanție, creează anunțul, face puțin menaj.

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}
Afișează tot
Copiați

Acceptarea tranzacției înseamnă alegerea un anunț (tranzacție), plata prețului, și primirea articolului. Codul de mai jos recuperează un articol cumpărat. Verifică dacă e disponibil. Plătește articolul. Recuperează articolul cumpărat. Actualizează reclama.

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}
Afișează tot
Copiați

În cele din urmă, avem o opțiune pentru vânzători să se retragă din comerț înainte ca un cumpărător să accepte. În unele modele, reclamele ar fi în schimb live pentru o perioadă înainte de expirarea lor. Alegerea ta, depinde de designul pieței tale.

Codul este foarte similar cu cel folosit pentru a executa un comerț, numai că nu există niciun transfer de monedă dintr-o mână într-alta iar articolul merge înapoi la cel care l-a postat.

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}
Afișează tot
Copiați

Asta-i tot. Ai ajuns la sfârșitul implementării. Este destul de surprinzător cât de compacte pot fi unele concepte de afaceri atunci când sunt exprimate în cod, iar acesta este unul dintre acele cazuri. Check the complete contract in our repo(opens in a new tab).

Concluzie

Panourile publicitare sunt o configurație de piață obișnuită, care s-a mărit masiv odată cu internetul, devenind un model de afaceri extrem de popular, cu câțiva câștigători monopoliști.

Panourile publicitare, de asemenea, sunt un instrument ușor de replicat într-un mediu blockchain, cu caracteristici foarte specifice care vor face posibilă o provocare pentru giganții existenți.

În acest articol, am încercat să leg realitatea de afaceri a unei companii de anunțuri publicitare cu implementarea tehnologică. Aceste cunoștințe ar trebui să te ajute să-ți creezi o viziune și o foaie de parcurs pentru implementare, dacă ai abilitățile potrivite.

Ca întotdeauna, dacă dorești să construiești ceva distractiv și dorești câteva sfaturi, te rog să mă contactezi(opens in a new tab)! Sunt întotdeauna fericit să te ajut.

Ultima modificare: @nicklcanada(opens in a new tab), 15 august 2023

A fost util acest tutorial?