Hardhat ile Akıllı Sözleşme Konuşlandırma
Ön Koşullar
Node v18+ Bu rehberin takip edilebilmesi için Node'un 18+ versiyonunun yüklü olması gerekmektedir.
Node v18+ İndir
Node versiyonlarınızı nvm ile yönetiyorsanız, sadece nvm install 18
komutunu çalıştırmanız yeterlidir.
Cüzdan Bakiyesi Blockchain'e sözleşme konuşlandırmak gaz ücreti gerektirir. Bu nedenle, gaz ücretlerini karşılayacak kadar ETH ile cüzdanınızı fonlamanız gerekecektir.
Bu rehber için, bir sözleşmeyi Lisk Sepolia Testnet'e konuşlandırıyor olacaksınız.
Gerekli tokenleri yatırmak için Lisk Köprüsü'nü kullanabilirsiniz.
Cüzdanınızda yeterli SepoliaETH bulunmuyorsa, Ethereum Sepolia Testnet için mevcut musluklardan birini, örneğin https://sepoliafaucet.com adresini kullanarak ücretsiz Testnet ETH alabilirsiniz. Ardından, bahsedilen Lisk Köprüsü'nü kullanarak tokenleri Ethereum Sepolia Testnet'ten Lisk Sepolia Testnet'e gönderin.
Bir Proje Oluşturma
Lisk'e akıllı sözleşmeler konuşlandırmaya başlamadan önce, bir Node.js projesi oluşturarak geliştirme ortamınızı kurmanız gerekmektedir.
Yeni bir Node.js projesi oluşturmak için, şu komutu çalıştırın:
npm init -y
Daha sonra, Hardhat'ı yüklemeniz ve yeni bir Hardhat projesi oluşturmanız gerekecektir.
Hardhat'ı yüklemek için, şu komutu çalıştırın:
npm install --save-dev hardhat
Yeni bir Hardhat projesi oluşturmak için, şu komutu çalıştırın:
npx hardhat
TypeScript projesi oluştur'u seçin ve proje kökünü onaylamak için Enter'a basın.
.gitignore eklemek ve örnek projeyi yüklemek için her iki seçenekte de y'yi seçin. İsteğe bağlı olarak, HardHat ile anonim çökme raporları ve temel kullanım verilerini paylaşmayı seçebilirsiniz.
✔ What do you want to do? · Create a TypeScript project
✔ Hardhat project root: · /Users/lisk/git/hardhat-test
✔ Do you want to add a .gitignore? (Y/n) · y
✔ Help us improve Hardhat with anonymous crash reports & basic usage data? (Y/n) · y
✔ Do you want to install this sample project's dependencies with npm (@nomicfoundation/hardhat-toolbox)? (Y/n) · y
Proje kurulum sürecinin tamamlanması biraz zaman alacaktır.
Hardhat'ı Lisk ile Yapılandırma
Lisk ağına akıllı sözleşmeler konuşlandırabilmek için, Hardhat projenizi yapılandırmanız ve Lisk ağını eklemeniz gerekecektir.
Bu örnek, WALLET_KEY çevre değişkenini bir .env dosyasından process.env.WALLET_KEY'e yüklemek için dotenv kullanır. Kaynak kodunuzda özel anahtarlarınızı sabit kodlamaktan kaçınmak için benzer bir yöntem kullanmalısınız.
npm install --save-dev dotenv
Dotenv yükledikten sonra, aşağıdaki içeriğe sahip bir .env dosyası oluşturun:
WALLET_KEY=<YOUR_PRIVATE_KEY>
<YOUR_PRIVATE_KEY> yerine cüzdanınızın özel anahtarını yazın.
WALLET_KEY, bir sözleşme konuşlandırırken kullanılacak cüzdanın özel anahtarıdır. Özel anahtarınızı nasıl al
acağınızla ilgili talimatlar için cüzdanınızın talimatlarını takip edin. Örneğin MetaMask için, lütfen bu talimatları takip edin. Bu bilgiyi bir kamu repoya commit etmemeniz hayati önem taşımaktadır.
Lisk'i kullanmak üzere Hardhat'ı yapılandırmak için, proje'nizin hardhat.config.ts dosyasına Lisk ağını ekleyin:
hardhat.config.ts
import { HardhatUserConfig } from "hardhat/config";
import "@nomicfoundation/hardhat-toolbox";
require('dotenv').config();
const config: HardhatUserConfig = {
solidity: "0.8.23",
networks: {
// for testnet
'lisk-sepolia': {
url: 'https://rpc.sepolia-api.lisk.com',
accounts: [process.env.WALLET_KEY as string],
gasPrice: 1000000000,
},
},
};
export default config;
Sözleşmeyi Oluşturma
Kolaylık ve güvenlik açısından, OpenZeppelin Contracts kütüphanesi tarafından sağlanan ERC721 arayüzünü kullanarak bir NFT akıllı sözleşmesi oluşturacağız. OpenZeppelin ile, tüm ERC-721 arayüzünü yazmamıza gerek kalmaz. Bunun yerine, kütüphane sözleşmesini içe aktarabilir ve işlevlerini kullanabiliriz.
Projeye OpenZeppelin Contracts kütüphanesini eklemek için, şu komutu çalıştırın:
npm install --save @openzeppelin/contracts
Projede, projenin bir parçası olarak oluşturulan contracts/Lock.sol sözleşmesini silin. (test/Lock.ts test dosyasını da silebilirsiniz, ancak kendi testlerinizi en kısa sürede eklemelisiniz!).
Aşağıdaki kodu contracts/NFT.sol adında yeni bir dosyaya ekleyin.
contracts/NFT.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.23;
import "@openzeppelin/contracts/token/ERC721/ERC721.sol";
contract NFT is ERC721 {
uint256 public currentTokenId;
constructor() ERC721("NFT Name", "NFT") {}
function mint(address recipient) public returns (uint256) {
uint256 newItemId = ++currentTokenId;
_safeMint(recipient, newItemId);
return newItemId;
}
}
Akıllı Sözleşmeyi Derleme
Sözleşmeyi Hardhat kullanarak derlemek için, basitçe şu komutu çalıştırın:
npx hardhat compile
Başarılı bir derlemeden sonra, derleme sanat eserlerini içeren yeni bir klasör artifacts/ görmeniz gerekecektir.
Akıllı Sözleşmeyi Konuşlandırma
Sözleşmeniz başarıyla derlendikten sonra, Lisk Sepolia test ağına sözleşmeyi konuşlandırabilirsiniz.
Lisk Sepolia test ağına sözleşmeyi konuşlandırmak için, projenizdeki scripts/deploy.ts dosyasını değiştirmeniz gerekecektir:
scripts/deploy.ts
import { ethers } from 'hardhat';
async function main() {
const nft = await ethers.deployContract('NFT');
await nft.waitForDeployment();
console.log('NFT Contract Deployed at ' + nft.target);
}
// We recommend this pattern to be able to use async/await everywhere
// and properly handle errors.
main().catch((error) => {
console.error(error);
process.exitCode = 1;
});
Ayrıca, cüzdanınızda Testnet ETH'e ihtiyacınız olacak. Henüz yapmadıysanız, Ön Koşullar bölümüne bakın. Aksi takdirde, konuşlandırma girişimi başarısız olur.
Son olarak, şu komutu çalıştırın:
npx hardhat run scripts/deploy.ts --network lisk-sepolia
Sözleşme, Lisk Sepolia Testnet üzerinde konuşlandırılacaktır. Konuşlandırma durumunu ve sözleşmeyi görmek için bir blok gezgini kullanabilir ve dağıtım komutunuz tarafından döndürülen adresi arayabilirsiniz.
Yeni veya değiştirilmiş bir sözleşme konuşlandırıyorsanız, önce doğrulamanız gerekecektir.
Akıllı Sözleşmeyi Doğrulama
Blok gezgininde sözleşmenizle etkileşimde bulunmak istiyorsanız, sizin veya başka birinin önce doğrulaması gerekecektir. Yukarıdaki sözleşme zaten doğrulanmıştır, bu nedenle versiyonunuzu blok gezgininde zaten görebilmeniz gerekir. Bu rehberin geri kalanında, Lisk Sepolia Testnet'te sözleşmenizi nasıl doğrulayacağınızı anlatacağız.
hardhat.config.ts dosyasında, Lisk Sepolia'yı özel bir ağ olarak yapılandırın. HardhatUserConfig'inize aşağıdakileri ekleyin:
hardhat.config.ts
// HardhatUserConfig'un "networks" yapılandırmasından sonra aşağıdaki bilgileri ekleyin
const config: HardhatUserConfig = {
// Hardhat burada etherscan bekler, Blockscout kullanıyor olsanız bile.
etherscan: {
// Blockscout gerçek bir API anahtarı gerektirmediği ve Hardhat bu özelliği ayarlamadığınızda şikayet edeceği için, yer tutucu olarak "123" kullanın.
apiKey: {
"lisk-sepolia": "123"
},
customChains: [
{
network: "lisk-sepolia",
chainId: 4202,
urls: {
apiURL: "https://sepolia-blockscout.lisk.com/api",
browserURL: "https://sepolia-blockscout.lisk.com"
}
}
]
},
sourcify: {
enabled: false
},
};
Şimdi, sözleşmenizi doğrulayabilirsiniz. Dağıtılmış adresi alın ve çalıştırın:
npx hardhat verify --network lisk-sepolia <deployed address>
Benzer bir çıktı görmelisiniz:
Successfully submitted source code for contract
contracts/NFT.sol:NFT at 0xC10710ac55C98f9AACdc9cD0A506411FBe0af71D
for verification on the block explorer. Waiting for verification result...
Successfully verified contract NFT on the block explorer.
https://sepolia-blockscout.lisk.com/address/0xC10710ac55C98f9AACdc9cD0A506411FBe0af71D#code
Zaten doğrulanmış bir sözleşme ile aynı olan bir sözleşmeyi tekrar doğrulayamazsınız. Örneğin, yukarıdaki sözleşmeyi doğrulamaya çalışırsanız, şuna benzer bir mesaj alırsınız:
Sözleşme 0xC10710ac55C98f9AACdc9cD0A506411FBe0af71D zaten Etherscan'da doğrulanmış. https://sepolia-blockscout.lisk.com/address/0xC10710ac55C98f9AACdc9cD0A506411FBe0af71D#code
Önceki adımların çıktı mesajında gösterilen linki takip ederek BlockScout'ta sözleşmenizi görüntüleyin. Blok gezgini, sözleşmenin doğrulandığını onaylayacak ve onunla etkileşimde bulunmanıza izin verecektir.
Akıllı Sözleşme ile Etkileşim
Sözleşme doğrulandıktan sonra, BlockScout üzerinde Sözleşmeyi Oku ve Sözleşme Yaz sekmesini kullanarak konuşlandırılmış sözleşme ile etkileşimde bulunabilirsiniz. Blockscout URL'sinde sözleşme adresini güncellemeyi unutmayın. Ayrıca, Cüzdan Bağla butonuna tıklayarak önce cüzdanınızı bağlamanız gerekecektir.