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

Oldest comments (4)

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

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