Leçon 4

Explorando el contrato LearnCoin

Al final de esta lección, debería poder: 1. Comprender las partes y funcionalidades clave del contrato LearnCoin. 2.Comprender el papel de los contratos y bibliotecas de OpenZeppelin en nuestro contrato de token.

Introducción

En la última lección, implementamos nuestro contrato LearnCoin en Goerli Testnet. En esta lección, exploraremos en detalle las funcionalidades del contrato LearnCoin y explicaremos qué hace cada parte.

La estructura del contrato

Este es el contrato completo de nuestro LearnCoin

Python 
 // Identificador de licencia SPDX: Ninguno 
 solidez 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";

el contrato LearnCoin es 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"); 

 constructor() ERC20("Learn Coin", "LC") ERC20Permit("Learn Coin") {
        _grantRole(DEFAULT_ADMIN_ROLE, msg.sender);
        _grantRole(SNAPSHOT_ROLE, msg.sender);
        _grantRole(PAUSER_ROLE, msg.sender);
        _mint(msg.sender, 21000000 * 10 ** decimals());
    }

    función instantánea() pública onlyRole(SNAPSHOT_ROLE) {
        _snapshot();
    }

    función pausa() pública onlyRole(PAUSER_ROLE) {
        _pause();
    }

    función unpause() public onlyRole(PAUSER_ROLE) {
        _unpause();
    }

    función _beforeTokenTransfer(dirección de, dirección a, cantidad uint256) 
 interna 
 whenNotPaused 
 override(ERC20, ERC20Snapshot)
    {
        super._beforeTokenTransfer(from, to, amount);
    }

    // Las siguientes funciones son anulaciones requerido por Solidez.

    función _afterTokenTransfer(dirección desde, dirección a, cantidad uint256) 
 interna 
 anulación (ERC20, ERC20Votes)
    {
        super._afterTokenTransfer(from, to, amount);
    }

    función _mint(dirección a, cantidad uint256) 
 interna 
 anulación (ERC20, ERC20Votes)
    {
        super._mint(to, amount);
    }

    función _burn(cuenta de dirección, monto uint256) 
 anulación interna 
 (ERC20, ERC20Votes)
    {
        super._burn(account, amount);
    }
}

El contrato que implementó es un contrato de token ERC20 llamado LearnCoin. Incluye varias características de la biblioteca de contratos de OpenZeppelin, como tokens quemables, instantáneas, control de acceso, tokens pausables, funcionalidad de permisos, votos y flash mint.

Declaraciones de importación de contratos

Las declaraciones de importación al comienzo del contrato extraen el código de la biblioteca de contratos de OpenZeppelin:

  • ERC20.sol es el contrato base para los tokens ERC20.
  • ERC20Burnable.sol agrega la capacidad para que los poseedores de tokens destruyan sus propios tokens.
  • ERC20Snapshot.sol permite crear instantáneas de saldos de tokens.
  • AccessControl.sol es un módulo de contrato para gestionar el acceso a determinadas funciones.
  • Pausable.sol agrega la capacidad de pausar y reanudar las transferencias de tokens.
  • ERC20Permit.sol permite a los titulares gastar los tokens de los usuarios mediante permisos.
  • ERC20Votes.sol agrega capacidades de votación al token.
  • ERC20FlashMint.sol permite la acuñación flash de tokens.

La declaración del contrato de LearnCoin

El contrato LearnCoin hereda de los contratos OpenZeppelin importados. Esto significa que tendrá todos los métodos y propiedades de esos contratos.

Declaraciones de roles

SNAPSHOT_ROLE y PAUSER_ROLE son valores constantes (creados usando la función hash keccak256 ) que representan roles específicos para el control de acceso dentro del contrato.

La función constructora

Cuando se implementa el contrato LearnCoin , se llama a la función constructora. Establece el nombre y el símbolo del token, otorga a la cuenta de implementación (msg.sender) las funciones de administrador, instantánea y pausa, y genera un suministro inicial de tokens para la cuenta de implementación.

Funciones adicionales

snapshot, pause y unpause son funciones que permiten a las cuentas con los roles correspondientes realizar determinadas acciones. snapshot permite realizar una instantánea, pause y unpause permiten detener y reiniciar las transferencias de tokens.

Anulaciones

Las funciones _beforeTokenTransfer, _afterTokenTransfer, _mint y _burn son funciones internas que se anulan desde los contratos principales. Implementan lógica personalizada para el contrato de LearnCoin.

  • _beforeTokenTransfer: esta función se llama antes de cualquier transferencia de tokens. Garantiza que las transferencias de tokens no se detengan.
  • _afterTokenTransfer: esta función se llama después de cualquier transferencia de tokens. Aquí es una función vacía, pero se puede usar para una lógica personalizada que debería ocurrir inmediatamente después de las transferencias.
  • _mint: esta función crea nuevos tokens y los asigna a una cuenta determinada.
  • _burn: esta función destruye tokens de una cuenta determinada.

Conclusión

Esta fue una descripción general rápida de su contrato LearnCoin . Con el contrato implementado, ahora está listo para interactuar con él, lo cual cubriremos en la próxima lección.

Clause de non-responsabilité
* Les investissements en cryptomonnaies comportent des risques importants. Veuillez faire preuve de prudence. Le cours n'est pas destiné à fournir des conseils en investissement.
* Ce cours a été créé par l'auteur qui a rejoint Gate Learn. Toute opinion partagée par l'auteur ne représente pas Gate Learn.
Catalogue
Leçon 4

Explorando el contrato LearnCoin

Al final de esta lección, debería poder: 1. Comprender las partes y funcionalidades clave del contrato LearnCoin. 2.Comprender el papel de los contratos y bibliotecas de OpenZeppelin en nuestro contrato de token.

Introducción

En la última lección, implementamos nuestro contrato LearnCoin en Goerli Testnet. En esta lección, exploraremos en detalle las funcionalidades del contrato LearnCoin y explicaremos qué hace cada parte.

La estructura del contrato

Este es el contrato completo de nuestro LearnCoin

Python 
 // Identificador de licencia SPDX: Ninguno 
 solidez 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";

el contrato LearnCoin es 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"); 

 constructor() ERC20("Learn Coin", "LC") ERC20Permit("Learn Coin") {
        _grantRole(DEFAULT_ADMIN_ROLE, msg.sender);
        _grantRole(SNAPSHOT_ROLE, msg.sender);
        _grantRole(PAUSER_ROLE, msg.sender);
        _mint(msg.sender, 21000000 * 10 ** decimals());
    }

    función instantánea() pública onlyRole(SNAPSHOT_ROLE) {
        _snapshot();
    }

    función pausa() pública onlyRole(PAUSER_ROLE) {
        _pause();
    }

    función unpause() public onlyRole(PAUSER_ROLE) {
        _unpause();
    }

    función _beforeTokenTransfer(dirección de, dirección a, cantidad uint256) 
 interna 
 whenNotPaused 
 override(ERC20, ERC20Snapshot)
    {
        super._beforeTokenTransfer(from, to, amount);
    }

    // Las siguientes funciones son anulaciones requerido por Solidez.

    función _afterTokenTransfer(dirección desde, dirección a, cantidad uint256) 
 interna 
 anulación (ERC20, ERC20Votes)
    {
        super._afterTokenTransfer(from, to, amount);
    }

    función _mint(dirección a, cantidad uint256) 
 interna 
 anulación (ERC20, ERC20Votes)
    {
        super._mint(to, amount);
    }

    función _burn(cuenta de dirección, monto uint256) 
 anulación interna 
 (ERC20, ERC20Votes)
    {
        super._burn(account, amount);
    }
}

El contrato que implementó es un contrato de token ERC20 llamado LearnCoin. Incluye varias características de la biblioteca de contratos de OpenZeppelin, como tokens quemables, instantáneas, control de acceso, tokens pausables, funcionalidad de permisos, votos y flash mint.

Declaraciones de importación de contratos

Las declaraciones de importación al comienzo del contrato extraen el código de la biblioteca de contratos de OpenZeppelin:

  • ERC20.sol es el contrato base para los tokens ERC20.
  • ERC20Burnable.sol agrega la capacidad para que los poseedores de tokens destruyan sus propios tokens.
  • ERC20Snapshot.sol permite crear instantáneas de saldos de tokens.
  • AccessControl.sol es un módulo de contrato para gestionar el acceso a determinadas funciones.
  • Pausable.sol agrega la capacidad de pausar y reanudar las transferencias de tokens.
  • ERC20Permit.sol permite a los titulares gastar los tokens de los usuarios mediante permisos.
  • ERC20Votes.sol agrega capacidades de votación al token.
  • ERC20FlashMint.sol permite la acuñación flash de tokens.

La declaración del contrato de LearnCoin

El contrato LearnCoin hereda de los contratos OpenZeppelin importados. Esto significa que tendrá todos los métodos y propiedades de esos contratos.

Declaraciones de roles

SNAPSHOT_ROLE y PAUSER_ROLE son valores constantes (creados usando la función hash keccak256 ) que representan roles específicos para el control de acceso dentro del contrato.

La función constructora

Cuando se implementa el contrato LearnCoin , se llama a la función constructora. Establece el nombre y el símbolo del token, otorga a la cuenta de implementación (msg.sender) las funciones de administrador, instantánea y pausa, y genera un suministro inicial de tokens para la cuenta de implementación.

Funciones adicionales

snapshot, pause y unpause son funciones que permiten a las cuentas con los roles correspondientes realizar determinadas acciones. snapshot permite realizar una instantánea, pause y unpause permiten detener y reiniciar las transferencias de tokens.

Anulaciones

Las funciones _beforeTokenTransfer, _afterTokenTransfer, _mint y _burn son funciones internas que se anulan desde los contratos principales. Implementan lógica personalizada para el contrato de LearnCoin.

  • _beforeTokenTransfer: esta función se llama antes de cualquier transferencia de tokens. Garantiza que las transferencias de tokens no se detengan.
  • _afterTokenTransfer: esta función se llama después de cualquier transferencia de tokens. Aquí es una función vacía, pero se puede usar para una lógica personalizada que debería ocurrir inmediatamente después de las transferencias.
  • _mint: esta función crea nuevos tokens y los asigna a una cuenta determinada.
  • _burn: esta función destruye tokens de una cuenta determinada.

Conclusión

Esta fue una descripción general rápida de su contrato LearnCoin . Con el contrato implementado, ahora está listo para interactuar con él, lo cual cubriremos en la próxima lección.

Clause de non-responsabilité
* Les investissements en cryptomonnaies comportent des risques importants. Veuillez faire preuve de prudence. Le cours n'est pas destiné à fournir des conseils en investissement.
* Ce cours a été créé par l'auteur qui a rejoint Gate Learn. Toute opinion partagée par l'auteur ne représente pas Gate Learn.