En introduktion till ERC-20-token
Hem
Artiklar
En introduktion till ERC-20-token

En introduktion till ERC-20-token

Avancerad
Publicerad Jul 31, 2020Uppdaterad Dec 28, 2022
12m

Introduktion

Ethereum grundades av Vitalik Buterin under 2014 och positionerar sig som en öppen källkodsplattform för att lansera decentraliserade applikationer (DApps). Många av Buterins motiv för att skapa en ny blockkedja härrörde från Bitcoin-protokollets brist på flexibilitet.

Sedan lanseringen har Ethereum-blockkedjan attraherat utvecklare, företag och entreprenörer, vilket skapat en växande bransch av användare som lanserar smarta kontrakt och distribuerade applikationer.

I den här artikeln ska vi titta närmare på ERC-20-standarden som är ett viktigt ramverk för att skapa token. Även om det är specifikt för Ethereum-nätverket inspirerade ramverket också andra blockkedjestandarder, såsom Binance-kedjans BEP-2.


Vad är ERC-20-standarden?

På Ethereum är ERC en Ethereum-förfrågan om kommentarer (Ethereum Request for Comments). Dessa är tekniska dokument som beskriver standarder för programmering på Ethereum. De ska inte förväxlas med Ethereum Improvement Proposals (EIP:er) som liksom Bitcoins BIP:er föreslår förbättringar av själva protokollet. ERC:er syftar istället till att upprätta konventioner som gör det lättare för ansökningar och kontrakt att interagera med varandra.

ERC-20 skrevs av Vitalik Buterin och Fabian Vogelsteller under 2015 och föreslår ett relativt enkelt format för Ethereum-baserade token. Genom att följa detta format behöver utvecklarna inte uppfinna hjulet på nytt. Istället kan de bygga från en grund som redan används i branschen.

När nya ERC-20-token har skapats är de automatiskt kompatibla med tjänster och programvara som stöder ERC-20-standarden (programvaruplånböcker, hårdvaruplånböcker, börser, osv).

Det bör noteras att ERC-20-standarden utvecklades till en EIP (och specifikt en EIP-20). Detta skedde ett par år efter det ursprungliga förslaget på grund av dess utbredda användning. Men även flera år senare har namnet "ERC-20" stannat kvar.


En snabb sammanfattning av Ethereums token

Till skillnad från ETH (Ethereums egen kryptovaluta) innehas inte ERC-20-token av konton. Token finns bara i ett kontrakt, vilket är som en fristående databas. Den specificerar reglerna för token (det vill säga namn, symbol och delbarhet) och har en lista som mappar användarnas balanser till deras Ethereum-adresser.

För att flytta token måste användarna skicka en transaktion till kontraktet och be den att allokera en del av sina balanser någon annanstans. Om Alice till exempel vill skicka 5 000 Binance Academytoken till Bob, anropar hon en funktion i Binance Academy-tokenens smarta kontrakt och ber den att göra det.



Hennes åtgärd finns i vad som verkar vara en vanlig Ethereum-transaktion som betalar 0 ETH till tokenkontraktet. Åtgärden ingår i ett extra fält i transaktionen som anger vad Alice vill göra – i detta fall överföra token till Bob.

Även om hon inte skickar ether måste hon fortfarande betala en avgift som anges i den för att få sin transaktion inkluderad i ett block. Om hon inte har någon ETH måste hon skaffa detta innan hon överför token.

Här är ett verkligt exempel på ovanstående från Etherscan: Någon anropar BUSD-kontraktet. Du kan se att token har överförts och att en avgift har betalats, även om fältet Värde visar att 0 ETH har skickats.

Nu när vi har fått mer koll på detta kan vi ta en närmare titt för att bättre förstå strukturen för ett typiskt ERC-20-kontrakt. 


Hur skapas ERC-20-token?



För att bli ERC-20-kompatibelt måste ditt kontrakt innehålla sex obligatoriska funktioner: totalSupply, saldoOf, transfer, transferFrom, approve och allowance. Dessutom kan du ange valfria funktioner, såsom name , symbol och decimal. Du förstår kanske redan vad dessa funktioner gör, tack vare deras namn. Men oroa dig inte om du inte förstår ännu – vi kommer att gå igenom dem. 

Nedan finns funktionerna så som de visas i Ethereums specialbyggda Solidity-språk.


totalSupply

function totalSupply() public view returns (uint256)
När en användare anropar denna returnerar ovanstående funktion den totala tillgången av token som kontraktet innehåller.


balanceOf 

function balanceOf(address _owner) public view returns (uint256 balance)
Till skillnad från totalSupply tar balanceOf en parameter (en adress). När den anropas returnerar den balansen av den adressens token-innehav. Kom ihåg att konton på Ethereum-nätverket är offentliga, så du kan fråga om vilken användares balans som helst, förutsatt att du kan adressen.


transfer

function transfer(address _to, uint256 _value) public returns (bool success)
transfer överför lämpligen token från en användare till en annan. Här anger du adressen du vill skicka till, samt beloppet som ska överföras.
När överföringen anropas utlöser transfer något som kallas en händelse (händelseöverföring i det här fallet), vilket i princip säger till blockkedjan att inkludera en referens till den.


transferFrom

function transferFrom(address _from, address _to, uint256 _value) public returns (bool success)
Funktionen transferFrom är ett praktiskt alternativ till transfer som möjliggör mer programmerbarhet i decentraliserade applikationer. Liksom transfer används den för att flytta token, men dessa token behöver inte nödvändigtvis tillhöra den person som anropar kontraktet. 

Med andra ord kan du auktorisera någon – eller ett annat kontrakt – att överföra tillgångar åt dig. Ett möjligt användningsområde är att du betalar för abonnemangsbaserade tjänster, där du inte vill skicka en betalning manuellt varje dag/vecka/månad. Istället låter du bara ett program göra det åt dig.

Denna funktion utlöser samma event som transfer.


approve

function approve(address _spender, uint256 _value) public returns (bool success)
approve är en annan användbar funktion när det gäller programmerbarhet. Med den här funktionen kan du begränsa antalet token som ett smart kontrakt kan ta ut från din balans. Utan den riskerar du att kontraktet inte fungerar (eller utnyttjas) och att alla dina tillgångar stjäls. 

Ta vårt exempel på en prenumerationsmodell igen. Anta att du har en enorm mängd BinanceAcademyToken och att du vill ställa in veckovisa återkommande betalningar till en strömmande DApp. Du är upptagen med att läsa innehållet på Binance Academy dygnet runt, så du vill inte slösa tid på att skapa en manuell transaktion varje vecka.

Du har en enorm balans på BinanceAcademytoken, som vida överstiger vad som behövs för att betala för prenumerationen. För att förhindra att DApp dränerar allt kan du ställa in en gräns med approve. Anta att din prenumeration kostar en BinanceAcademyToken per vecka. Om du begränsat det godkända värdet till 20 token kan du få din prenumeration betald automatiskt i fem månader.

Om DAppen i värsta fall försöker ta ut alla dina tillgångar, eller om en bugg hittas, kan du max förlora 20 token. Det kanske inte är idealiskt, men det är definitivt mer tilltalande än att förlora hela ditt innehav.

När det anropas utlöser approve eventet approval. Liksom eventet transfer skriver den data till blockkedjan.


allowance 

function allowance(address _owner, address _spender) public view returns (uint256 remaining)
allowance kan användas i samband med approve. När du har gett ett kontrakt behörighet att hantera dina token kan du använda detta för att kontrollera hur många som det fortfarande kan ta ut. Om ditt abonnemang till exempel har förbrukat 12 av dina 20 godkända token bör anrop av funktionen allowance returnera totalt 8.


Tillvalsfunktionerna

De tidigare nämnda funktionerna är obligatoriska. Å andra sidan behöver inte name, symbol och decimal inkluderas, men de kan göra ditt ERC-20-kontrakt lite snyggare. De gör att du kan lägga till ett mänskligt läsbart namn, ställa in en symbol (dvs. ETH, BTC, BNB) och specificera hur många decimaler token är delbara med. Till exempel kan token som används som valutor dra större nytta av att vara mer delbara, än en token som representerar ägandet av en fastighet.


Kolla in det här exemplet på GitHub för att se dessa element i ett riktigt kontrakt.


Vad kan ERC-20-token göra?



Genom att sammanställa alla funktionerna ovan får vi ett ERC-20-kontrakt. Vi kan fråga om det totala utbudet, kontrollera saldon, överföra tillgångar och ge tillstånd till andra DApps att hantera token åt oss.

En stor del av nyttan med ERC-20-token är deras flexibilitet. Konventionerna som anges begränsar inte utvecklingen, så parterna kan implementera ytterligare funktioner och ställa in specifika parametrar för att passa alla deras behov.


Stablecoin

Stablecoin (token kopplade till fiat-valutor) använder ofta ERC-20-tokenstandarden. Transaktionen till BUSD-kontraktet som vi nämnde tidigare är ett exempel och de flesta större stablecoin är också tillgängliga i detta format.

För ett typiskt fiat-backed stablecoin har en emittent reserver i euro, dollar, etc. För varje enhet i deras reserv utfärdar de sedan en token. Detta innebär att om 10 000 USD låses in i ett kassavalv så kan emittenten skapa 10 000 token och var och en kan lösas in för 1 USD.

Detta är ganska enkelt att implementera i Ethereum, rent tekniskt sett. En emittent lanserar helt enkelt ett kontrakt med 10 000 token. Sedan kommer denne att distribuera dem till användare med löftet att de senare kan lösa in token för en proportionell mängd fiatvaluta. 

Användarna kan göra ett antal saker med sina token – de kan köpa varor och tjänster eller använda dem i DApps. Alternativt kan de begära att emittenten byter ut dem på en gång. I det fallet bränner emittenten alla returnerade token (gör dem oanvändbara) och tar ut rätt mängd fiat från sina reserver.

Kontraktet som styr detta system är, som tidigare nämnts, relativt förenklat. Att lansera ett stablecoin kräver dock mycket arbete med externa faktorer som logistik, regelefterlevnad med mera.


Säkerhetstoken

Säkerhetstoken liknar stablecoin. På kontraktsnivå kan de till och med vara identiska, eftersom de fungerar på samma sätt. Skillnaden är på emittentens nivå. Säkerhetstoken representerar värdepapper, såsom aktier, obligationer eller fysiska tillgångar. Ofta (även om så inte alltid är fallet) ger de innehavaren någon form av andel i ett företag eller en vara.


Verktygstoken

Verktygstoken är kanske de vanligaste typerna av token som finns idag. Till skillnad från de två tidigare erbjudandena stöds de inte av något. Om tillgångsstödda token är som aktier i ett flygbolag, så är verktygstoken som frekventa program: de fyller en funktion, men de har inget externt värde. Verktygstoken kan tillgodose en mängd användningsområden, fungera som valuta i spel, bränsle för decentraliserade applikationer, lojalitetspoäng och mycket mer.



Kan man skapa ERC-20-token?

Du kan skapa ether (ETH), men token går inte att skapa – vi säger att de mintas när nya skapas. När ett kontrakt lanseras distribuerar utvecklarna utbudet enligt sina planer och mål.
Vanligtvis görs detta via en Initial Coin Offering (ICO), Initial Exchange Offering (IEO) eller Security Token Offering (STO). Du kan stöta på varianter av dessa akronymer, men dessa begrepp är ganska lika varandra. Investerare skickar ether till kontraktsadressen och får i gengäld nya token. Pengarna som samlas in används för att finansiera vidareutvecklingen av projektet. Användarna förväntar sig att kunna använda sina token (antingen omedelbart eller vid ett senare tillfälle) eller sälja dem vidare med vinst när projektet utvecklas.

Tokendistributionen behöver inte vara automatiserad. Många crowdfunding-event tillåter användare att betala med en rad olika digitala valutor (som BNB, BTC, ETH och USDT). Respektive balans allokeras sedan till de adresser som användarna tillhandahåller.


För- och nackdelar med ERC-20-token

Fördelar med ERC-20-token

Fungibla

ERC-20-token är fungibla – varje enhet är utbytbar med en annan. Om du hade en BinanceAcademyToken skulle det inte spela någon roll vilken specifik token du hade. Du kan byta den mot någon annans och de skulle fortfarande vara helt identiska, precis som kontanter eller guld.

Detta är idealiskt om din token syftar till att vara en valuta av något slag. Du skulle inte vilja ha individuella enheter med särskiljbara egenskaper, vilket skulle göra dem icke-fungibla. Detta kan göra att vissa token blir mer – eller mindre – värdefulla än andra, vilket eliminerar deras syfte.


Flexibla

Som vi utforskade i föregående avsnitt är ERC-20-token mycket anpassningsbara och kan skräddarsys för många olika applikationer. De kan till exempel användas som valuta i spel, i lojalitetspoängprogram, som digitala samlarobjekt eller till och med för att representera konst och äganderätt.


Populära

ERC-20:s popularitet i kryptovalutabranschen är en mycket övertygande anledning till att använda dem som en mall. Det finns massor av börser, plånböcker och smarta kontrakt som redan är kompatibla med nylanserade token. Dessutom finns det gott om stöd och dokumentation för utvecklare. 


Nackdelar med ERC-20-token

Skalbarhet

Precis som med många kryptovalutanätverk är Ethereum inte immun mot växtvärk. I sin nuvarande form skalar den inte bra – att försöka skicka en transaktion under högtrafik resulterar i höga avgifter och förseningar. Om du startar en ERC-20-token och nätverket blir överbelastat, kan dess användbarhet påverkas.

Detta är inte ett problem som är exklusivt för Ethereum. Det är snarare en nödvändig avvägning i säkra och distribuerade system. Communityn planerar att ta itu med dessa problem i migrationen till Ethereum 2.0 som kommer att implementera uppgraderingar som Ethereum Plasma och Ethereum Casper.


Bedrägerier

Även om det inte är ett problem med själva tekniken kan enkelheten med vilken en token kan lanseras anses vara en nackdel i vissa avseenden. Det krävs minimal ansträngning att skapa en enkel ERC-20-token, vilket betyder att vem som helst kan göra det – på gott och ont.

Därför bör du vara försiktig med vad du investerar i. Det finns ett antal pyramid- och ponzi-system förklädda som blockkedjeprojekt.  Gör din egen efterforskning innan du investerar för att dra dina egna slutsatser om huruvida en möjlighet är legitim eller inte.

 

ERC-20, ERC-1155, ERC-223, ERC-721 – vad är skillnaden?

ERC-20 var den första (och hittills den mest populära) Ethereum-tokenstandarden, men inte den enda. Under årens lopp har många andra dykt upp, som antingen föreslår förbättringar av ERC-20 eller försöker uppnå helt olika mål.

Några av de mindre vanliga standarderna är de som används i icke-fungibla token (NFT:er). Ibland gynnas användningsområdet faktiskt av att ha unika token med olika attribut. Om du ville tokenisera ett unikt konstverk, tillgång i ett spel med mera, kan en av dessa kontraktstyper vara mer tilltalande.

ERC-721-standarden användes till exempel för den omåttligt populära DAppen CryptoKitties. Ett sådant kontrakt tillhandahåller ett API för användarna att skapa sina egna icke-fungibla token och för att koda metadata (bilder, beskrivningar med mera). 

ERC-1155-standarden kan ses som en förbättring av både ERC-721 och ERC-20. Den beskriver en standard som stöder både fungibla och icke-fungibla token i samma kontrakt.

Andra alternativ som ERC-223 eller ERC-621 syftar till att förbättra användbarheten. Den första implementerar skyddsåtgärder för att förhindra oavsiktliga tokenöverföringar. Den andra lägger till extra funktioner för att öka och minska tokentillgången.


Sammanfattningsvis

ERC-20-standarden har dominerat kryptotillgångsvärlden i flera år och det är inte svårt att förstå varför. Med relativ lätthet kan vem som helst använda ett enkelt kontrakt som passar ett brett spektrum av användningsområden (verktygstoken, stablecoin, och så vidare). Med det sagt saknar ERC-20 några av de funktioner som har skapats av andra standarder. Det återstår att se om efterföljande typer av kontrakt kommer att ersätta den.