Lección 4

Explorando o contrato LearnCoin

Ao final desta lição, você deverá ser capaz de: 1. Compreender as principais partes e funcionalidades do contrato LearnCoin. 2. Compreender o papel dos contratos e bibliotecas OpenZeppelin em nosso contrato de token.

Introdução

Na última lição, implantamos nosso contrato LearnCoin no Goerli Testnet. Nesta lição, exploraremos detalhadamente as funcionalidades do contrato LearnCoin e explicaremos o que cada parte faz.

A Estrutura do Contrato

Este é o contrato completo do nosso LearnCoin

Python 
 // Identificador de licença SPDX: Nenhum 
 solidez do pragma ^0.8.9; 

 importar "@openzeppelin/contracts/token/ERC20/ERC20.sol";
importar "@openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable.sol";
importar "@openzeppelin/contracts/token/ERC20/extensions/ERC20Snapshot.sol";
importar "@openzeppelin/contracts/access/AccessControl.sol";
importar "@openzeppelin/contracts/security/Pausable.sol";
importar "@openzeppelin/contracts/token/ERC20/extensions/draft-ERC20Permit.sol";
importar "@openzeppelin/contracts/token/ERC20/extensions/ERC20Votes.sol";
importar "@openzeppelin/contracts/token/ERC20/extensions/ERC20FlashMint.sol";

contrato LearnCoin é ERC20, ERC20Burnable, ERC20Snapshot, AccessControl, Pausable, ERC20Permit, ERC20Votes, ERC20FlashMint { 
 bytes32 constante pública SNAPSHOT_ROLE = keccak256("SNAPSHOT_ROLE"); 
 bytes32 constante pública PAUSER_ROLE = keccak256("PAUSER_ROLE"); 

 construtor() ERC20("Aprender Moeda", "LC") ERC20Permit("Aprender Moeda") {
        _grantRole(DEFAULT_ADMIN_ROLE, msg.sender);
        _grantRole(SNAPSHOT_ROLE, msg.sender);
        _grantRole(PAUSER_ROLE, msg.sender);
        _mint(msg.sender, 21000000 * 10 ** decimals());
    }

    função snapshot() public onlyRole(SNAPSHOT_ROLE) {
        _snapshot();
    }

    função pause() public onlyRole(PAUSER_ROLE) {
        _pause();
    }

    function unpause() public onlyRole(PAUSER_ROLE) {
        _unpause();
    }

    function _beforeTokenTransfer(address from, address to, uint256 amount) 
 internal 
 whenNotPaused 
 override(ERC20, ERC20Snapshot)
    {
        super._beforeTokenTransfer(from, to, amount);
    }

    // As seguintes funções são substituições exigido pelo Solidity.

    função _afterTokenTransfer (endereço de, endereço para, quantidade uint256) 
 substituição interna 
 (ERC20, ERC20Votes)
    {
        super._afterTokenTransfer(from, to, amount);
    }

    função _mint (endereço para, quantidade uint256) 
 substituição interna 
 (ERC20, ERC20Votes)
    {
        super._mint(to, amount);
    }

    função _burn (endereço da conta, valor uint256) 
 substituição interna 
 (ERC20, ERC20Votes)
    {
        super._burn(account, amount);
    }
}

O contrato que você implantou é um contrato de token ERC20 denominado LearnCoin. Inclui vários recursos da biblioteca de contratos do OpenZeppelin, como tokens queimáveis, instantâneos, controle de acesso, tokens pausáveis, funcionalidade de permissão, votos e flash mint.

Declarações de importação de contrato

As instruções de importação no início do contrato extraem código da biblioteca de contratos do OpenZeppelin:

  • ERC20.sol é o contrato base para tokens ERC20.
  • ERC20Burnable.sol adiciona a capacidade dos detentores de tokens destruirem seus próprios tokens.
  • ERC20Snapshot.sol permite a criação de instantâneos de saldos de tokens.
  • AccessControl.sol é um módulo de contrato para gerenciar o acesso a determinadas funcionalidades.
  • Pausable.sol adiciona a capacidade de pausar e retomar transferências de token.
  • ERC20Permit.sol permite que os titulares gastem os tokens do usuário por meio de licenças.
  • ERC20Votes.sol adiciona recursos de votação ao token.
  • ERC20FlashMint.sol permite a cunhagem flash de tokens.

A Declaração do Contrato LearnCoin

O contrato LearnCoin é herdado dos contratos importados do OpenZeppelin. Isso significa que terá todos os métodos e propriedades desses contratos.

Declarações de função

SNAPSHOT_ROLE e PAUSER_ROLE são valores constantes (criados usando a função hash keccak256 ) que representam funções específicas para controle de acesso dentro do contrato.

A função construtora

Quando o contrato LearnCoin é implantado, a função construtora é chamada. Ele define o nome e o símbolo do token, concede à conta de implantação (msg.sender) as funções de administrador, instantâneo e pausador e fornece um suprimento inicial de tokens para a conta de implantação.

Funções adicionais

snapshot, pause e unpause são funções que permitem que contas com as funções correspondentes executem determinadas ações. snapshot permite que um snapshot seja feito, pause e unpause permite parar e reiniciar transferências de token.

Substituições

As funções _beforeTokenTransfer, _afterTokenTransfer, _mint e _burn são funções internas substituídas dos contratos pai. Eles implementam lógica personalizada para o contrato LearnCoin.

  • _beforeTokenTransfer: Esta função é chamada antes de qualquer transferência de tokens. Ele garante que as transferências de token não sejam pausadas.
  • _afterTokenTransfer: Esta função é chamada após qualquer transferência de tokens. É uma função vazia aqui, mas pode ser usada para lógica personalizada que deve acontecer logo após as transferências.
  • _mint: Esta função cria novos tokens e os atribui a uma determinada conta.
  • _burn: Esta função destrói tokens de uma determinada conta.

Conclusão

Esta foi uma rápida visão geral do seu contrato LearnCoin . Com o contrato implantado, você está pronto para interagir com ele, o que abordaremos na próxima lição.

Descargo de responsabilidad
* La inversión en criptomonedas implica riesgos significativos. Proceda con precaución. El curso no pretende ser un asesoramiento de inversión.
* El curso ha sido creado por el autor que se ha unido a Gate Learn. Cualquier opinión compartida por el autor no representa a Gate Learn.
Catálogo
Lección 4

Explorando o contrato LearnCoin

Ao final desta lição, você deverá ser capaz de: 1. Compreender as principais partes e funcionalidades do contrato LearnCoin. 2. Compreender o papel dos contratos e bibliotecas OpenZeppelin em nosso contrato de token.

Introdução

Na última lição, implantamos nosso contrato LearnCoin no Goerli Testnet. Nesta lição, exploraremos detalhadamente as funcionalidades do contrato LearnCoin e explicaremos o que cada parte faz.

A Estrutura do Contrato

Este é o contrato completo do nosso LearnCoin

Python 
 // Identificador de licença SPDX: Nenhum 
 solidez do pragma ^0.8.9; 

 importar "@openzeppelin/contracts/token/ERC20/ERC20.sol";
importar "@openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable.sol";
importar "@openzeppelin/contracts/token/ERC20/extensions/ERC20Snapshot.sol";
importar "@openzeppelin/contracts/access/AccessControl.sol";
importar "@openzeppelin/contracts/security/Pausable.sol";
importar "@openzeppelin/contracts/token/ERC20/extensions/draft-ERC20Permit.sol";
importar "@openzeppelin/contracts/token/ERC20/extensions/ERC20Votes.sol";
importar "@openzeppelin/contracts/token/ERC20/extensions/ERC20FlashMint.sol";

contrato LearnCoin é ERC20, ERC20Burnable, ERC20Snapshot, AccessControl, Pausable, ERC20Permit, ERC20Votes, ERC20FlashMint { 
 bytes32 constante pública SNAPSHOT_ROLE = keccak256("SNAPSHOT_ROLE"); 
 bytes32 constante pública PAUSER_ROLE = keccak256("PAUSER_ROLE"); 

 construtor() ERC20("Aprender Moeda", "LC") ERC20Permit("Aprender Moeda") {
        _grantRole(DEFAULT_ADMIN_ROLE, msg.sender);
        _grantRole(SNAPSHOT_ROLE, msg.sender);
        _grantRole(PAUSER_ROLE, msg.sender);
        _mint(msg.sender, 21000000 * 10 ** decimals());
    }

    função snapshot() public onlyRole(SNAPSHOT_ROLE) {
        _snapshot();
    }

    função pause() public onlyRole(PAUSER_ROLE) {
        _pause();
    }

    function unpause() public onlyRole(PAUSER_ROLE) {
        _unpause();
    }

    function _beforeTokenTransfer(address from, address to, uint256 amount) 
 internal 
 whenNotPaused 
 override(ERC20, ERC20Snapshot)
    {
        super._beforeTokenTransfer(from, to, amount);
    }

    // As seguintes funções são substituições exigido pelo Solidity.

    função _afterTokenTransfer (endereço de, endereço para, quantidade uint256) 
 substituição interna 
 (ERC20, ERC20Votes)
    {
        super._afterTokenTransfer(from, to, amount);
    }

    função _mint (endereço para, quantidade uint256) 
 substituição interna 
 (ERC20, ERC20Votes)
    {
        super._mint(to, amount);
    }

    função _burn (endereço da conta, valor uint256) 
 substituição interna 
 (ERC20, ERC20Votes)
    {
        super._burn(account, amount);
    }
}

O contrato que você implantou é um contrato de token ERC20 denominado LearnCoin. Inclui vários recursos da biblioteca de contratos do OpenZeppelin, como tokens queimáveis, instantâneos, controle de acesso, tokens pausáveis, funcionalidade de permissão, votos e flash mint.

Declarações de importação de contrato

As instruções de importação no início do contrato extraem código da biblioteca de contratos do OpenZeppelin:

  • ERC20.sol é o contrato base para tokens ERC20.
  • ERC20Burnable.sol adiciona a capacidade dos detentores de tokens destruirem seus próprios tokens.
  • ERC20Snapshot.sol permite a criação de instantâneos de saldos de tokens.
  • AccessControl.sol é um módulo de contrato para gerenciar o acesso a determinadas funcionalidades.
  • Pausable.sol adiciona a capacidade de pausar e retomar transferências de token.
  • ERC20Permit.sol permite que os titulares gastem os tokens do usuário por meio de licenças.
  • ERC20Votes.sol adiciona recursos de votação ao token.
  • ERC20FlashMint.sol permite a cunhagem flash de tokens.

A Declaração do Contrato LearnCoin

O contrato LearnCoin é herdado dos contratos importados do OpenZeppelin. Isso significa que terá todos os métodos e propriedades desses contratos.

Declarações de função

SNAPSHOT_ROLE e PAUSER_ROLE são valores constantes (criados usando a função hash keccak256 ) que representam funções específicas para controle de acesso dentro do contrato.

A função construtora

Quando o contrato LearnCoin é implantado, a função construtora é chamada. Ele define o nome e o símbolo do token, concede à conta de implantação (msg.sender) as funções de administrador, instantâneo e pausador e fornece um suprimento inicial de tokens para a conta de implantação.

Funções adicionais

snapshot, pause e unpause são funções que permitem que contas com as funções correspondentes executem determinadas ações. snapshot permite que um snapshot seja feito, pause e unpause permite parar e reiniciar transferências de token.

Substituições

As funções _beforeTokenTransfer, _afterTokenTransfer, _mint e _burn são funções internas substituídas dos contratos pai. Eles implementam lógica personalizada para o contrato LearnCoin.

  • _beforeTokenTransfer: Esta função é chamada antes de qualquer transferência de tokens. Ele garante que as transferências de token não sejam pausadas.
  • _afterTokenTransfer: Esta função é chamada após qualquer transferência de tokens. É uma função vazia aqui, mas pode ser usada para lógica personalizada que deve acontecer logo após as transferências.
  • _mint: Esta função cria novos tokens e os atribui a uma determinada conta.
  • _burn: Esta função destrói tokens de uma determinada conta.

Conclusão

Esta foi uma rápida visão geral do seu contrato LearnCoin . Com o contrato implantado, você está pronto para interagir com ele, o que abordaremos na próxima lição.

Descargo de responsabilidad
* La inversión en criptomonedas implica riesgos significativos. Proceda con precaución. El curso no pretende ser un asesoramiento de inversión.
* El curso ha sido creado por el autor que se ha unido a Gate Learn. Cualquier opinión compartida por el autor no representa a Gate Learn.