Obsah
V roce 2014 založil Vitalik Buterin síť
Ethereum, což je
opensourcová platforma k vydávání decentralizovaných aplikací (
DApps). Mnoho důvodů, proč chtěl Buterin vytvořit nový
blockchain, pramenilo z nedostatečné flexibility
bitcoinového protokolu.
Od svého spuštění přitahuje ethereový blockchain vývojáře, firmy a podnikatele a vzniká díky němu rostoucí odvětví s uživateli, kteří vytváří
chytré kontrakty a distribuované aplikace.
V tomto článku se zaměříme na standard
ERC-20, který je důležitým rámcem pro vytváření
tokenů. I když je tento standard charakteristický pro síť Ethereum, inspiroval i další blockchainové standardy, jako je
BEP-2 na síti Binance Chain.
ERC je zkratka pro Ethereum Request for Comments (žádost o připomínky k síti Ethereum). Jedná se o technické dokumenty, které nastiňují programovací standardy na síti Ethereum. Nezaměňujte ji se zkratkou EIP pro Ethereum Improvement Proposals (návrhy na vylepšení sítě Ethereum), které stejně jako BIP sítě Bitcoin navrhují vylepšení samotného protokolu. Standard ERC se místo toho snaží zavést konvence, které by aplikacím a kontraktům usnadnily vzájemnou komunikaci.
Standard ERC-20 vytvořený v roce 2015 Vitalikem Buterinem a Fabianem Vogelstellerem navrhuje relativně jednoduchý formát pro tokeny na bázi Etherea. Když se budou vývojáři tohoto nástinu držet, nemusí znovu vynalézat kolo. Místo toho mohou stavět na základech, které už používá celé odvětví.
Zajímavé je, že ze standardu ERC-20 vznikl návrh EIP (konkrétně EIP-20). Došlo k tomu díky jeho širokému využití pár let po představení původního návrhu. I po letech si ale drží název ERC-20.
Na rozdíl od ETH (nativní kryptoměny sítě Ethereum) nejsou tokeny ERC-20 drženy na účtech. Tyto tokeny existují jen uvnitř kontraktu, který je samostatnou databází. Kontrakt specifikuje pravidla pro tokeny (například název, symbol nebo dělitelnost) a uchovává seznam, který mapuje zůstatky uživatelů vůči jejich ethereovým adresám.
Když chtějí uživatelé tokeny přesunout, musí poslat transakci, která požádá kontrakt, aby část jejich zůstatku přidělil jinam. Kdyby například Alice chtěla poslat 5 000 tokenů Akademie Binance Bobovi, vyvolala by k tomu příslušnou funkci uvnitř chytrého kontraktu tokenu Akademie Binance.
Její vyvolání je uzavřené uvnitř toho, co vypadá jako běžná ethereová transakce, která kontraktu daného tokenu zaplatí 0 ETH. Vyvolání je zahrnuto v dodatečném poli transakce, které specifikuje, co chce Alice udělat – v našem případě převést tokeny Bobovi.
I když neposílá ethery, musí pořád zaplatit poplatek v etherech, aby její transakce byla zahrnuta do
bloku. Pokud žádné ethery nemá, musí si je před převedením tokenů opatřit.
Tady je skutečný příklad uvedené situace na prohlížeči Etherscan, když někdo vyvolá BUSD kontrakt. Jak si můžete prohlédnout, tokeny byly převedeny a poplatek byl zaplacen, i když pole Value (hodnota) ukazuje, že bylo posláno 0 ETH.
Teď, když už jste v obraze, se podíváme typickému ERC-20 kontraktu pod pokličku, abyste lépe porozuměli jeho struktuře.
Aby váš kontrakt splňoval standard ERC-20, musí podporovat těchto šest povinných funkcí: totalSupply, balanceOf, transfer, transferFrom, approve a allowance. Kromě toho můžete nastavit volitelné funkce, jako je name, symbol a decimal. Možná vám je už z názvu jasné, co tyto funkce dělají, ale jestli ne, nemusíte se bát, všechny si je vysvětlíme.
Funkce uvádíme tak, jak jsou uvedené v záměrně pro tento účel vytvořeném jazyku sítě Ethereum – Solidity.
totalSupply
function totalSupply() public view returns (uint256)
Když uživatel tuto funkci vyvolá, vrátí mu
celkovou zásobu tokenů držených v daném kontraktu.
balanceOf
function balanceOf(address _owner) public view returns (uint256 balance)
Na rozdíl od totalSupply má funkce balanceOf parametr (adresu). Když tuto funkci vyvoláte, vrátí vám zůstatek držených tokenů na dané adrese. Připomínáme, že účty na síti Ethereum jsou veřejné, takže pokud znáte adresu, můžete se dotázat na zůstatek libovolného uživatele.
transfer
function transfer(address _to, uint256 _value) public returns (bool success)
Funkce transfer převede tokeny z jednoho uživatele na druhého. Uvádíte u ní množství tokenů a adresu, na kterou chcete tokeny převést.
Když vyvoláte funkci transfer, aktivuje se event (událost) – v tomto případě event transfer. Tato událost v podstatě říká blockchainu, aby k ní přidal odkaz.
transferFrom
function transferFrom(address _from, address _to, uint256 _value) public returns (bool success)
Funkce transferFrom je užitečná alternativa k funkci transfer, která u decentralizovaných aplikací umožňuje trochu větší programovatelnost. Stejně jako funkce transfer se používá k přesunu tokenů, ale tyto tokeny nemusí nutně patřit tomu, kdo kontrakt vyvolá.
Jinými slovy, můžete někomu (nebo jinému kontraktu) dovolit převádět prostředky vaším jménem. Je to užitečné například pro předplacené služby, u kterých nechcete každý den/týden/měsíc odesílat platby ručně. Místo toho to necháte udělat program za vás.
Tato funkce aktivuje stejnou událost jako funkce transfer.
approve
function approve(address _spender, uint256 _value) public returns (bool success)
Funkce approve je z hlediska programovatelnosti další užitečná funkce. Touto funkcí omezíte počet tokenů, které může chytrý kontrakt vybrat z vašeho zůstatku. Bez ní riskujete selhání (nebo zneužití) kontraktu a krádež všech vašich prostředků.
Ukážeme si to znovu na příkladu předplatného. Budeme předpokládat, že máte obrovské množství tokenů Akademie Binance a že si chcete u jedné streamovací
decentralizované aplikace nastavit pravidelné týdenní platby. Ve dne v noci trávíte čas čtením článků na
Akademii Binance, takže nechcete každý týden ztrácet čas ručním odesíláním transakce.
Máte obrovský zůstatek tokenů Akademie Binance, který značně přesahuje to, kolik potřebujete k zaplacení předplatného. Abyste předešli tomu, že vám decentralizovaná aplikace vybere celý zůstatek, můžete si funkcí approve nastavit limit. Budeme předpokládat, že vaše předplatné stojí jeden token Akademie Binance týdně. Když hodnotu approved omezíte na dvacet tokenů, může se vaše předplatné pět měsíců platit automaticky.
Když dojde k nejhoršímu a decentralizovaná aplikace se pokusí vybrat všechny vaše prostředky nebo někdo zneužije nějakou chybu, přijdete maximálně o dvacet tokenů. Asi to není úplně ideální, ale pořád lepší, než kdybyste přišli o všechno.
Když vyvoláte funkci approve, aktivuje se událost approval. Ta zapíše data na blockchain (stejně jako událost transfer).
allowance
function allowance(address _owner, address _spender) public view returns (uint256 remaining)
Funkci
allowance můžete použít spolu s funkcí
approve. Když dáte kontraktu povolení spravovat vaše
tokeny, můžete si touto funkcí ověřit, kolik tokenů ještě může vybrat. Pokud například vaše předplatné využilo 12 z 20 schválených tokenů, vyvolání funkce
allowance by mělo vrátit odpověď 8.
Volitelné funkce
Výše uvedené funkce jsou všechny povinné. Funkce name, symbol a decimal nemusí váš ERC-20 kontrakt obsahovat, ale bude díky nim o něco hezčí. Umožňují vám přidat pro člověka čitelný název, nastavit symbol (např. ETH, BTC, BNB) a určit, na kolik desetinných míst jsou tokeny dělitelné. Tokeny používané jako měny využijí dělitelnost více než token, který zastupuje vlastnictví nějakého majetku.
Reálný kontrakt s těmito prvky najdete například na
GitHubu.
Když spojíte dohromady všechny uvedené funkce, vznikne vám ERC-20 kontrakt. Můžeme se dotázat na
celkovou zásobu, zkontrolovat zůstatky, převést prostředky a dát
decentralizovaným aplikacím oprávnění spravovat tokeny za nás.
Nejatraktivnější vlastností ERC-20 tokenů je jejich flexibilita. Stanovené konvence neomezují vývoj, takže jednotlivé strany mohou podle potřeby implementovat další funkce a nastavovat specifické parametry.
Stablecoiny
Standard tokenů ERC-20 často používají
stablecoiny (tokeny vázané na
fiat měny). Jedním z příkladů je dříve zmíněná transakce u BUSD kontraktu a stejný formát používá i většina nejpoužívanějších stablecoinů.
Emitent typického stablecoinu krytého fiat měnou drží v rezervách eura, dolary atd. Za každou jednotku v rezervě pak vydává token. To znamená, že kdyby tento emitent měl někde v trezoru uzamčených 10 000 USD, mohl by vytvořit 10 000 tokenů, kdy každý z nich by bylo možné odkoupit za 1 USD.
Realizace tohoto konceptu je na síti Ethereum technicky vzato celkem snadná. Emitent jednoduše uvede na trh kontrakt s 10 000 tokeny. Pak je distribuuje uživatelům se slibem, že si za tokeny budou moci později nechat vyplatit odpovídající částku ve fiat měně.
Uživatelé se svými tokeny mohou dělat celou řadu věcí – mohou za ně nakupovat zboží a služby nebo je používat v decentralizovaných aplikacích. Případně také mohou požádat emitenta, aby jim je ihned směnil. V takovém případě emitent
vrácené tokeny spálí (aby nebyly použitelné) a ze svých rezerv vybere odpovídající částku ve fiat měně.
Jak už jsme říkali, kontrakt, který tento systém řídí, je poměrně jednoduchý. Uvedení stablecoinu na trh má ale i spoustu externích faktorů, jako je logistika, dodržování právních předpisů atd., které stojí spoustu úsilí.
Tokeny cenných papírů
Tokeny cenných papírů jsou podobné stablecoinům. Na úrovni kontraktu by mohly být dokonce identické, protože fungují stejným způsobem. K rozdílu dochází na úrovni emitenta. Tokeny cenných papírů zastupují cenné papíry, jako jsou akcie, dluhopisy nebo hmotná aktiva. Často, i když to neplatí vždy, dávají držiteli nějaký podíl na společnosti nebo zboží.
Užitkové tokeny
Užitkové tokeny jsou dnes možná tím nejběžnějším typem tokenů. Na rozdíl od dvou předchozích možností nejsou ničím kryté. Pokud tokeny kryté aktivy přirovnáme k letecké společnosti, pak jsou užitkové tokeny něco jako věrnostní programy pro pravidelné cestující – mají určitou funkci, ale nemají žádnou vnější hodnotu. Užitkové tokeny je možné využít k nesčetnému množství účelů, jako je například
herní měna, palivo pro decentralizované aplikace, věrnostní body a řadu jiných.
Můžete těžit Ether (ETH), ale tokeny těžit nelze. O vzniku nových tokenů se říká, že se razí. Když se kontrakt uvádí na trh, vývojáři distribuují zásobu tokenů podle svých plánů a cestovní mapy.
To se obvykle provádí
prvotní nabídkou kryptoměny (ICO),
prvotní nabídkou burzy (IEO), nebo nabídkou tokenů cenných papírů (STO). Můžete narazit na různé varianty těchto zkratek, ale jejich koncepty jsou si celkem podobné. Investoři pošlou ethery na adresu kontraktu a dostanou za to nové tokeny. Vybrané peníze se použijí k financování dalšího vývoje projektu. Uživatelé očekávají, že svoje tokeny budou moci použít (hned nebo později) nebo je s dalším vývojem projektu přeprodat za vyšší cenu se ziskem.
Distribuci tokenů není třeba automatizovat. Mnoho crowdfundingových projektů umožňuje uživatelům platit celou řadou různých digitálních měn (jako je BNB, BTC, ETH a USDT). Příslušné zůstatky jsou pak přidělovány adresám uživatelů.
Výhody ERC-20 tokenů
Zaměnitelnost
ERC-20 tokeny jsou
zaměnitelné – každou jednotku může zastoupit jiná. Kdybyste drželi token Akademie Binance, nezáleželo by na tom, jaký konkrétní token máte. Mohli byste ho směnit za token někoho jiného a pořád by byl z funkčního hlediska identický, tak jako peníze nebo zlato.
Pokud má být váš token nějakou měnou, je to ideální. Nechtěli byste, aby jednotlivé tokeny měly rozeznatelné vlastnosti, protože pak by byly nezaměnitelné. To by mohlo způsobit, že některé tokeny by byly hodnotnější nebo méně hodnotné než jiné, což by bylo v rozporu s jejich účelem.
Pružný
Jak jsme si ukázali v předchozí části, ERC-20 tokeny jsou vysoce přizpůsobitelné a je možné je upravit na míru spoustě různým účelům. Mohou například zastupovat herní měnu, body ve věrnostních programech,
digitální sběratelské předměty nebo dokonce umělecká díla a vlastnická práva.
Oblíbenost
Oblíbenost standardu ERC-20 v kryptoměnovém odvětví je velmi přesvědčivým důvodem, proč z něj vycházet. Existuje nepřeberné množství burz, peněženek a chytrých kontraktů, které jsou s nově uvedenými tokeny již kompatibilní. A co víc, podpora a dokumentace pro vývojáře je nesmírně bohatá.
Nevýhody ERC-20 tokenů
Škálovatelnost
Stejně jako mnoho kryptoměnových síti, ani Ethereum není imunní vůči potížím s růstem. Ve své současné podobě neumí dobře škálovat – když budete chtít odeslat transakci ve špičce, zaplatíte za to vysoký poplatek a bude to trvat. Když uvedete na trh nový ERC-20 token a síť se zahltí, může to ovlivnit jeho použitelnost.
To není problém jen Etherea, ale spíš nezbytný kompromis za bezpečné a distribuované systémy. Ethereová komunita má v plánu tyto problémy vyřešit migrací na
Ethereum 2.0, které implementuje vylepšení, jako je
Ethereum Plasma a
Ethereum Casper.
Podvody
Přestože to není problém samotné technologie, jednoduchost, se kterou je možné token uvést na trh, by mohla být v některých ohledech považována za nevýhodu. Vytvoření jednoduchého ERC-20 tokenu nevyžaduje skoro žádné úsilí, takže to zvládne prakticky kdokoli – ať už s dobrým nebo špatným úmyslem.
Proto byste si měli dávat pozor na to, do čeho investujete. Existuje celá řada
pyramid a Ponziho schémat, která se tváří jako blockchainové projekty. Než do nějakého projektu začnete investovat,
sami si ho prověřte, ať si uděláte vlastní názor na to, jestli je daná příležitost legitimní.
ERC-20 je první (a dosud nejoblíbenější) standard tokenů na Ethereu, ale rozhodně není jediný. V průběhu let se objevila řada dalších, které buď navrhovaly vylepšení standardu ERC-20 nebo se snažily dosáhnout úplně jiných cílů.
Některé z méně běžných standardů jsou ty, které se používají pro
nezaměnitelné tokeny (NFT). Někdy může být pro vaše použití jedinečnost tokenů s různými atributy žádoucí. Když budete chtít vytvořit token pro jedinečné umělecké dílo, herní aktivum a podobně, jeden z těchto typů kontraktů může být lákavější.
Nesmírně oblíbená decentralizovaná aplikace CryptoKitties například používala standard
ERC-721. Takový kontrakt poskytuje uživatelům
rozhraní API, které mohou použít k ražení vlastních nezaměnitelných tokenů a šifrování
metadat (obrázků, popisků, atd.).
Standard ERC-1155 je možné považovat za takové vylepšení jak standardu ERC-721, tak i standardu ERC-20. Navrhuje standard, který ve stejném kontraktu podporuje zaměnitelné i nezaměnitelné tokeny.
Další možnosti, jako je ERC-223 nebo ERC-621, mají za cíl zlepšit použitelnost. Standard ERC-223 zavádí pojistky proti náhodnému převodu tokenů. Standard ERC-621 přidává další funkce ke zvýšení a snížení nabídky tokenu.
Standard ERC-20 ovládá prostor s kryptoměnovými aktivy už řadu let a není se čemu divit. Prakticky kdokoli může relativně snadno spustit jednoduchý kontrakt, který vyhovuje širokému spektru použití (užitkové tokeny, stablecoiny atd.). Na druhou stranu ale standard ERC-20 postrádá některé funkce, které přinesly jiné standardy. Uvidíme časem, jestli jeho místo obsadí novější typy kontraktů.