Hardhat vs. Foundry: Das richtige Ethereum-Entwicklungstool wählen

Hier sind einige Punkte, die bei der Wahl zwischen Hardhat und Foundry zu beachten sind.

5 Min. Lesezeit
Hardhat vs. Foundry: Das richtige Ethereum-Entwicklungstool wählen

Die Wahl der richtigen Tools für deine Dapp-Entwicklung wirkt sich nicht nur auf die Produktivität aus, sondern beeinflusst auch die Effektivität beim Testen, Deployen und Warten von Smart Contracts. In diesem Blog vergleichen wir zwei beliebte Optionen unter Ethereum-Dapp-Entwicklern: Foundry und Hardhat – mit Fokus auf Installationsanforderungen, Test- und Deployment-Workflows sowie spezifische technische Aspekte und Einschränkungen.

Über Hardhat

Hardhat ist eine etablierte Entwicklungsumgebung, die Entwicklern dabei helfen soll, Aufgaben rund um die Smart-Contract-Entwicklung zu verwalten und zu automatisieren. Sie ist bekannt für ihre Flexibilität und Anpassungsfähigkeit. Hardhat verfügt über das Hardhat Network, ein lokales Ethereum-Netzwerk für die Entwicklung, das einfaches Testen, Deployen und Debuggen ermöglicht.

Entwickler können über eine interaktive Konsole direkt mit Smart Contracts interagieren, die im Hardhat Network deployed sind – das bietet eine umfassende lokale Umgebung, die speziell auf Entwicklungsaufgaben zugeschnitten ist. Hardhat unterstützt außerdem ein robustes Plugin-Ökosystem, mit dem Entwickler die Funktionalität problemlos erweitern können. Allerdings empfinden manche Nutzer das initiale Setup und die Konfiguration von Hardhat als komplex.

Über Foundry

Foundry hingegen ist ein vergleichsweise neues Entwicklungs-Toolkit, das Geschwindigkeit und Zuverlässigkeit in den Vordergrund stellt. Es basiert auf Forge, einem leistungsstarken Testing-Framework, das Entwicklern ermöglicht, Smart Contracts effizient zu schreiben, zu kompilieren und zu testen. Eines der Hauptmerkmale von Foundry sind seine schnellen Testing-Fähigkeiten: Das Forge-Testing-Framework beschleunigt die Testausführungszeiten erheblich und ermöglicht schnellere Iterationszyklen.

Darüber hinaus enthält Foundry native Debugging-Tools, mit denen Entwickler Probleme direkt in der Umgebung diagnostizieren und beheben können. Foundry lässt sich außerdem nahtlos in andere Tools des Ethereum-Ökosystems integrieren und ermöglicht so einen schlankeren Entwicklungsprozess. Da Foundry jedoch noch relativ neu ist, fehlt möglicherweise die umfangreiche Community-Unterstützung, die etablierteren Tools zur Verfügung steht.

Technischer Vergleich von Hardhat und Foundry

Für diesen Abschnitt verwenden wir einen einfachen Smart Contract zur Berechnung einer zufälligen Summe. Dieser Smart Contract bleibt für Hardhat und Foundry identisch, das Projekt-Setup unterscheidet sich jedoch geringfügig zwischen den beiden Frameworks.

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

contract RandomSum {
    // Function to generate a pseudo-random number based on input
    function random(uint seed) private view returns (uint) {
        return uint(keccak256(abi.encodePacked(block.timestamp, msg.sender, seed))) % 100;
    }

    // Function to generate two random numbers and return their sum
    function generateSum() public view returns (uint sum) {
        uint num1 = random(1);
        uint num2 = random(2);
        sum = num1 + num2;
    }
}
Kopieren

Installation:

Hardhat:

Um Hardhat zu verwenden, muss Node.js auf deinem Rechner installiert sein. Sobald das erledigt ist, kannst du ein neues Hardhat-Projekt mit folgenden Schritten erstellen:

  1. Neues Node.js-Projekt initialisieren:

mkdir randomsum
cd randomsum
npm init -y
Kopieren
  1. Hardhat installieren:

npm install --save-dev hardhat
  1. Hardhat-Projekt erstellen:

npx hardhat
  1. Folge den Anweisungen, um ein Basisprojekt zu erstellen. Wähle „Create an empty hardhat.config.js" für ein minimales Setup. Entscheide dich für die Erstellung eines Beispielprojekts. Damit wird eine Hardhat-Umgebung mit allen notwendigen Konfigurationen eingerichtet.

Contract: Lege deinen RandomSum-Contract im Ordner contracts ab.

Foundry

Foundry verwendet Rust, daher muss Rust auf deinem System installiert sein. Sobald Rust bereit ist, kannst du Foundry durch folgenden Befehl installieren:

  1. Foundry installieren:

curl -L <https://foundry.paradigm.xyz> | bash
foundryup
Kopieren
  1. Neues Foundry-Projekt initialisieren:

forge init randomsum-foundry
cd randomsum-foundry
Kopieren

Contract: Lege deinen RandomSum-Contract im Verzeichnis src ab.

Lokales Blockchain-Deployment

Hardhat

  • Lokale Blockchain: Verwende das Hardhat Network, das automatisch gestartet wird, wenn du Aufgaben wie das Testen oder Deployen von Contracts ausführst.

  • Deployment-Skript: Erstelle ein Skript unter scripts/deploy.js:

async function main() {
    const RandomSum = await ethers.getContractFactory("RandomSum");
    const randomSum = await RandomSum.deploy();
    await randomSum.deployed();
    console.log("RandomSum deployed successfully:");
}

main().catch((error) => {
    console.error(error);
    process.exit(1);
});
Kopieren
  • Deployment ausführen: Führe das Deployment mit folgendem Befehl aus:

npx hardhat run scripts/deploy.js --network localhost

Foundry

  • Lokale Blockchain: Foundry verwendet Anvil, einen lokalen Ethereum-Node. Starte diesen in einem separaten Terminal, um deinen lokalen Node zu starten.

anvil
  • Deployment-Skript: Verwende den Befehl forge create direkt:

forge create RandomSum --private-key YOUR_PRIVATE_KEY --rpc-url

Deployment auf Live-Testnets

Hardhat

  • Netzwerkkonfiguration: Konfiguriere das gewünschte Netzwerk in hardhat.config.js und füge einen Abschnitt für die Netzwerkeinstellungen hinzu (z. B. Sepolia).

module.exports = {
  solidity: "0.8.0",
  networks: {
    sepolia: {
      url: "https://linea-sepolia.infura.io/v3/YOUR_INFURA_KEY",
      accounts: [`0x${process.env.PRIVATE_KEY}`]
    }
  }
};
Kopieren
  • Deployment: Führe dasselbe Deployment-Skript aus, wobei die Netzwerkoption auf Sepolia geändert wird.

Foundry

  • Netzwerkkonfiguration: Es ist keine zusätzliche Konfigurationsdatei erforderlich; das Netzwerk wird direkt im Befehl angegeben.

  • Deployment: Verwende:

forge create RandomSum --private-key YOUR_PRIVATE_KEY --rpc-url

Smart-Contract-Testing

Hardhat

  • Tests schreiben: Erstelle eine Testdatei in test/randomSum.js mit JavaScript:

const { expect } = require("chai");

describe("RandomSum", function() {
  it("Should return the sum of two random numbers", async function() {
    const RandomSum = await ethers.getContractFactory("RandomSum");
    const randomSum = await RandomSum.deploy();
    await randomSum.deployed();

    const sum = await randomSum.generateSum();
    expect(sum).to.be.a('number');
  });
});
Kopieren
  • Tests ausführen: Ausführen mit:

npx hardhat test

Falls beim Testen Probleme auftreten, füge einfach die Funktion loadFixture aus @nomicfoundation/hardhat-toolbox/network-helpers hinzu.

Die wichtigsten Vorteile der Verwendung von loadFixture sind:

  • Es richtet für jeden Test eine saubere Umgebung ein, indem es zu einem Snapshot zurückkehrt.

  • Es ist effizienter als das erneute Deployen von Contracts für jeden Test.

  • Es ermöglicht die gemeinsame Nutzung von Setup-Code über mehrere Tests hinweg.

Foundry

  • Tests schreiben: Füge eine Testdatei in test/RandomSum.t.sol mit Solidity hinzu:

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import "ds-test/test.sol";
import "../src/RandomSum.sol";

contract RandomSumTest is DSTest {
  RandomSum randomSum;

  function setUp() public {
    randomSum = new RandomSum();
  }

  function testGenerateSum() public {
    uint sum = randomSum.generateSum();
    assertTrue(sum >= 0 && sum <= 198); // since each random number is <100
  }
}
Kopieren
  • Tests ausführen: Verwende:

forge test

Fazit

Die Entscheidung zwischen Hardhat und Foundry hängt häufig von den Kenntnissen des Teams und den spezifischen Anforderungen des Projekts ab. Wenn das Team mit JavaScript vertraut ist und eine umfangreiche Integration mit Web-Technologien benötigt, könnte Hardhat die bessere Wahl sein. Sein robustes Plugin-Ökosystem und die flexible Umgebung machen es ideal für Projekte, die ein hohes Maß an Anpassung und Interaktion mit verschiedenen Web-Technologien erfordern.

Wenn das Projekt hingegen schnelle Entwicklungszyklen mit einem klaren Fokus auf Smart Contracts erfordert, bietet Foundry eine attraktive und effiziente Option, die alles innerhalb des Solidity-Ökosystems hält. Seine Geschwindigkeit und die native Unterstützung für Solidity können die Produktivität von Teams, die sich auf die Smart-Contract-Entwicklung konzentrieren, erheblich steigern.

Letztendlich haben beide Tools ihre Stärken, und die richtige Wahl hängt von den individuellen Anforderungen deines Projekts und der Expertise deines Teams ab.

KI-übersetzt. Kann Fehler enthalten. Bitte überprüfen Sie die Informationen stets.

Bewerten Sie die Übersetzung