In der letzten Lektion haben wir unseren LearnCoin-Vertrag im Goerli-Testnetz bereitgestellt. In dieser Lektion werden wir die Funktionalitäten des LearnCoin-Vertrags im Detail untersuchen und erklären, was die einzelnen Teile bewirken.
Dies ist der vollständige Vertrag unseres LearnCoin
Python
// SPDX-License-Identifier: None
pragma solidity ^0.8.9;
import „@openzeppelin/contracts/token/ERC20/ERC20.sol“;
import „@openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable.sol“;
import „@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“;
import „@openzeppelin/contracts/token/ERC20/extensions/ERC20Votes.sol“;
import „@openzeppelin/contracts/token/ERC20/extensions/ERC20FlashMint.sol“;
Vertrag LearnCoin ist ERC20, ERC20Burnable, ERC20Snapshot, AccessControl, Pausable, ERC20Permit, ERC20Votes, ERC20FlashMint {
bytes32 public konstant SNAPSHOT_ROLE = keccak256("SNAPSHOT_ROLE");
Bytes32 öffentliche Konstante PAUSER_ROLE = keccak256("PAUSER_ROLE");
Konstruktor() 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());
}
Funktion snapshot() public onlyRole(SNAPSHOT_ROLE) {
_snapshot();
}
Funktion pause() public onlyRole(PAUSER_ROLE) {
_pause();
}
Funktion unpause() public onlyRole(PAUSER_ROLE) {
_unpause();
}
Funktion _beforeTokenTransfer(address from, address to, uint256 amount)
internal
whenNotPaused
override(ERC20, ERC20Snapshot)
{
super._beforeTokenTransfer(from, to, amount);
}
// Die folgenden Funktionen sind Überschreibungen von Solidity gefordert.
Funktion _afterTokenTransfer(Adresse von, Adresse an, uint256 Betrag)
intern
Override(ERC20, ERC20Votes)
{
super._afterTokenTransfer(from, to, amount);
}
Funktion _mint(Adresse an, uint256 Betrag)
intern
Override(ERC20, ERC20Votes)
{
super._mint(to, amount);
}
Funktion _burn(address account, uint256 amount)
internal
override(ERC20, ERC20Votes)
{
super._burn(account, amount);
}
}
Der von Ihnen bereitgestellte Vertrag ist ein ERC20-Token-Vertrag mit dem Namen LearnCoin
. Es umfasst mehrere Funktionen aus der Vertragsbibliothek von OpenZeppelin, wie z. B. brennbare Token, Snapshots, Zugriffskontrolle, pausierbare Token, Genehmigungsfunktionen, Abstimmungen und Flash Mint.
Die Importanweisungen am Anfang des Vertrags beziehen Code aus der Vertragsbibliothek von OpenZeppelin:
ERC20.sol
ist der Basisvertrag für ERC20-Token.ERC20Burnable.sol
bietet Token-Inhabern die Möglichkeit, ihre eigenen Token zu zerstören.ERC20Snapshot.sol
ermöglicht das Erstellen von Snapshots von Token-Salden.AccessControl.sol
ist ein Vertragsmodul zur Verwaltung des Zugriffs auf bestimmte Funktionen.Pausable.sol
bietet die Möglichkeit, Token-Übertragungen anzuhalten und wieder aufzuheben.ERC20Permit.sol
ermöglicht es Inhabern, Benutzer-Tokens über Genehmigungen auszugeben.ERC20Votes.sol
fügt dem Token Abstimmungsfunktionen hinzu.ERC20FlashMint.sol
ermöglicht das Flash-Minting von Token.Der LearnCoin
Vertrag erbt von den importierten OpenZeppelin-Verträgen. Das bedeutet, dass es über alle Methoden und Eigenschaften dieser Verträge verfügt.
SNAPSHOT_ROLE
und PAUSER_ROLE
sind konstante Werte (erstellt mit der Hash-Funktion keccak256
), die bestimmte Rollen für die Zugriffskontrolle innerhalb des Vertrags darstellen.
Wenn der LearnCoin
Vertrag bereitgestellt wird, wird die Konstruktorfunktion aufgerufen. Es legt den Namen und das Symbol des Tokens fest, gewährt dem bereitstellenden Konto (msg.sender) die Rollen „Administrator“, „Snapshot“ und „Pause“ und erstellt einen ersten Vorrat an Token für das bereitstellende Konto.
snapshot
, pause
und unpause
sind Funktionen, die es Konten mit den entsprechenden Rollen ermöglichen, bestimmte Aktionen auszuführen. snapshot
ermöglicht die Erstellung eines Snapshots, pause
und unpause
ermöglichen das Stoppen und Neustarten von Token-Übertragungen.
Die Funktionen _beforeTokenTransfer
, _afterTokenTransfer
, _mint
und _burn
sind interne Funktionen, die von den übergeordneten Verträgen überschrieben werden. Sie implementieren benutzerdefinierte Logik für den LearnCoin-Vertrag.
_beforeTokenTransfer
: Diese Funktion wird vor jeder Übertragung von Token aufgerufen. Dadurch wird sichergestellt, dass Tokenübertragungen nicht pausiert werden._afterTokenTransfer
: Diese Funktion wird nach jeder Übertragung von Token aufgerufen. Es handelt sich hier um eine leere Funktion, die jedoch für benutzerdefinierte Logik verwendet werden kann, die direkt nach Übertragungen erfolgen soll._mint
: Diese Funktion erstellt neue Token und weist sie einem bestimmten Konto zu._burn
: Diese Funktion zerstört Token von einem bestimmten Konto.Dies war ein kurzer Überblick über Ihren LearnCoin
Vertrag. Nachdem der Vertrag bereitgestellt wurde, können Sie nun damit interagieren, worauf wir in der nächsten Lektion eingehen.
In der letzten Lektion haben wir unseren LearnCoin-Vertrag im Goerli-Testnetz bereitgestellt. In dieser Lektion werden wir die Funktionalitäten des LearnCoin-Vertrags im Detail untersuchen und erklären, was die einzelnen Teile bewirken.
Dies ist der vollständige Vertrag unseres LearnCoin
Python
// SPDX-License-Identifier: None
pragma solidity ^0.8.9;
import „@openzeppelin/contracts/token/ERC20/ERC20.sol“;
import „@openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable.sol“;
import „@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“;
import „@openzeppelin/contracts/token/ERC20/extensions/ERC20Votes.sol“;
import „@openzeppelin/contracts/token/ERC20/extensions/ERC20FlashMint.sol“;
Vertrag LearnCoin ist ERC20, ERC20Burnable, ERC20Snapshot, AccessControl, Pausable, ERC20Permit, ERC20Votes, ERC20FlashMint {
bytes32 public konstant SNAPSHOT_ROLE = keccak256("SNAPSHOT_ROLE");
Bytes32 öffentliche Konstante PAUSER_ROLE = keccak256("PAUSER_ROLE");
Konstruktor() 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());
}
Funktion snapshot() public onlyRole(SNAPSHOT_ROLE) {
_snapshot();
}
Funktion pause() public onlyRole(PAUSER_ROLE) {
_pause();
}
Funktion unpause() public onlyRole(PAUSER_ROLE) {
_unpause();
}
Funktion _beforeTokenTransfer(address from, address to, uint256 amount)
internal
whenNotPaused
override(ERC20, ERC20Snapshot)
{
super._beforeTokenTransfer(from, to, amount);
}
// Die folgenden Funktionen sind Überschreibungen von Solidity gefordert.
Funktion _afterTokenTransfer(Adresse von, Adresse an, uint256 Betrag)
intern
Override(ERC20, ERC20Votes)
{
super._afterTokenTransfer(from, to, amount);
}
Funktion _mint(Adresse an, uint256 Betrag)
intern
Override(ERC20, ERC20Votes)
{
super._mint(to, amount);
}
Funktion _burn(address account, uint256 amount)
internal
override(ERC20, ERC20Votes)
{
super._burn(account, amount);
}
}
Der von Ihnen bereitgestellte Vertrag ist ein ERC20-Token-Vertrag mit dem Namen LearnCoin
. Es umfasst mehrere Funktionen aus der Vertragsbibliothek von OpenZeppelin, wie z. B. brennbare Token, Snapshots, Zugriffskontrolle, pausierbare Token, Genehmigungsfunktionen, Abstimmungen und Flash Mint.
Die Importanweisungen am Anfang des Vertrags beziehen Code aus der Vertragsbibliothek von OpenZeppelin:
ERC20.sol
ist der Basisvertrag für ERC20-Token.ERC20Burnable.sol
bietet Token-Inhabern die Möglichkeit, ihre eigenen Token zu zerstören.ERC20Snapshot.sol
ermöglicht das Erstellen von Snapshots von Token-Salden.AccessControl.sol
ist ein Vertragsmodul zur Verwaltung des Zugriffs auf bestimmte Funktionen.Pausable.sol
bietet die Möglichkeit, Token-Übertragungen anzuhalten und wieder aufzuheben.ERC20Permit.sol
ermöglicht es Inhabern, Benutzer-Tokens über Genehmigungen auszugeben.ERC20Votes.sol
fügt dem Token Abstimmungsfunktionen hinzu.ERC20FlashMint.sol
ermöglicht das Flash-Minting von Token.Der LearnCoin
Vertrag erbt von den importierten OpenZeppelin-Verträgen. Das bedeutet, dass es über alle Methoden und Eigenschaften dieser Verträge verfügt.
SNAPSHOT_ROLE
und PAUSER_ROLE
sind konstante Werte (erstellt mit der Hash-Funktion keccak256
), die bestimmte Rollen für die Zugriffskontrolle innerhalb des Vertrags darstellen.
Wenn der LearnCoin
Vertrag bereitgestellt wird, wird die Konstruktorfunktion aufgerufen. Es legt den Namen und das Symbol des Tokens fest, gewährt dem bereitstellenden Konto (msg.sender) die Rollen „Administrator“, „Snapshot“ und „Pause“ und erstellt einen ersten Vorrat an Token für das bereitstellende Konto.
snapshot
, pause
und unpause
sind Funktionen, die es Konten mit den entsprechenden Rollen ermöglichen, bestimmte Aktionen auszuführen. snapshot
ermöglicht die Erstellung eines Snapshots, pause
und unpause
ermöglichen das Stoppen und Neustarten von Token-Übertragungen.
Die Funktionen _beforeTokenTransfer
, _afterTokenTransfer
, _mint
und _burn
sind interne Funktionen, die von den übergeordneten Verträgen überschrieben werden. Sie implementieren benutzerdefinierte Logik für den LearnCoin-Vertrag.
_beforeTokenTransfer
: Diese Funktion wird vor jeder Übertragung von Token aufgerufen. Dadurch wird sichergestellt, dass Tokenübertragungen nicht pausiert werden._afterTokenTransfer
: Diese Funktion wird nach jeder Übertragung von Token aufgerufen. Es handelt sich hier um eine leere Funktion, die jedoch für benutzerdefinierte Logik verwendet werden kann, die direkt nach Übertragungen erfolgen soll._mint
: Diese Funktion erstellt neue Token und weist sie einem bestimmten Konto zu._burn
: Diese Funktion zerstört Token von einem bestimmten Konto.Dies war ein kurzer Überblick über Ihren LearnCoin
Vertrag. Nachdem der Vertrag bereitgestellt wurde, können Sie nun damit interagieren, worauf wir in der nächsten Lektion eingehen.