Jak wdrożyć rynek ERC-721
W tym artykule pokażę Ci jak kodować Craigslist dla blockchainu Ethereum.
Przed Gumtree, Ebay i Craigslist tablice ogłoszeniowe były w większości wykonane z korka lub papieru. W korytarzach szkolnych, gazetach, ulicach i sklepach istniały klasyczne tablice.
Wszystko to zmieniło się wraz z Internetem. Liczba osób, które widzą konkretną tablicę klasyfikacyjną została pomnożona przez wiele rzędów wielkości. Dzięki temu rynki te stały się o wiele bardziej wydajne i skalowane na skalę światową. Ebay jest ogromnym biznesem, który wywodzi się z tych fizycznych tablic ogłoszeń.
Blockchain ponownie zmieni te rynki — pozwolę sobie pokazać, w jaki sposób.
Monetyzacja
Model biznesowy serwisu ogłoszeniowego w publicznym blockchainie będzie musiał różnić się od modelu Ebay i spółki.
Po pierwsze, jest aspekt decentralizacji. Istniejące platformy muszą utrzymywać własne serwery. Zdecentralizowana platforma jest utrzymywana przez użytkowników, a zatem koszt obsługi głównej platformy spadnie do zera dla właściciela platformy.
Następnie frontend — strona internetowa lub interfejs dający dostęp do platformy. Tutaj jest wiele możliwości. Właściciele platformy mogą ograniczyć dostęp i zmusić wszystkich do korzystania ze swojego interfejsu, pobierając opłaty. Właściciele platformy mogą również zdecydować się na otwarcie dostępu (Władza w ręce ludu!) i pozwolić każdemu na budowanie interfejsów do platformy. Lub właściciele mogliby wybrać jakiekolwiek pośrednie podejście.
Liderzy biznesu, którzy mają więcej wizji niż ja, będą wiedzieć, jak na tym zarabiać. Widzę jedynie, że różni się to od status quo i prawdopodobnie jest opłacalne.
Ponadto istnieje kąt automatyzacji i płatności. Niektóre rzeczy można bardzo skutecznie stokenizować (opens in a new tab) i handlować nimi na tablicy ogłoszeń. Tokenizowane aktywa są łatwo przenoszone w blockchainie. Bardzo skomplikowane metody płatności mogą być łatwo wdrożone w blockchainie.
Po prostu wyczuwam tutaj okazję biznesową. W łatwy sposób można wdrożyć serwis ogłoszeniowy bez kosztów bieżących, ze złożonymi ścieżkami płatności uwzględnionymi w każdej transakcji. Jestem pewien, że ktoś wymyśli, do czego to wykorzystać.
Po prostu cieszę się, że to buduję. Rzućmy okiem na kod.
Implementacja
Jakiś czas temu uruchomiliśmy repozytorium open source (opens in a new tab) z przykładowymi implementacjami biznesowymi i innymi dodatkami. Zachęcamy do zapoznania się.
Kod tej tablicy ogłoszeń Ethereum (opens in a new tab) jest tam dostępny, prosimy, korzystajcie z niego i testujcie go do woli. Pamiętaj tylko, że kod nie został poddany audytowi i musisz zrobić własną analizę due dililgence, zanim włożysz w niego pieniądze.
Podstawy tablicy nie są skomplikowane. Wszystkie reklamy na tablicy będą tylko strukturą z kilkoma polami:
1struct Trade {2 address poster;3 uint256 item;4 uint256 price;5 bytes32 status; // Open, Executed, Cancelled6}Tak więc jest ktoś zamieszczający reklamę. Przedmiot na sprzedaż. Cenę za przedmiot. Status transakcji, która może być otwarta, wykonana lub anulowana.
Wszystkie te transakcje będą przechowywane w mapach. Ponieważ wszystko w Solidity wydaje się być mapowaniem. Również dlatego, że jest to wygodne.
1mapping(uint256 => Trade) public trades;Korzystanie z mapowania oznacza, że przed opublikowaniem tej wiadomości musimy przedstawić identyfikator dla każdej reklamy. i będziemy musieli poznać identyfikator reklamy, zanim będziemy mogli na niej działać. Istnieje wiele sposobów radzenia sobie z tym problemem, zarówno w ramach inteligentnego kontraktu, jak i w fazie początkowej. Zapytaj, jeśli potrzebujesz wskazówek.
Następnie pojawia się pytanie, z czym mamy do czynienia i jaka waluta jest wykorzystywana do zapłaty za transakcję.
W przypadku przedmiotów będziemy wymagać jedynie implementacji interfejsu ERC-721 (opens in a new tab), który jest po prostu sposobem reprezentacji rzeczywistych przedmiotów w blockchainie, chociaż najlepiej działa w przypadku aktywów cyfrowych (opens in a new tab). Zamierzamy określić nasz własny kontrakt ERC721 w konstruktorze, co oznacza, że wszelkie aktywa w naszym serwisie muszą być uprzednio tokenizowane.
W przypadku płatności zamierzamy zrobić coś podobnego. Większość projektów blockchain definiuje własną kryptowalutę ERC-20 (opens in a new tab). Inni wolą korzystać z głównego nurtu takiego jak DAI. W tym serwisie ogłoszeniowym musisz tylko zdecydować podczas budowy, jaka będzie Twoja waluta. Łatwo.
1constructor (2 address _currencyTokenAddress, address _itemTokenAddress3) public {4 currencyToken = IERC20(_currencyTokenAddress);5 itemToken = IERC721(_itemTokenAddress);6 tradeCounter = 0;7}Dochodzimy do tego. Mamy ogłoszenia, przedmioty do handlu i walutę do płatności. Ogłoszenie oznacza umieszczenie przedmiotu w escrow, aby pokazać, że się go ma i że nie informowało się o nim dwa razy, być może w innym serwisie.
Poniższy kod dokładnie to robi. Umieszcza przedmiot w escrow, tworzy ogłoszenie, wykonuje pewne czynności porządkowe.
1function openTrade(uint256 _item, uint256 _price)2 public3{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}Przyjąć ofertę oznacza wybrać ogłoszenie (ofertę), zapłacić cenę, otrzymać przedmiot. Poniższy kod pobiera transakcję. Sprawdza, czy jest dostępna. Płaci za przedmiot. Pobiera przedmiot. Aktualizuje ogłoszenie.
1function executeTrade(uint256 _trade)2 public3{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}Mamy też możliwość wycofania się sprzedawców z transakcji zanim kupujący je zaakceptuje. W niektórych modelach ogłoszenia byłyby aktywne przez pewien okres czasu, zanim wygasną. Twój wybór, w zależności od projektu Twojego rynku.
Kod jest bardzo podobny do kodu użytego do realizacji transakcji, tylko, że nie ma wymiany walut i przedmiot wraca na tablicę ogłoszeniową.
1function cancelTrade(uint256 _trade)2 public3{4 Trade memory trade = trades[_trade];5 require(6 msg.sender == trade.poster,7 "Ogłoszenie może być anulowane tylko przez wystawiającego."8 );9 require(trade.status == "Open", "Ogłoszenie nie jest otwarte.");10 itemToken.transferFrom(address(this), trade.poster, trade.item);11 trades[_trade].status = "Cancelled";12 emit TradeStatusChange(_trade, "Cancelled");13}To już wszystko. Dotrwałeś do końca implementacji. To zaskakujące, jak kompaktowe są niektóre pojęcia biznesowe wyrażane w kodzie i jest to jeden z tych przypadków. Sprawdź pełny kontrakt w naszym repozytorium (opens in a new tab).
Wnioski
Serwisy ogłoszeniowe to powszechna konfiguracja rynku, która intensywnie rosła wraz z Internetem, stając się niezwykle popularnym modelem biznesowym z kilkoma monopolistycznymi zwycięzcami.
Serwisy ogłoszeniowe stały się również łatwym narzędziem do replikacji w środowisku blockchain, z bardzo specyficznymi funkcjami, które umożliwią rzucenie wyzwania istniejącym gigantom.
W tym artykule podjąłem próbę połączenia realiów biznesowych serwisów ogłoszeniowych z implementacją technologii. Ta wiedza powinna pomóc w stworzeniu wizji i planu implementacji, jeśli masz odpowiednie umiejętności.
Jak zawsze, jeśli chcecie zbudować coś fajnego i przydałaby Wam się jakaś rada, skontaktujcie się ze mną (opens in a new tab)! Zawsze chętnie służę pomocą.
Strona ostatnio zaktualizowana: 3 marca 2026