En introduktion til ERC-20-tokens
Hjem
Artikler
En introduktion til ERC-20-tokens

En introduktion til ERC-20-tokens

Let øvet
Offentliggjort Jul 31, 2020Opdateret Dec 28, 2022
12m

Introduktion

Ethereum blev grundlagt af Vitalik Buterin i 2014 og positionerede sig selv som en open source-platform til lancering af decentrale applikationer (DApps). Mange af Buterins grunde til at skabe en ny blockchain stammede fra Bitcoin-protokollens manglende fleksibilitet.

Siden lanceringen har Ethereums blockchain tiltrukket udviklere, virksomheder og iværksættere, hvilket har affødt en voksende branche af brugere, der lancerer intelligente kontrakter og distribuerede applikationer.

I denne artikel vil vi se på ERC-20-standarden, som er en vigtig ramme til at skabe tokens. Selvom det er specifikt for Ethereum-netværket, inspirerede rammen også andre blockchain-standarder såsom Binance Chains BEP-2.


Hvad er ERC-20-standarden?

I Ethereum er en ERC en Ethereum Request for Comments (anmodning om kommentarer fra Ethereum). Dette er tekniske dokumenter, der skitserer standarder for programmering på Ethereum. De skal ikke forveksles med Ethereum Improvement Proposals (EIP'er), der ligesom Bitcoins BIP'er foreslår forbedringer af selve protokollen. ERC'er har i stedet til formål at etablere konventioner, der gør det lettere for applikationer og kontrakter at interagere med hinanden.

ERC-20, som er forfattet af Vitalik Buterin og Fabian Vogelsteller i 2015, foreslår et relativt simpelt format for Ethereum-baserede tokens. Ved at følge skitsen behøver udviklere ikke at starte helt fra bar bund. De kan i stedet bygge videre på et fundament, der allerede er brugt på tværs af branchen.

Når nye ERC-20-tokens skabes, er de automatisk indbyrdes kompatible med tjenester og software, der understøtter ERC-20-standarden (software-tegnebøger, hardware-tegnebøger, børser osv.).

Bemærk, at ERC-20-standarden blev udviklet til en EIP (specifikt EIP-20). Dette skete et par år efter det oprindelige forslag på grund af dets udbredte brug. Men selv år senere har navnet "ERC-20" holdt fast.


En hurtig opsummering af Ethereums tokens

I modsætning til ETH (Ethereums egen kryptovaluta) holdes ERC-20-tokens ikke af konti. Tokens findes kun inde i en kontrakt, som er som en selvstændig database. Den specificerer reglerne for tokens (dvs. navn, symbol, delelighed) og fører en liste, der kortlægger brugernes saldi til deres Ethereum-adresser.

For at flytte tokens skal brugere sende en transaktion til kontrakten og bede den om at allokere noget af deres saldo et andet sted. Hvis f.eks. Alice ønsker at sende 5.000 BinanceAcademyTokens til Bob, ringer hun til en funktion i BinanceAcademyTokens intelligente kontrakt og beder den om at gøre det.


Brugere, der interagerer med en intelligent kontrakt


Hendes opkald er indeholdt i det, der ser ud til at være en almindelig Ethereum-transaktion, der betaler 0 ETH til token-kontrakten. Opkaldet er inkluderet i et ekstra felt i transaktionen, som specificerer, hvad Alice ønsker at gøre – i vores tilfælde overføre tokens til Bob.

Selvom hun ikke sender ether, skal hun stadig betale et gebyr angivet i den for at få sin transaktion inkluderet i en blok. Hvis hun ikke har nogen ETH, skal hun få nogle, før hun overfører tokens.

Her er et eksempel på ovenstående fra den virkelige verden på Etherscan: nogen ringer til BUSD-kontrakten. Du kan se, at tokens er blevet overført, og der er betalt et gebyr, selvom Værdi-feltet viser, at der er sendt 0 ETH.

Lad os nu tage et dybere kig for bedre at forstå strukturen af en ERC-20-kontrakt. 


Hvordan skabes ERC-20-tokens?


Illustration af et ERC-20-token, der oprettes


For at være ERC-20-kompatibel skal din kontrakt inkludere seks obligatoriske funktioner: totalSupply, balanceOf, transfer, transferFrom, approve og allowance. Derudover kan du specificere valgfrie funktioner såsom navn, symbol og decimal. Måske står det klart for dig, hvad disse funktioner gør ud fra deres navne. Hvis ikke, så fortvivl ikke –vi vil udspecificerer dem. 

Nedenfor er funktionerne, som de vises i Ethereums specialbyggede Solidity-sprog.


totalSupply

function totalSupply() public view returns (uint256)

Når ovenstående funktion ringes op af en bruger, returnerer den den samlede beholdning af tokens, som kontrakten indeholder.


balanceOf 

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

I modsætning til totalSupply tager balanceOf en parameter (en adresse). Når den ringes op, returnerer den saldoen for den pågældende adresses tokenbeholdning. Husk, at konti på Ethereum-netværket er offentlige, så du kan forespørge på enhver brugers saldo, forudsat at du kender adressen.


transfer

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

transfer overfører passende tokens fra én bruger til en anden. Her angiver du den adresse, du vil sende til, og det beløb, der skal overføres.

Når den ringes op, udløser transfer noget, der kaldes en hændelse (hændelsesudløser i dette tilfælde), som i bund og grund giver blockchainen besked på at inkludere en reference til den.


transferFrom

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

Funktionen transferFrom er et praktisk alternativ til transfer, som muliggør en smule mere programmerbarhed i decentraliserede applikationer. Ligesom transfer anvendes den til at flytte tokens, men disse tokens behøver ikke nødvendigvis at tilhøre den person, der ringer til kontrakten. 

Med andre ord kan du give nogen – eller en anden kontrakt – tilladelse til at overføre midler på dine vegne. En mulig use case involverer betaling for abonnementsbaserede tjenester, hvor du ikke ønsker at sende en betaling manuelt hver dag/uge/måned. I stedet lader du bare et program gøre det for dig.

Denne funktion udløser den samme hændelse som transfer.


approve

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

approve er en anden nyttig funktion set ud fra et programmeringsmæssigt perspektiv. Med denne funktion kan du begrænse antallet af tokens, som en intelligent kontrakt kan trække fra din saldo. Uden den risikerer du, at kontrakten ikke fungerer (eller bliver udnyttet) og stjæler alle dine midler. 

Tag vores eksempel på en abonnementsmodel igen. Lad os antage, at du har en enorm mængde BinanceAcademyTokens, og du vil opsætte ugentlige tilbagevendende betalinger til en streaming DApp. Du har travlt med at læse Binance Academy-indhold dag og nat, så du ønsker ikke at bruge tid hver uge på at oprette en transaktion manuelt.

Du har en massiv saldo af BinanceAcademyTokens, der langt overstiger, hvad der er nødvendigt for at betale for abonnementet. For at forhindre DApp i at dræne dem alle, kan du sætte en grænse med approve. Lad os antage, at dit abonnement koster én BinanceAcademyToken om ugen. Hvis du begrænser den godkendte værdi til tyve tokens, kan du få dit abonnement betalt automatisk for fem måneder.

I værste fald, hvis DApp'en forsøger at hæve alle dine midler, eller hvis der bliver fundet en fejl, mister du kun tyve tokens. Det er muligvis ikke ideelt, men det er bestemt mere tiltalende end at miste alle dine beholdninger.

Når den ringes op, udløser approve en godkendelseshændelse. Som med hændelsen transfer, skriver den data på blockchainen.


allowance 

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

Funktionen allowance kan anvendes sammen med approve. Når du har givet en kontrakt tilladelse til at administrere dine tokens, kan du bruge denne til at kontrollere, hvor mange den stadig kan hæve. Hvis f.eks. dit abonnement har opbrugt tolv af dine tyve godkendte tokens, skulle et opkald til funktionen allowance returnere otte i alt.


De valgfri funktioner

De tidligere omtalte funktioner er obligatoriske. På den anden side behøver navn, symbol og decimal ikke at være inkluderet, men de kan gøre din ERC-20-kontrakt noget pænere. De giver dig mulighed for at tilføje et læsbart navn, indstille et symbol (dvs. ETH, BTC, BNB) og specificere, hvor mange decimaler tokens er delelige med. F.eks. kan tokens, der bruges som valuta, have mere gavn af at være mere delelige end et token, der repræsenterer ejerskab af en ejendom.


Se dette eksempel på GitHub for at se disse elementer i en ægte kontrakt.


Hvad kan ERC-20-tokens gøre?


Illustration af forskellige anvendelser af ERC-20-tokens


Ved at sammensætte alle funktionerne ovenfor, har vi fået en ERC-20-kontrakt. Vi kan forespørge om det samlede udbud, se saldi, overføre midler og give tilladelser til andre DApps til at administrere tokens for os.

En stor del af appellen ved ERC-20-tokens er deres fleksibilitet. De angivne konventioner begrænser ikke udviklingen, så parterne kan implementere yderligere funktioner og indstille specifikke parametre, der passer til deres behov.


Stablecoins

Stablecoins (tokens knyttet til fiat-valutaer) bruger ofte ERC-20-token-standarden. Transaktionen til BUSD-kontrakten, som vi refererede til tidligere, er et eksempel, og de fleste større stablecoins er også tilgængelige i dette format.

For en typisk fiat-støttet stablecoin har en udsteder reserver på euro, dollar osv. Derefter udsteder de et token for hver enhed i deres reserve. Dette betyder, at hvis 10.000 USD blev låst inde i en boks, kunne udstederen oprette 10.000 tokens, som hver kan indløses for 1 USD.

Dette er ret nemt at implementere i Ethereum, teknisk set. En udsteder lancerer simpelthen en kontrakt med 10.000 tokens. Derefter vil de distribuere dem til brugere med løftet om, at de senere kan indløse tokens til en proportional mængde fiat-valuta. 

Brugere kan gøre en række ting med deres tokens – de kan købe varer og tjenester eller bruge dem i DApps. Alternativt kan de anmode om, at udstederen ombytter dem med det samme. I det tilfælde brænder udstederen de returnerede tokens (gør dem ubrugelige) og trækker den korrekte mængde fiat fra deres reserver.

Kontrakten, der styrer dette system, er som før nævnt relativt forenklet. Lancering af en stablecoin kræver dog en del arbejde med eksterne faktorer som logistik, lovoverholdelse osv.


Sikkerhedstokens

Sikkerhedstokens minder om stablecoins. På kontraktniveau kunne begge endda være identiske, da de fungerer på samme måde. Forskellen sker på udsteders niveau. Sikkerhedstokens repræsenterer værdipapirer såsom aktier, obligationer eller fysiske aktiver. Ofte (selv om det ikke altid er tilfældet) giver de indehaveren en form for andel i en virksomhed eller et gode.


Utility-tokens

Utility-tokens er måske de mest almindelige typer tokens, der findes i dag. I modsætning til de to foregående tilbud er de ikke støttet af noget. Hvis aktivbaserede tokens er som aktier i et flyselskab, så er utility-tokens som bonusprogrammer for hyppige rejsende: de tjener en funktion, men de har ingen ekstern værdi. Utility-tokens kan imødekomme et utal af use cases, der fungerer som valuta i spil, brændstof til decentraliserede applikationer, loyalitetspoint og meget mere.



Kan du mine ERC-20-tokens?

Du kan mine ether (ETH), men tokens kan ikke mines – vi siger, at de bliver præget, når nye skabes. Når en kontrakt lanceres, distribuerer udviklerne forsyningen i henhold til deres planer og projekt.

Typisk gøres dette via en Initial Coin Offering (ICO), Initial Exchange Offering (IEO) eller Security Token Offering (STO). Du kan støde på variationer af disse akronymer, men disse begreber er ret ens. Investorer sender ether til kontraktadressen og modtager til gengæld nye tokens. De indsamlede penge bruges til at finansiere videreudvikling af projektet. Brugere forventer at kunne bruge deres tokens (enten med det samme eller på et senere tidspunkt) eller videresælge dem med fortjeneste, efterhånden som projektet udvikler sig.

Tokendistributionen behøver ikke at være automatiseret. Mange crowdfunding-begivenheder giver brugerne mulighed for at betale med en række forskellige digitale valutaer (f.eks. BNB, BTC, ETH og USDT). De respektive saldi allokeres derefter til de adresser, som brugerne har angivet.


Fordele og ulemper ved ERC-20-tokens

Fordele ved ERC-20-tokens

Ombyttelige

ERC-20-tokens er ombyttelige – hver enhed kan ombyttes med en anden. Hvis du havde et BinanceAcademyToken, ville det være lige meget, hvilket specifikt token du havde. Du ville kunne bytte det til en andens, og de ville stadig være funktionelt identiske, ligesom kontanter eller guld.

Dette er ideelt, hvis dit token sigter mod at være en valuta af en slags. Du vil ikke have individuelle enheder med karakteristiske træk, hvilket ville gøre dem ikke-ombyttelige. Dette kan få nogle tokens til at blive mere – eller mindre – værdifulde end andre, hvilket underminerer deres formål.


Fleksible

Som vi har udforsket i det foregående afsnit, er ERC-20-tokens meget tilpasselige og kan skræddersyes til mange forskellige anvendelsesområder. De kan f.eks. bruges som valuta i spil, i loyalitetspointprogrammer, som digitale samleobjekter eller endda til at repræsentere kunst og ejendomsrettigheder.


Populære

ERC-20's popularitet i kryptovalutabranchen er en yderst overbevisende grund til at bruge den som et blueprint. Der er et væld af børser, tegnebøger og intelligente kontrakter, der allerede er kompatible med nyligt lancerede tokens. Derudover er der masser af udviklersupport og dokumentation. 


Ulemper ved ERC-20-tokens

Skalerbarhed

Som med mange kryptovalutanetværk er Ethereum ikke immun over for "vokseværk". I sin nuværende form skalerer den ikke godt – et forsøg på at sende en transaktion på spidsbelastningstider resulterer i høje gebyrer og forsinkelser. Hvis du lancerer et ERC-20-token, og netværket bliver overbelastet, kan dets anvendelighed blive påvirket.

Dette er ikke et problem eksklusivt for Ethereum. Det er snarere en nødvendig afvejning i sikre, distribuerede systemer. Fællesskabet planlægger at løse disse problemer i migreringen til Ethereum 2.0, som vil implementere opgraderinger såsom Ethereum Plasma og Ethereum Casper.

Læs mere om problemer med skalerbarhed i Blockchain-skalerbarhed: Sidekæder og betalingskanaler.


Svindel

Selvom det ikke er et problem med selve teknologien, kan den lethed, hvormed et token kan lanceres, betragtes som en ulempe i nogle henseender. Det kræver minimal indsats at skabe et simpelt ERC-20-token, hvilket betyder, at enhver kan gøre det – på godt og ondt.

Som sådan bør du være forsigtig med, hvad du investerer i. Der er en række pyramide- og Ponzi-metoder forklædt som blockchain-projekter.  Lav din egen research, før du investerer, for at drage dine egne konklusioner om, hvorvidt en mulighed er legitim.

 

ERC-20, ERC-1155, ERC-223, ERC-721 – hvad er forskellen?

ERC-20 var den første (og til dato den mest populære) Ethereum-tokenstandard, men det er på ingen måde den eneste. I årenes løb er mange andre dukket op, der enten foreslår forbedringer af ERC-20 eller forsøger at opnå komplet forskellige mål.

Nogle af de mindre almindelige standarder er dem, der bruges i ikke-ombyttelige tokens (non-fungible tokens, NFT). Nogle gange har din use case faktisk fordel af at have unikke tokens med forskellige attributter. Hvis du ville tokenisere et unikt kunstværk, et aktiv i spil osv., kunne én af disse kontrakttyper måske være mere tiltalende.

ERC-721-standarden, der f.eks. blev brugt til den uhyre populære CryptoKitties DApp. En sådan kontrakt giver brugere et API til at præge deres egne ikke-ombyttelige tokens og til at kode metadata (billeder, beskrivelser osv.). 

ERC-1155-standarden kan ses som en forbedring af både ERC-721 og ERC-20. Den skitserer en standard, der understøtter både ombyttelige og ikke-ombyttelige tokens i samme kontrakt.

Andre muligheder som ERC-223 eller ERC-621 har til formål at forbedre brugervenligheden. Førstnævnte implementerer sikkerhedsforanstaltninger for at forhindre utilsigtede token-overførsler. Sidstnævnte tilføjer ekstra funktioner for at øge og mindske token-udbuddet.

For yderligere oplysninger om emnet NFT'er kan du læse En vejledning til kryptosamlerobjekter og ikke-ombyttelige tokens (NFT'er).


Sammenfatning

ERC-20-standarden har domineret kryptoaktivområdet i årevis, og det er ikke svært at se hvorfor. Alle kan relativt nemt implementere en simpel kontrakt, der passer til en bred vifte af use cases (utility-tokens, stablecoins osv.). Når det er sagt, mangler ERC-20 nogle af de funktioner, som andre standarder har. Det er stadig uvist, om efterfølgende typer af kontrakter vil overtage dens plads.