1. Anasayfa
  2. 100 Günde Solidity

🧵 100GündeSolidity 052 : ERC721 Tokenları

🧵 100GündeSolidity 052 : ERC721 Tokenları
ERC721 Tokenları
0

ERC721 Tokenları

Merhaba,

#100GündeSolidity e-bülten serimizin 52. sayısına hoş geldiniz. Bugünkü konumuz, ERC721 tokenlarına giriş olacak. ERC721, Ethereum ağında tek bir örneği olabilen tokenların oluşturulmasına olanak tanıyan bir standarttır. Bu tokenlar genellikle, dijital varlıkların (örneğin, sanat eserleri, oyun karakterleri, arazi parçaları vb.) temsili için kullanılır.

Bu e-bültenimizde, ERC721 tokenlarına ne olduğunu, nasıl çalıştığını, ERC20 tokenlarından nasıl farklı olduğunu, nasıl oluşturulduğunu, nasıl transfer edildiğini, takas edildiğini, yakıldığını, güvenli olup olmadığını ve örnek kullanım senaryolarını inceleyeceğiz.

Hazırsanız, ERC721 tokenlarına daha yakından bakalım!

ERC721 Nedir?

ERC721, Ethereum ağı üzerinde non-fungible token (NFT) oluşturmak için kullanılan bir standarttır. Fungible tokenlar, örneğin Ethereum (ETH) veya ERC20 tokenları gibi, birbirinin yerine kullanılabilir. Yani, örneğin 1 ETH, başka bir kişinin elindeki 1 ETH ile tamamen aynıdır.

Ancak non-fungible tokenlar, her biri benzersiz olan ve birbirinin yerine kullanılamayan öğeleri temsil eder. Bu nedenle, ERC721 tokenları, sanat eserleri, dijital arazi parçaları, oyun karakterleri veya koleksiyon parçaları gibi benzersiz varlıkların temsilinde kullanılır.

ERC721 tokenları, smart contractlar tarafından yönetilir ve her biri benzersiz bir token ID’si ile tanımlanır. Bu tokenlar, kendine özgü özellikleri, sahipliği ve takip edilebilirliği olan benzersiz bir dijital varlığı temsil eder.

Örneğin, bir ERC721 tokenu, belirli bir sanat eserinin tek bir kopyasını temsil edebilir. Bu token, sahibinin tokenı kontrol etme hakkına sahip olduğunu ve sanat eserinin sahibi olduğunu belirten akıllı bir sözleşme ile birleştirilir. Bu, tokenın sahibi olan kişinin sanat eserini, benzeri olmayan bir şekilde sahip olduğunu ve kontrol ettiğini garantiler.

ERC721 Tokenları Nasıl Çalışır?

ERC721 tokenları, Ethereum ağı üzerinde bir smart contract olarak yazılır ve her biri benzersiz bir token ID’si ile tanımlanır. Bu tokenlar, sahiplik haklarının aktarılması, takip edilmesi ve doğrulanması için akıllı sözleşmeleri kullanır.

ERC721 tokenları, birden fazla sahibi olabilen bir varlığı temsil eder. Her bir tokenın kendine özgü özellikleri ve meta verileri (örneğin, adı, sembolü, resmi vb.) vardır ve bu veriler, tokenın oluşturulması sırasında tanımlanır.

ERC721 tokenları, smart contract üzerinden kullanıcıların birbirine token göndermesine veya tokenları değiştirmesine olanak tanıyan bir dizi işlevi de içerir. Bu işlevler, token sahipliğini akıllı sözleşme tarafından takip ederek gerçekleştirilir.

ERC721 tokenları, Ethereum ağında işlem yapmak için ETH veya başka bir token ödemeyi gerektirir. Bu nedenle, ERC721 tokenlarının oluşturulması, transferi ve değişimi, gas maliyeti nedeniyle ERC20 tokenlarından daha pahalıdır.

ERC721 Tokenları ERC20 Tokenlarından Nasıl Farklıdır?

ERC721 tokenları, ERC20 tokenlarından oldukça farklıdır. İşte bazı temel farklar:

  1. Benzersizlik: ERC20 tokenları, birbirinin yerine kullanılabilen tokenlardır ve her bir tokenın benzersiz bir kimliği yoktur. Ancak ERC721 tokenları, benzersiz bir token ID’si ile tanımlanır ve her bir token, kendine özgü bir varlığı temsil eder.
  2. Sahtecilik: ERC20 tokenları, sahteciliği önlemek için ERC20 protokolünde belirtilen belirli standartlarla birlikte kullanılabilir. Ancak ERC721 tokenları, her bir tokenın benzersiz kimliği sayesinde sahteciliği önlemek için doğal bir mekanizma sağlar.
  3. Smart Contract Yönetimi: ERC20 tokenları, bir akıllı sözleşme aracılığıyla yönetilebilir. Ancak ERC721 tokenları, daha karmaşık bir akıllı sözleşme gerektirir, çünkü her bir tokenın benzersiz kimliği ve varlığı olabilir.
  4. Takas: ERC20 tokenları, birbirleriyle takas edilebilir. Ancak ERC721 tokenları, tokenların benzersiz olması nedeniyle birbirleriyle takas edilemezler. Bunun yerine, tokenların sahiplik hakları doğrudan değiştirilir.
  5. Maliyet: ERC721 tokenları, ERC20 tokenlarına göre daha pahalıdır. Çünkü her bir tokenın benzersiz kimliği ve varlığı vardır ve bu nedenle tokenların oluşturulması, transferi ve değişimi daha yüksek bir gas maliyeti gerektirir.

Bu farklar göz önüne alındığında, ERC721 tokenları, dijital varlıkların temsilinde ERC20 tokenlarına göre daha uygun bir seçenek olarak görülmektedir.

ERC721 Tokenları Neler İçin Kullanılır?

ERC721 tokenları, Ethereum ağı üzerinde benzersiz varlıkları temsil etmek için kullanılır. Bu varlıkların her biri, kendine özgü bir token ID’si ile tanımlanır ve sahiplik hakları akıllı sözleşmeler aracılığıyla takip edilir. ERC721 tokenları, aşağıdaki gibi birçok farklı uygulama alanında kullanılabilir:

  1. Sanat: Sanat eserleri, ERC721 tokenları ile dijital olarak temsil edilebilir ve bu sayede sanatçılar, eserlerini dijital olarak tescil ettirebilirler. Böylece, sanat eserleri sahteciliğe karşı korunur ve takip edilebilir hale gelir.
  2. Oyunlar: Oyun şirketleri, oyuncuların dijital varlıkları (örneğin, karakterler, ekipmanlar, araçlar vb.) için ERC721 tokenları kullanabilirler. Bu sayede, oyuncuların varlıkları, blockchain’de takip edilebilir ve oyuncular arasında takas edilebilir.
  3. Koleksiyonlar: ERC721 tokenları, dijital koleksiyonlar için kullanılabilir. Örneğin, kripto-kediler, kripto-köpekler, kripto-spor kartları vb. gibi dijital koleksiyonlar, ERC721 tokenları ile temsil edilebilir.
  4. Mülk: Gayrimenkul gibi varlıklar, ERC721 tokenları ile temsil edilebilir ve bu sayede mülk sahipleri, mülklerinin sahipliğini blockchain’de takip edebilirler.
  5. İş İşlemleri: İşletmeler, ERC721 tokenlarını iş işlemleri için kullanabilirler. Örneğin, ürünlerin takibi, envanter yönetimi, izlenebilirliği vb. için kullanılabilirler.

Bu örnekler, ERC721 tokenlarının birkaç farklı uygulama alanına sahip olduğunu göstermektedir. ERC721 tokenları, blockchain teknolojisinin sağladığı şeffaflık, takip edilebilirlik ve sahteciliğe karşı koruma özellikleri nedeniyle giderek daha fazla kabul görmektedir.

ERC721 Tokenları Nasıl Oluşturulur?

ERC721 tokenları, Solidity programlama dilinde yazılmış akıllı sözleşmeler tarafından oluşturulur. İşte bir ERC721 tokenı oluşturmak için izlenebilecek genel adımlar:

  1. OpenZeppelin kütüphanesi gibi ERC721 uyumlu bir kütüphane kullanmak, ERC721 tokenı oluşturmanın en kolay yolu olarak kabul edilir. Bu kütüphaneler, ERC721 standardına uygun akıllı sözleşmelerin hazır kodlarını içerirler. Böylece, tokenı oluşturmak için gereken bazı temel işlevler (örneğin, token oluşturma, transfer, sahiplik transferi vb.) hazır olarak sunulur.
  2. Kendi akıllı sözleşmenizi yazmak için, öncelikle Solidity programlama dilini öğrenmeniz gerekir. ERC721 standardını takip eden bir akıllı sözleşme yazmak, bu standartın tanımladığı fonksiyonları içermesi ve her bir işlevin özelleştirilmesi gerektiği anlamına gelir.
  3. ERC721 tokenları, her biri benzersiz bir kimlik numarası olan bir dizi tokenı temsil eden bir koleksiyon olarak oluşturulur. Bu nedenle, token oluşturma fonksiyonu, tokenın benzersiz kimliğini belirleyen bir parametre alır. Bu fonksiyon, tokenın başlangıç sahibi olarak belirlenen kullanıcıya ait bir token oluşturur.
  4. Token transferi işlevi, bir kullanıcıdan başka bir kullanıcıya tokenların transfer edilmesine izin verir. Bu işlev, transfer edilen tokenın sahiplik haklarını günceller ve transfer edilen tokenın yeni sahibinin adresini kaydeder.

ERC721 tokenları oluşturmak, Solidity programlama dilinin öğrenilmesini gerektirir ve belirli bir zaman ve çaba gerektirir. Ancak, OpenZeppelin kütüphanesi gibi hazır kütüphanelerin kullanımı, bu süreci kolaylaştırabilir.

ERC721 Tokenları Nasıl Transfer Edilir?

ERC721 Tokenları Nasıl Transfer Edilir?

ERC721 tokenları, her biri benzersiz bir kimlik numarası olan bir dizi tokenı temsil eden bir koleksiyon olarak oluşturulur. Bu tokenlar, sahipleri tarafından diğer kullanıcılara transfer edilebilir. ERC721 token transfer işlemi, şu adımları içerir:

  1. Token sahibi, ERC721 tokenını transfer etmek istediği kullanıcının Ethereum adresini belirler.
  2. Token sahibi, ERC721 tokenını transfer edebilmek için, öncelikle ERC721 akıllı sözleşmesinde bulunan transferFrom fonksiyonunu çağırmalıdır.
  3. transferFrom fonksiyonu, transfer edilecek tokenın benzersiz kimlik numarasını, mevcut sahibin Ethereum adresini ve tokenın yeni sahibinin Ethereum adresini alır.
  4. transferFrom fonksiyonu, tokenın sahiplik haklarını günceller ve transfer işleminin gerçekleştirildiğine dair bir olay gönderir.

Örneğin, aşağıdaki Solidity kodu, token sahibinin transferFrom fonksiyonunu kullanarak ERC721 tokenını transfer etmesini sağlar:

function transferFrom(address _from, address _to, uint256 _tokenId) public {
    require(tokenOwner[_tokenId] == _from, "You are not the owner of this token");
    require(msg.sender == _from || isApprovedForAll(_from, msg.sender), "You are not authorized to transfer this token");
    
    tokenOwner[_tokenId] = _to;
    ownerTokenCount[_from] -= 1;
    ownerTokenCount[_to] += 1;
    
    emit Transfer(_from, _to, _tokenId);
}

Bu kodda, _from değişkeni mevcut sahibin Ethereum adresini, _to değişkeni yeni sahibin Ethereum adresini ve _tokenId değişkeni transfer edilecek tokenın benzersiz kimlik numarasını temsil eder. Fonksiyon, token sahipliğini güncelleyerek ve Transfer olayını tetikleyerek transfer işlemini gerçekleştirir.

ERC721 tokenları, Ethereum blokzincirinde çok çeşitli uygulamalarda kullanılabilir. Örneğin, sanat koleksiyonları, oyun içi öğeler ve dijital varlıklar gibi benzersiz öğelerin takası ve ticareti için kullanılabilirler.

ERC721 Tokenları Nasıl Takas Edilir?

ERC721 tokenları, benzersiz öğelerin takası ve ticareti için kullanılabilir. Bu tokenlar, kullanıcılar tarafından birbirine doğrudan takas edilebilir veya merkezi olmayan bir borsa gibi bir aracı platform üzerinden alım satım yapılabilir. ERC721 token takası, aşağıdaki adımları içerir:

  1. Token sahibi, takas etmek istediği tokenları seçer ve takas etmek istediği tokenları almaya istekli olan başka bir kullanıcıyla iletişime geçer.
  2. İki taraf, takas koşullarını belirler ve anlaşmaya varırlar.
  3. Token sahipleri, tokenlarını kendi cüzdanlarından bir merkezi olmayan borsa gibi bir platforma transfer ederler.
  4. İşlem tamamlandıktan sonra, tokenlar yeni sahiplerine transfer edilir.

Örneğin, OpenZeppelin Solidity kütüphanesi, ERC721 token takası için bir örnek kod sunar. Bu kod, iki taraf arasındaki takas işlemini gerçekleştirmek için bir akıllı sözleşme kullanır. İki tarafın da, takas edecekleri tokenları akıllı sözleşmeye göndermesi gerekmektedir. Sözleşme, token sahiplik haklarını güncelleyerek takas işlemini tamamlar.

function trade(address _from, address _to, uint256 _tokenIdFrom, uint256 _tokenIdTo) public {
    require(msg.sender == _from || msg.sender == _to, "You are not authorized to trade these tokens");
    require(tokenOwner[_tokenIdFrom] == _from, "You are not the owner of the first token");
    require(tokenOwner[_tokenIdTo] == _to, "You are not the owner of the second token");

    tokenOwner[_tokenIdFrom] = _to;
    tokenOwner[_tokenIdTo] = _from;

    emit Transfer(_from, _to, _tokenIdFrom);
    emit Transfer(_to, _from, _tokenIdTo);
}

Bu kod, trade fonksiyonunu kullanarak iki tokenın takasını gerçekleştirebilirsiniz. _from ve _to değişkenleri, tokenları takas eden iki kullanıcının Ethereum adreslerini temsil eder. _tokenIdFrom ve _tokenIdTo değişkenleri, takas edilecek olan iki tokenın benzersiz kimlik numaralarını temsil eder. Fonksiyon, token sahipliğini güncelleyerek ve Transfer olayını tetikleyerek takas işlemini gerçekleştirir.

ERC721 token takası, merkezi bir borsaya kıyasla daha güvenli ve düşük maliyetlidir, ancak alıcı ve satıcının doğrudan iletişim kurması ve takas koşullarını belirlemesi gerektiği için daha fazla işlem gerektirir.

ERC721 Tokenları Nasıl Yakılır?

ERC721 tokenları, bir defaya mahsus olmak üzere yakılabilir. Token yakma işlemi, bir tokenın tedarikini azaltmak ve toplam arzı kontrol etmek için kullanılabilir. Token yakma işlemi için ERC721 tokenların standart sözleşmesinde burn fonksiyonu bulunur. Bu fonksiyon, bir kullanıcının kendi tokenlarını yok etmesine izin verir.

Token yakma işlemi şu adımlarla gerçekleştirilir:

  1. Token sahibi, kendi cüzdanında bulunan ve yakmak istediği tokenları belirler.
  2. Token sahibi, burn fonksiyonunu çağırarak, sözleşme tarafından sağlanan token kimlik numarasını ve yakılacak token sayısını sağlar.
  3. Sözleşme, tokenların yakılması işlemini gerçekleştirir ve toplam arzı günceller.
  4. İşlem tamamlandıktan sonra, yakılan tokenlar artık mevcut değildir.

Örneğin, aşağıdaki Solidity kodu, ERC721 token yakma işlemini gerçekleştirmek için bir örnek sağlar:

function burn(uint256 _tokenId, uint256 _amount) public {
    require(tokenOwner[_tokenId] == msg.sender, "You are not the owner of this token");
    require(tokenBalance[msg.sender][_tokenId] >= _amount, "You do not have enough tokens to burn");

    // Token balance and total supply are updated
    tokenBalance[msg.sender][_tokenId] = tokenBalance[msg.sender][_tokenId].sub(_amount);
    totalSupply[_tokenId] = totalSupply[_tokenId].sub(_amount);

    // Emit event
    emit Transfer(msg.sender, address(0), _tokenId);
}

Bu kod, burn fonksiyonunu kullanarak token yakma işlemini gerçekleştirir. _tokenId değişkeni, yakılacak olan tokenın benzersiz kimlik numarasını temsil eder. _amount değişkeni, yakılacak token sayısını belirtir. Fonksiyon, token sahipliği kontrolü yapar ve gerekli miktarda tokenın mevcut olduğunu kontrol eder. Daha sonra, token arzını ve token sahibinin bakiyesini güncelleyerek, tokenların yakılmasını gerçekleştirir.

ERC721 tokenların yakılması, token arzının kontrol edilmesi için kullanışlı bir araçtır. Token sahibi, kendi tokenlarını yakarak, toplam arzı azaltabilir ve bu da diğer token sahiplerinin tokenlarının değerini artırabilir.

ERC721 Tokenları Güvenli mi?

ERC721 tokenları, kullanımı güvenli olan bir standarttır. Bununla birlikte, tokenlar, sahip oldukları özellikler nedeniyle ERC20 tokenlarından farklı bir güvenlik modeline sahiptir. ERC721 tokenları, benzersiz kimlik numaraları ve sahiplik hakları nedeniyle benzersiz bir güvenlik modeline sahiptir.

ERC721 tokenları, akıllı sözleşme ve kodlama hataları nedeniyle saldırılara açık olabilir. Bu nedenle, ERC721 tokenlarına sahip olan projeler, kodlarını ve akıllı sözleşmelerini düzgün bir şekilde test etmelidir. Ayrıca, kullanıcıların tokenlarını güvenli bir şekilde saklamaları ve transfer etmeleri de önemlidir.

ERC721 tokenlarının transfer işlemleri, kullanıcının sahiplik haklarını değiştirdiği için güvenli bir işlemdir. Bununla birlikte, kullanıcıların sahiplik haklarını transfer ederken dikkatli olması ve yanlışlıkla yanlış bir adresle işlem yapmaması önemlidir. Ayrıca, token transferlerinde kullanıcıların kullandığı cüzdanların da güvenli olması gerekmektedir.

Sonuç olarak, ERC721 tokenları, benzersiz güvenlik özellikleri nedeniyle ERC20 tokenlarından farklı bir güvenlik modeline sahiptir. Bu nedenle, projelerin ve kullanıcıların ERC721 tokenlarını güvenli bir şekilde kullanmaları ve saklamaları önemlidir.

ERC721 Tokenlarıyla İlgili Örnek Kullanım Senaryoları

ERC721 tokenları, benzersiz kimlik numaraları ve sahiplik hakları nedeniyle benzersiz bir token standardıdır. ERC721 tokenları, aşağıdaki gibi birçok farklı kullanım senaryosuna sahip olabilir:

  1. Sanat ve dijital koleksiyonlar: Sanat eserleri ve diğer dijital koleksiyonlar, ERC721 tokenlarıyla birbirinden ayrılabilecek ve sahiplik hakları transfer edilebilecek şekilde tokenize edilebilir. Bu, sanatçıların eserlerinin sahipliğini korumasına ve koleksiyoncuların dijital varlıklarını güvenli bir şekilde saklamasına yardımcı olur.
  2. Oyun öğeleri: ERC721 tokenları, video oyunlarındaki öğeleri temsil edebilir. Bu sayede, kullanıcılar oyun öğelerini birbirleri arasında takas edebilir veya satın alabilirler.
  3. Gayrimenkul ve mülk: ERC721 tokenları, gayrimenkul veya mülkün tokenleştirilmesi ile sahiplik haklarının transferini sağlar. Bu sayede, gayrimenkul yatırımcıları mülklerini birbirleri arasında transfer edebilirler.
  4. E-Kitaplar ve diğer dijital varlıklar: ERC721 tokenları, e-kitaplar veya diğer dijital varlıkların sahiplik haklarını tokenleştirerek transferini sağlayabilir. Bu sayede, kitap yazarları veya diğer dijital varlık sahipleri, varlıklarının sahipliğini koruyabilir ve varlıklarının transferini kolaylaştırabilirler.
  5. Topluluk tokenleri: ERC721 tokenları, topluluk projeleri ve organizasyonları için kullanılabilir. Bu sayede, topluluk üyeleri, tokenleri alarak projeye veya organizasyona katkıda bulunabilirler ve sahiplik haklarını tokenler aracılığıyla paylaşabilirler.

Yukarıdaki örnekler, ERC721 tokenlarının farklı kullanım senaryolarını göstermektedir. Bu sayede, ERC721 tokenları, birçok farklı endüstride kullanılabilir ve çeşitli dijital varlıkların sahiplik haklarının transferi için benzersiz bir token standardı sunar.

ERC721 Akıllı Sözleşme Örneği incelemesi

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.17;

interface IERC165 {
    function supportsInterface(bytes4 interfaceID) external view returns (bool);
}

interface IERC721 is IERC165 {
    function balanceOf(address owner) external view returns (uint balance);

    function ownerOf(uint tokenId) external view returns (address owner);

    function safeTransferFrom(address from, address to, uint tokenId) external;

    function safeTransferFrom(
        address from,
        address to,
        uint tokenId,
        bytes calldata data
    ) external;

    function transferFrom(address from, address to, uint tokenId) external;

    function approve(address to, uint tokenId) external;

    function getApproved(uint tokenId) external view returns (address operator);

    function setApprovalForAll(address operator, bool _approved) external;

    function isApprovedForAll(
        address owner,
        address operator
    ) external view returns (bool);
}

interface IERC721Receiver {
    function onERC721Received(
        address operator,
        address from,
        uint tokenId,
        bytes calldata data
    ) external returns (bytes4);
}

contract ERC721 is IERC721 {
    event Transfer(address indexed from, address indexed to, uint indexed id);
    event Approval(address indexed owner, address indexed spender, uint indexed id);
    event ApprovalForAll(
        address indexed owner,
        address indexed operator,
        bool approved
    );

    // Mapping from token ID to owner address
    mapping(uint => address) internal _ownerOf;

    // Mapping owner address to token count
    mapping(address => uint) internal _balanceOf;

    // Mapping from token ID to approved address
    mapping(uint => address) internal _approvals;

    // Mapping from owner to operator approvals
    mapping(address => mapping(address => bool)) public isApprovedForAll;

    function supportsInterface(bytes4 interfaceId) external pure returns (bool) {
        return
            interfaceId == type(IERC721).interfaceId ||
            interfaceId == type(IERC165).interfaceId;
    }

    function ownerOf(uint id) external view returns (address owner) {
        owner = _ownerOf[id];
        require(owner != address(0), "token doesn't exist");
    }

    function balanceOf(address owner) external view returns (uint) {
        require(owner != address(0), "owner = zero address");
        return _balanceOf[owner];
    }

    function setApprovalForAll(address operator, bool approved) external {
        isApprovedForAll[msg.sender][operator] = approved;
        emit ApprovalForAll(msg.sender, operator, approved);
    }

    function approve(address spender, uint id) external {
        address owner = _ownerOf[id];
        require(
            msg.sender == owner || isApprovedForAll[owner][msg.sender],
            "not authorized"
        );

        _approvals[id] = spender;

        emit Approval(owner, spender, id);
    }

    function getApproved(uint id) external view returns (address) {
        require(_ownerOf[id] != address(0), "token doesn't exist");
        return _approvals[id];
    }

    function _isApprovedOrOwner(
        address owner,
        address spender,
        uint id
    ) internal view returns (bool) {
        return (spender == owner ||
            isApprovedForAll[owner][spender] ||
            spender == _approvals[id]);
    }

    function transferFrom(address from, address to, uint id) public {
        require(from == _ownerOf[id], "from != owner");
        require(to != address(0), "transfer to zero address");

        require(_isApprovedOrOwner(from, msg.sender, id), "not authorized");

        _balanceOf[from]--;
        _balanceOf[to]++;
        _ownerOf[id] = to;

        delete _approvals[id];

        emit Transfer(from, to, id);
    }

    function safeTransferFrom(address from, address to, uint id) external {
        transferFrom(from, to, id);

        require(
            to.code.length == 0 ||
                IERC721Receiver(to).onERC721Received(msg.sender, from, id, "") ==
                IERC721Receiver.onERC721Received.selector,
            "unsafe recipient"
        );
    }

    function safeTransferFrom(
        address from,
        address to,
        uint id,
        bytes calldata data
    ) external {
        transferFrom(from, to, id);

        require(
            to.code.length == 0 ||
                IERC721Receiver(to).onERC721Received(msg.sender, from, id, data) ==
                IERC721Receiver.onERC721Received.selector,
            "unsafe recipient"
        );
    }

    function _mint(address to, uint id) internal {
        require(to != address(0), "mint to zero address");
        require(_ownerOf[id] == address(0), "already minted");

        _balanceOf[to]++;
        _ownerOf[id] = to;

        emit Transfer(address(0), to, id);
    }

    function _burn(uint id) internal {
        address owner = _ownerOf[id];
        require(owner != address(0), "not minted");

        _balanceOf[owner] -= 1;

        delete _ownerOf[id];
        delete _approvals[id];

        emit Transfer(owner, address(0), id);
    }
}

contract MyNFT is ERC721 {
    function mint(address to, uint id) external {
        _mint(to, id);
    }

    function burn(uint id) external {
        require(msg.sender == _ownerOf[id], "not owner");
        _burn(id);
    }
}

Bu örnek ERC721 standartını uygulayan bir sözleşme içermektedir. ERC721, Ethereum blockchaini üzerinde birbirinden farklı olabilen, benzersiz tokenler oluşturmak için kullanılan bir standarttır. Sözleşme, kullanıcıların tokenlerini oluşturmasına, transfer etmesine, yakmasına ve onaylamasına izin verir. Ayrıca, token sahiplerinin tokenlerinin kimler olduğunu ve token sahiplerinin ne kadar token sahip olduklarını takip etmek için gerekli olan fonksiyonları içerir.

Sözleşme, ERC721 arayüzünü uygulayan bir sözleşmedir. Bu arayüz, token sahiplerinin kim olduğunu ve sahip oldukları tokenlerin sayısını takip etmek için gerekli olan fonksiyonları içerir.

Ayrıca, sözleşme aşağıdaki fonksiyonları da içerir:

  • supportsInterface: Verilen arayüzün desteklenip desteklenmediğini kontrol eder. Bu sözleşme IERC721 ve IERC165 arayüzlerini destekler.
  • ownerOf: Belirtilen token’in sahibini döndürür.
  • balanceOf: Belirtilen adresin sahip olduğu token sayısını döndürür.
  • setApprovalForAll: Bir adresin belirli bir operatöre tüm tokenler için yetkilendirilip yetkilendirilmediğini ayarlar.
  • approve: Belirtilen token için belirtilen adresi onaylar.
  • getApproved: Belirtilen token için onaylanan adresi döndürür.
  • transferFrom: Token sahiplerinin tokenlerini başka bir adrese transfer etmelerine izin verir.
  • safeTransferFrom: Token sahiplerinin tokenlerini başka bir adrese transfer etmelerine izin verir. Ayrıca, alıcının bir ERC721 alıcısı olduğundan emin olur.
  • mint: Yeni bir token oluşturur ve belirtilen adrese atanır.
  • burn: Belirtilen tokeni yakar ve token sahibi adresten çıkarır.

Sözleşme, bir ERC721 token sistemi için temel fonksiyonları sağlamaktadır. Ancak, token sistemleri genellikle daha karmaşık olabilir ve bu sözleşme örneği yalnızca temel işlevleri içermektedir.

Sonuç Bağlamı

Bu ders boyunca Ethereum platformu üzerinde akıllı sözleşmelerin ne olduğunu, Solidity programlama dilini ve akıllı sözleşme yazımında kullanılan temel fonksiyonları öğrendik. Ayrıca, bir ERC20 token sözleşmesi örneği ile adım adım nasıl oluşturulacağını ve bir ERC721 token sözleşmesi örneği ile de nasıl yapılandırılacağını öğrendik. Bu bilgiler, Ethereum platformunda akıllı sözleşme geliştirme konusunda bir temel oluşturmak için yararlıdır.

Solidity Programlama Dili Öğrenme yolculuğunuz hakkında daha iyi rehberlik almak için Solidity nedir? Ethereum Akıllı Sözleşmelerinin Dili Rehberi içeriğimize göz atın. Dilerseniz Yeni Başlayanlar için Solidity – Akıllı Sözleşme Geliştirme Hızlandırılmış Kursuna katılın.

Çalışmaya nereden başlayacağım diyenler için Blockchain ​​Developer Olmak İçin Yol Haritası içeriğine de muhakkak bakın.

Gelin aklınızdaki soruları SUPERPEER sohbetinde cevaplayalım.

Bu makaleyi okuduğunuz için teşekkürler! Bana destek olmak isterseniz;

Beni TwitterLinkedin ve YouTube‘da takip edin.

Kısa bir yorum bırakmayı UNUTMAYIN!

solidity101 - Solidity, 2015 yılında Christian Reitwiessner liderliğinde piyasaya sürülen, büyük harf kullanımına göre ikinci en büyük kripto para piyasası olan Ethereum tarafından oluşturulan yepyeni bir programlama dilidir.

Yazarın Profili
İlginizi Çekebilir

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir