14

Token Ethereum – ERC20. Czym właściwie są tokeny i jak je stworzyć? Wyjaśniamy!

Czym właściwie jest standard Token Ethereum ERC20? Do czego możemy wykorzystać tokeny i jak je stworzyć? O tym w naszym najnowszym artykule.

Najpopularniejszym silnikiem, który umożliwia stworzenie tokenów jest Ethereum. Jak już wspominaliśmy w naszym poprzednim tekście poświęconym tej platformie, Ethereum jest nie tylko kryptowalutą, ale również platformą deweloperską. Dzięki niej, każdy użytkownik może np. stworzyć DApps (zdecentralizowaną aplikację) przy pomocy Smart Kontraktów.

Jedną z możliwości, jakie daje Smart Kontrakt jest stworzenie tokenu. Obecnie tokeny Ethereum posiadają standard implementacji nazywany w skrócie ERC-20 (od Ethereum Request for Comments). Rozwijane są również rozszerzenia standardu, które usprawniają działanie tokenów: ERC-223 oraz ERC-721.

W poniższym tekście będzie mowa o tokenach w sieci Ethereum zbudowanych przy pomocy Smart Kontraktów. Stworzenie Smart Kontraktu wymaga znajomości w stopniu podstawowym języka Solidity. Narzędziem przydatnym w tworzeniu Smart Kontraktów będzie także Remix IDE. Dodatkowo zalecana jest znajomość podstaw działania samej sieci Ethereum.

Czym jest token?

Podobnie jak kryptowaluta, token reprezentuje pewnego rodzaju wirtualny zasób. Tokeny, które są obecne w sieci Ethereum, mogą pełnić różnorodne funkcje. Większość z nich posiada również wartość, wyrażoną w walutach FIAT (pieniądz fiducjarny).

Wspomniany wcześniej standard implementacji ERC-20 pozwala na jednorodną implementację funkcjonalności. Daje m. in. takie korzyści, jak łatwiejsza implementacja przez deweloperów, czy możliwość używania tokenów przy pomocy oprogramowania firm trzecich. Jest to możliwe dzięki temu, że nazewnictwo jest stałe i programiści po prostu wiedzą, czego mogą się spodziewać. Od strony użytkownika, standard pozwala używać tokeny w takich narzędziach jak portfel kryptowalut np. Mist.

Zastosowanie niektórych tokenów:

  • jako środek płatniczy za dostęp do zasobów,
  • w celu stworzenia tzw. ICO (Initial Coin Offering), które polega na zebraniu funduszy na wykonanie konkretnego projektu
  • odzwierciedlenie stanu posiadania pewnego procentu własności (np. udziałów w spółkach).

W przypadku tokenów głównym ich “zarządcą” jest kod wykonywalny (aplikacja). Implementacja kodu zależy od programistów i podejścia biznesowego. Daje to możliwości stworzenia czegoś w stylu inflacji lub deflacji, gdzie całkowita ilość tokenów nie musi być stała.

Rodzaje tokenów

Utility Tokens

Tokeny Utility zapewniają dostęp do usług. Głównie służą jako środek płatności za produkty lub usługi. Tokeny te zazwyczaj można kupić podczas ICO (Initial Coin Offering).

*Czym jest ICO?

ICO to nowy rodzaj crowdfundingu, powiązany głównie z kryptowalutami. Pozwala na zebranie funduszy na inwestycje i rozwój nowego produktu. Czasem pomaga zebrać fundusze na dalszy rozwój projektu – np. dodanie nowych funkcjonalności.

Tokeny te bywają też nazywane “app coins” lub “app tokens”. W większości przypadków powinny być traktowane jako “kupon pre-paid”, który może być użyty w nieistniejącej jeszcze aplikacji lub produkcie. Cena tokenów Utility jest przeważnie ustalana przez rynek, gdy token znajdzie się już w obrocie na giełdach kryptowalutowych.

Security Tokens

Innym typem tokenów są tokeny Security. Odzwierciedlają stan posiadania, np. udziały w firmie, lub posiadanie różnego rodzaju kruszców, czy innych instrumentów finansowych i inwestycyjnych.

Implementacja

Początkowo implementacje tokenów nie były oficjalnie zdefiniowane. Oznaczało to tyle, że każda implementacja mogła posiadać inne funkcje, oraz nie mogła być wspierana przez oprogramowanie stron trzecich.

Społeczność Ethereum wypracowała z czasem standard implementacji nazywanym ERC20. Standard ten definiuje bazową funkcjonalność, jaka powinna być wspierana przez token. Standard ERC20. pozwala także na autoryzowanie wykonania przelewu tokenów przez osoby trzecie.

Standard ERC20 definiuje wymaganie takich funkcji jak:

  • name – zwracająca nazwę tokenu: np. MyToken
    function name() constant returns (string name)
  • symbol – zwracający symbol tokenu: np. MTO
    function symbol() constant returns (string symbol)
  • decimals – punkty dziesiętne tokenu, służące głównie do reprezentacji. Podobnie Wei w stosunku do Ethereum function decimals() constant returns (uint8 decimals)
  • totalSupply – całkowita ilość dostępnych tokenów
    function totalSupply() constant returns (uint256 totalSupply)
  • balanceOf – ilość tokenów na wskazanym koncie
    function balanceOf(address _owner) constant returns (uint256 balance)
  • transfer – funkcja służąca do przesłania tokenów z własnego konta na inne. Funkcja ta musi wywołać event Transfer. Musi wyrzucić wyjątek, jeżeli konto, z którego chcemy zrobić przelew nie posiada wystarczających środków
    function transfer(address _to, uint256 _value) returns (bool success)
  • transferFrom – Umożliwia wysłanie środków przez osobę trzecią z jednego konta do drugiego.
    function transferFrom(address _from, address _to, uint256 _value) returns (bool success)
  • approve – umożliwia zgodę na wysłanie przez osobę trzecią środków we wskazanej ilości
    function approve(address _spender, uint256 _value) returns (bool success)
  • allowance – sprawdza kwotę, którą może przelać osoba trzecia (w powiązaniu do dwóch poprzednich metod)
    function allowance(address _owner, address _spender) constant returns (uint256 remaining)

Eventów:

  • Transfer – jest wywoływany przy wykonaniu przelewu
  • Approval – jest wywoływany przy pomyślnym wykonaniu approve

Oczywiście należy zaznaczyć, że implementacje interfejsu ERC20 mogą różnić się w detalach. Mogą być również bardziej rozbudowane, zapewniając dodatkową funkcjonalność (np. taką jak zamrożenie części środków, obsługę przelewów ETH lub automatyczne przyznanie tokenów w zamian za kryptowalutę). Zależnie od założeń twórców, tokeny mogą wspierać bezpieczeństwo lub kłaść duży nacisk na oszczędność zużywanego gazu przez kontrakt.

Wymagane narzędzia

Głównym narzędziem, z którego będziemy korzystać w procesie opisanym w tym artykule jest przeglądarkowy edytor Smart Kontraktów: Remix. Pozwoli na napisanie kontraktu, kompilację oraz wgranie, a także użycie poszczególnych funkcji. Udostępnia również funkcjonalność do debugowania transakcji i śledzenia jej, krok po kroku. Nie mając skonfigurowanej sieci prywatnej lub połączenia do sieci testowych, możemy użyć wirtualnej maszyny JavaScript, którą udostępnia Remix.

Kod źródłowy

Poniżej znajdziecie bardziej szczegółową dokumentację na podstawie kodu źródłowego. Będzie to prosta implementacja tokenu. Przyjmijmy, że będzie nazywał się: CSToken, w skrócie: CST. Jego ilość wyznaczmy na jeden milion (1000000). To co będzie nam potrzebne to definicji interfejsu ERC20.

./ERC20Interface.sol:
pragma solidity ^0.4.18;
contract ERC20Interface {
uint256 public totalSupply;
function balanceOf(address _owner) public view returns (uint256 balance);
function transfer(address _to, uint256 _value) public returns (bool success);
function transferFrom(address _from, address _to, uint256 _value) public returns (bool success);
function approve(address _spender, uint256 _value) public returns (bool success);
function allowance(address _owner, address _spender) public view returns (uint256 remaining);
event Transfer(address indexed _from, address indexed _to, uint256 _value);
event Approval(address indexed _owner, address indexed _spender, uint256 _value);
}

Następnym krokiem jest implementacja naszego tokenu:

Interaktywny kod dostępny jest tutaj

Deployment

Używając webowego IDE możemy edytować, oraz skompilować nasz kod. Tworząc kontrakt, podajemy w konstruktorze wszystkie wybrane przez nas parametry. Naszym wyborem będzie:

  • Całkowita pula tokenów: 1000000,
  • Nazwa tokenu: „CSToken”,
  • Liczba miejsc po przecinku: 18 – jest to w większości przypadków standardowe podejście,
  • Skrót tokenu: „CST”.
Ethereum

Wpisując w funkcji Create nasze wybrane parametry jako: 1000000,”CSToken”,18,”CST” po stworzeniu, otrzymamy kontrakt pod nowym adresem w sieci. Następnie możemy zacząć używać poszczególne funkcje. Całkowita wartość tokenów powinna wynosić 100,000,000,000,000,000,000,000 ponieważ mamy 18 miejsc po przecinku.

Posiadając już adres kontraktu, będziemy mogli dodać nasz token w narzędziu firm trzecich. Przykładowym narzędziem jest portfel oraz przeglądarka Mist.

Posiadając wgrany kontrakt do sieci, możemy z naszego konta przelać odpowiednią ilość tokenów na inne konto. Służy do tego nasza funkcja transfer, przyjmująca jako parametry adres, na który chcemy przelać tokeny, oraz ilość tokenów. Jeżeli będziemy chcieli przelać 50 tokenów, musimy podać jako wartość rezultat: 50 * 10^18. Po wykonaniu operacji, nasz portfel powinien rozpoznać śledzony token i wyświetlić odpowiednią informację.

Jak widać na powyższym zrzucie ekranu, Mist informuje o tym, że konto posiada 50 CSToken.

Podsumowanie

Tokeny to kolejne możliwości, jakie wynikają z zastosowania technologii blockchain. Dzięki zbudowaniu standardu ERC20, narzędzia firm trzecich mogą śledzić informacje o balansach, ale również wykonywać transakcje przepisania tokenów do innego użytkownika. Standard zapewnia możliwość dodania tokenów do giełd kryptowalut, a to z kolei wpływa na ich wartość rynkową. Również samo posiadanie tokenów może świadczyć o pewnej ilości zasobów – ponieważ token może odzwierciedlać np. udziały.

Cały kod: https://github.com/ConciseSoftware/sample-token-erc20
_____________________________________________________
Autor:

Piotr Pawlak – Blockchain dApps Developer
https://www.linkedin.com/in/ppawlakov/

Concise Software – software house specjalizujący się w rozwiązaniach z zakresu blockchain, Internet of things, automotive, web oraz aplikacjach mobilnych.
Od 11 lat działamy na skalę globalną, ale serce naszego teamu bije niezmiennie w Rzeszowie. Jesteśmy zgranym zespołem inżynierów i projektantów, którzy każdego dnia z pasją pomagają tworzyć swoim partnerom innowacyjny, zintegrowany świat. Wśród nich znajdują się m. in. Jaguar, Red Bull, Panasonic, Delivery Hero, Bosch, Neufund. Nasi inżynierowie należą także do czołówki ekspertów zajmujących się technologią blockchain.