Hardhat ve Foundry: Doğru Ethereum Geliştirme Aracını Seçmek

Hardhat ve Foundry arasında seçim yaparken göz önünde bulundurulması gereken bazı noktalar.

5 dk okuma
Hardhat ve Foundry: Doğru Ethereum Geliştirme Aracını Seçmek

Dapp geliştirme süreciniz için doğru araçları seçmek yalnızca verimliliği etkilemekle kalmaz, aynı zamanda akıllı sözleşmelerin test edilmesi, dağıtılması ve bakımının etkinliğini de doğrudan etkiler. Bu blog yazısında, Ethereum dapp geliştiricileri arasında popüler iki seçeneği karşılaştırıyoruz: Foundry ve Hardhat. Kurulum gereksinimleri, test ve dağıtım iş akışları ile belirli teknik özellikler ve sınırlamalar açısından her ikisini de inceliyoruz.

Hardhat Hakkında

Hardhat, geliştiricilerin akıllı sözleşme geliştirme sürecindeki görevleri yönetmesine ve otomatikleştirmesine yardımcı olmak için tasarlanmış, köklü bir geliştirme ortamıdır. Esnek ve uyarlanabilir yapısıyla tanınır. Hardhat, geliştirme amacıyla tasarlanmış yerel bir Ethereum ağı olan Hardhat Network'ü bünyesinde barındırır; bu ağ sayesinde test etme, dağıtım ve hata ayıklama işlemleri kolaylıkla gerçekleştirilebilir.

Geliştiriciler, etkileşimli bir konsol aracılığıyla Hardhat Network üzerinde dağıtılan akıllı sözleşmelerle doğrudan etkileşime girebilir; bu da geliştirme görevlerine özel kapsamlı bir yerel ortam sunar. Hardhat ayrıca güçlü bir eklenti ekosistemine sahip olup geliştiricilerin yeteneklerini kolayca genişletmesine olanak tanır. Ancak bazı kullanıcılar, Hardhat'ın ilk kurulum ve yapılandırma sürecini karmaşık bulabilir.

Foundry Hakkında

Öte yandan Foundry, hız ve güvenilirliği ön plana çıkaran görece yeni bir geliştirme araç setidir. Geliştiricilerin akıllı sözleşmeleri verimli biçimde yazmasına, derlemesine ve test etmesine olanak tanıyan güçlü bir test çerçevesi olan Forge üzerine inşa edilmiştir. Foundry'nin öne çıkan özelliklerinden biri, hızlı test kapasitesidir; Forge test çerçevesi, test yürütme sürelerini önemli ölçüde kısaltarak geliştiricilerin daha hızlı iterasyon yapmasını sağlar.

Bunun yanı sıra Foundry, geliştiricilerin sorunları doğrudan ortam içinde tespit edip çözmesine yardımcı olan yerel hata ayıklama araçlarını da içerir. Foundry, Ethereum ekosistemindeki diğer araçlarla sorunsuz biçimde entegre olarak daha akıcı bir geliştirme süreci sunar. Ancak görece yeni bir araç olması nedeniyle Foundry, daha köklü araçların sahip olduğu kapsamlı topluluk desteğinden yoksun kalabilir.

Hardhat ve Foundry'nin Teknik Karşılaştırması

Bu bölümde temel bir rastgele toplam akıllı sözleşmesi kullanacağız. Bu akıllı sözleşme hem Hardhat hem de Foundry için aynı kalacak; ancak proje kurulumu iki çerçeve arasında küçük farklılıklar gösterecektir.

// 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;
    }
}
Kopyala

Kurulum:

Hardhat:

Hardhat'ı kullanmaya başlamak için makinenizde Node.js'in kurulu olması gerekir. Kurulum tamamlandıktan sonra aşağıdaki adımları izleyerek yeni bir Hardhat projesi oluşturabilirsiniz:

  1. Yeni bir Node.js projesi başlatın:

mkdir randomsum
cd randomsum
npm init -y
Kopyala
  1. Hardhat'ı yükleyin:

npm install --save-dev hardhat
  1. Bir Hardhat projesi oluşturun:

npx hardhat
  1. Temel bir proje oluşturmak için yönergeleri izleyin. Sade bir kurulum için "Create an empty hardhat.config.js" seçeneğini belirleyin. Örnek bir proje oluşturmayı seçin. Bu işlem, gerekli tüm yapılandırmaları içeren bir Hardhat ortamı kurar.

Sözleşme: RandomSum sözleşmenizi contracts klasörüne yerleştirin.

Foundry

Foundry, Rust kullandığından sisteminizde Rust'ın kurulu olması gerekir. Rust hazır olduğunda aşağıdaki komutu çalıştırarak Foundry'yi yükleyebilirsiniz:

  1. Foundry'yi yükleyin:

curl -L <https://foundry.paradigm.xyz> | bash
foundryup
Kopyala
  1. Yeni bir Foundry projesi başlatın:

forge init randomsum-foundry
cd randomsum-foundry
Kopyala

Sözleşme: RandomSum sözleşmenizi src dizinine yerleştirin.

Yerel Blockchain Dağıtımı

Hardhat

  • Yerel blockchain: Test veya sözleşme dağıtımı gibi görevleri gerçekleştirdiğinizde otomatik olarak çalışan Hardhat Network'ü kullanın.

  • Dağıtım betiği: scripts/deploy.js altında bir betik oluşturun:

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);
});
Kopyala
  • Dağıtımı çalıştırın: Dağıtımı şu komutla gerçekleştirin:

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

Foundry

  • Yerel blockchain: Foundry, yerel bir Ethereum düğümü olan anvil'i kullanır. Yerel düğümünüzü başlatmak için bunu ayrı bir terminalde çalıştırın.

anvil
  • Dağıtım betiği: forge create komutunu doğrudan kullanın:

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

Canlı Testnet Dağıtımı

Hardhat

  • Ağ yapılandırması: İstediğiniz ağı hardhat.config.js dosyasında yapılandırın; ağ ayarları için bir bölüm ekleyin (örn. 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}`]
    }
  }
};
Kopyala
  • Dağıtım: Ağ seçeneğini Sepolia olarak değiştirerek aynı dağıtım betiğini çalıştırın.

Foundry

  • Ağ yapılandırması: Ek bir yapılandırma dosyasına gerek yoktur; ağı doğrudan komutta belirtin.

  • Dağıtım: Şunu kullanın:

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

Akıllı Sözleşme Testi

Hardhat

  • Test yazın: JavaScript kullanarak test/randomSum.js dosyasında bir test dosyası oluşturun:

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');
  });
});
Kopyala
  • Testleri çalıştırın: Şu komutla çalıştırın:

npx hardhat test

Test sırasında sorunlarla karşılaşırsanız @nomicfoundation/hardhat-toolbox/network-helpers paketinden loadFixture fonksiyonunu eklemeniz yeterlidir.

loadFixture kullanmanın temel avantajları şunlardır:

  • Bir anlık görüntüye geri dönerek her test için temiz bir ortam oluşturur.

  • Her test için sözleşmeleri yeniden dağıtmaktan daha verimlidir.

  • Kurulum kodunu birden fazla test arasında paylaşmanıza olanak tanır.

Foundry

  • Test yazın: Solidity kullanarak test/RandomSum.t.sol dosyasına bir test dosyası ekleyin:

// 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
  }
}
Kopyala
  • Testleri çalıştırın: Şunu kullanın:

forge test

Sonuç

Hardhat ile Foundry arasındaki tercih çoğunlukla ekibin yetkinliklerine ve projenin özel gereksinimlerine bağlıdır. Ekip JavaScript konusunda deneyimliyse ve web teknolojileriyle kapsamlı entegrasyon gerektiriyorsa Hardhat daha uygun bir seçenek olabilir. Güçlü eklenti ekosistemi ve esnek ortamı sayesinde yüksek düzeyde özelleştirme ve çeşitli web teknolojileriyle etkileşim gerektiren projeler için idealdir.

Öte yandan proje, yalnızca akıllı sözleşmelere odaklanan hızlı geliştirme döngüleri gerektiriyorsa Foundry, her şeyi Solidity ekosistemi içinde tutan cazip ve verimli bir seçenek sunar. Hızı ve Solidity için yerel desteği, akıllı sözleşme geliştirmeye odaklanan ekiplerin verimliliğini önemli ölçüde artırabilir.

Sonuç olarak her iki aracın da güçlü yönleri bulunmaktadır; doğru seçim, projenizin özgün gereksinimlerine ve ekibinizin uzmanlığına bağlıdır.

Yapay zeka tarafından çevrildi. Hatalar içerebilir. Lütfen her zaman bilgileri doğrulayın.

Çeviriyi değerlendir