🚀 Online Kendi Sınavını Oluştur ve Çöz!
avatar
Elif_Su_90
30 puan • 582 soru • 612 cevap
✔️ Cevaplandı • Doğrulandı

ERC-721 ile NFT Mint Etme: Adım Adım Kılavuz

ERC-721 ile NFT mint etme konusunu duydum ama nasıl yapıldığını bilmiyorum. Adım adım bir rehbere ihtiyacım var, sanki çok karmaşık bir işlem gibi geliyor.
WhatsApp'ta Paylaş
1 CEVAPLARI GÖR
✔️ Doğrulandı
0 kişi beğendi.
avatar
Ali_Osman_TR
20 puan • 547 soru • 529 cevap

🎨 ERC-721 Nedir?

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.

🛠️ Gerekli Araçlar ve Ortam

  • 💻 Node.js ve npm: JavaScript çalışma zamanı ve paket yöneticisi.
  • 💼 MetaMask: Tarayıcı tabanlı bir kripto cüzdanı.
  • ⚙️ Hardhat: Ethereum geliştirme ortamı.
  • 📜 Solidity: Akıllı sözleşme programlama dili.

⚙️ Adım 1: Hardhat Projesi Oluşturma

İ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.

✍️ Adım 2: Akıllı Sözleşme Yazma

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.

📦 Adım 3: Gerekli OpenZeppelin Paketlerini Yükleme

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

📝 Adım 4: Dağıtım Script'i Yazma

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);
  });

⚙️ Adım 5: Akıllı Sözleşmeyi Dağıtma

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

🪙 Adım 6: NFT Mint Etme

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

🎉 Tebrikler!

Başarıyla bir ERC-721 NFT'si mint ettiniz!

Yorumlar