WEB3DEV

Yan Luiz
Yan Luiz

Posted on

Tokens: Como funciona o Padrão ERC-20 e suas extensões.

EIP-20 foi criada por Vitalik Buterin e Vogelsteller em novembro de 2015 e se refere à padrões de desenvolvimento para implementar tokens fungíveis.

Sabe-se que o primeiro token no formato ERC-20 que foi criado baseando-se nesse padrão de desenvolvimento foi o FirstBlood Token implementado no bloco 2320114.

Nesse artigo você verá referências aos padrões sugeridos pelos desenvolvedores do Ethereum e OpenZeppelin.


# Tokens ERC-20

Possuem 6 funções obrigatórias e outras opcionais e dispara 2 Eventos obrigatórios.


Funções Obrigatórias:

totalSupply: Retorna a quantidade de tokens disponíveis.

function totalSupply() public view returns (uint256)
Enter fullscreen mode Exit fullscreen mode

balanceOF: retorna o saldo de um endereço passado como _owner

function balanceOf(address _owner) public view returns (uint256 balance)
Enter fullscreen mode Exit fullscreen mode

transfer: Transfere uma quantidade _value de tokens da para a conta _to.

function transfer(address _to, uint256 _value) public returns (bool success)
Enter fullscreen mode Exit fullscreen mode

transferFrom: Permite que endereços autorizados façam transferências "em seu nome" (Função usada pelas DEX para fazer compra e venda).

function transferFrom(address _from, address _to, uint256 _value) public returns (bool success)
Enter fullscreen mode Exit fullscreen mode

approve: Dá autorização para que um endereço _spender possa sacar até o valor passado em _value.

function approve(address _spender, uint256 _value) public returns (bool success)
Enter fullscreen mode Exit fullscreen mode

allowance: Retorna o valor que o _spender ainda está autorizado a sacar.

function allowance(address _owner, address _spender) public view returns (uint256 remaining)
Enter fullscreen mode Exit fullscreen mode

Funções Opcionais:

name: Retorna o nome do Token.

function name() public view returns (string)
Enter fullscreen mode Exit fullscreen mode

symbol: Retorna o symbolo do Token.

function symbol() public view returns (string)
Enter fullscreen mode Exit fullscreen mode

decimals: Retorna a quantidade de casas decimais que o Token possui.

function decimals() public view returns (uint8)
Enter fullscreen mode Exit fullscreen mode

Extensões:

ERC20Mintable: Permite que endereços autorizados criem novos tokens.

modifier onlyMinter()

mint(account, amount) onlyMinter() {}
Enter fullscreen mode Exit fullscreen mode

ERC20Burnable: Irá queimar tokens do endereço que chamar essa função.

burn(amount)

burnFrom(account, amount)
Enter fullscreen mode Exit fullscreen mode

ERC20Pausable: Permite que as operações de compra e venda sejam pausadas.

Modifiers:
onlyPauser()
whenNotPaused()
whenPaused()
Enter fullscreen mode Exit fullscreen mode

ERC20Capped: Há um limite de tokens que podem ser criados.

constructor(cap) {}

require(totalSupply().add(amount) <= _cap); //inserir na função mint
Enter fullscreen mode Exit fullscreen mode

Eventos

event Approval: Sempre que um endereço autorizar que outros endereços movimentem seu saldo.

event Approval(address indexed _owner, address indexed _spender, uint256 _value)
Enter fullscreen mode Exit fullscreen mode

event Transfer: Sempre que houver uma transferência ou queima de tokens.

event Transfer(address indexed _from, address indexed _to, uint256 _value)
Enter fullscreen mode Exit fullscreen mode

Top comments (4)

Collapse
 
optrevisan79 profile image
Optrevisan79

Tenho uma Dúvida. Já consegui criar um token, com o contratos de Montar. Mas quero adicionar mais uma variável, capaz de receber a data da criação deste token... Para no futuro verificar da Dapp de qual época ele foi criado. É possível isso? Valeu Yan tô vendo todos os vídeos, dando jóia, e pondo na lista de favoritos... Abraço e boa jornada.

Collapse
 
nomadbitcoin profile image
Yan Luiz

Nas blockchains não há uma variável de ambiente que capture a data exata em formato legível mas você pode utilizar o formato TIMESTAMP que é um número que depois você converte facilmente pra um formato mais legível. Pra acessar esse dado é através da variável built-in block.timestamp. Tem uma aula no canal sobre isso se vc tiver dúvidas

Collapse
 
carloscruz02 profile image
Carlos Alberto

Como funciona o sistema de claim? por exemplo eu farmo meus tokens e eu quero clamar, qual função do contrato faz isso? pq eu tenho que pegar da carteira do Earn e mandar para minha. Como funciona a lógica por tras disso?

Collapse
 
nomadbitcoin profile image
Yan Luiz

Você parece estar falando de um sistema, me manda mais informações pra que eu possa te ajudar