Introdução
Ethereum foi fundada por Vitalik Buterin em 2014, posicionando-se como uma plataforma de código aberto para lançamento de aplicações descentralizadas (DApps). Muitas das motivações de Buterin para criar uma nova blockchain derivaram da falta de flexibilidade do protocolo Bitcoin.
Desde o seu lançamento, o blockchain Ethereum atraiu desenvolvedores, empresas e empreendedores, gerando uma indústria crescente de usuários lançando contratos inteligentes e aplicações distribuídas.
Neste artigo, veremos o padrão ERC-20, uma estrutura importante para a criação de tokens. Embora seja específico para a rede Ethereum, a estrutura também inspirou outros padrões de blockchain, como o BEP-2 da Binance Chain.
Qual é o padrão ERC-20?
No Ethereum, um ERC é uma solicitação de comentários do Ethereum. Estes são documentos técnicos que descrevem padrões para programação no Ethereum. Eles não devem ser confundidos com as Propostas de Melhoria do Ethereum (EIPs), que, como os BIPs do Bitcoin, sugerem melhorias no próprio protocolo. Em vez disso, os ERC pretendem estabelecer convenções que facilitem a interação entre aplicações e contratos.
De autoria de Vitalik Buterin e Fabian Vogelsteller em 2015, o ERC-20 propõe um formato relativamente simples para tokens baseados em Ethereum. Seguindo o esboço, os desenvolvedores não precisam reinventar a roda. Em vez disso, podem construir uma base já utilizada em toda a indústria.
Depois que novos tokens ERC-20 são criados, eles são automaticamente interoperáveis com serviços e software que suportam o padrão ERC-20 (carteiras de software, carteiras de hardware, exchanges, etc.).
Deve-se notar que o padrão ERC-20 foi desenvolvido em um EIP (especificamente, EIP-20). Isso aconteceu alguns anos depois da proposta original devido ao seu uso generalizado. No entanto, mesmo anos depois, o nome “ERC-20” pegou.
Uma rápida recapitulação sobre os tokens Ethereum
Ao contrário do ETH (criptomoeda nativa do 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 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 ao contrato solicitando que ele aloque parte de seu saldo em 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.
Sua chamada está contida no que parece ser uma transação Ethereum normal 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 – no nosso caso, transferir tokens para Bob.
Mesmo que ela não esteja enviando ether, ela ainda deve pagar uma taxa denominada nele para que sua transação seja incluída em um bloco. Se ela não tiver ETH, ela precisará obter alguns antes de transferir os tokens.
Aqui está um exemplo real do que foi dito 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 já estamos atualizados, vamos dar uma olhada nos bastidores para entender melhor a estrutura de um contrato ERC-20 típico.
Como são criados os tokens ERC-20?
Para estar em conformidade com o ERC-20, seu contrato precisa incluir seis funções obrigatórias: totalSupply, balanceOf, transfer, transferFrom, aprovar e subsídio. Além disso, você pode especificar funções opcionais, como nome, símbolo e decimal. Pode ficar claro para você o que essas funções fazem a partir de seus nomes. Caso contrário, não se preocupe – nós os analisaremos.
Abaixo estão as funções conforme aparecem na linguagem Solidity desenvolvida especificamente para Ethereum.
fornecimento total
função totalSupply() retornos de visualização pública (uint256)
Quando chamada por um usuário, a função acima retorna o fornecimento total de tokens que o contrato contém.
equilíbrio de
função balanceOf (address _owner) retornos de visualização pública (saldo uint256)
Ao contrário do totalSupply, balanceOf usa um parâmetro (um endereço). Quando chamado, ele retorna o saldo dos tokens desse endereço. Lembre-se que 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.
transferir
transferência de função (endereço _to, uint256 _value) retornos públicos (bool sucesso)
transfer transfere apropriadamente tokens de um usuário para outro. Aqui, você fornece o endereço para o qual deseja enviar e o valor a ser transferido.
Quando chamada, a transferência aciona algo chamado evento (transferência de evento, neste caso), que basicamente diz ao blockchain para incluir uma referência a ele.
transferir de
função transferFrom (endereço _from, endereço _to, uint256 _value) retornos públicos (bool sucesso)
A função transferFrom é uma alternativa útil à transferência que permite um pouco mais de programabilidade em aplicativos descentralizados. Assim como a transferência, é usado para mover tokens, mas esses tokens não precisam necessariamente pertencer à pessoa que assina o contrato.
Em outras palavras, você pode autorizar alguém (ou outro contrato) a transferir fundos em seu nome. Um possível caso de uso envolve o pagamento de serviços baseados em assinatura, onde você não deseja enviar um pagamento manualmente todos os dias/semanas/mês. Em vez disso, você apenas deixa um programa fazer isso por você.
Esta função aciona o mesmo evento que a transferência.
aprovar
função aprovar (endereço _spender, uint256 _value) retornos públicos (bool sucesso)
aprovar é outra função útil do ponto de vista da programabilidade. Com esta função, você pode limitar o número de tokens que um contrato inteligente pode retirar do seu saldo. Sem ele, você corre o risco de o contrato não funcionar bem (ou ser explorado) e roubar todos os seus fundos.
Veja nosso exemplo de modelo de assinatura novamente. Suponha que você tenha uma grande quantidade de BinanceAcademyTokens e queira configurar pagamentos recorrentes semanais para um DApp de streaming. Você está ocupado lendo o conteúdo da Binance Academy dia e noite, então não quer perder tempo toda semana para criar uma transação manualmente.
Você tem um saldo enorme de BinanceAcademyTokens, excedendo em muito o que é necessário para pagar a assinatura. Para evitar que o DApp esgote todos eles, você pode definir um limite com aprovação. Suponha que sua assinatura custe um BinanceAcademyToken por semana. Se você limitasse o valor aprovado a vinte tokens, sua assinatura poderia ser paga automaticamente por cinco meses.
Na pior das hipóteses, se o DApp tentar retirar todos os seus fundos ou se um bug for encontrado, você só poderá perder vinte tokens. Pode não ser o ideal, mas certamente é mais atraente do que perder todos os seus ativos.
Quando chamado, aprovar aciona o evento de aprovação. Assim como o evento de transferência, ele grava dados no blockchain.
mesada
subsídio de função (endereço _proprietário, endereço _gastador) retornos de visualização pública (uint256 restante)
subsídio pode ser usado em conjunto com aprovação. Depois de conceder permissão a um contrato para gerenciar seus tokens, você pode usar isso para verificar quantos ainda podem ser retirados. Por exemplo, se a sua assinatura consumiu doze dos vinte tokens aprovados, chamar a função de subsídio deverá retornar um total de oito.
As funções opcionais
As funções discutidas anteriormente são obrigatórias. Por outro lado, nome, símbolo e decimal não precisam ser incluídos, mas podem deixar seu contrato ERC-20 um pouco mais bonito. Respectivamente, eles permitem que você adicione um nome legível por humanos, defina um símbolo (ou seja, ETH, BTC, BNB) e especifique quantas casas decimais os tokens são divisíveis. Por exemplo, os tokens que são utilizados como moeda podem beneficiar mais por serem mais divisíveis do que um token que representa a propriedade de uma propriedade.
Confira este exemplo no GitHub para ver esses elementos em um contrato real.
O que os tokens ERC-20 podem fazer?
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 gerenciar tokens para nós.
Uma grande parte do apelo dos tokens ERC-20 é a sua flexibilidade. As convenções estabelecidas não restringem o desenvolvimento, portanto as partes podem implementar recursos adicionais e definir parâmetros específicos para atender às suas necessidades.
Moedas estáveis
Stablecoins (tokens atrelados a moedas fiduciárias) geralmente usam 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 uma stablecoin típica apoiada por moeda fiduciária, um emissor mantém reservas de euros, dólares, etc. Então, para cada unidade em sua reserva, ele emite um token. Isso significa que se US$ 10.000 fossem trancados em um cofre, o emissor poderia criar 10.000 tokens, cada um resgatável por US$ 1.
Isso é muito fácil de implementar no Ethereum, tecnicamente falando. Um emissor simplesmente lança um contrato com 10.000 tokens. Em seguida, eles os distribuirão aos usuários com a promessa de que posteriormente poderão resgatar os tokens por uma quantia proporcional de moeda fiduciária.
Os usuários podem fazer várias coisas com seus tokens – eles podem comprar bens e serviços ou usá-los em DApps. Alternativamente, eles poderiam solicitar que o emissor os trocasse 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 rege este sistema, conforme mencionado, é relativamente simplista. No entanto, o lançamento de uma stablecoin requer muito trabalho em fatores externos, como logística, conformidade regulatória, etc.
Tokens de segurança
Os tokens de segurança são semelhantes aos stablecoins. Ao nível do contrato, ambos podem até ser idênticos, pois funcionam da mesma forma. A distinção ocorre ao nível do emitente. Os tokens de títulos representam títulos, como ações, títulos ou ativos físicos. Muitas vezes (embora nem sempre seja o caso), concedem ao titular algum tipo de participação num negócio ou bem.
Tokens utilitários
Os tokens utilitários são talvez os tipos mais comuns de tokens encontrados hoje. Ao contrário das duas ofertas anteriores, elas não são apoiadas por nada. Se os tokens garantidos por ativos são como ações de uma companhia aérea, então os utility tokens são como programas de passageiro frequente: eles cumprem uma função, mas não têm valor externo. Os tokens utilitários podem atender a uma infinidade de casos de uso, servindo como moeda do jogo, combustível para aplicativos descentralizados, pontos de fidelidade e muito mais.
➠ Quer começar a usar criptomoedas? Compre éter na Binance!
Você pode minerar tokens ERC-20?
Você pode extrair éter (ETH), mas os tokens não podem ser minerados – dizemos que eles são cunhados quando novos são criados. Quando um contrato é lançado, os desenvolvedores distribuem o fornecimento de acordo com seus planos e roteiro.
Normalmente, isso é feito por meio de uma oferta inicial de moeda (ICO), oferta inicial de troca (IEO) ou oferta de token 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 novos tokens. O dinheiro arrecadado é usado para financiar o desenvolvimento do projeto. Os usuários esperam poder usar seus tokens (imediatamente ou posteriormente) 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 diferentes (como BNB, BTC, ETH e USDT). Os respetivos saldos são então atribuídos aos endereços fornecidos pelos utilizadores.
Prós e contras dos tokens ERC-20
Prós dos tokens ERC-20
Fungível
Os tokens ERC-20 são fungíveis – cada unidade é intercambiável com outra. Se você tivesse um BinanceAcademyToken, não importaria qual token específico você possuía. 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 pretende ser algum tipo de moeda. Você não gostaria de unidades individuais com características distinguíveis, o que as tornaria não fungíveis. Isso pode fazer com que alguns tokens se tornem mais (ou menos) valiosos do que outros, prejudicando seu propósito.
Flexível
Conforme exploramos na seção anterior, os tokens ERC-20 são altamente personalizáveis e podem ser adaptados para muitas aplicações diferentes. Por exemplo, podem ser usados como moeda de jogo, em programas de fidelidade, como colecionáveis digitais ou até mesmo para representar obras de arte e direitos de propriedade.
Popular
A popularidade do ERC-20 na indústria de criptomoedas é uma razão altamente convincente para usá-lo como modelo. Há uma infinidade de exchanges, carteiras e contratos inteligentes já compatíveis com tokens recém-lançados. Além do mais, o suporte e a documentação do desenvolvedor são abundantes.
Contras dos tokens ERC-20
Escalabilidade
Tal como acontece com muitas redes de criptomoedas, o Ethereum não está imune às dificuldades do crescimento. Na sua forma atual, não se adapta bem – tentar enviar uma transação em horários de pico resulta em taxas elevadas e atrasos. Se você lançar um token ERC-20 e a rede ficar congestionada, sua usabilidade poderá ser afetada.
Este não é um problema exclusivo do Ethereum. Pelo contrário, é uma compensação necessária em sistemas distribuídos e seguros. A comunidade planeja resolver esses problemas na migração para Ethereum 2.0, que implementará atualizações como Ethereum Plasma e Ethereum Casper.
Saiba mais sobre problemas de escalabilidade em Escalabilidade Blockchain: Sidechains e Canais de Pagamento.
Golpes
Embora não seja um problema da tecnologia em si, a facilidade com que um token pode ser lançado pode ser considerada uma desvantagem em alguns aspectos. É necessário um esforço mínimo para criar um token ERC-20 simples, o que significa que qualquer pessoa pode fazê-lo – para o bem ou para o mal.
Como tal, você deve ter cuidado com aquilo em que está investindo. Existem vários esquemas de pirâmide e Ponzi disfarçados de projetos de blockchain. Faça sua própria pesquisa antes de investir para tirar suas próprias conclusões sobre se uma oportunidade é legítima.
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 é de forma alguma o único. Ao longo dos anos, surgiram muitos outros, quer propondo melhorias no ERC-20, quer tentando alcançar objectivos completamente diferentes.
Alguns dos padrões menos comuns são aqueles 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 tokenizar uma obra de arte única, um ativo no jogo, etc., um desses tipos de contrato pode ser mais atraente.
O padrão ERC-721, por exemplo, foi usado para o imensamente popular DApp CryptoKitties. Tal contrato fornece uma API para os usuários cunharem seus próprios tokens não fungíveis e codificarem metadados (imagens, descrições, etc.).
O padrão ERC-1155 pode ser visto como uma melhoria tanto no ERC-721 quanto no ERC-20. Ele descreve um padrão que suporta 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 salvaguardas para evitar transferências acidentais de tokens. Este último adiciona funções extras para aumentar e diminuir o fornecimento de tokens.
Para saber mais sobre o tópico NFTs, não deixe de conferir Um Guia para Criptomoedas Colecionáveis e Tokens Não Fungíveis (NFTs).
Pensamentos finais
O padrão ERC-20 dominou o espaço dos ativos criptográficos durante anos e não é difícil perceber porquê. Com relativa facilidade, qualquer pessoa pode implantar um contrato simples para atender a uma ampla variedade de casos de uso (tokens utilitários, stablecoins, etc.). Dito isto, o ERC-20 carece de alguns dos recursos trazidos à vida por outros padrões. Resta saber se os tipos subsequentes de contratos tomarão o seu lugar.