Hardhat | Ethereum development environment for professionals by Nomic Labs

Esnek. Genişletilebilir. Hızlı.
Profesyoneller için Ethereum geliştirme ortamı

Hardhat Sitesi

Hardhat, Ethereum yazılımınızı derlemek, dağıtmak, test etmek ve hatalarını ayıklamak için bir geliştirme ortamıdır. Geliştiricilerin, akıllı sözleşmeler ve dApp’ler oluşturma sürecinin doğasında bulunan yinelenen görevleri yönetmelerine ve otomatikleştirmelerine yardımcı olurken, bu iş akışı etrafında daha fazla işlevsellik kolayca tanıtıyor. Bu, akıllı sözleşmelerin özünde derlenmesi, çalıştırılması ve test edilmesi anlamına gelir.

Hardhat, geliştirme için tasarlanmış yerel bir Ethereum ağı olan Hardhat Network ile yerleşik olarak gelir. İşlevselliği, yığın izleri, console.log() ve işlemler başarısız olduğunda açık hata mesajları içeren Solidity hata ayıklamasına odaklanır.

Hardhat ile etkileşim için CLI komutu olan Hardhat Runner, genişletilebilir bir görev çalıştırıcıdır. Görevler ve eklentiler kavramları etrafında tasarlanmıştır. CLI’den Hardhat’ı her çalıştırdığınızda, bir görev çalıştırıyorsunuz. Örneğin. npx hardhat compile, yerleşik derleme görevini çalıştırıyor. Görevler, diğer görevleri çağırarak karmaşık iş akışlarının tanımlanmasına olanak tanır. Kullanıcılar ve eklentiler, mevcut görevleri geçersiz kılarak bu iş akışlarını özelleştirilebilir ve genişletilebilir hale getirebilir.

Hardhat’ın pek çok işlevi eklentilerden gelir ve bir geliştirici olarak hangilerini kullanmak istediğinizi seçmekte özgürsünüz. Hardhat, hangi araçları kullanacağınız konusunda fikirsizdir, ancak bazı yerleşik varsayılanlarla birlikte gelir. Bunların tümü geçersiz kılınabilir.

En basit projeye hardhat yükleme komutu bu şekildedir. Aşağıda genel kullanım şeklimize dair detay var.

npm install --save-dev hardhat

Ethereum ile etkileşim kurmak için bir JavaScript kitaplığı olan Ethers.js’yi ve bunun üzerine kurulmuş basit bir akıllı sözleşme test kitaplığı olan Waffle’ı genellikle ön tanımlı gibi yükleme komutu ile kullanıyoruz. Bu, test için Hardhat’in önerdiği bir seçenektir. Bu yüzden projeye hardhat yükleme komutunu şu şekilde kullanırız. Bu komutu çalıştırın.

npm install --save-dev @nomiclabs/hardhat-waffle ethereum-waffle chai @nomiclabs/hardhat-ethers ethers

Yeni bir proje oluşturmak için projenin olduğu klasöre gidin ve npx hardhat komutunu verin.

$ npx hardhat
888    888                      888 888               888
888    888                      888 888               888
888    888                      888 888               888
8888888888  8888b.  888d888 .d88888 88888b.   8888b.  888888
888    888     "88b 888P"  d88" 888 888 "88b     "88b 888
888    888 .d888888 888    888  888 888  888 .d888888 888
888    888 888  888 888    Y88b 888 888  888 888  888 Y88b.
888    888 "Y888888 888     "Y88888 888  888 "Y888888  "Y888

Welcome to Hardhat v2.0.8

? What do you want to do? …
❯ Create a sample project
  Create an advanced sample project
  Create an advanced sample project that uses TypeScript
  Create an empty hardhat.config.js
  Quit

Create a sample project ile hızlı başlangıç yapabilirsin. Devamını kendi dökümanından okuyabilirsin.

Şimdi genellikle kullandığımız ayarlardan ve komutlardan bahsedelim.

Kodu compile etmek için:

npx hardhat compile

Test çalıştırmak için:

 npx hardhat test

Local node u çalıştırmak için:

npx hardhat node

Local ağa kontratımızı deploy etmek için:

npx hardhat run scripts/sample-script.js --network localhost

Örnek bir test ağına deploy etmek için:

npx hardhat run scripts/sample-script.js --network ropsten

Komutlarını kullanabilirsin.

Hardhat.config.js dosyası tüm tanımlamaları ve eklemeleri yapacağın bir dosyadır. Komut verildiğinde config dosyası kendiliğinden oluşur daha sonra düzeltme yapabilirsin.

require("@nomiclabs/hardhat-waffle");
const privateKey = "ağlar için kullandığım Metamask privat key";
// This is a sample Hardhat task. To learn how to create your own go to
// https://hardhat.org/guides/create-task.html
task("accounts", "Prints the list of accounts", async (taskArgs, hre) => {
  const accounts = await hre.ethers.getSigners();

  for (const account of accounts) {
    console.log(account.address);
  }
});

// You need to export an object to set up your config
// Go to https://hardhat.org/config/ to learn more

/**
 * @type import('hardhat/config').HardhatUserConfig
 */
 module.exports = {
  solidity: "0.8.3",
  networks: {
// local ağ için 1337 metamask ın bir bugı
    hardhat: {
      chainId: 1337
    },
// infura apisi için kullandığım örnek url
     mumbai: {
      url: "https://polygon-mumbai.infura.io/v3/XXXXXXX",
      accounts: [privateKey]
    },
// alchemy için kullandığım örnek url
    ropsten: {
      url: "https://eth-ropsten.alchemyapi.io/v2/xxxxxxx",
      accounts: [privateKey]
    },
// binance ın kendi verdiği api url si
    binance: {
      url: "https://data-seed-prebsc-1-s1.binance.org:8545",
      chainId: 97,
      gasPrice: 20000000000,
      accounts: [privateKey]
    },
  }
};