Uma Introdução aos Tokens ERC-20
P√°gina Inicial
Artigos
Uma Introdução aos Tokens ERC-20

Uma Introdução aos Tokens ERC-20

Intermedi√°rio
Publicado em Jul 31, 2020Atualizado em Dec 28, 2022
12m

Conte√ļdo


Introdução

A Ethereum foi fundada por Vitalik Buterin em 2014, com a proposta de plataforma¬†open-source (de c√≥digo aberto) para lan√ßamento de aplicativos descentralizados (DApps). Muitas das motiva√ß√Ķes de Buterin para a cria√ß√£o de uma nova¬†blockchain vieram da falta de flexibilidade do protocolo¬†Bitcoin.
Desde o seu lan√ßamento, a blockchain Ethereum atraiu desenvolvedores, empresas e empreendedores, gerando uma ind√ļstria crescente de usu√°rios lan√ßando¬†contratos inteligentes e aplicativos distribu√≠dos.
Neste artigo, discutiremos sobre o padr√£o¬†ERC-20, uma estrutura importante para a cria√ß√£o de¬†tokens. Embora seja espec√≠fico para a rede Ethereum, essa estrutura tamb√©m inspirou outros padr√Ķes de blockchain, como o¬†BEP-2 da Binance Chain.


O que é o padrão ERC-20?

Na Ethereum, a sigla ERC significa Ethereum Request for Comments. S√£o documentos t√©cnicos que descrevem os padr√Ķes de programa√ß√£o na Ethereum. N√£o devem ser confundidos com Ethereum Improvement Proposals (EIPs), que, como os BIPs do Bitcoin, sugerem melhorias para o pr√≥prio protocolo. Em vez disso, o objetivo dos ERCs √© estabelecer conven√ß√Ķes que facilitem a intera√ß√£o entre aplicativos e contratos.

Criado por Vitalik Buterin e Fabian Vogelsteller em 2015, o padr√£o ERC-20 prop√Ķe um formato relativamente simples para tokens com base na Ethereum. Ao seguir o esbo√ßo, desenvolvedores n√£o precisam reinventar a roda. Eles podem simplesmente construir a partir de uma base j√° usada em toda a ind√ļstria.

Assim que novos tokens ERC-20 são criados, eles são automaticamente interoperáveis com serviços e softwares com suporte para o padrão ERC-20 (carteiras de software, carteiras de hardware, corretoras, etc.).

√Č importante notar que o padr√£o ERC-20 foi desenvolvido em um EIP (mais especificamente, um EIP-20). Isso aconteceu alguns anos ap√≥s a proposta original devido √† sua difus√£o. No entanto, mesmo alguns anos depois, o nome ‚ÄúERC-20‚ÄĚ foi mantido.


Um breve resumo sobre tokens Ethereum

Ao contrário do ETH (criptomoeda nativa da Ethereum), os tokens ERC-20 não são mantidos em contas. Os tokens existem apenas dentro de um contrato, que é como um banco de dados independente. Ele define as regras para os tokens (ou seja, define nome, símbolo, divisibilidade) e mantém uma lista que mapeia os saldos dos usuários e seus endereços Ethereum.

Para mover tokens, os usuários devem enviar uma transação ao contrato solicitando que aloque parte de seu saldo para outro lugar. Por exemplo, se Alice deseja enviar 5.000 BinanceAcademyTokens para Bob, ela chama uma função dentro do contrato inteligente BinanceAcademyToken solicitando que isso seja feito.



A solicita√ß√£o de Alice est√° contida no que aparenta ser uma transa√ß√£o normal da Ethereum, que paga 0 ETH para o contrato de token. A solicita√ß√£o √© inclu√≠da em um campo adicional na transa√ß√£o, que especifica o que Alice deseja ‚Ästneste caso, transferir tokens para Bob.

Mesmo que Alice não esteja enviando Ether, ela ainda deve pagar uma taxa, em Ether, para incluir sua transação em um bloco. Caso ela não tenha ETH, ela precisará comprar ou receber alguns antes de efetuar a transferência de tokens.
No Etherscan, podemos ver um exemplo real do que mencionamos acima: alguém faz uma solicitação para o contrato BUSD. Podemos ver que os tokens foram transferidos e uma taxa foi paga, embora o campo Valor mostre que 0 ETH foi enviado.

Agora que sabemos o básico, vamos entender melhor a estrutura de um contrato ERC-20. 


Como s√£o criados os tokens ERC-20?



Para ser compat√≠vel com ERC-20, seu contrato precisa incluir seis fun√ß√Ķes obrigat√≥rias: totalSupply, balanceOf, transfer, transferFrom, approve e allowance. Al√©m disso, voc√™ pode especificar fun√ß√Ķes opcionais, como name, symbol e decimal. Para voc√™, talvez esteja claro o que essas fun√ß√Ķes fazem a partir de seus nomes. Se n√£o estiver, n√£o se preocupe ‚Äď explicaremos sobre cada uma elas.¬†

Abaixo, temos algumas das fun√ß√Ķes que aparecem na linguagem Solidity, criada especificamente para a Ethereum.


totalSupply

function totalSupply() public view returns (uint256)
Quando chamada por um usuário, a função acima retorna o fornecimento total de tokens do contrato.


balanceOf 

function balanceOf(address _owner) public view returns (uint256 balance)
Ao contr√°rio da fun√ß√£o totalSupply, a balanceOf recebe um par√Ęmetro (um endere√ßo). Quando chamada, ela retorna o saldo de tokens dos endere√ßos correspondentes. Lembre-se, as contas da rede Ethereum s√£o p√ļblicas, portanto voc√™ pode consultar o saldo de qualquer usu√°rio desde que saiba o endere√ßo.


transfer

function transfer(address _to, uint256 _value) public returns (bool success)
A função transfer transfere tokens de um usuário a outro. Você fornece o valor e o endereço para o qual deseja transferir.
Quando chamada, a função transfer executa o que chamamos de event (neste caso, um evento de transferência), que basicamente diz à blockchain para incluir uma referência a ele no registro.


transferFrom

function transferFrom(address _from, address _to, uint256 _value) public returns (bool success)
A fun√ß√£o transferFrom √© uma alternativa √ļtil da fun√ß√£o transfer, que proporciona maior programabilidade em aplicativos descentralizados. Assim como a transfer, √© usada para mover tokens, mas esses tokens n√£o precisam necessariamente pertencer √† pessoa que est√° "chamando" o contrato.¬†

Em outras palavras, voc√™ pode autorizar algu√©m ‚Ästou outro contrato¬†‚Äď para efetuar a transfer√™ncia de fundos em seu nome. Uma possibilidade envolve o pagamento de servi√ßos baseados em uma inscri√ß√£o ou assinatura, em que voc√™ n√£o deseja enviar, manualmente, um pagamento todos os dias/semanas/meses. Em vez disso, voc√™ paga por um programa que faz isso por voc√™.

Essa função aciona o mesmo "event" que citamos na função transfer.


approve

function approve(address _spender, uint256 _value) public returns (bool success)
approve √© outra fun√ß√£o muito √ļtil do ponto de vista da programa√ß√£o. Com esta fun√ß√£o, voc√™ pode limitar o n√ļmero de tokens que um contrato inteligente pode retirar de seu saldo. Sem ela, voc√™ corre o risco de sofrer com um mau funcionamento do contrato ou de ter todos os seus fundos roubados.¬†
Vamos considerar novamente nosso exemplo de servi√ßos por assinatura. Suponha que voc√™ tenha uma grande quantidade de BinanceAcademyTokens e deseja configurar pagamentos recorrentes semanais para um¬†DApp de streaming. Como voc√™ est√° ocupado lendo o conte√ļdo da¬†Binance Academy dia e noite, n√£o quer perder tempo toda semana para criar, manualmente, uma transa√ß√£o.
Seu saldo de BinanceAcademyTokens é bem maior do que o necessário para pagar pela assinatura. Para evitar que o DApp use todo o seu saldo, você pode definir um limite com a função approve. Suponha que sua assinatura custe um BinanceAcademyToken por semana. Se você limitar o valor aprovado em vinte tokens, poderá pagar sua assinatura automaticamente por cinco meses.

Na pior das hip√≥teses, se o DApp tentar sacar todos os seus fundos ou se um bug for encontrado, voc√™ perder√° no m√°ximo vinte tokens. Pode n√£o ser o ideal, mas √© melhor do que correr o risco de perder todo o seu patrim√īnio.

Quando chamada, a função approve aciona o evento approval (aprovação). Como o evento transfer, ela registra dados na blockchain.


allowance 

function allowance(address _owner, address _spender) public view returns (uint256 remaining)
A função allowance pode ser usada em conjunto com a approve. Depois de dar permissão a um contrato para gerenciar seus tokens, você pode usá-lo para verificar a quantidade de tokens disponíveis. Por exemplo, se sua assinatura usou doze dos seus vinte tokens aprovados, chamar a função allowance deve retornar o valor oito.


Fun√ß√Ķes opcionais

As fun√ß√Ķes discutidas anteriormente s√£o obrigat√≥rias. Por outro lado, as fun√ß√Ķes name, symbol e decimal n√£o precisam ser inclu√≠das, mas podem ser usadas para melhorar seu contrato ERC-20. Respectivamente, elas permitem adicionar um nome leg√≠vel, definir um s√≠mbolo (ou seja, ETH, BTC, BNB) e especificar em quantas casas decimais os tokens s√£o divis√≠veis. Por exemplo, tokens usados como moedas podem se beneficiar de uma maior divisibilidade do que tokens que representam a propriedade de um im√≥vel.


Consulte este exemplo do GitHub para visualizar esses elementos em um contrato real.


Para que servem tokens ERC-20?



Ao reunir todas as fun√ß√Ķes acima, temos um contrato ERC-20. Podemos consultar o¬†fornecimento total, verificar saldos, transferir fundos e dar permiss√Ķes a outros¬†DApps para gerenciamento de tokens.

Uma caracter√≠stica muito atrativa dos tokens ERC-20 √© sua flexibilidade. As conven√ß√Ķes estabelecidas n√£o restringem o desenvolvimento, portanto os participantes podem implementar recursos adicionais e definir par√Ęmetros espec√≠ficos para atender √†s suas necessidades.


Stablecoins

Stablecoins (tokens atrelados a moedas fiduciárias) costumam usar o padrão de token ERC-20. A transação para o contrato BUSD que mencionamos anteriormente é um exemplo e a maioria das principais stablecoins também estão disponíveis neste formato.

Para stablecoins atreladas a uma moeda fiduciária, o emissor mantém reservas de euros, dólares, etc. E para cada unidade em sua reserva, ele emite um token. Isso significa que se o emissor tiver $10.000 trancados em um cofre, ele pode criar 10.000 tokens, cada um com o valor estável de $1.

Isso é bastante fácil de implementar na rede Ethereum, tecnicamente falando. Um emissor simplesmente lança um contrato com 10.000 tokens. Em seguida, o emissor distribui os tokens aos usuários, com a promessa de que posteriormente poderão resgatar os tokens por uma quantia proporcional em moeda fiduciária. 

Os usu√°rios podem usar seus tokens de diversas formas ‚Äď eles podem comprar bens e servi√ßos ou us√°-los em DApps. Al√©m disso, eles podem, a qualquer momento, solicitar ao emissor que efetue o c√Ęmbio com moeda fiduci√°ria. Nesse caso, o emissor¬†queima os tokens devolvidos (tornando-os inutiliz√°veis) e retira a quantidade correspondente de moeda fiduci√°ria de suas reservas.

O contrato que rege esse sistema, conforme mencionado, é relativamente simples. No entanto, o lançamento de uma stablecoin requer muito trabalho em termos de logística, conformidade regulatória, etc.


Tokens de segurança

Os tokens de seguran√ßa s√£o semelhantes √†s stablecoins. A n√≠vel de contrato, os dois podem ser at√© id√™nticos, pois funcionam da mesma maneira. A distin√ß√£o ocorre a n√≠vel de emiss√£o. Os tokens de seguran√ßa representam valores mobili√°rios, como a√ß√Ķes, t√≠tulos ou ativos f√≠sicos. Freq√ľentemente (embora nem sempre seja o caso), eles concedem ao detentor do token, algum tipo de participa√ß√£o em um neg√≥cio ou bem.


Tokens de utilidade

Tokens de utilidade s√£o talvez os tipos mais comuns de tokens atualmente. Ao contr√°rio das duas propostas anteriores, eles n√£o s√£o atrelados a nada. Fazendo uma analogia, se os tokens atrelados a ativos forem a√ß√Ķes de uma companhia a√©rea, os tokens de utilidade atuam como os programas de fidelidade de passageiros: eles t√™m uma fun√ß√£o, mas n√£o t√™m valor externo. Tokens de utilidade podem atender a diversos casos de uso, servindo como¬†moeda de jogos, "combust√≠vel" para aplicativos descentralizados, pontos de fidelidade e muito mais.



√Č poss√≠vel minerar tokens ERC-20?

√Č poss√≠vel minerar ether (ETH), mas os tokens n√£o podem ser minerados ‚Äď dizemos que eles s√£o cunhados quando novos tokens s√£o criados. Quando um contrato √© lan√ßado, os desenvolvedores distribuem o fornecimento de acordo com seus planos e roteiro.
Normalmente, isso √© feito atrav√©s de uma¬†Initial Coin Offering (ICO), Initial Exchange Offering (IEO) ou Security Token Offering (STO). Voc√™ pode encontrar varia√ß√Ķes dessas siglas, mas os conceitos s√£o semelhantes. Investidores enviam ether para o endere√ßo do contrato e em troca, recebem novos tokens. O dinheiro arrecadado √© usado para financiar o desenvolvimento do projeto. Os usu√°rios poder√£o usar seus tokens (imediatamente ou em uma data posterior) ou revend√™-los com lucro √† medida que o projeto se desenvolve.

A distribuição de tokens não precisa ser automatizada. Muitos eventos de crowdfunding permitem que os usuários paguem com diversas moedas digitais (como BNB, BTC, ETH e USDT). Os respectivos saldos são então alocados aos endereços fornecidos pelos usuários.


Prós e contras dos tokens ERC-20

Prós dos tokens ERC-20

Fungibilidade

Tokens ERC-20 s√£o¬†fung√≠veis ‚Äď cada unidade √© intercambi√°vel com a outra. Supondo que voc√™ tenha um BinanceAcademyToken, n√£o importa qual token espec√≠fico voc√™ tem. Voc√™ poderia troc√°-lo com o de outra pessoa e eles ainda seriam funcionalmente id√™nticos, assim como dinheiro ou ouro.

Essa propriedade √© ideal para tokens usados como algum tipo moeda. Para esse tipo de token, n√£o √© interessante que unidades individuais tenham caracter√≠sticas distintas, o que os tornaria n√£o fung√≠veis. A n√£o fungibilidade pode fazer com que alguns tokens se tornem mais ‚Äď ou menos¬†‚Äď valiosos do que outros do mesmo tipo, prejudicando seu prop√≥sito.


Flexibilidade

Conforme discutido na se√ß√£o anterior, os tokens ERC-20 s√£o customiz√°veis e podem ser adaptados para diferentes aplica√ß√Ķes. Por exemplo, eles podem ser usados como moeda em jogos, em programas de pontos de fidelidade, como¬†colecion√°veis digitais ou at√© mesmo para representar obras de arte e direitos de propriedade.


Popularidade

A popularidade dos tokens ERC-20 na ind√ļstria de criptomoedas √© um motivo muito convincente para us√°-los como modelo. Existe uma infinidade de corretoras, carteiras e contratos inteligentes j√° compat√≠veis com tokens rec√©m-lan√ßados. Al√©m disso, o suporte e a documenta√ß√£o de desenvolvedores s√£o abundantes.¬†


Contras dos tokens ERC-20

Escalabilidade

Como acontece com muitas redes de criptomoedas, a Ethereum n√£o √© imune √†s "dores" do crescimento. Em sua forma atual, ela n√£o apresenta boa escalabilidade ‚Äď o envio de uma transa√ß√£o em hor√°rios de pico implica em atrasos e altas taxas. Se voc√™ lan√ßar um token ERC-20 e a rede estiver congestionada, sua usabilidade pode ser afetada.

Este n√£o √© um problema exclusivo da Ethereum. √Č um trade-off, ou seja, uma troca necess√°ria, em sistemas distribu√≠dos e seguros. A comunidade da Ethereum planeja resolver esses problemas na migra√ß√£o para a¬†Ethereum 2.0, que implementar√° atualiza√ß√Ķes como¬†Ethereum Plasma e¬†Ethereum Casper.
Saiba mais sobre problemas de escalabilidade no artigo Escalabilidade da Blockchain - Sidechains e Canais de Pagamento.


Fraudes

Embora n√£o seja um problema com a tecnologia em si, a facilidade com que um token pode ser lan√ßado pode ser considerada uma desvantagem em alguns aspectos. √Č necess√°rio um pequeno esfor√ßo para criar um token ERC-20 simples, o que significa que qualquer um poderia faz√™-lo ‚Äď para o bem ou para o mal.

Sendo assim, voc√™ deve ter cuidado com seus investimentos. Existem v√°rios¬†esquemas de Pir√Ęmide e Ponzi disfar√ßados de projetos blockchain.¬†Fa√ßa pesquisas antes de investir e tire suas pr√≥prias conclus√Ķes em rela√ß√£o √† legitimidade de uma oportunidade.

 

ERC-20, ERC-1155, ERC-223, ERC-721 ‚Ästqual a diferen√ßa entre eles?

O ERC-20 foi o primeiro (e at√© o momento, o mais popular) padr√£o de token Ethereum, mas n√£o √© o √ļnico. Com o passar dos anos, muitos outros surgiram, propondo melhorias em rela√ß√£o ao ERC-20 ou apresentando propostas totalmente diferentes.

Alguns padr√Ķes menos comuns s√£o os usados em¬†tokens n√£o fung√≠veis (NFTs). √Äs vezes, seu caso de uso se beneficia de ter tokens exclusivos, com atributos diferentes. Se voc√™ quiser, por exemplo, tokenizar uma rara obra de arte ou um recurso em um jogo, pode ser uma boa ideia usar um desses tipos de contrato.
O padr√£o¬†ERC-721, por exemplo, foi usado para o super popular CryptoKitties DApp. Esse contrato fornece uma¬†API para que os usu√°rios possam criar seus pr√≥prios tokens n√£o fung√≠veis e codificar¬†metadados (imagens, descri√ß√Ķes, etc.).¬†

O padr√£o ERC-1155 pode ser visto como uma melhoria dos padr√Ķes ERC-721 e ERC-20. Esse padr√£o oferece suporte a tokens fung√≠veis e n√£o fung√≠veis no mesmo contrato.

Outras op√ß√Ķes, como ERC-223 ou ERC-621, visam melhorar a usabilidade. O primeiro implementa prote√ß√Ķes para evitar transfer√™ncias acidentais de tokens. J√° o ERC-621, adiciona fun√ß√Ķes extras para aumentar ou diminuir o fornecimento de tokens.


Considera√ß√Ķes finais

O padr√£o ERC-20 dominou o meio dos criptoativos por anos e n√£o √© dif√≠cil de entender o porqu√™. Com relativa facilidade, qualquer pessoa pode implantar um contrato simples para atender a uma ampla variedade de casos de uso (tokens de utilidade, stablecoins, etc.). Entretanto, o ERC-20 n√£o possui alguns dos recursos fornecidos por outros padr√Ķes. Resta saber se os novos tipos de contratos tomar√£o seu lugar.