Un'introduzione ai token ERC-20
Home
Articoli
Un'introduzione ai token ERC-20

Un'introduzione ai token ERC-20

Intermedio
Pubblicato Jul 31, 2020Aggiornato Dec 28, 2022
12m

Contenuti


Introduzione

Nel 2014, Vitalik Buterin ha fondato Ethereum, posizionato come una piattaforma open source per lanciare applicazioni decentralizzate (DApp). Molte delle motivazioni che hanno portato Buterin a creare una nuova blockchain sono riconducibili alla mancanza di flessibilità del protocollo Bitcoin.
Dal suo lancio, la blockchain di Ethereum ha attirato sviluppatori, aziende e imprenditori, generando un crescente settore di smart contract e applicazioni distribuite creati dagli utenti.
In questo articolo, daremo un'occhiata allo standard ERC-20, un'importante struttura di riferimento per la creazione di token. Pur essendo specifico per il network di Ethereum, il framework ha ispirato anche altri standard blockchain, come BEP-2 di Binance Chain.


Cos'è lo standard ERC-20?

In Ethereum, la sigla ERC sta per Ethereum Request for Comment. Si tratta di documenti tecnici che definiscono gli standard di programmazione su Ethereum. Non sono da confondere con le Ethereum Improvement Proposal (EIP) che, come i BIP di Bitcoin, suggeriscono miglioramenti al protocollo stesso. Gli ERC puntano invece a stabilire convenzioni che rendano più semplice l'interazione tra applicazioni e contratti.

Creato nel 2015 da Vitalik Buterin e Fabian Vogelsteller, ERC-20 propone un formato relativamente semplice per i token basati su Ethereum. Seguendo queste indicazioni, gli sviluppatori non hanno bisogno di reinventare la ruota. Invece, possono costruire su fondamenta già utilizzate in tutto il settore.

Una volta creati, i nuovi token ERC-20 sono automaticamente interoperabili con servizi e software che supportano lo standard ERC-20 (software wallethardware walletexchange, ecc.).

Occorre precisare che lo standard ERC-20 è stato sviluppato in un EIP (nello specifico, EIP-20), un paio di anni dopo la proposta originale in seguito alla sua diffusione. Tuttavia, anche diversi anni più tardi, è rimasto il nome “ERC-20”.


Un breve riassunto dei token Ethereum

A differenza di ETH (la criptovaluta nativa di Ethereum), i token ERC-20 non sono detenuti dagli account. I token esistono solo all'interno di un contratto, strutturato in modo simile a un database indipendente. Il contratto specifica le regole per i token (nome, simbolo, divisibilità) e mantiene una lista che associa i saldi degli utenti ai loro indirizzi Ethereum.

Per spostare token, gli utenti devono inviare una transazione al contratto chiedendo di allocare parte del proprio saldo da qualche altra parte. Per esempio, se Alice vuole inviare 5.000 BinanceAcademyToken a Bob, trasmette una richiesta a una funzione all'interno dello smart contract di BinanceAcademyToken per farlo.



La sua richiesta è contenuta in quella che appare come una normale transazione di Ethereum che paga 0 ETH al contratto del token. La richiesta è inclusa in un campo aggiuntivo nella transazione, che specifica cosa Alice vuole fare – nel nostro caso, trasferire token a Bob.

Anche se non sta inviando ether, Alice deve comunque pagare una commissione in ETH per fare in modo che la sua transazione venga inclusa in un blocco. Se non ne ha, deve comprarne un po' prima di trasferire i token.
Ecco un esempio reale del processo descritto sopra su Etherscan: qualcuno sta trasmettendo una richiesta al contratto di BUSD. Puoi vedere che i token sono stati trasferiti e la commissione è stata pagata, anche se il campo Value mostra che sono stati spesi 0 ETH.

Ora che sappiamo le basi, diamo un'occhiata più approfondita per comprendere meglio la struttura di un tipico contratto ERC-20. 


Come vengono creati i token ERC-20?



Per essere conforme allo standard ERC-20, il tuo contratto deve includere sei funzioni obbligatorie: totalSupply, balanceOf, transfer, transferFrom, approve e allowance. Inoltre, puoi specificare funzioni opzionali, come name, symbol e decimal. Lo scopo di queste funzioni potrebbe apparire evidente dai loro nomi. In caso contrario, non preoccuparti – di seguito spiegheremo cosa fanno. 

Queste sono le funzioni come appaiono in Solidity, il linguaggio creato appositamente per Ethereum.


totalSupply

function totalSupply() public view returns (uint256)
Quando chiamata da un utente, la funzione restituisce la fornitura totale dei token contenuti nel contratto.


balanceOf 

function balanceOf(address _owner) public view returns (uint256 balance)
A differenza di totalSupply, balanceOf richiede un parametro (un indirizzo). Quando chiamata, restituisce il saldo di token in quell'indirizzo. Ricorda che gli account sul network di Ethereum sono pubblici, quindi puoi analizzare il saldo di qualsiasi utente, se conosci il suo indirizzo.


transfer

function transfer(address _to, uint256 _value) public returns (bool success)
transfer trasferisce token da un utente a un altro. In questa funzione, devi inserire l'indirizzo a cui vuoi inviare e l'importo da trasferire.
Quando chiamata, transfer innesca ciò che chiamiamo un evento (in questo caso, un evento transfer), che fondamentalmente dice alla blockchain di aggiungere al registro un riferimento ad esso.


transferFrom

function transferFrom(address _from, address _to, uint256 _value) public returns (bool success)
La funzione transferFrom è un'alternativa utile a transfer che offre un maggiore grado di programmabilità nelle applicazioni decentralizzate. Come transfer, viene usata per spostare token, ma questi token non devono necessariamente appartenere alla persona che comunica una richiesta al contratto. 

In altre parole, puoi autorizzare qualcuno – o un altro contratto – a trasferire fondi per tuo conto. Un possibile caso d'uso coinvolge il pagamento di abbonamenti a servizi, dove non vuoi inviare manualmente un pagamento ogni giorno/settimana/mese. Invece, lasci semplicemente che sia un programma a farlo al posto tuo.

Questa funzione innesca lo stesso evento di transfer.


approve

function approve(address _spender, uint256 _value) public returns (bool success)
approve è un'altra funzione utile dal punto di vista della programmabilità. Con questa funzione, puoi limitare il numero di token che uno smart contract può prelevare dal tuo saldo. Senza di essa, si corre il rischio che un malfunzionamento del contratto (o un exploit) porti all'azzeramento di tutti i tuoi fondi. 
Prendiamo di nuovo l'esempio di un modello di abbonamento. Supponiamo di avere una grande quantità di BinanceAcademyToken, e di voler impostare pagamenti settimanali ricorrenti a una DApp che offre servizi di streaming. Sei impegnato a leggere gli articoli di Binance Academy giorno e notte, quindi non vuoi perdere tempo ogni settimana a creare manualmente una transazione.
Possiedi un grande saldo di BinanceAcademyToken, molto più di quanto serve per pagare l'abbonamento. Per impedire che la DApp risucchi tutti i tuoi fondi, puoi impostare un limite con approve. Supponiamo che il tuo abbonamento costa 1 BinanceAcademyToken a settimana. Se limiti il valore approvato a venti token, il tuo abbonamento verrà pagato automaticamente per cinque mesi.

Nella peggiore delle ipotesi, se la DApp tenta di prelevare tutti i tuoi fondi o in caso di qualche bug, puoi perdere solo venti token. Potrebbe non essere uno scenario ideale, ma è sicuramente meglio che perdere tutto.

Quando chiamata, approve innesca l'evento approval. Come l'evento transfer, aggiunge dati alla blockchain.


allowance 

function allowance(address _owner, address _spender) public view returns (uint256 remaining)
allowance può essere usata in combinazione con approve. Quando dai al contratto il permesso di gestire i tuoi token, potresti usare questa funzione per controllare quanti ne può ancora prelevare. Per esempio, se il tuo abbonamento ha usato dodici dei venti token approvati, la funzione allowance dovrebbe restituire un totale di otto.


Le funzioni opzionali

Le funzioni delineate sopra sono obbligatorie. Invece, name, symbol e decimal non devono per forza essere incluse, ma possono migliorare il tuo contratto ERC-20. Rispettivamente, permettono di aggiungere un nome in forma leggibile, impostare un ticker (ad es., ETH, BTC, BNB) e specificare per quante cifre decimali può essere diviso il token. Per esempio, i token utilizzati come valute potrebbero beneficiare maggiormente dalla divisibilità rispetto a token che rappresentano la proprietà di un immobile.


Dai un'occhiata a questo esempio su GitHub per vedere questi elementi in un contratto reale.


Cosa possono fare i token ERC-20?



Combinando tutte le funzioni di cui abbiamo parlato, arriviamo a un contratto ERC-20. Possiamo richiedere la fornitura totale, controllare i saldi, trasferire fondi e dare permessi ad altre DApp per gestire token a nostro nome.

Una delle caratteristiche che spiegano l'attrattiva dei token ERC-20 è la loro flessibilità. Le convenzioni stabilite non limitano lo sviluppo, quindi i partecipanti possono implementare funzionalità aggiuntive e impostare parametri specifici per soddisfare le loro esigenze.


Stablecoin

Le stablecoin (token ancorati a valute fiat) usano spesso lo standard ERC-20. La transazione al contratto BUSD che abbiamo menzionato prima ne è un esempio, e gran parte delle principali stablecoin è disponibile anche in questo formato.

Per una tipica stablecoin garantita da fiat, l'emittente detiene riserve in euro, dollari, ecc. Quindi, per ogni unità nella riserva, emette un token. Questo significa che se vengono bloccati 10.000$ nella cassaforte, l'emittente può creare 10.000 token, ciascuno rimborsabile per 1$.

A livello tecnico, questo è piuttosto semplice da configurare su Ethereum. L'emittente deve semplicemente lanciare un contratto con 10.000 token. In seguito, li distribuirà agli utenti con la promessa di poterli riscattare in futuro per una somma proporzionale di moneta fiat. 

Gli utenti possono usare questi token per una serie di scopi – possono comprare beni e servizi o usarli nelle DApp. In alternativa, possono richiedere all'emittente di scambiarli con fiat. In questo caso, l'emittente brucia i token restituiti (rendendoli inutilizzabili) e invia l'importo corrispondente di fiat dalla riserva.

Il contratto che regola questo sistema, come già detto, è relativamente semplicistico. Tuttavia, lanciare una stablecoin richiede molto lavoro su fattori esterni come logistica, conformità normativa, ecc.


Security token

I security token sono simili alle stablecoin. A livello di contratto, entrambi potrebbero persino essere identici in quanto funzionano allo stesso modo. La distinzione si presenta a livello di emittente. I security token rappresentano strumenti finanziari, come titoli azionari, obbligazioni o asset fisici. Spesso (benché non sempre), garantiscono al detentore una qualche forma di partecipazione in un'attività o una merce.


Utility token

Gli utility token sono forse la tipologia di token oggi più comune. A differenza delle due precedenti, non sono garantiti da nulla. Se i token garantiti da asset possono essere paragonati ad azioni di una compagnia aerea, gli utility token sono simili ai programmi frequent-flyer: hanno una funzione, ma non presentano alcun valore esterno. Gli utility token possono soddisfare una miriade di casi d'uso, agendo da valuta di gioco, carburante per applicazioni decentralizzate, punti fedeltà e tanto altro ancora.



È possibile fare mining di token ERC-20?

Puoi fare mining di ether (ETH), ma i token non sono minabili – usiamo il termine coniati quando ne vengono creati di nuovi. Al lancio di un contratto, gli sviluppatori distribuiscono la fornitura in base ai loro piani e alla tabella di marcia.
In genere, questo avviene attraverso Initial Coin Offering (ICO), Initial Exchange Offering (IEO) o Security Token Offering (STO). Potresti imbatterti in variazioni di questi acronimi, ma i concetti sono piuttosto simili tra loro. Gli investitori inviano ether all'indirizzo del contratto e, in cambio, ricevono nuovi token. I fondi raccolti vengono usati per finanziare l'ulteriore sviluppo del progetto. Gli utenti si aspettano di poter usare i propri token (immediatamente o in futuro) o di poterli rivendere a un prezzo più alto durante lo sviluppo del progetto.

La distribuzione di token non deve per forza essere automatizzata. Molti eventi di crowdfunding permettono agli utenti di pagare con una varietà di valute digitali (come BNB, BTC, ETH e USDT). I rispettivi saldi verranno poi allocati agli indirizzi indicati dagli utenti.


Pro e contro dei token ERC-20

Pro dei token ERC-20

Fungibili

I token ERC-20 sono fungibili – ciascuna unità è intercambiabile con un'altra. Se possiedi un BinanceAcademyToken, non importa quale sia il token specifico. Puoi scambiarlo per quello di qualcun altro, e saranno comunque funzionalmente identici, come i contanti o l'oro.

Questa proprietà è ideale se il token mira a svolgere la funzione di moneta. Per questo caso d'uso le unità individuali non possono avere tratti distintivi, in quanto sarebbero non fungibili. Questo potrebbe portare ad alcuni token più – o meno – preziosi di altri, compromettendo il loro scopo.


Flessibili

Come abbiamo visto nella sezione precedente, i token ERC-20 sono altamente personalizzabili e possono essere utilizzati in molte applicazioni diverse. Per esempio, possiamo usarli come valuta di gioco, in programmi di fedeltà, come oggetti da collezione digitali, o persino per rappresentare opere d'arte e diritti di proprietà.


Popolari

La popolarità degli ERC-20 nel settore delle criptovalute è una ragione molto convincente per usare lo standard come modello. Ci sono una miriade di exchange, wallet e smart contract già compatibili con i token appena lanciati. Inoltre, il supporto per sviluppatori e la documentazione sono abbondanti. 


Contro dei token ERC-20

Scalabilità

Come per molti altri network di criptovalute, Ethereum non è immune alle difficoltà di crescita. Nella sua forma attuale, non è scalabile – cercare di inviare una transazione nelle ore di punta risulta in costi elevati e ritardi. Se lanci un token ERC-20 e il network diventa congestionato, la sua usabilità potrebbe risentirne.

Non è un problema esclusivo a Ethereum, ma un compromesso necessario per la sicurezza nei sistemi distribuiti. La comunità intende affrontare queste problematiche nella migrazione a Ethereum 2.0, che implementerà aggiornamenti come Ethereum PlasmaEthereum Casper.
Scopri di più sui problemi legati alla scalabilità in Scalabilità Blockchain - Sidechain e Canali di Pagamento.


Truffe

Anche se non è un problema con la tecnologia in sé, la facilità con cui si possono lanciare token può essere considerata per certi versi un aspetto negativo. Basta uno sforzo minimo per creare un token ERC-20 semplice, quindi chiunque può farlo – bene o male che sia.

Di conseguenza, dovresti fare molta attenzione a quello in cui investi. Esistono diversi schemi a piramide e Ponzi camuffati da progetti blockchain.  Fai le ricerche necessarie prima di investire e decidi da solo se un'opportunità è legittima o no.

 

ERC-20, ERC-1155, ERC-223, ERC-721 – qual è la differenza?

ERC-20 è stato il primo (e, ad oggi, il più popolare) standard per token Ethereum, ma non è affatto l'unico. Negli anni, molti altri sono emersi, proponendo miglioramenti a ERC-20 o cercando di raggiungere obiettivi completamente diversi.

Alcuni degli standard meno comuni sono quelli usati per i token non fungibili (NFT). A volte, alcuni casi d'uso richiedono token che siano unici e abbiano attributi differenti. Se vuoi tokenizzare un'opera d'arte unica, un asset in-game, ecc., uno di questi contratti potrebbe essere più appropriato.
Lo standard ERC-721, per esempio, è stato usato per la famosissima DApp CryptoKitties. Un contratto di questo tipo presenta agli utenti una API per coniare i propri token non fungibili e codificare metadati (immagini, descrizioni, ecc.). 

Lo standard ERC-1155 può essere considerato un miglioramento di ERC-721 e ERC-20. Definisce uno standard che supporta sia token fungibili che non fungibili nello stesso contratto.

Altre opzioni come ERC-223 o ERC-621 puntano a migliorare l'usabilità. La prima implementa misure di sicurezza per prevenire trasferimenti di token accidentali. La seconda aggiunge funzioni extra per aumentare e ridurre la fornitura di token.

Per saperne di più sul tema degli NFT, dai un'occhiata a Una Guida agli Oggetti da Collezione Crypto e i Token Non Fungibili (NFT).


In chiusura

Lo standard ERC-20 ha dominato il settore dei crypto asset per anni, e non è difficile capire perché. Con relativa facilità, chiunque può implementare un semplice contratto che soddisfa una vasta gamma di casi d'uso (utility token, stablecoin, ecc.). Detto questo, ERC-20 non dispone di alcune delle funzionalità introdotte da altri standard. Resta da vedere se una delle tipologie di contratto successive prenderà il suo posto.