Lektion 4

Erkundung des LearnCoin-Vertrags

Am Ende dieser Lektion sollten Sie in der Lage sein: 1. Die wichtigsten Teile und Funktionen des LearnCoin-Vertrags zu verstehen. 2. Verstehen Sie die Rolle von OpenZeppelin-Verträgen und -Bibliotheken in unserem Token-Vertrag.

Einführung

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.

Die Vertragsstruktur

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.

Vertragsimporterklärungen

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.

Die LearnCoin-Vertragserklärung

Der LearnCoin Vertrag erbt von den importierten OpenZeppelin-Verträgen. Das bedeutet, dass es über alle Methoden und Eigenschaften dieser Verträge verfügt.

Rollendeklarationen

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.

Die Konstruktorfunktion

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.

Zusätzliche Funktionen

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.

Überschreibt

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.

Abschluss

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.

Haftungsausschluss
* Kryptoinvestitionen sind mit erheblichen Risiken verbunden. Bitte lassen Sie Vorsicht walten. Der Kurs ist nicht als Anlageberatung gedacht.
* Der Kurs wird von dem Autor erstellt, der Gate Learn beigetreten ist. Vom Autor geteilte Meinungen spiegeln nicht zwangsläufig die Meinung von Gate Learn wider.
Katalog
Lektion 4

Erkundung des LearnCoin-Vertrags

Am Ende dieser Lektion sollten Sie in der Lage sein: 1. Die wichtigsten Teile und Funktionen des LearnCoin-Vertrags zu verstehen. 2. Verstehen Sie die Rolle von OpenZeppelin-Verträgen und -Bibliotheken in unserem Token-Vertrag.

Einführung

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.

Die Vertragsstruktur

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.

Vertragsimporterklärungen

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.

Die LearnCoin-Vertragserklärung

Der LearnCoin Vertrag erbt von den importierten OpenZeppelin-Verträgen. Das bedeutet, dass es über alle Methoden und Eigenschaften dieser Verträge verfügt.

Rollendeklarationen

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.

Die Konstruktorfunktion

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.

Zusätzliche Funktionen

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.

Überschreibt

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.

Abschluss

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.

Haftungsausschluss
* Kryptoinvestitionen sind mit erheblichen Risiken verbunden. Bitte lassen Sie Vorsicht walten. Der Kurs ist nicht als Anlageberatung gedacht.
* Der Kurs wird von dem Autor erstellt, der Gate Learn beigetreten ist. Vom Autor geteilte Meinungen spiegeln nicht zwangsläufig die Meinung von Gate Learn wider.