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 kąt 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 platform mogą również zdecydować o otwarciu dostępu (Power to the People!) i pozwolić każdemu budować interfejsy na platformie. 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 mogą być bardzo skutecznie tokenizowane(opens in a new tab) i sprzedawane w serwisach. 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 implementacjami zastosowań biznesowych i innymi ciekawymi rzeczami. Rzuć okiem.
Kod tego serwisu ogłoszeniowego Ethereum(opens in a new tab) jest dostępny, możesz go używać 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}Kopiuj
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;Kopiuj
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ę.
Jeśli chodzi o przedmioty, zamierzamy tylko poprosić o implementację interfejsu ERC-721(opens in a new tab), który naprawdę jest sposobem na reprezentowanie realnych pozycji świata w blockchain, chociaż najlepiej współpracuje z cyfrowymi aktywami(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}Kopiuj
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}Pokaż wszystkoKopiuj
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}Pokaż wszystkoKopiuj
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 "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}Pokaż wszystkoKopiuj
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łną umowę w naszym repozytorium(opens in a new tab).
Podsumowanie
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 chcesz zbudować coś fajnego i chciałbyś otrzymać jakąś radę, proszę napisz do mnie(opens in a new tab)! Zawsze chętnie służę pomocą.
Ostatnia edycja: @nhsz(opens in a new tab), 15 sierpnia 2023