Mit Hardhat auf Moonbeam bauen

Dmytriiev Petro
Moonbeam-DE translations
6 min readJul 29, 2021

Einführung

Hardhat ist eine Ethereum-Entwicklungsumgebung, die den Entwicklern hilft, wiederholte Aufgaben zu verwalten und zu automatisieren, die mit dem Erstellen von Smart Contracts und DApps verbunden sind. Hardhat kann direkt mit der Ethereum-API von Moonbeam interagieren, sodass es auch verwendet werden kann, um Smart Contracts in Moonbeam einzusetzen.

In dieser Anleitung wird beschrieben, wie Sie mit Hardhat Ethereum Smart Contracts im Moonbase Alpha TestNet kompilieren, bereitstellen und debuggen.

Voraussetzungen prüfen

Wir müssen Node.js (wir verwenden v15.x) und den npm-Paketmanager installieren. Sie können es direkt von Node.js oder in Ihrem Terminal herunterladen:

Ubunutu

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

Bei der erstellung dieser Anleitung wurden die Versionen 15.7.0 bzw. 7.4.3. verwendet.

Außerdem benötigen Sie Folgendes:

Sobald alle Anforderungen erfüllt sind, können Sie mit Hardhat bauen.

Ein Projekt mit Hardhat starten

Um ein neues Projekt zu starten, erstellen Sie ein Verzeichnis dafür:

mkdir hardhat && cd hardhat

Then, initialize the project by running:

npm init -y

Sie werden eine neu erstellte package.json sehen, die mit der Installation von Projektnotwendigkeiten wachsen wird.

Um mit Hardhat zu beginnen, installieren wir es in unserem neu erstellten Projektverzeichnis:

npm install hardhat

Führen Sie nach der Installation Folgendes aus:

npx hardhat

Dadurch wird eine Hardhat-Konfigurationsdatei (hardhat.config.js) in unserem Projektverzeichnis erstellt.

Hinweis

npx wird verwendet, um ausführbare Dateien laufen zu lassen, die lokal in Ihrem Projekt installiert sind. Obwohl Hardhat global installiert werden kann, empfehlen wir die lokale Installation in jedem Projekt, damit Sie die Version projektbezogen steuern können.

Nachdem Sie den Befehl ausgeführt haben, wählen Sie Create a empty hardhat.config.js:

Die Contract Datei

Wir werden unseren Vertrag im Vertragsverzeichnis speichern. Erstelle es:

mkdir contracts && cd contracts

Der Smart Contract, den wir als Beispiel bereitstellen, heißt Box: Er ermöglicht es den Benutzern, einen Wert zu speichern, der später abgerufen werden kann.

Wir speichern diese Datei als Contracts/Box.sol:

// contracts/Box.sol

pragma solidity ^0.8.1;

contract Box {

uint256 private value;

// Emitted when the stored value changes

event ValueChanged(uint256 newValue);

// Stores a new value in the contract

function store(uint256 newValue) public {

value = newValue;

emit ValueChanged(newValue);

}

// Reads the last stored value

function retrieve() public view returns (uint256) {

return value;

}

}

Hardhat Konfigurationsdatei

Lassen Sie uns unsere Hardhat-Konfigurationsdatei ändern, damit wir diesen Vertrag kompilieren und für Moonbase Alpha bereitstellen können.

Wenn Sie dies noch nicht getan haben, erstellen Sie einen MetaMask-Account, verbinden Sie sich mit Moonbase Alpha und füllen Sie es über Mission Control auf. Wir verwenden den privaten Schlüssel des erstellten Kontos, um den Vertrag bereitzustellen.

Wir beginnen damit, dass wir das Ethers-Plugin benötigen, das das Verzeichnis [ethers.js][/integrations/ethers/] enthält, mit der Sie auf einfache Weise mit der Blockchain interagieren können. Wir können das Ether-Plugin installieren, indem wir Folgendes ausführen:

npm install @nomiclabs/hardhat-ethers ethers

Als nächstes importieren wir den privaten Schlüssel, den wir von MetaMask abgerufen haben, und speichern ihn in einer .json-Datei.

Hinweis

Bitte verwalten Sie Ihre privaten Schlüssel immer mit einem dafür vorgesehenen Geheimverwalter oder einem ähnlichen Dienst. Speichern oder übertragen Sie Ihre privaten Schlüssel niemals in Ihren Repositorys.

Innerhalb der module.exports müssen wir die Solidity-Version (0.8.1 gemäß unserer Vertragsdatei) und die Netzwerkdetails bereitstellen:

Wenn Sie auf ein lokalen Moonbeam-Entwicklungsknoten nutzen möchten, können Sie die folgenden Netzwerkdetails verwenden:

Die Hardhat-Konfigurationsdatei sollte wie folgt aussehen:

// ethers plugin required to interact with the contract

require(‘@nomiclabs/hardhat-ethers’);

// private key from the pre-funded Moonbase Alpha testing account

const { privateKey } = require(‘./secrets.json’);

module.exports = {

// latest Solidity version

solidity: “0.8.1”,

networks: {

// Moonbase Alpha network specification

moonbase: {

url: `https://rpc.testnet.moonbeam.network`,

chainId: 1287,

accounts: [privateKey]

}

}

};

Als Nächstes erstellen wir eine secrets.json, in der der zuvor erwähnte private Schlüssel gespeichert ist. Stellen Sie sicher, dass Sie die Datei zur .gitignore Ihres Projekts hinzufügen und niemals Ihren privaten Schlüssel weitergeben. Die Datei secrets.json muss einen privateKey-Eintrag enthalten, zum Beispiel:

{

“privateKey”: “YOUR-PRIVATE-KEY-HERE”

}

Glückwünsche! Wir sind einsatzbereit!

Kompilieren von Solidity

Unser Vertrag Box.sol verwendet Solidity 0.8.1. Stellen Sie sicher, dass die Hardhat-Konfigurationsdatei mit dieser Solidity-Version korrekt eingerichtet ist. Wenn ja, können wir den Vertrag kompilieren, indem wir Folgendes ausführen:

npx hardhat compile

Nach der Kompilierung wird ein artifact verzeichnis erstellt: Es enthält den Bytecode und die Metadaten des Vertrags, bei denen es sich um .json-Dateien handelt. Es ist eine gute Idee, dieses Verzeichnis zu Ihrer .gitignore hinzuzufügen.

Bereitstellung des Vertrags

Um den Box Smart Contract bereitzustellen, müssen wir ein einfaches Bereitstellungsskript schreiben. Zuerst erstellen wir ein neues Verzeichnis (scripts). Fügen Sie im neu erstellten Verzeichnis eine neue Datei deploy.js hinzu.

mkdir scripts && cd scripts

touch deploy.js

Als nächstes müssen wir unser Bereitstellungsskript mit Ethern schreiben. Da wir es mit Hardhat ausführen werden, müssen wir keine Bibliotheken importieren. Das Skript ist eine vereinfachte Version des in diesem Tutorial verwendeten Skripts.

Wir beginnen damit, eine lokale Instanz des Vertrags mit der Methode getContractFactory() zu erstellen. Als Nächstes verwenden wir die in dieser Instanz vorhandene Methode deploy(), um den Smart Contract zu initiieren. Schließlich warten wir auf die Bereitstellung mit deploy(). Nach der Bereitstellung können wir die Adresse des Vertrags in der Box-Instanziierung abrufen.

// scripts/deploy.js

async function main() {

// We get the contract to deploy

const Box = await ethers.getContractFactory(‘Box’);

console.log(‘Deploying Box…’);

// Instantiating a new Box smart contract

const box = await Box.deploy();

// Waiting for the deployment to resolve

await box.deployed();

console.log(‘Box deployed to:’, box.address);

}

main()

.then(() => process.exit(0))

.catch((error) => {

console.error(error);

process.exit(1);

});

Mit dem run-Befehl können wir nun den Box-Vertrag auf Moonbase Alpha bereitstellen:

npx hardhat run — network moonbase scripts/deploy.js

Hinweis

To deploy to a Moonbeam development node, replace moonbase for dev in the run command.

Nach wenigen Sekunden wird der Vertrag bereitgestellt und Sie sollten die Adresse im Terminal sehen.

Glückwunsch, Ihr Vertrag ist live! Speichern Sie die Adresse, da wir sie im nächsten Schritt für die Interaktion mit dieser Vertragsinstanz verwenden werden.

Interaktion mit dem Vertrag

Lassen Sie uns Hardhat verwenden, um mit unserem neuen Vertrag in Moonbase Alpha zu interagieren. Starten Sie dazu die Hardhat-Konsole, indem Sie Folgendes ausführen:

npx hardhat console — network moonbase

Hinweis

Um auf einem Moonbeam-Entwicklungsknoten bereitzustellen, ersetzen Sie moonbase für dev im Konsolenbefehl.

Fügen Sie dann die folgenden Codezeilen Zeile für Zeile hinzu. Zuerst erstellen wir erneut eine lokale Instanz des Box.solcontract. Machen Sie sich keine Sorgen über die undefined Ausgabe, die Sie nach der Ausführung jeder Zeile erhalten:

const Box = await ethers.getContractFactory(‘Box’);

Als Nächstes verbinden wir diese Instanz mit einer vorhandenen, indem wir die Adresse übergeben, die wir bei der Bereitstellung des Vertrags erhalten haben:

const box = await Box.attach(‘0x425668350bD782D80D457d5F9bc7782A24B8c2ef’);

Nach dem Anhängen an den Vertrag sind wir bereit, damit zu interagieren. Während die Konsole noch in der Sitzung ist, rufen wir die Store-Methode auf und speichern einen einfachen Wert:

await box.store(5)

Die Transaktion wird von Ihrem Moonbase-Account signiert und an das Netzwerk gesendet. Die Ausgabe sollte ungefähr so ​​aussehen:

Notieren Sie sich Ihre Adresse from, die Adresse des Vertrages und die data die übertragen wird. Lassen Sie uns nun den Wert abrufen, indem Sie Folgendes ausführen:

(await box.retrieve()).toNumber()

Wir sollten 5 oder den Wert sehen, den Sie ursprünglich gespeichert haben.

Glückwunsch, Sie haben das Hardhat Tutorial abgeschlossen! 🤯 🎉

Weitere Informationen zu Hardhat, Hardhat-Plugins und anderen spannenden Funktionen finden Sie unter hardhat.org.

Original article: https://docs.moonbeam.network/integrations/hardhat/

--

--