Урок 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.

Отказ от ответственности
* Криптоинвестирование сопряжено со значительными рисками. Будьте осторожны. Курс не является инвестиционным советом.
* Курс создан автором, который присоединился к Gate Learn. Мнение автора может не совпадать с мнением Gate Learn.
Каталог
Урок 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.

Отказ от ответственности
* Криптоинвестирование сопряжено со значительными рисками. Будьте осторожны. Курс не является инвестиционным советом.
* Курс создан автором, который присоединился к Gate Learn. Мнение автора может не совпадать с мнением Gate Learn.
It seems that you are attempting to access our services from a Restricted Location where Gate.io is unable to provide services. We apologize for any inconvenience this may cause. Currently, the Restricted Locations include but not limited to: the United States of America, Canada, Cambodia, Thailand, Cuba, Iran, North Korea and so on. For more information regarding the Restricted Locations, please refer to the User Agreement. Should you have any other questions, please contact our Customer Support Team.