Přejít na hlavní obsah

Jak implementovat trh s ERC-721

chytré kontrakty
erc-721
Solidity
tokeny
Středně pokročilý
Alberto Cuesta Cañada
19. března 2020
5 minut čtení

V tomto článku vám ukážu, jak naprogramovat Craigslist pro blockchain Etherea.

Před Gumtree, Ebay a Craigslistem byly inzertní tabule většinou z korku nebo papíru. Inzertní tabule byly na školních chodbách, v novinách, na pouličních lampách a ve výlohách.

To vše se změnilo s internetem. Počet lidí, kteří mohli vidět konkrétní inzertní tabuli, se znásobil o mnoho řádů. Díky tomu se trhy, které představují, staly mnohem efektivnějšími a rozšířily se do globálních rozměrů. Ebay je obrovský byznys, který má své kořeny právě v těchto fyzických inzertních tabulích.

S blockchainem se tyto trhy opět změní, dovolte mi ukázat vám jak.

Monetizace

Obchodní model veřejné blockchainové inzertní tabule se bude muset lišit od modelu Ebay a podobných společností.

Zaprvé je tu úhel pohledu decentralizace. Stávající platformy musí udržovat své vlastní servery. Decentralizovaná platforma je udržována svými uživateli, takže náklady na provoz samotného jádra platformy klesají pro jejího vlastníka na nulu.

Pak je tu front-end, webová stránka nebo rozhraní, které poskytuje přístup k platformě. Zde existuje mnoho možností. Vlastníci platformy mohou omezit přístup a donutit všechny používat jejich rozhraní za poplatek. Vlastníci platformy se také mohou rozhodnout otevřít přístup (Moc lidu!) a nechat kohokoli vytvořit rozhraní k platformě. Nebo by se vlastníci mohli rozhodnout pro jakýkoli přístup někde mezi těmito extrémy.

Obchodní lídři s větší vizí než já budou vědět, jak to zpeněžit. Já vidím jen to, že se to liší od současného stavu a pravděpodobně to bude ziskové.

Dále je tu hledisko automatizace a plateb. Některé věci lze velmi efektivně tokenizovat (opens in a new tab) a obchodovat s nimi na inzertní tabuli. Tokenizovaná aktiva se v blockchainu snadno převádějí. V blockchainu lze snadno implementovat vysoce komplexní platební metody.

Cítím tu prostě obchodní příležitost. Inzertní tabuli bez provozních nákladů lze snadno implementovat, přičemž do každé transakce lze zahrnout složité platební cesty. Jsem si jistý, že někdo přijde s nápadem, k čemu to využít.

Já jsem prostě rád, že to mohu budovat. Pojďme se podívat na kód.

Implementace

Před nějakou dobou jsme založili open source repozitář (opens in a new tab) s ukázkovými implementacemi obchodních případů a dalšími vychytávkami, určitě se na něj podívejte.

Kód pro tuto inzertní tabuli na Ethereu (opens in a new tab) je tam, prosím, používejte ho a zkoušejte, co vydrží. Jen mějte na paměti, že kód neprošel auditem a předtím, než do něj vložíte peníze, musíte provést vlastní hloubkovou kontrolu (due diligence).

Základy této tabule nejsou složité. Všechny inzeráty na tabuli budou jen struktura (struct) s několika poli:

struct Trade {
  address poster;
  uint256 item;
  uint256 price;
  bytes32 status; // Otevřeno, Provedeno, Zrušeno
}

Takže je tu někdo, kdo inzerát zveřejňuje. Položka na prodej. Cena položky. Stav obchodu, který může být otevřený (open), provedený (executed) nebo zrušený (cancelled).

Všechny tyto obchody budou uchovávány v mapování (mapping). Protože všechno v Solidity se zdá být mapováním. A také proto, že je to pohodlné.

mapping(uint256 => Trade) public trades;

Použití mapování jen znamená, že musíme vymyslet ID pro každý inzerát před jeho zveřejněním, a budeme muset znát ID inzerátu, než s ním budeme moci pracovat. Existuje několik způsobů, jak se s tím vypořádat, ať už v chytrém kontraktu, nebo ve front-endu. Pokud potřebujete nějaké tipy, zeptejte se.

Dále přichází otázka, co jsou ty položky, se kterými obchodujeme, a co je to za měnu, která se používá k platbě za transakci.

U položek budeme pouze požadovat, aby implementovaly rozhraní ERC-721 (opens in a new tab), což je ve skutečnosti jen způsob reprezentace položek reálného světa v blockchainu, ačkoli to funguje nejlépe s digitálními aktivy (opens in a new tab). V konstruktoru specifikujeme náš vlastní ERC-721 kontrakt, což znamená, že jakákoli aktiva na naší inzertní tabuli musí být předem tokenizována.

Pro platby uděláme něco podobného. Většina blockchainových projektů definuje svou vlastní ERC-20 (opens in a new tab) kryptoměnu. Některé jiné raději používají nějakou mainstreamovou, jako je DAI. U této inzertní tabule se stačí při vytváření rozhodnout, jaká bude vaše měna. Jednoduché.

constructor (
  address _currencyTokenAddress, address _itemTokenAddress
) public {
  currencyToken = IERC20(_currencyTokenAddress);
  itemToken = IERC721(_itemTokenAddress);
  tradeCounter = 0;
}

Už se k tomu dostáváme. Máme inzeráty, položky k obchodu a měnu pro platby. Vytvořit inzerát znamená vložit položku do úschovy (escrow), abyste ukázali, že ji máte a že jste ji nezveřejnili dvakrát, případně na jiné tabuli.

Níže uvedený kód dělá přesně to. Vloží položku do úschovy, vytvoří inzerát a provede nezbytnou údržbu.

Přijmout obchod znamená vybrat inzerát (obchod), zaplatit cenu a obdržet položku. Níže uvedený kód načte obchod. Zkontroluje, zda je k dispozici. Zaplatí za položku. Vyzvedne položku. Aktualizuje inzerát.

Nakonec tu máme možnost pro prodejce odstoupit od obchodu dříve, než jej kupující přijme. V některých modelech by inzeráty byly místo toho aktivní po určitou dobu, než vyprší. Je to vaše volba, v závislosti na designu vašeho trhu.

Kód je velmi podobný tomu, který se používá k provedení obchodu, jen s tím rozdílem, že nedochází k převodu měny a položka se vrací zpět zadavateli inzerátu.

To je vše. Dostali jste se na konec implementace. Je docela překvapivé, jak kompaktní jsou některé obchodní koncepty, když jsou vyjádřeny v kódu, a toto je jeden z těch případů. Podívejte se na kompletní kontrakt v našem repozitáři (opens in a new tab).

Závěr

Inzertní tabule jsou běžnou konfigurací trhu, která se s internetem masivně rozšířila a stala se nesmírně populárním obchodním modelem s několika monopolními vítězi.

Inzertní tabule jsou také snadným nástrojem k replikaci v blockchainovém prostředí, s velmi specifickými funkcemi, které umožní vyzvat stávající giganty.

V tomto článku jsem se pokusil propojit obchodní realitu byznysu inzertních tabulí s technologickou implementací. Tyto znalosti by vám měly pomoci vytvořit vizi a plán implementace, pokud máte ty správné dovednosti.

Jako vždy, pokud se chystáte postavit něco zábavného a uvítali byste nějakou radu, prosím, napište mi (opens in a new tab)! Vždy rád pomohu.