Bài học 4

Explorar o Contrato LearnCoin

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

Introdução

Na última lição, implantamos o nosso contrato LearnCoin na 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;

import " @openzeppelin /contracts/token/ERC20/ERC20.sol";
importar " @openzeppelin /contracts/token/ERC20/Extensions/ERC20Burnable.sol";
importar " @openzeppelin /contracts/token/ERC20/Extensions/ERC20Snapshot.sol";
import " @openzeppelin /contracts/access/accesscontrol.sol";
import " @openzeppelin /contracts/security/pausable.sol";
import " @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, ERC20Permits, ERC20Votos, ERC20FlashMint {
 bytes32 constante pública SNAPSHOT_ROLE = keccak256 (SNAPSHOT_ROLE); " "
 bytes32 constante pública PAUSER_ROLE = keccak256 (PAUSER_ROLE); " "

 construtor () ERC20 ("Learn Coin", " LC") ERC20Permitt (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();
    }

    função unpause () public onlyRole (PAUSER_ROLE) {
        _unpause();
    }

    função _beforTokenTransfer (endereço de, endereço para, valor uint256)
 interno
 Quando não está em pausa
 substituir (ERC20, ERC20Snapshot)
    {
        super._beforeTokenTransfer(from, to, amount);
    }

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

    função _AfterTokenTransfer (endereço de, endereço para, valor uint256)
 interno
 substituir (ERC20, ERC20 votos)
    {
        super._afterTokenTransfer(from, to, amount);
    }

    função _mint (endereço para, valor uint256)
 interno
 substituir (ERC20, ERC20 votos)
    {
        super._mint(to, amount);
    }

    função _burn (conta de endereço, valor uint256)
 interno
 substituir (ERC20, ERC20 votos)
    {
        super._burn(account, amount);
    }
}

O contrato que implementou é um contrato de token ERC20 chamado LearnCoin. Inclui várias funcionalidades da biblioteca de contratos do OpenZeppelin, tais como tokens queimáveis, instantâneos, controlo de acesso, tokens pausáveis, funcionalidade de permissão, votos e flash mint.

Declarações de importação de contrato

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

  • ERC20.sol é o contrato base para os tokens ERC20.
  • ERC20Burnable.sol adiciona a capacidade dos detentores de tokens destruírem os 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 gerir o acesso a determinadas funcionalidades.
  • Pausable.sol adiciona a capacidade de pausar e não pausar transferências de token.
  • O ERC20Permit.sol permite que os titulares gastem os tokens do utilizador através de autorizações.
  • ERC20Votes.sol adiciona capacidades de votação ao token.
  • ERC20FlashMint.sol permite a cunelagem flash de tokens.

A Declaração do Contrato da LearnCoin

O contrato LearnCoin herda dos contratos OpenZeppelin importados. Isto 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 o controlo de acesso dentro do contrato.

A Função Construtor

Quando o contrato da LearnCoin é implementado, a função de construtor chama-se. Define o nome e o símbolo do token, concede à conta de implantação (msg.sender) as funções de administrador, instantâneo e pauser e cunha 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. instantâneo permite que um instantâneo seja feito, pausar e não pausar permitem parar e reiniciar as transferências de token.

Sobreposições

As funções _ForeTokenTransfer, _AfterTokenTransfer, _mint e _burn são funções internas que são substituídas dos contratos-pai. Implementam lógica personalizada para o contrato da LearnCoin.

  • _befeTokenTransfer: Esta função é chamada antes de qualquer transferência de tokens. Garante que as transferências de tokens 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 atribui-os 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 implementado, agora está pronto para interagir com ele, o que abordamos na próxima lição.

Tuyên bố từ chối trách nhiệm
* Đầu tư tiền điện tử liên quan đến rủi ro đáng kể. Hãy tiến hành một cách thận trọng. Khóa học không nhằm mục đích tư vấn đầu tư.
* Khóa học được tạo bởi tác giả đã tham gia Gate Learn. Mọi ý kiến chia sẻ của tác giả không đại diện cho Gate Learn.
Danh mục
Bài học 4

Explorar o Contrato LearnCoin

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

Introdução

Na última lição, implantamos o nosso contrato LearnCoin na 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;

import " @openzeppelin /contracts/token/ERC20/ERC20.sol";
importar " @openzeppelin /contracts/token/ERC20/Extensions/ERC20Burnable.sol";
importar " @openzeppelin /contracts/token/ERC20/Extensions/ERC20Snapshot.sol";
import " @openzeppelin /contracts/access/accesscontrol.sol";
import " @openzeppelin /contracts/security/pausable.sol";
import " @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, ERC20Permits, ERC20Votos, ERC20FlashMint {
 bytes32 constante pública SNAPSHOT_ROLE = keccak256 (SNAPSHOT_ROLE); " "
 bytes32 constante pública PAUSER_ROLE = keccak256 (PAUSER_ROLE); " "

 construtor () ERC20 ("Learn Coin", " LC") ERC20Permitt (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();
    }

    função unpause () public onlyRole (PAUSER_ROLE) {
        _unpause();
    }

    função _beforTokenTransfer (endereço de, endereço para, valor uint256)
 interno
 Quando não está em pausa
 substituir (ERC20, ERC20Snapshot)
    {
        super._beforeTokenTransfer(from, to, amount);
    }

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

    função _AfterTokenTransfer (endereço de, endereço para, valor uint256)
 interno
 substituir (ERC20, ERC20 votos)
    {
        super._afterTokenTransfer(from, to, amount);
    }

    função _mint (endereço para, valor uint256)
 interno
 substituir (ERC20, ERC20 votos)
    {
        super._mint(to, amount);
    }

    função _burn (conta de endereço, valor uint256)
 interno
 substituir (ERC20, ERC20 votos)
    {
        super._burn(account, amount);
    }
}

O contrato que implementou é um contrato de token ERC20 chamado LearnCoin. Inclui várias funcionalidades da biblioteca de contratos do OpenZeppelin, tais como tokens queimáveis, instantâneos, controlo de acesso, tokens pausáveis, funcionalidade de permissão, votos e flash mint.

Declarações de importação de contrato

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

  • ERC20.sol é o contrato base para os tokens ERC20.
  • ERC20Burnable.sol adiciona a capacidade dos detentores de tokens destruírem os 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 gerir o acesso a determinadas funcionalidades.
  • Pausable.sol adiciona a capacidade de pausar e não pausar transferências de token.
  • O ERC20Permit.sol permite que os titulares gastem os tokens do utilizador através de autorizações.
  • ERC20Votes.sol adiciona capacidades de votação ao token.
  • ERC20FlashMint.sol permite a cunelagem flash de tokens.

A Declaração do Contrato da LearnCoin

O contrato LearnCoin herda dos contratos OpenZeppelin importados. Isto 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 o controlo de acesso dentro do contrato.

A Função Construtor

Quando o contrato da LearnCoin é implementado, a função de construtor chama-se. Define o nome e o símbolo do token, concede à conta de implantação (msg.sender) as funções de administrador, instantâneo e pauser e cunha 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. instantâneo permite que um instantâneo seja feito, pausar e não pausar permitem parar e reiniciar as transferências de token.

Sobreposições

As funções _ForeTokenTransfer, _AfterTokenTransfer, _mint e _burn são funções internas que são substituídas dos contratos-pai. Implementam lógica personalizada para o contrato da LearnCoin.

  • _befeTokenTransfer: Esta função é chamada antes de qualquer transferência de tokens. Garante que as transferências de tokens 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 atribui-os 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 implementado, agora está pronto para interagir com ele, o que abordamos na próxima lição.

Tuyên bố từ chối trách nhiệm
* Đầu tư tiền điện tử liên quan đến rủi ro đáng kể. Hãy tiến hành một cách thận trọng. Khóa học không nhằm mục đích tư vấn đầu tư.
* Khóa học được tạo bởi tác giả đã tham gia Gate Learn. Mọi ý kiến chia sẻ của tác giả không đại diện cho Gate Learn.