A Ethereum, fundada por Vitalik Buterin em 2014, se posicionou como uma plataforma de código aberto para o lançamento de aplicativos descentralizados (DApps). Muitas das motivações de Buterin para criar uma nova blockchain surgiram da falta de flexibilidade do protocolo Bitcoin.
Desde o seu lançamento, a blockchain Ethereum atraiu desenvolvedores, empresas e empreendedores, gerando uma indústria em crescimento de usuários que lançam contratos inteligentes e aplicativos distribuídos.
Neste artigo, vamos analisar o padrão ERC-20, um importante framework para a criação de tokens. Embora seja específico para a rede Ethereum, o framework também inspirou outros padrões de blockchain, como o BEP-2 da Binance Chain.
O que é o padrão ERC-20?
No Ethereum, um ERC é um “Ethereum Request for Comments” (Solicitação de Comentários Ethereum). São documentos técnicos que estabelecem padrões para a programação na Ethereum. Não devem ser confundidos com Propostas de Melhoria Ethereum (EIPs), que, assim como as BIPs do Bitcoin, sugerem melhorias para o próprio protocolo. Os ERCs, por outro lado, visam estabelecer convenções que facilitem a interação entre aplicativos e contratos.
Escrito por Vitalik Buterin e Fabian Vogelsteller em 2015, o ERC-20 propõe um formato relativamente simples para tokens baseados na Ethereum. Ao seguir o esboço, os desenvolvedores não precisam reinventar a roda. Em vez disso, eles podem construir a partir de uma base já utilizada pela indústria.
Uma vez que novos tokens ERC-20 são criados, eles são automaticamente interoperáveis com serviços e softwares que suportam o padrão ERC-20 (carteiras de software, carteiras de hardware, exchanges, etc.).
Vale ressaltar que o padrão ERC-20 foi desenvolvido em um EIP (especificamente, EIP-20). Isso aconteceu alguns anos após a proposta original devido ao seu amplo uso. No entanto, mesmo anos depois, o nome “ERC-20” permaneceu.
Uma breve recapitulação sobre tokens Ethereum
Ao contrário do ETH (criptomoeda nativa da Ethereum), os tokens ERC-20 não são mantidos por contas. Os tokens existem apenas dentro de um contrato, que é como um banco de dados autocontido. Ele especifica as regras para os tokens (ou seja, nome, símbolo, divisibilidade) e mantém uma lista que mapeia os saldos dos usuários para seus endereços Ethereum.
Para mover tokens, os usuários devem enviar uma transação para o contrato solicitando que ele aloque parte do saldo em outro lugar. Por exemplo, se Alice deseja enviar 5.000 tokens FxdigitalTokens para Bob, ela chama uma função dentro do contrato inteligente FxdigitalToken pedindo que ele faça isso.
A chamada de Alice é contida dentro do que parece ser uma transação Ethereum regular que paga 0 ETH ao contrato de token. A chamada é incluída em um campo adicional na transação, que especifica o que Alice deseja fazer – neste caso, transferir tokens para Bob.
Embora ela não esteja enviando ether, ela ainda precisa pagar uma taxa denominada nele para que sua transação seja incluída em um bloco. Se ela não tiver ETH, ela precisa obter alguns antes de transferir os tokens.
Aqui está um exemplo do mundo real do que foi mencionado acima no Etherscan: alguém está fazendo uma chamada para o contrato BUSD. Você pode ver que os tokens foram transferidos e uma taxa foi paga, mesmo que o campo Valor mostre que 0 ETH foi enviado.
Agora que estamos atualizados, vamos dar uma olhada nos bastidores para entender melhor a estrutura de um contrato ERC-20 típico.
Como os tokens ERC-20 são criados?
Para ser compatível com o 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. Pode estar claro para você o que essas funções fazem a partir de seus nomes. Caso contrário, não se preocupe – vamos explicá-las.
Abaixo estão as funções como aparecem na linguagem Solidity, criada especialmente para a Ethereum.
totalSupply
function totalSupply() public view returns (uint256)
Quando chamada por um usuário, a função acima retorna o suprimento total de tokens que o contrato possui.
balanceOf
function balanceOf(address _owner) public view returns (uint256 balance)
Ao contrário de totalSupply, balanceOf recebe um parâmetro (um endereço). Quando chamada, ela retorna o saldo das tokens daquele endereço. Lembre-se de que as contas na rede Ethereum são públicas, portanto, é possível consultar o saldo de qualquer usuário, desde que você conheça o endereço.
transfer
function transfer(address _to, uint256 _value) public returns (bool success)
transfer transfere as tokens de um usuário para outro. Aqui, você fornece o endereço para o qual deseja enviar e a quantidade a ser transferida.
Quando chamada, transfer desencadeia algo chamado de evento (evento transfer, neste caso), que basicamente diz à blockchain para incluir uma referência a ele.
transferFrom
function transferFrom(address _from, address _to, uint256 _value) public returns (bool success)
A função transferFrom é uma alternativa útil para transfer que permite um pouco mais de programabilidade em aplicativos descentralizados. Assim como transfer, é usada para mover tokens, mas esses tokens não precisam necessariamente pertencer à pessoa que chama o contrato.
Em outras palavras, você pode autorizar alguém – ou outro contrato – a transferir fundos em seu nome. Um caso de uso possível envolve o pagamento de serviços com base em assinatura, em que você não deseja enviar manualmente um pagamento todos os dias/semanas/meses. Em vez disso, você permite que um programa faça isso por você.
Esta função desencadeia o mesmo evento que transfer.
approve
function approve(address _spender, uint256 _value) public returns (bool success)
approve é outra função útil do ponto de vista da programabilidade. Com essa função, você pode limitar o número de tokens que um contrato inteligente pode retirar do seu saldo. Sem isso, você corre o risco de o contrato apresentar mau funcionamento (ou ser explorado) e roubar todos os seus fundos.
Vamos usar nosso exemplo de modelo de assinatura novamente. Suponha que você tenha uma grande quantidade de tokens FxdigitalTokens e queira configurar pagamentos recorrentes semanais para um aplicativo de streaming. Você está ocupado lendo o conteúdo da Binance Academy dia e noite, então não quer perder tempo toda semana criando uma transação manualmente.
Você tem um grande saldo de FxdigitalTokens, muito além do necessário para pagar pela assinatura. Para evitar que o aplicativo de streaming esgote todos eles, você pode definir um limite com approve. Suponha que sua assinatura custe um FxdigitalToken por semana. Se você limitar o valor aprovado em vinte tokens, poderá ter sua assinatura paga automaticamente por cinco meses.
No pior caso, se o aplicativo de streaming tentar sacar todos os seus fundos ou se for encontrado um bug, você só pode perder vinte tokens. Pode não ser ideal, mas certamente é mais atraente do que perder todos os seus ativos.
Quando chamada, approve desencadeia o evento approval. Assim como o evento transfer, ele grava dados na blockchain.
allowance
function allowance(address _owner, address _spender) public view returns (uint256 remaining)
allowance pode ser usada em conjunto com approve. Quando você deu permissão a um contrato para gerenciar suas tokens, você pode usar isso para verificar quantas ainda ele pode sacar. Por exemplo, se sua assinatura usou doze dos vinte tokens aprovados, a chamada da função allowance deve retornar um total de oito.
As funções opcionais
As funções discutidas anteriormente são obrigatórias. Por outro lado, name, symbol e decimal não precisam ser incluídos, mas podem tornar seu contrato ERC-20 um pouco mais atraente. Respectivamente, elas permitem adicionar um nome legível por humanos, definir um símbolo (ou seja, ETH, BTC, BNB) e especificar quantas casas decimais as tokens podem ser divisíveis. Por exemplo, tokens usados como moedas podem se beneficiar mais da divisibilidade do que um token que representa a propriedade de um imóvel.
Confira este exemplo no GitHub para ver esses elementos em um contrato real.
O que as tokens ERC-20 podem fazer?
Ao reunir todas as funções acima, temos um contrato ERC-20. Podemos consultar o suprimento total, verificar saldos, transferir fundos e dar permissões a outros DApps para gerenciar tokens por nós.
Uma grande parte do apelo das tokens ERC-20 é sua flexibilidade. As convenções estabelecidas não restringem o desenvolvimento, então as partes podem implementar recursos adicionais e definir parâmetros específicos para atender às suas necessidades.
Stablecoins
Stablecoins (tokens atrelados a moedas fiduciárias) frequentemente usam o padrão de token ERC-20. A transação para o contrato BUSD que mencionamos anteriormente é um exemplo disso, e a maioria das principais stablecoins também está disponível nesse formato.
Para um stablecoin típico lastreado em moeda fiduciária, um emissor mantém reservas de euros, dólares, etc. Em seguida, para cada unidade em sua reserva, eles emitem um token. Isso significa que se $10.000 estivessem guardados em um cofre, o emissor poderia criar 10.000 tokens, cada um resgatável por $1.
Isso é bastante fácil de implementar na Ethereum, tecnicamente falando. Um emissor simplesmente lança um contrato com 10.000 tokens. Em seguida, eles os distribuem para os usuários com a promessa de que eles poderão resgatar os tokens por uma quantidade proporcional de moeda fiduciária posteriormente.
Os usuários podem fazer várias coisas com seus tokens – podem comprar bens e serviços ou usá-los em DApps. Alternativamente, eles podem solicitar que o emissor os troque imediatamente. Nesse caso, o emissor queima os tokens devolvidos (tornando-os inutilizáveis) e retira a quantidade correta de moeda fiduciária de suas reservas.
O contrato que governa esse sistema, como mencionado anteriormente, é relativamente simples. No entanto, lançar um stablecoin requer muito trabalho em fatores externos, como logística, conformidade regulatória, etc.
Tokens de segurança
Tokens de segurança são semelhantes aos stablecoins. No nível do contrato, ambos podem até ser idênticos, pois funcionam da mesma maneira. A distinção ocorre no nível do emissor. Tokens de segurança representam valores mobiliários, como ações, títulos ou ativos físicos. Frequentemente (embora nem sempre), eles concedem ao detentor 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 encontrados atualmente. Ao contrário das duas ofertas anteriores, eles não têm respaldo em nada. Se tokens com lastro em ativos são como ações de uma companhia aérea, então tokens de utilidade são como programas de milhagem: eles têm uma função, mas não têm valor externo. Tokens de utilidade podem atender a uma infinidade de casos de uso, servindo como moeda em jogos, combustível para aplicativos descentralizados, pontos de fidelidade e muito mais.
➠ Quer começar a usar criptomoedas? Compre ether na Binance!
É possível minerar tokens ERC-20?
Você pode minerar ether (ETH), mas tokens não são mineráveis – dizemos que eles são “cunhados” quando novos são criados. Quando um contrato é lançado, os desenvolvedores distribuem o suprimento de acordo com seus planos e roadmap.
Geralmente, isso é feito por meio de uma Oferta Inicial de Moedas (ICO), Oferta Inicial de Exchange (IEO) ou Oferta de Tokens de Segurança (STO). Você pode encontrar variações dessas siglas, mas esses conceitos são bastante semelhantes. Os investidores enviam ether para o endereço do contrato e, em troca, recebem novas tokens. O dinheiro arrecadado é usado para financiar o desenvolvimento contínuo do projeto. Os usuários esperam poder usar suas tokens (seja imediatamente ou em uma data posterior) ou revendê-las para obter lucro à medida que o projeto se desenvolve.
A distribuição de tokens não precisa ser automatizada. Muitos eventos de financiamento coletivo permitem que os usuários paguem com uma variedade de moedas digitais diferentes (como BNB, BTC, ETH e USDT). Os saldos respectivos são, então, alocados para os endereços fornecidos pelos usuários.
Prós e contras das tokens ERC-20
Prós das tokens ERC-20
Fungibilidade
As tokens ERC-20 são fungíveis – cada unidade é intercambiável com outra. Se você possui um FxdigitalToken, não importa qual token específico você tenha. Você poderia trocá-lo pelo de outra pessoa, e eles ainda seriam funcionalmente idênticos, assim como dinheiro ou ouro.
Isso é ideal se o seu token tem como objetivo ser uma moeda de algum tipo. Você não gostaria de unidades individuais com características distinguíveis, o que as tornaria não fungíveis. Isso poderia fazer com que algumas tokens se tornassem mais – ou menos – valiosas do que outras, minando seu propósito.
Flexibilidade
Como exploramos na seção anterior, as tokens ERC-20 são altamente personalizáveis e podem ser adaptadas a muitas aplicações diferentes. Por exemplo, elas podem ser usadas 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 do ERC-20 na indústria de criptomoedas é uma razão altamente convincente para usá-lo como base. Há uma infinidade de exchanges, carteiras e contratos inteligentes já compatíveis com tokens recém-lançados. Além disso, há suporte e documentação abundantes para desenvolvedores.
Contras das tokens ERC-20
Escalabilidade
Como muitas redes de criptomoedas, a Ethereum não é imune a problemas de crescimento. Em sua forma atual, ela não escala bem – tentar enviar uma transação nos horários de pico resulta em taxas altas e atrasos. Se você lançar uma token ERC-20 e a rede ficar congestionada, sua usabilidade pode ser afetada.
Isso não é um problema exclusivo da Ethereum. Na verdade, é um trade-off necessário em sistemas distribuídos e seguros. A comunidade planeja resolver esses problemas na migração para a Ethereum 2.0, que implementará melhorias como Ethereum Plasma e Ethereum Casper.
Saiba mais sobre problemas de escalabilidade em Escalabilidade de Blockchain: Sidechains e Canais de Pagamento.
Golpes
Embora não seja um problema da tecnologia em si, a facilidade com que uma token pode ser lançada pode ser considerada uma desvantagem em alguns aspectos. Exige esforço mínimo para criar uma token ERC-20 simples, o que significa que qualquer pessoa pode fazê-lo – para o bem ou para o mal.
Portanto, você deve ter cuidado com no que está investindo. Existem vários esquemas de pirâmide e Ponzi disfarçados de projetos blockchain. Faça sua própria pesquisa antes de investir para chegar às suas próprias conclusões sobre a legitimidade de uma oportunidade.
ERC-20, ERC-1155, ERC-223, ERC-721 – qual é a diferença?
O ERC-20 foi o primeiro (e, até o momento, o mais popular) padrão de token Ethereum, mas não é o único. Ao longo dos anos, muitos outros surgiram, propondo melhorias no ERC-20 ou tentando alcançar objetivos diferentes.
Alguns dos padrões menos comuns são aqueles usados em tokens não fungíveis (NFTs). Às vezes, seu caso de uso realmente se beneficia de ter tokens únicos com atributos diferentes. Se você quisesse tokenizar uma obra de arte única, um ativo de jogo, etc., um desses tipos de contrato pode ser mais interessante.
O padrão ERC-721, por exemplo, foi usado no imensamente popular aplicativo CryptoKitties. Esse contrato fornece uma API para os usuários criarem seus próprios tokens não fungíveis e para codificar metadados (imagens, descrições, etc.).
O padrão ERC-1155 poderia ser visto como uma melhoria tanto no ERC-721 quanto no ERC-20. Ele descreve um padrão que suporta tanto tokens fungíveis quanto não fungíveis no mesmo contrato.
Outras opções, como ERC-223 ou ERC-621, visam melhorar a usabilidade. O primeiro implementa salvaguardas para evitar transferências acidentais de tokens. O último adiciona funções extras para aumentar e diminuir o suprimento de tokens.
Para saber mais sobre o tema dos NFTs, confira Um Guia para Colecionáveis Cripto e Tokens Não Fungíveis (NFTs).
Considerações finais
O padrão ERC-20 dominou o espaço de ativos criptográficos por anos, e não é difícil entender o motivo. 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.). Dito isso, o ERC-20 carece de algumas das funcionalidades trazidas à vida por outros padrões. Resta saber se tipos subsequentes de contratos substituirão o ERC-20.