Interaktion mit Moonbeam bei der Verwendung von Truffle
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/truffle
ausfü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.js
ansehen, 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.