Moonbeam
July 21, 2021

Interaktion mit Moonbeam bei der Verwendung von Truffle

Den gesamten Code für dieses Tutorial finden Sie auf der Seite mit den Code-Snippets

Einführung

Diese Anleitung führt durch den Prozess der Bereitstellung (deploying) eines Solidity Smart Contracts auf einem Moonbeam-Node mit Truffle, einem häufig verwendeten Entwicklungstool für Smart Contracts auf Ethereum. Truffle kann direkt mit einem Moonbeam-Node verwendet werden.

Hinweis Dieses Tutorial wurde mit dem Tutorial-v7-tag erstellt, das auf der Version v0.7.0 von Moonbase Alpha basiert. Die Moonbeam-Plattform und die Frontier-Komponenten, auf die sie für die Substratbasierte Ethereumkompatibilität angewiesen ist, befinden sich noch in sehr aktiver Entwicklung.

Für diese Anleitung benötigen Sie einen Moonbeam-development node, der im --dev Modus ausgeführt wird. Dazu können Sie entweder die hier beschriebenen Schritte ausführen oder das Moonbeam Truffle-Plugin verwenden, das wir in den Beispielen dieses Tutorials verwenden werden.

Voraussetzungen prüfen

Wir müssen Node.js (wir verwenden v15.x) und den npm Paketmanager installieren. Man kann direkt von Node.js oder in Ihrem Terminal herunterladen:

Ubuntu

curl -sL https://deb.nodesource.com/setup_15.x | sudo -E bash - 
sudo apt install -y nodejs

MacOS

# You can use homebrew (https://docs.brew.sh/Installation) 
brew install node 

# Or you can use nvm (https://github.com/nvm-sh/nvm) 
nvm install node

Wir können überprüfen, ob alles richtig installiert ist, indem wir die Version für jedes Paket abfragen:

 node -v
 npm -v

Darüber hinaus können Sie Truffle wie folgt global installieren:

 npm install -g truffle

Zum Veröffentlichungsdatum dieser Anleitung wurden die Versionen 15.12.0, 7.6.3 bzw. 5.2.4 verwendet.

Hinweis Für die folgenden Beispiele müssen Sie Truffle nicht global installiert haben, da es als Abhängigkeit von der Moonbeam Truffle-Box enthalten ist. Wenn Sie möchten, können Sie anstelle von truffle ,npx truffle oder ./node_modules/.bin/truffleausführen.

Erste Schritte mit Trüffel

Um den Einstieg in Trüffel zu erleichtern, haben wir die Moonbeam Trüffelbox veröffentlicht. Dies bietet ein boilerplate setup, um den Anlaufprozess für die Bereitstellung (deploying) von Contracts auf Moonbeam zu beschleunigen. Um mehr über die Box zu erfahren, können Sie diesen Link folgen.

Um die Moonbeam Trüffelbox herunterzuladen, folgen Sie diese Anweisungen. Schauen wir die Datei truffle-config.js an ( Für die Zwecke dieses Handbuchs wurden einige Informationen entfernt.):

const HDWalletProvider = require('@truffle/hdwallet-provider');
// Moonbeam Development Node Private Key
const privateKeyDev =
   '99B3C12287537E38C90A9219D4CB074A89A16E9CDB20BF85728EBD97C343E342';
//...
module.exports = {
   networks: {
      dev: {
         provider: () => {
            ...
            return new HDWalletProvider(privateKeyDev, 'http://localhost:9933/')
         },
         network_id: 1281,
      },
      //...
   },
   plugins: ['moonbeam-truffle-plugin']
};

Beachten Sie, dass wir den HD-Wallet-Provider von Truffle als Hierarchical Deterministic Wallet verwenden. Außerdem haben wir ein Entwicklungsnetzwerk definiert, das auf die URL des Anbieters des development node verweist, und der private Schlüssel (private key) des Entwicklungskontos (development account), das alle Gelder (all funds) im development node enthält, ist eingeschlossen.

Development Node. Inbetriebnahme

Um einen Moonbeam-development node einzurichten, können Sie diesem Tutorial folgen. Der Vorgang dauert insgesamt etwa 40 Minuten, und Sie müssen Substrate und alle seine Abhängigkeiten installieren. Das Moonbeam Truffle-Plugin ermöglicht, viel schneller mit einem development node zu beginnen. Die einzige Voraussetzung dafür, dass Docker installiert ist (zum Zeitpunkt des Schreibens war die verwendete Docker-Version 19.03.6).

Um einen Moonbeam-development node in Ihrer lokalen Umgebung zu starten, müssen wir zuerst das entsprechende Docker-Image herunterladen:

 truffle run moonbeam install

Nach dem Herunterladen können Sie den lokalen Node mit dem folgenden Befehl starten:

 truffle run moonbeam start

Sie sehen eine Nachricht, dass der Node gestartet wurde, gefolgt von den beiden verfügbaren endpoinds.

Moonbeam-development node stoppen und das Docker-Image entfernen:

truffle run moonbeam stop && \
truffle run moonbeam remove

Die Contract-Datei

In der Trüffelbox ist auch ein ERC-20-Token-Contract enthalten:

pragma solidity ^0.7.5;

// Import OpenZeppelin Contract
import "@openzeppelin/contracts/token/ERC20/ERC20.sol";

// This ERC-20 contract mints the specified amount of tokens to the contract creator.
contract MyToken is ERC20 {
    constructor(uint256 initialSupply) ERC20("MyToken", "MYTOK")
    {
        _mint(msg.sender, initialSupply);
    }
}

Dies ist ein einfacher ERC-20-Contract, der auf dem OpenZepplin ERC-20-Contract basiert. Es erstellt "MyToken" mit dem "MYTOK"-Symbol und den standardmäßigen 18 Dezimalstellen. Darüber hinaus weist es dem Contract-Creator die erstellte Initial-Token-supply (Initial-Token-Lieferung) zu.

Wenn wir uns das Migrationsskript des Truffle-Contracts (Truffle contract migration script) unter migrations/2_deploy_contracts.jsansehen, enthält es Folgendes:

var MyToken = artifacts.require('MyToken');

module.exports = function (deployer) {
   deployer.deploy(MyToken, '8000000000000000000000000');
};

"800000000000000000000000" ist die Anzahl der Token, die am Anfang mit dem Contract geprägt (mint) werden, d. h. 8 Millionen mit 18 Dezimalstellen.

Einen Contract mit Truffle für Moonbeam bereitstellen (deploy)

Bevor wir unsere Contracts einsetzen können, müssen wir sie kompilieren. (Wir sagen "Contracts", weil normale Truffle deployments den Contract Migrations.sol enthalten.) Sie können dies mit dem folgenden Befehl tun:

truffle compile

Bei Erfolg sieht die Ausgabe so aus:

Jetzt sind wir bereit die kompilierten Contracts bereitzustellen (deploy). Dies können Sie mit dem folgenden Befehl tun:

truffle migrate --network dev

Bei Erfolg wird Folgendes angezeigt, einschließlich der Adresse des bereitgestellten Contracts:

Nachdem Sie den MetaMask-Leitfaden und den Remix-Leitfaden befolgt haben, können Sie die Contracts adresse, die zurückgegeben wird, in MetaMask oder Remix eingeben.

Original (engl.)