Übung: Schreiben eines ERC20-Tokenvertrags

Abgeschlossen

Nachdem Sie nun ein grundlegendes Projekt eingerichtet haben, erstellen Sie einen neuen Tokenvertrag mithilfe des ERC20-Tokenstandards von OpenZeppelin.

Erstellen des neuen Tokenvertrags

Sie werden nun einen Tokenvertrag erstellen, um Miner für das Erstellen neuer Blöcke in der Blockchain zu belohnen.

Öffnen Sie zunächst das Projekt Token20 in Visual Studio Code. Wenn das Projekt geöffnet ist, klicken Sie im Explorer mit der rechten Maustaste auf den Ordner contracts (Verträge) und dann mit der linken auf Neue Datei. Speichern Sie ERC20MinerReward.sol als Dateinamen. Kopieren Sie den folgenden Code in diesen Vertrag:

// SPDX-License-Identifier: MIT
pragma solidity >=0.4.22;

import "@openzeppelin/contracts/token/ERC20/ERC20.sol";

contract ERC20MinerReward is ERC20 {

    event LogNewAlert(string description, address indexed _from, uint256 _n);

    constructor() public ERC20("MinerReward", "MRW") {}

    function _reward() public {
        _mint(block.coinbase, 20);
        emit LogNewAlert('_rewarded', block.coinbase, block.number);
    }
}

Grundlegendes zum Code

Nachstehend werden die einzelnen Teile dieses Vertrags genauer erläutert.

Zuerst importieren Sie den OpenZeppelin-Vertrag, der nach der pragma-Anweisung verwendet werden soll. Die Zeichenfolge import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; ermöglicht es dem Vertrag, die ERC20-Vertragsdefinition zu finden, die in Ihrem eigenen Vertrag verwendet werden soll.

Anschließend definieren Sie ein Ereignis namens LogNewAlert, das später im Vertrag ausgegeben oder aufgerufen wird.

Der Konstruktor definiert mithilfe des Symbols MRWein neues ERC20-Token namens MinerReward. Wenn ein Vertrag erstellt wird, wird dieses neue Token generiert.

Wenn die reward-Funktion aufgerufen wird, empfängt der Miner des aktuellen Blocks, block.coinbase, 20 MRW-Token für das Mining dieses Blocks, und es wird ein Ereignis ausgegeben.

Erstellen des Vertrags

Nachdem Sie die Vertragsdatei gespeichert haben, sind Sie bereit, den Vertrag zu erstellen. Hierfür werden Sie die Ganache-CLI als persönliche Entwicklungsblockchain verwenden. Für das Ausführen des Builds verwenden Sie Truffle.

  1. Öffnen Sie die Datei truffle-config.js, und suchen Sie nach der Zeile solc.
  2. Vergewissern Sie sich im Abschnitt solc, dass der Wert für die Version 0.8.11 oder höher ist. Diese Versionsnummer ist erforderlich, weil die OpenZeppelin-Verträge die pragma-Anweisung als pragma solidity ^0.8.0; angeben.
  3. Speichern Sie die Datei .
  4. Klicken Sie in Visual Studio Code auf Terminal>Neues Terminal, um ein Terminalfenster zu öffnen.
  5. Geben Sie ganache-cli in das Terminal ein, um die Ganache-CLI zu starten. Informationen zu etwa 10 Konten werden für Tests generiert, gefolgt von den privaten Schlüsseln der Konten und anderen Metadaten zum Entwicklungsserver. In der letzten Zeile wird angezeigt, dass ganache-cli an 127.0.0.1:8545 lauscht, dem Standardport, der in der Datei „truffle-config.js“ definiert ist.
  6. Klicken Sie mit der rechten Maustaste in das Terminalfenster und dann mit der linken auf Neues Terminal.
  7. Geben Sie in das neue Terminalfenster truffle build ein.

In Ihrem Terminalfenster sollten Compilermeldungen ähnlich der folgenden Ausgabe angezeigt werden:

$ truffle build
No build configuration found. Preparing to compile contracts.

Compiling your contracts...
===========================
√ Fetching solc version list from solc-bin. Attempt #1
√ Downloading compiler. Attempt #1.
> Compiling @openzeppelin\contracts\token\ERC20\ERC20.sol
> Compiling @openzeppelin\contracts\token\ERC20\IERC20.sol
> Compiling @openzeppelin\contracts\token\ERC20\extensions\IERC20Metadata.sol
> Compiling @openzeppelin\contracts\utils\Context.sol
> Compiling .\contracts\ERC20MinerReward.sol
> Compiling .\contracts\Migrations.sol
> Artifacts written to /Users/username/Projects/Token20/build/contracts
> Compiled successfully using:
   - solc: 0.8.11+commit.d7f03943.Emscripten.clang

Beachten Sie, dass zusätzlich zu den Verträgen, die im Vertragsordner definiert sind, auch die Verträge in @openzeppelin/contracts kompiliert werden. Stellen Sie sicher, dass der Build erfolgreich abgeschlossen wird, bevor Sie fortfahren.

Zusammenfassung

Bei diesem Beispiel handelt es sich um eine einfache und unkomplizierte Implementierung eines ERC20-Tokens. Es veranschaulicht, wie einfach das Schreiben eigener Tokenverträge ist, die Funktionen und Ereignisse von einem definierten ERC-Tokenstandard erben.

Es ist wichtig, im Hinterkopf zu behalten, dass der Begriff Token eine Metapher ist. Er bezieht sich auf Assets oder Zugriffsrechte, die gemeinschaftlich von einem Computer- oder Blockchainnetzwerk verwaltet werden. Token sind ein wichtiges Element, das Sie in Ihr Blockchainnetzwerk integrieren sollten.

Wenn Sie sich mit Token vertraut machen möchten, sollten Sie sich auch die anderen Tokenverträge ansehen, die über OpenZeppelin verfügbar sind. Außerdem können Sie versuchen, eigene Tokenverträge zu erstellen.