En introduksjon til ERC-20-tokener
Innholdsfortegnelse
Innledning
Hva er ERC-20-standarden?
En rask oppsummering av Ethereum-tokener
Hvordan lages ERC-20-tokener?
Hva kan ERC-20-tokener gjøre?
Kan ERC-20-tokener mines?
Fordeler og ulemper med ERC-20-tokener
ERC-20, ERC-1155, ERC-223, ERC-721 – hva er forskjellen?
Avsluttende tanker
En introduksjon til ERC-20-tokener
Hjem
Artikler
En introduksjon til ERC-20-tokener

En introduksjon til ERC-20-tokener

Viderekommen
Publisert Jul 31, 2020Oppdatert Nov 11, 2022
12m

Innledning

Ethereum ble grunnlagt av Vitalik Buterin i 2014 og posisjonerte seg som en plattform med åpen kildekode for lansering av desentraliserte applikasjoner (DApps). Mye av Buterins motivasjon for å lage en ny blokkjede kom fra Bitcoin-protokollens mangel på fleksibilitet.

Siden lanseringen har Ethereum-blokkjeden tiltrukket seg utviklere, bedrifter og gründere og har blitt en voksende industri av brukere som lanserer smarte kontrakter og distribuerte applikasjoner.

I denne artikkelen skal vi se på ERC-20-standarden, et viktig rammeverk for å lage tokener. Selv om rammeverket er spesifikt for Ethereum-nettverket, har det også inspirert andre blokkjedestandarder, for eksempel Binance Chains BEP-2.


Hva er ERC-20-standarden?

I Ethereum er en ERC en Ethereum Request for Comments (Ethereum-forespørsel om kommentarer). Dette er tekniske dokumenter som beskriver standarder for programmering på Ethereum. De må ikke forveksles med Ethereum Improvement Proposals (EIP-er / Ethereum forbedringsforslag), som i likhet med Bitcoins BIP-er foreslår forbedringer av selve protokollen. ERC-er har isteden som mål å etablere konvensjoner som gjør det lettere for applikasjoner og kontrakter å samhandle med hverandre.

ERC-20 ble forfattet av Vitalik Buterin og Fabian Vogelsteller i 2015 og kommer med et relativt enkelt format for Ethereum-baserte tokener. Hvis utviklerne følger skissen, trenger de ikke å finne opp hjulet på nytt. Isteden kan de bygge på et grunnlag som allerede brukes i bransjen.

Når nye ERC-20-tokener opprettes, blir de automatisk interoperative med tjenester og programvare som støtter ERC-20-standarden (programvarelommebøker, maskinvarelommebøker, børser osv.).

Det bør nevnes at ERC-20-standarden ble utviklet til en EIP (spesifikt EIP-20). Dette skjedde et par år etter det opprinnelige forslaget på grunn av den utbredte bruken. Men selv mange år senere brukes fortsatt navnet "ERC-20".


En rask oppsummering av Ethereum-tokener

I motsetning til ETH (Ethereums opprinnelige kryptovaluta), holdes ikke ERC-20-tokener av kontoer. Tokenene eksisterer bare inni en kontrakt, som er som en selvstendig database. Den spesifiserer reglene for tokenene (dvs. navn, symbol, delbarhet) og har en liste som kartlegger brukernes saldo opp mot Ethereum-adressene deres.

For å flytte tokener må brukerne sende en transaksjon til kontrakten og be den om å flytte noe av saldoen til et annet sted. For eksempel: Hvis Anne ønsker å sende 5000 BinanceAcademyTokener til Benjamin, påkaller hun en funksjon i BinanceAcademyToken-smartkontrakten og ber den om å gjøre det.


Brukere som samhandler med en smart kontrakt


Påkallelsen oppbevares i noe som ser ut til å være en vanlig Ethereum-transaksjon som betaler 0 ETH til tokenkontrakten. Påkallelsen tas med i et tilleggsfelt i transaksjonen som spesifiserer hva Anne vil gjøre – i vårt tilfelle overføre tokener til Benjamin.

Selv om hun ikke sender ether, må hun fortsatt betale et gebyr pålydende i den for å få transaksjonen inkludert i en blokk. Hvis hun ikke har noen ETH, må hun skaffe seg noen før hun overfører tokener.

Her er et eksempel fra virkeligheten på det ovennevnte på Etherscan: Noen påkaller BUSD-kontrakten. Du kan se at tokener ble overført, og et gebyr ble betalt, selv om feltet Verdi viser at 0 ETH ble sendt.

Nå som vi er i gang, kan vi gå litt dypere for å få en bedre forståelse av strukturen til en typisk ERC-20-kontrakt. 


Hvordan lages ERC-20-tokener?


Illustrasjon av et ERC-20-token som opprettes


For at kontrakten skal være ERC-20-kompatibel, må den inneholde seks obligatoriske funksjoner: totalSupply (totalforsyning), balanceOf (saldo på), transfer (overfør), transferFrom (overfør fra), approve (godkjenn), og allowance (tillatelse). I tillegg kan du spesifisere valgfrie funksjoner, for eksempel navn, symbol og desimal. Du skjønner kanskje hva disse funksjonene gjør, ut ifra navnene deres. Hvis ikke, ta det med ro – vi skal forklare. 

Nedenfor er funksjonene slik de vises i Ethereums spesialbygde Solidity-språk.


totalSupply (totalforsyning)

function totalSupply() public view returns (uint256)

Når påkalt av en bruker, returnerer ovenstående funksjon totalforsyningen av tokener som kontrakten holder.


balanceOf (saldo på) 

function balanceOf(address _owner) public view returns (uint256 balance)

I motsetning til totalSupply tar balanceOf en parameter (en adresse). Når den påkalles, returnerer den saldoen til adressens tokenbeholdning. Husk at kontoer på Ethereum-nettverket er offentlige, så du kan be om saldoen til en hvilken som helst bruker, forutsatt at du kjenner adressen.


transfer (overfør)

function transfer(address _to, uint256 _value) public returns (bool success)

overfør overfører aktuelt antall tokener fra en bruker til en annen. Her oppgir du adressen du vil sende til, og beløpet som skal overføres.

Når den påkalles, utløser overfør noe som kalles en hendelse (hendelsesoverføring, i dette tilfellet), som i bunn og grunn ber blokkjeden om å inkludere en referanse til den.


transferFrom (overfør fra)

function transferFrom(address _from, address _to, uint256 _value) public returns (bool success)

Funksjonen overfør fra er et praktisk alternativ til overfør som gir litt flere programmeringsmuligheter i desentraliserte applikasjoner. I likhet med overfør brukes den til å flytte tokener, men disse tokenene trenger ikke nødvendigvis å tilhøre personen som påkaller kontrakten. 

Du kan med andre ord autorisere en annen person – eller en annen kontrakt – til å overføre penger på dine vegne. Et mulig bruksområde er å betale for abonnementsbaserte tjenester, der du ikke ønsker å sende en betaling hver dag/uke/måned manuelt. Isteden lar du bare et program gjøre det for deg.

Denne funksjonen utløser samme hendelse som overfør.


approve (godkjenn)

function approve(address _spender, uint256 _value) public returns (bool success)

godkjenn er en annen nyttig funksjon som gir flere programmeringsmuligheter. Med denne funksjonen kan du begrense antall tokener som en smart kontrakt kan trekke fra saldoen din. Uten den risikerer du at kontrakten ikke fungerer riktig (eller blir utnyttet) og at noen stjeler alle midlene dine. 

Ta for eksempel abonnementsmodellen igjen. Sett at du har en enorm mengde BinanceAcademyTokener, og du vil opprette ukentlige faste betalinger til en streaming-DApp. Du er opptatt med å lese Binance Academy-innhold dag og natt, så du vil ikke bruke tid hver uke på å opprette en transaksjon manuelt.

Du har en enorm saldo av BinanceAcademyTokener, mye mer enn det som trengs for å betale for abonnementet. For å hindre at DApp-en tømmer alt, kan du angi en grense med godkjenn. Sett at abonnementet koster én BinanceAcademyToken per uke. Hvis du begrenser godkjenningsverdien til tjue tokener, kan du betale for abonnementet automatisk i fem måneder.

I verste fall, hvis DApp-en skulle prøve å ta ut alle pengene dine eller hvis det oppstår en feil, mister du bare tjue tokener. Det er kanskje ikke ideelt, men det er absolutt bedre enn å miste hele beholdningen.

Ved påkallelse utløser godkjenn hendelsen godkjenning. I likhet med hendelsen overfør skriver den data til blokkjeden.


allowance (tillatelse) 

function allowance(address _owner, address _spender) public view returns (uint256 remaining)

tillatelse kan brukes sammen med godkjenn. Når du har gitt en kontraktstillatelse til administrasjon av tokenene dine, kan du bruke denne til å sjekke hvor mange som fortsatt kan tas ut. For eksempel: Hvis abonnementet ditt har brukt opp tolv av de tjue godkjente tokenene dine, bør det å påkalle tillatelse-funksjonen returnere totalt åtte.


Valgfrie funksjoner

De foregående funksjonene er obligatoriske. På den annen side trenger ikke navn, symbol og desimal å inkluderes, men de kan gjøre ERC-20-kontrakten din litt penere. De lar deg legge til et navn, angi et symbol (dvs. ETH, BTC, BNB) og spesifisere hvor mange desimalplasser tokenene kan brøkes ned til – alt dette informasjon som kan leses av mennesker. For eksempel kan tokener som brukes som valuta, ha mer nytte av å kunne brøkes ned mer enn et token som representerer eierskap av en eiendom.


Sjekk ut dette eksemplet på GitHub for å se disse elementene i en ekte kontrakt.


Hva kan ERC-20-tokener gjøre?


Illustrasjon av ulike bruksområder for ERC-20-tokener


Når vi setter sammen alle funksjonene ovenfor, har vi en ERC-20-kontrakt. Vi kan spørre etter totalforsyning, sjekke saldo, overføre midler og gi andre DApps tillatelse til å administrere tokener for oss.

En stor del av det som gjør ERC-20-tokener attraktive, er fleksibiliteten. Konvensjonene som er bestemt, begrenser ikke utvikling, så partene kan implementere tilleggsfunksjoner og angi spesifikke parametere som passer deres behov.


Stablecoins

Stablecoins (tokener knyttet til fiat-valutaer) bruker ofte ERC-20-tokenstandarden. Transaksjonen til BUSD-kontrakten som vi refererte til tidligere, er ett eksempel, og de fleste store stablecoins er også tilgjengelige i dette formatet.

For en typisk fiat-støttet stablecoin har en utsteder reserver av euro, dollar, osv. Deretter utsteder de et token for hver enhet i reserven. Dette betyr at hvis USD 10 000 ble låst inne i et hvelv, kunne utstederen opprette 10 000 tokener, som hver kan løses inn for USD 1.

Dette er ganske enkelt å implementere i Ethereum, teknisk sett. En utsteder åpner ganske enkelt en kontrakt med 10 000 tokener. Deretter distribueres de til brukere med et løfte om at de senere kan løse inn tokener mot en proporsjonal mengde fiat-valuta. 

Brukerne kan gjøre mange ting med tokenene sine – de kan kjøpe varer og tjenester eller bruke dem i DApps. Alternativt kan de be om at utstederen veksler dem med en gang. I et slikt tilfelle brenner utstederen de returnerte tokenene (gjør dem ubrukelige) og tar ut riktig mengde fiat fra reservene.

Kontrakten som styrer dette systemet, er som nevnt ganske enkel. Men det å lansere en stablecoin krever mye arbeid med eksterne faktorer som logistikk, regeloverholdelse, osv.


Verdipapirtoken

Verdipapirtokener ligner på stablecoins. På kontraktsnivå kan begge til og med være identiske, ettersom de fungerer på samme måte. Skillet ligger på utstedernivå. Verdipapirtokener representerer verdipapirer, for eksempel aksjer, obligasjoner eller fysiske eiendeler. Ofte (men ikke alltid), gir de innehaveren en form for andel i et selskap eller et gode.


Brukstoken

Brukstokener er kanskje den vanligste typen token som finnes. I motsetning til de to foregående variantene, støttes de ikke av noe. Hvis ressursstøttede tokener er som aksjer i et flyselskap, så er brukstokener som flybonusprogrammer: de har en funksjon, men de har ingen ekstern verdi. Brukstokener kan ha en haug av bruksområder og fungerer som valuta i spill, driveren i desentraliserte applikasjoner, lojalitetspoeng og mye mer.



Kan ERC-20-tokener mines?

Man kan mine ether (ETH), men tokener kan ikke mines – vi sier at de blir myntet når det opprettes nye. Når en kontrakt lanseres, distribuerer utviklerne forsyningen i henhold til sine planer og sitt veikart.

Vanligvis gjøres dette via et første mynttilbud (Initial Coin Offering / ICO), første børstilbud (Initial Exchange Offering / IEO) eller verdipapirtokentilbud (Security Token Offering / STO). Du kan komme over varianter av disse begrepene og forkortelsene, men konseptene er ganske like. Investorer sender ether til kontraktsadressen og mottar til gjengjeld nye tokener. Pengene som samles inn, brukes til å finansiere videreutvikling av prosjektet. Brukerne forventer å kunne bruke tokenene (enten umiddelbart eller senere) eller selge dem videre med fortjeneste etter hvert som prosjektet utvikler seg.

Tokendistribusjonen trenger ikke å være automatisert. Mange crowdfunding-arrangementer lar brukerne betale med en rekke forskjellige digitale valutaer (som BNB, BTC, ETH og USDT). De respektive saldoene blir deretter fordelt til adressene som er oppgitt av brukerne.


Fordeler og ulemper med ERC-20-tokener

Fordeler med ERC-20-tokener

Fungible

ERC-20 tokener er fungible – hver enhet kan byttes ut med en annen. Hvis du har en BinanceAcademyToken, spiller det ingen rolle hvilken spesifikk token du har. Du kan bytte den med en annen, og de fungerer fortsatt på akkurat samme måte, i likhet med kontanter eller gull.

Dette er ideelt hvis tokenet skal fungere som en valuta. Du vil ikke ha individuelle enheter med ulike egenskaper, noe som kan gjøre dem ikke-fungible. Dette kunne føre til at noen tokener blir mer – eller mindre – verdifulle enn andre, og det undergraver formålet.


Fleksible

Som vi så på i forrige del, er ERC-20-tokener lette å tilpasse og kan skreddersys til mange forskjellige formål. For eksempel kan de brukes som valuta i spill, i lojalitetspoengprogrammer, som digitale samleobjekter eller til og med for å representere kunst- og eiendomsrettigheter.


Populære

ERC-20s popularitet innen kryptovaluta er en svært overbevisende grunn til å bruke den som skisse. Det finnes en mengde børser, lommebøker og smarte kontrakter som allerede er kompatible med nylanserte tokener. Dessuten finnes det rikelig med utviklerstøtte og dokumentasjon. 


Ulemper med ERC-20-tokener

Skalerbarhet

Som med mange kryptovalutanettverk er ikke Ethereum immun mot voksesmerter. I nåværende form fungerer det ikke så bra å skalere den – prøver man å sende en transaksjon på travle tidspunkter, resulterer det i høye gebyrer og forsinkelser. Hvis du starter et ERC-20-token og nettverket blir overbelastet, kan brukervennligheten bli påvirket.

Dette er ikke et problem som bare gjelder Ethereum. Snarere er det et nødvendig kompromiss i sikre, distribuerte systemer. Fellesskapet planlegger å løse disse problemene ved migreringen til Ethereum 2.0, som vil implementere oppgraderinger som Ethereum Plasma og Ethereum Casper.

Lær mer om problemer med skalerbarhet i Skalerbarhet for blokkjeder: Sidekjeder og betalingskanaler.


Svindel

Selv om dette ikke er et problem med selve teknologien, kan det at det er så lett å lansere et token, ses på som en ulempe i visse tilfeller. Det krever minimal innsats å lage et enkelt ERC-20-token, noe som betyr at hvem som helst kan gjøre det – på godt og vondt.

Derfor bør du være forsiktig med hva du investerer i. Det finnes masse pyramide- og Ponzi-opplegg som er forkledd som blokkjedeprosjekter.  Gjør egne undersøkelser før du investerer, og trekk dine egne konklusjoner om hvorvidt en mulighet er legitim.

 

ERC-20, ERC-1155, ERC-223, ERC-721 – hva er forskjellen?

ERC-20 var den første (og til dags dato den mest populære) Ethereum-tokenstandarden, men den er på ingen måte den eneste. Gjennom årene har mange andre dukket opp, enten med forbedringer i ERC-20 eller med hensikt å nå helt andre mål.

Noen av de mindre vanlige standardene er de som brukes i ikke-fungible tokener (non-fungible tokens / NFTs). Noen ganger kan ditt bruksområde ha nytte av unike tokener med forskjellige attributter. Hvis du ønsket å lage tokener for et unikt kunstverk, en eiendel i et spill osv., kan en av disse kontraktstypene være mer fristende.

ERC-721-standarden ble for eksempel brukt for den utrolig populære CryptoKitties DApp-en. En slik kontrakt tilbyr en API for at brukerne skal kunne lage egne ikke-fungible tokener og for å kode metadata (bilder, beskrivelser, etc.). 

ERC-1155-standarden kan sees på som en forbedring av både ERC-721 og ERC-20. Den skisserer en standard som støtter både gjensidig fungible og ikke-fungible tokener i samme kontrakt.

Andre alternativer som ERC-223 eller ERC-621 prøver å forbedre brukervennligheten. Førstnevnte implementerer sikkerhetstiltak for å hindre utilsiktede tokenoverføringer. Sistnevnte legger til ekstra funksjoner for å øke og redusere tokenforsyningen.

For mer om NFT kan du sjekke ut «En guide til krypto-samlerobjekter og ikke-fungible tokener (NFT-er)».


Avsluttende tanker

ERC-20-standarden har dominert kryptoressursene i årevis, og det er lett å skjønne hvorfor. Ganske enkelt kan hvem som helst distribuere en enkel kontrakt som passer til mange bruksområder (brukstokener, stablecoins, etc.). Når det er sagt, mangler ERC-20 noen av funksjonene som de andre standardene har å by på. Det gjenstår å se om etterfølgende kontraktstyper tar dens plass.