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.
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.
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.O contrato LearnCoin
é herdado dos contratos importados do OpenZeppelin. Isso significa que terá todos os métodos e propriedades desses contratos.
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.
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.
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.
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.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.
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.
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.
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.O contrato LearnCoin
é herdado dos contratos importados do OpenZeppelin. Isso significa que terá todos os métodos e propriedades desses contratos.
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.
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.
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.
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.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.