Verujem da je većina ljudi koji su u svetu kriptovaluta čuli za ERC20 token, ali mislim da malo njih zaista zna šta je to i kako funkcionišu.
Za početak za one koji ne znaju, nije svaka kriptovaluta vezana za svoj blokčejn, već imamo i tokene koji „žive“ na nekom blokčejnu.
Na primer Ethereum ima svoju valutu Ether, ali na Ethereumu ima mnogo više valuta tj. tokena kao što su npr. Chainlink, UniSwap, Tether itd.
ERC20 („Ethereum Request for Comment 20“), je ustvari standard za tokene na Ethereum mreži, a on predstavlja način na koji treba implementirati pametni ugovor koji će ustvari predstavljati taj token. Pametni ugovori su ustvari programi koje mi pišemo i onda ih kačimo na blokčejn, oni su tema sama za sebe i o njima bi moglo dosta da se napiše, pa koga zanima više o njima može pročitati ovde. ERC20 je standard za takozvane „fungible“ tokene, što znači da je svaki token isti, kao na primer kada imate hiljadu dinara, postoji mnogo ištampanih novčanica od hiljadu dinara, ali vama je skroz nebitno koju vi od tih novčanica konkretno imate jer sve vrede isto.
Da bi pametni ugovor ispoštovao ERC20 standard u njemu moraju biti opisane sledeće stvari: name, symbol, decimals, totalSupply, balanceOf, transfer, transferFrom, approve, allowance. Name i symbol su obična polja u kojima samo definišemo ime i simbol našeg tokena npr. ime tokena „Chainlink“, a simbol „LINK“.
Decimals polje nam je mnogo bitno jer bez njega ne bi mogli da delimo tokene na delove. Naime pametni ugovori se pišu u programskom jeziku solidity, a u tom programskom jeziku nije moguće broj reprezentovati u decimalnom zapisu, tj. imamo samo cele brojeve.
Tu nam u pomoć stiže „decimals“ polje, ono je ustvari samo broj koji označava koliko naš balans ima decimala.
Hajde da za primer uzmemo ERC20 token USDT koji na decimals polju ima vrednost 6. Ukoliko u vašem novčaniku piše da imate 1 USDT, na USDT pametnom ugovoru piše da je vaš balans 1000000, a u vašem novčaniku piše da je 1 jer ako uzmemo da u broju 1000000 imamo 6 decimalnih cifara znači da mi ustvari imamo 1,000000 što je 1 USDT. Znači kada bi imali 1.5 USDT-a, naš balans na pametnom ugovoru bi bio 1500000. Polje „totalSupply“ je broj na pametnom ugovoru koji nam govori koliko ukupno tokena tog ugovora trenutno postoji.
Ovo do sada su sve bile obične promenljive , a „balanceOf“ je funkcija u tom programu kojoj prosledite neku adresu, a ona vam vraća balans za tu adresu, to znači da možete da vidite za svaku adresu koliko ima kojih tokena.
Funkcije „transfer“ i „transferFrom“ su nam najbitnije funkcije jer se u njima piše logika kako prebaciti sredstva sa jednog novčanika na drugi. Razlika između ove dve funkcije je što kada vi pozovete funkciju „transfer“ ona od vas traži da kažete na koju adresu prebacujete i koju količinu tokena, a funkcija „transferFrom“ pored ta dva parametra uzima i sa koje adrese se šalju tokeni tako da vi možete sa nekog trećeg novčanika da prebacite sredstva na neku adresu naravno ukoliko vam je to vlasnik tog novčanika dozvolio. Ova funkcija možda deluje nepotrebno, jer zašto bi ja ikome dao da prebacuje moje pare, da želim da mu dam samo bi mu prebacio tokene. Istina je da bez ove funkcije ne bi postojao DeFi sektor, barem ne u obliku u kojem je on danas.
Na samom kraju imamo i funkcije „approve“ i „allowance“. Funkcija „approve“ nam daje mogućnost da nekoj drugoj adresi dozvolimo da upravlja našim tokenima, ona kao parametre prima adresu kojoj dajemo mogućnost da upravlja našim tokenima kao i količinu tokena koju joj poveravamo na upravljanje. Na kraju ugovora imamo i funkciju „allowance“ koja od nas traži da unesemo dve adrese, gde nam kao odgovor funkcija vraća količinu tokena koju vlasnik druge adrese sme da potroši sa prve adrese. Pošto su ove dve zadnje funkcije malo zbunjujuće navešću primer.
Recimo da Pera ima 300 USDT-a i on želi da dozvoli Miki da sa njegovog novčanika potroši 100 USDT-a. Pera će uz pomoć funkcije „approve“ da dozvoli Miki da potroši 100 USDT-a sa njegovog novčanika, tada će funkcija „allowance“ gde prosledimo prvo Perninu adresu pa Mikinu kao rezultat vratiti 100 USDT-a. Neka kažemo da Mika hoće u USDT-u da plati članarinu u teretani, ali nema dovoljno tokena u svom novčaniku. On u tom trenutku može da pozove „transferFrom“ funkciju i da sa Perinog novčanika prebaci teretani 100 USDT-a.
Naravno ukoliko je Pera u međuvremenu potrošio sve svoje tokene ova transakcija neće biti moguća.
Nadam se da je na kraju ovog teksta jasno šta su tačno ERC20 tokeni i kako oni funkcionišu, pored ovog postoji još ERC standarda kao što su na primer ERC721 (NFT standard) ili ERC1155 (Multi Token Standard), o njima mogu pisati u nekim od narednih tekstova.