ERC-721, değiştirilemez token'lar (NFT'ler) için bir standarttır. Her bir token benzersizdir ve başka bir token ile aynı değere sahip değildir. Bu, onları dijital sanat, koleksiyon öğeleri ve diğer benzersiz varlıklar için ideal kılar.
İlk adım, yeni bir Hardhat projesi oluşturmaktır. Terminalde aşağıdaki komutları çalıştırın:
mkdir nft-minting
cd nft-minting
npm init -y
npm install --save-dev hardhat
npx hardhat
Hardhat size proje yapısını oluşturmak için bazı sorular soracaktır. "Create an empty hardhat.config.js" seçeneğini seçebilirsiniz.
contracts dizininde MyNFT.sol adında yeni bir dosya oluşturun ve aşağıdaki Solidity kodunu ekleyin:
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import "@openzeppelin/contracts/token/ERC721/ERC721.sol";
import "@openzeppelin/contracts/utils/Counters.sol";
contract MyNFT is ERC721 {
using Counters for Counters.Counter;
Counters.Counter private _tokenIds;
constructor() ERC721("MyNFT", "MNFT") {}
function mintNFT(address recipient, string memory tokenURI)
public returns (uint256)
{
_tokenIds.increment();
uint256 newItemId = _tokenIds.current();
_mint(recipient, newItemId);
_setTokenURI(newItemId, tokenURI);
return newItemId;
}
}
Bu sözleşme, OpenZeppelin'in ERC721 standardını kullanır ve basit bir mintNFT fonksiyonu içerir.
Akıllı sözleşmeniz OpenZeppelin kütüphanelerine bağlıdır. Bu kütüphaneleri yüklemek için aşağıdaki komutu çalıştırın:
npm install @openzeppelin/contracts
scripts dizininde deploy.js adında yeni bir dosya oluşturun ve aşağıdaki kodu ekleyin:
async function main() {
const [deployer] = await ethers.getSigners();
console.log("Deploying contracts with the account:", deployer.address);
console.log("Account balance:", (await deployer.getBalance()).toString());
const MyNFT = await ethers.getContractFactory("MyNFT");
const myNFT = await MyNFT.deploy();
await myNFT.deployed();
console.log("MyNFT contract address:", myNFT.address);
}
main()
.then(() => process.exit(0))
.catch((error) => {
console.error(error);
process.exit(1);
});
Akıllı sözleşmeyi dağıtmak için hardhat.config.js dosyasını yapılandırmanız ve bir Ethereum ağına (örneğin, Ropsten, Rinkeby veya Goerli) bağlanmanız gerekir. Ayrıca, MetaMask'ınızda bu ağlardan birinde yeterli miktarda test ETH'sine sahip olmanız gerekir.
hardhat.config.js dosyasını aşağıdaki gibi güncelleyin:
require("@nomiclabs/hardhat-waffle");
module.exports = {
solidity: "0.8.4",
networks: {
ropsten: {
url: process.env.ROPSTEN_URL || "",
accounts: [process.env.PRIVATE_KEY || ""],
},
},
};
.env dosyasında ROPSTEN_URL ve PRIVATE_KEY ortam değişkenlerini ayarlayın. Ropsten URL'sini Infura veya Alchemy gibi bir sağlayıcıdan alabilirsiniz. Özel anahtarınızı MetaMask'tan alabilirsiniz. Özel anahtarınızı asla herkese açık bir yerde paylaşmayın!
Akıllı sözleşmeyi dağıtmak için aşağıdaki komutu çalıştırın:
npx hardhat run scripts/deploy.js --network ropsten
Akıllı sözleşme dağıtıldıktan sonra, NFT mint edebilirsiniz. scripts dizininde mint.js adında yeni bir dosya oluşturun ve aşağıdaki kodu ekleyin:
async function main() {
const contractAddress = "YOUR_CONTRACT_ADDRESS"; // Dağıttığınız sözleşmenin adresi
const tokenURI = "YOUR_TOKEN_URI"; // NFT'nin meta veri URI'si
const [signer] = await ethers.getSigners();
const MyNFT = await ethers.getContractFactory("MyNFT");
const myNFT = await MyNFT.attach(contractAddress);
const transaction = await myNFT.mintNFT(signer.address, tokenURI);
await transaction.wait();
console.log("NFT minted successfully!");
}
main()
.then(() => process.exit(0))
.catch((error) => {
console.error(error);
process.exit(1);
});
YOUR_CONTRACT_ADDRESS ve YOUR_TOKEN_URI değerlerini kendi değerlerinizle değiştirin. TOKEN_URI, NFT'nin meta verilerini içeren bir JSON dosyasına işaret etmelidir. Bu JSON dosyası, NFT'nin adı, açıklaması ve resim URL'sini içermelidir.
NFT'yi mint etmek için aşağıdaki komutu çalıştırın:
npx hardhat run scripts/mint.js --network ropsten
Başarıyla bir ERC-721 NFT'si mint ettiniz!