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.
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.
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.El contrato LearnCoin
hereda de los contratos OpenZeppelin importados. Esto significa que tendrá todos los métodos y propiedades de esos contratos.
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.
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.
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.
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.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.
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.
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.
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.El contrato LearnCoin
hereda de los contratos OpenZeppelin importados. Esto significa que tendrá todos los métodos y propiedades de esos contratos.
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.
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.
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.
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.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.