Türkçe

NFT'ler için ERC-721 akıllı sözleşmelerinin inceliklerini keşfedin. Mimarileri, uygulamaları, güvenlik konuları ve gerçek dünya kullanım alanları hakkında bilgi edinin.

NFT Akıllı Sözleşmeleri: ERC-721 Uygulamasına Derinlemesine Bir Bakış

Takas Edilemez Token'lar (NFT'ler), blokzincir üzerinde benzersiz varlıkların temsilini sağlayarak dijital varlık dünyasında devrim yarattı. Çoğu NFT'nin kalbinde, bu token'ların nasıl oluşturulduğunu, yönetildiğini ve transfer edildiğini düzenleyen bir kurallar bütünü olan ERC-721 standardı yer alır. Bu kapsamlı rehber, ERC-721 akıllı sözleşmelerinin mimarisini, uygulama detaylarını, güvenlik hususlarını ve pratik uygulamalarını derinlemesine bir şekilde ele almaktadır.

ERC-721 Nedir?

ERC-721, Ethereum blokzincirinde takas edilemez token'ları temsil etmek için kullanılan bir standarttır. Değiştirilebilir (yani her bir token'ın diğer tüm token'larla aynı olduğu) ERC-20 token'larının aksine, ERC-721 token'ları benzersizdir. Her bir token'ın ayrı bir kimliği (ID) vardır, bu da onu benzersiz dijital veya fiziksel varlıkların mülkiyetini temsil etmek için uygun hale getirir.

ERC-721 Token'larının Temel Özellikleri:

ERC-721 Akıllı Sözleşme Mimarisi

Bir ERC-721 akıllı sözleşmesi, ERC-721 standardını uygulayan bir Solidity programıdır. Genellikle aşağıdaki bileşenleri içerir:

Temel Fonksiyonlar:

Meta Veri Eklentisi (İsteğe Bağlı):

Sıralama Eklentisi (İsteğe Bağlı):

OpenZeppelin ile ERC-721 Akıllı Sözleşmesi Uygulama

OpenZeppelin, ERC-721 token'larının geliştirilmesini basitleştiren güvenli ve denetlenmiş bir akıllı sözleşme kütüphanesi sunar. OpenZeppelin'in ERC721 uygulamasını kullanmak, kodunuza güvenlik açıkları ekleme riskini azaltır. İşte OpenZeppelin kullanarak bir ERC-721 akıllı sözleşmesinin nasıl uygulanacağına dair bir örnek:

Ön Gereksinimler:

Adımlar:

  1. Bir Truffle veya Hardhat projesi başlatın:
# Truffle
mkdir my-nft-project
cd my-nft-project
truffle init

# Hardhat
mkdir my-nft-project
cd my-nft-project
npx hardhat
  1. OpenZeppelin Contracts'ı yükleyin:
npm install @openzeppelin/contracts
  1. Bir ERC-721 Akıllı Sözleşmesi Oluşturun: `contracts` dizininizde yeni bir Solidity dosyası (ör. `MyNFT.sol`) oluşturun.
// 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;

    string private _baseURI;

    constructor(string memory name, string memory symbol, string memory baseURI) ERC721(name, symbol) {
        _baseURI = baseURI;
    }

    function mintNFT(address recipient) public returns (uint256) {
        _tokenIds.increment();

        uint256 newItemId = _tokenIds.current();
        _mint(recipient, newItemId);
        _setTokenURI(newItemId, string(abi.encodePacked(_baseURI, Strings.toString(newItemId), ".json")));

        return newItemId;
    }

    function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal virtual {
        require(_exists(tokenId), "ERC721Metadata: URI set of nonexistent token");
        _tokenURIs[tokenId] = _tokenURI;
    }

    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");

        string memory _tokenURI = _tokenURIs[tokenId];
        return string(abi.encodePacked(_tokenURI));
    }

    mapping (uint256 => string) private _tokenURIs;

    function setBaseURI(string memory baseURI) public {
        _baseURI = baseURI;
    }



    // Aşağıdaki fonksiyonlar Solidity tarafından gerektirilen geçersiz kılmalardır.

    function _beforeTokenTransfer(address from, address to, uint256 tokenId) internal override(ERC721) {
        super._beforeTokenTransfer(from, to, tokenId);
    }
}

import "@openzeppelin/contracts/utils/Strings.sol";
  1. Akıllı Sözleşmeyi Derleyin: Akıllı sözleşmenizi derlemek için Truffle veya Hardhat kullanın.
# Truffle
truffle compile

# Hardhat
npx hardhat compile
  1. Bir Dağıtım Betiği Oluşturun: `migrations` veya `scripts` dizininizde yeni bir JavaScript dosyası (ör. `deploy.js`) oluşturun.
// Truffle Taşıma Örneği
const MyNFT = artifacts.require("MyNFT");

module.exports = async function (deployer) {
  await deployer.deploy(MyNFT, "MyNFT", "MNFT", "ipfs://SİZİN_IPFS_CID'İNİZ/");
};

// Hardhat Dağıtım Betiği Örneği
async function main() {
  const MyNFT = await ethers.getContractFactory("MyNFT");
  const myNFT = await MyNFT.deploy("MyNFT", "MNFT", "ipfs://SİZİN_IPFS_CID'İNİZ/");

  await myNFT.deployed();

  console.log("MyNFT dağıtıldı:", myNFT.address);
}

main()
  .then(() => process.exit(0))
  .catch((error) => {
    console.error(error);
    process.exit(1);
  });
  1. Akıllı Sözleşmeyi Dağıtın: Akıllı sözleşmenizi yerel bir blokzincire (ör. Ganache) veya bir test ağına (ör. Ropsten, Rinkeby) dağıtın.
# Truffle
truffle migrate

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

`ipfs://SİZİN_IPFS_CID'İNİZ/` kısmını gerçek IPFS CID'niz (İçerik Tanımlayıcı) ile değiştirmeyi unutmayın. Bu temel URI, NFT meta veri JSON dosyalarınızın saklanacağı konuma işaret eder.

NFT Meta Verilerini IPFS'te Saklama

NFT meta verileri, blokzincirde veri saklama maliyetini azaltmak için genellikle zincir dışında (off-chain) saklanır. IPFS (Gezegenler Arası Dosya Sistemi), NFT meta verilerini saklamak için yaygın olarak kullanılan merkeziyetsiz bir depolama ağıdır. Her NFT'nin, NFT hakkında adı, açıklaması, resim URL'si ve diğer nitelikleri gibi meta verileri içeren IPFS'teki bir JSON dosyasına işaret eden bir `tokenURI`'si vardır.

Örnek NFT Meta Verisi (JSON):

{
  "name": "Benim Harika NFT'm",
  "description": "Bu eşsiz bir NFT'dir.",
  "image": "ipfs://SİZİN_IPFS_CID'İNİZ/image.png",
  "attributes": [
    {
      "trait_type": "Arkaplan",
      "value": "Mavi"
    },
    {
      "trait_type": "Karakter",
      "value": "Robot"
    }
  ]
}

`ipfs://SİZİN_IPFS_CID'İNİZ/image.png` kısmını resminizin gerçek IPFS CID'si ile değiştirin.

Meta Veriyi IPFS'e Yükleme Adımları:

  1. Bir IPFS İstemcisi Seçin: IPFS Desktop, Pinata veya NFT.Storage gibi bir IPFS istemcisi seçin.
  2. Meta Verinizi Yükleyin: NFT meta veri JSON dosyalarınızı ve resimlerinizi seçtiğiniz istemciyi kullanarak IPFS'e yükleyin.
  3. IPFS CID'sini Alın: Meta verinizi yükledikten sonra bir IPFS CID'si alacaksınız. Bu, IPFS'teki verileriniz için benzersiz bir tanımlayıcıdır.
  4. Akıllı Sözleşmeyi Güncelleyin: Akıllı sözleşmenizdeki `tokenURI` fonksiyonunu, IPFS CID'nize işaret edecek şekilde güncelleyin.

ERC-721 Akıllı Sözleşmeleri için Güvenlik Hususları

ERC-721 akıllı sözleşmeleri geliştirirken güvenlik her şeyden önemlidir. İşte bazı kritik güvenlik hususları:

ERC-721 NFT'lerinin Gerçek Dünya Uygulamaları

ERC-721 NFT'leri, aşağıdakiler de dahil olmak üzere çok çeşitli uygulamalarda kullanılmaktadır:

Uluslararası Örnekler:

İleri Düzey ERC-721 Kavramları

ERC-721A

ERC-721A, tek bir işlemde birden fazla NFT basmayı optimize eden, ERC-721 standardının gaz açısından daha verimli bir uygulamasıdır. Depolama maliyetlerini birden fazla token'a yayarak gaz maliyetlerini düşürür. Bu, çok sayıda NFT basmayı içeren projeler için faydalı olabilir.

Tembel Basım (Lazy Minting)

Tembel basım, NFT'lerin yalnızca satın alındıklarında basıldığı bir tekniktir. Bu, çok sayıda NFT'ye sahip olan ancak hepsinin satılmasını beklemeyen projeler için gaz maliyetlerinden tasarruf sağlayabilir. NFT meta verileri, NFT satın alınana kadar zincir dışında saklanır, bu noktada token basılır ve meta veriler blokzincire eklenir.

Ruha Bağlı Token'lar (Soulbound Tokens)

Ruha bağlı token'lar, kalıcı olarak belirli bir adrese bağlı olan ve transfer edilemeyen NFT'lerdir. Bu token'lar, eğitim dereceleri, mesleki sertifikalar veya bir topluluğa üyelik gibi devredilemez kimlik bilgilerini temsil etmek için kullanılabilir. Bu, `transferFrom` fonksiyonunun kaldırılması veya kısıtlanmasıyla sağlanır.

ERC-721 ve NFT'lerin Geleceği

ERC-721 standardı, verimliliğini, güvenliğini ve işlevselliğini artırmaya odaklanan devam eden araştırma ve geliştirme ile gelişmeye devam etmektedir. Gelecekteki gelişmeler şunları içerebilir:

Sonuç

ERC-721 akıllı sözleşmeleri, blokzincir üzerinde benzersiz dijital ve fiziksel varlıkların mülkiyetini temsil etmek için güçlü bir araçtır. Geliştiriciler, ERC-721'in mimarisini, uygulama detaylarını, güvenlik hususlarını ve pratik uygulamalarını anlayarak yenilikçi ve etkili NFT projeleri oluşturabilirler. NFT ekosistemi büyümeye ve gelişmeye devam ettikçe, ERC-721 standardı dijital mülkiyetin geleceğini şekillendirmede kritik bir rol oynayacaktır.

Bu rehber, ERC-721 akıllı sözleşmelerini anlamak ve uygulamak için sağlam bir temel sağlar. Kendi NFT projelerinizi geliştirirken ve dağıtırken her zaman güvenliğe öncelik vermeyi ve en iyi uygulamaları takip etmeyi unutmayın. İyi şanslar!