Selam THT ailesi. Bir önceki konumuzda sizlerle beraber sadece openzeppelin kullanarak akıllı kontrat yazmış, ve bunu test ağında yayınlayıp test etmiştik. Bugün ki konumuzda ise ERC-721 ve ERC-1155 standartlarını tanıyıp kendi görsel varlığımızı nasıl NFT'ye dönüştürürüz ve bunu test ağında dağıtıp nasıl test ederiz bunu öğreneceğiz. Bu yazımdan önce OppenZeppelin ile kod bilmeden token yazmak konuma göz atabilir ve OpenZeppelini tanıyabilirsiniz. Onun dışında Remix IDE, Akıllı kontratlar ve Ethereum ağı hakkında genel bilgileri sıfırdan ileri seviyeye taşıdığım bu serimde Ethereum kategorisinde yayınlamış olduğum yazılarıma göz atabilirsiniz.
NFT kavramını ne kadar ilgilenmesek bile hayatımızın bir köşesinde duyduğumuz olmuştur. Belki bunlardan çok para kazanıldığını duymuş olabilirsiniz, belki de bu konular hakkında bilgili bir arkadaşınızın bunlara karşı olan ilgisinden dolayı siz de ilgilenmişsinizdir ya da bir haber kapağında karşınıza çıkmış olabilir. Peki nedir bu NFT'ler ? Diğer yapılmış ve internet ortamında paylaşılmış resimlerden ne farkı vardır bunların ? Bunlar sayesinde insanlar nasıl para kazanbiliyor ? Biz de kendi NFT'lerimizi yazabilir miyiz ?
NFT (Non-Fungibale Token), BlockChain üzerinde benzersiz ve tekrarlanamaz bir dijital varlığı temsil eden bir token türüdür. Fungible (Takaslanabilir) tokenlerin aksine, her NFT eşsizdir ve başka bir token ile takas edilemez. NFT'ler, dijital sanat eserleri, oyun içi varlıklar, sertifikalar, dijital kimlikler gibi bir çok varlığı kapsar. Bu doğrultuda yazılan her NFT eşsiz, bölünemez ve kendisini yazana ait özel bir varlığı temsil eder.
Şimdi ise bu dijital varlıklarımızı eşsiz birer tokene dönüştürürken kullandığımız standartlara göz atalım. ERC-721, Ethereum üzerinde tanımlanan NFT standardıdır. 2018 yılında geliştirilmiştir ve her tokenin tekil olmasını garanti eder. Bu standart, dijital varlıklarımızın her birini temsil etrmek için kullanılır. Bu standart içerisinde yazılmış her token sahibine özel olsa da bu tokenler alınıp satılabilirler. Bu tokene sahip olup olmadığınız yani sahiplik chain üzerinde kanıtlanabilir.
ERC-1155 "Multi Token Standart", Aynı kontrat içerisinde farklı türde tokenleri birlikte yönetmeye olanak tanır. Ethererum üzerinde hem fungible hem de non-fungible tokenleri aynı kontrat içerisinde barındırmak için geliştirilmiş esnek bir stamdarttır. Enjin tarafından 2019 yılında geliştirilmiştir ve NFT'lerin kitlesel kullanımı için önemli avantajlar sağlar. Bu standartı örnekleyecek olursak, yapacağınız bir savaş oyununda oyun parası ile oyun içi silahları birlikte yönetmenize olanak tanır. Bu da, hem geliştirme sürecini sadeleştirir hem de işlem maliyetlerini düşürür.
Bu konumuzda ERC-721'in üzerine daha çok gideceğiz ve sanal varlıklarımızı nasıl bir NFT'ye dönüştürebileceğimizi göreceğiz.
Öncelikle elimizde sanal bir varlığın olması lazım. Ben basitçe pixelart ile kendime bir resim çizdim.
Elimizde NFT yapabileceğimiz bir sanal varlığa sahibiz. NFT metadatası merkeziyetsiz olarak saklanmalıdır. IPFS'i bu iş için kullanırız. şimdi ise bu resmi öncelikle IPFS ağına yükleyelim sonrasında ise metadatasını çıkartıp tekrardan bir IPSF linki alıp bunu akıllı kontratımızda kullanacağız. Ben bunun için Pinatayı kullandım. Sizler isterseniz; nft.storage, web3.storage, Fleek de kullanabilirsiniz. pinataya gitmek için tıklayın.
bizi bu şekilde bir panel karşılayacak. Sağ üst kısımda gördüğünüz "+ add" butonuna tıklayıp file upload ile kendi sanal varlığımızın CID 'sini çıkartıyoruz. Elimizde şöyle bir CID oluyor.
"bafkreiafeaytrjkjgq3vzo3ktx47dvnafktjfa2zdnnuyhruuiwru7ijku"
sonrasında onu bu bağlantıya dönüştürüyoruz.
"https://ipfs.io/ipfs/bafkreiafeaytrjkjgq3vzo3ktx47dvnafktjfa2zdnnuyhruuiwru7ijku"
Şimdi ise metadata için JSON dosyasımızı oluşturuyoruz. bunun için gerekli kodlar şu şekildedir. (metadata.json):

NFT kavramını ne kadar ilgilenmesek bile hayatımızın bir köşesinde duyduğumuz olmuştur. Belki bunlardan çok para kazanıldığını duymuş olabilirsiniz, belki de bu konular hakkında bilgili bir arkadaşınızın bunlara karşı olan ilgisinden dolayı siz de ilgilenmişsinizdir ya da bir haber kapağında karşınıza çıkmış olabilir. Peki nedir bu NFT'ler ? Diğer yapılmış ve internet ortamında paylaşılmış resimlerden ne farkı vardır bunların ? Bunlar sayesinde insanlar nasıl para kazanbiliyor ? Biz de kendi NFT'lerimizi yazabilir miyiz ?
NFT (Non-Fungibale Token), BlockChain üzerinde benzersiz ve tekrarlanamaz bir dijital varlığı temsil eden bir token türüdür. Fungible (Takaslanabilir) tokenlerin aksine, her NFT eşsizdir ve başka bir token ile takas edilemez. NFT'ler, dijital sanat eserleri, oyun içi varlıklar, sertifikalar, dijital kimlikler gibi bir çok varlığı kapsar. Bu doğrultuda yazılan her NFT eşsiz, bölünemez ve kendisini yazana ait özel bir varlığı temsil eder.
Şimdi ise bu dijital varlıklarımızı eşsiz birer tokene dönüştürürken kullandığımız standartlara göz atalım. ERC-721, Ethereum üzerinde tanımlanan NFT standardıdır. 2018 yılında geliştirilmiştir ve her tokenin tekil olmasını garanti eder. Bu standart, dijital varlıklarımızın her birini temsil etrmek için kullanılır. Bu standart içerisinde yazılmış her token sahibine özel olsa da bu tokenler alınıp satılabilirler. Bu tokene sahip olup olmadığınız yani sahiplik chain üzerinde kanıtlanabilir.
ERC-1155 "Multi Token Standart", Aynı kontrat içerisinde farklı türde tokenleri birlikte yönetmeye olanak tanır. Ethererum üzerinde hem fungible hem de non-fungible tokenleri aynı kontrat içerisinde barındırmak için geliştirilmiş esnek bir stamdarttır. Enjin tarafından 2019 yılında geliştirilmiştir ve NFT'lerin kitlesel kullanımı için önemli avantajlar sağlar. Bu standartı örnekleyecek olursak, yapacağınız bir savaş oyununda oyun parası ile oyun içi silahları birlikte yönetmenize olanak tanır. Bu da, hem geliştirme sürecini sadeleştirir hem de işlem maliyetlerini düşürür.
Bu konumuzda ERC-721'in üzerine daha çok gideceğiz ve sanal varlıklarımızı nasıl bir NFT'ye dönüştürebileceğimizi göreceğiz.
Öncelikle elimizde sanal bir varlığın olması lazım. Ben basitçe pixelart ile kendime bir resim çizdim.

Elimizde NFT yapabileceğimiz bir sanal varlığa sahibiz. NFT metadatası merkeziyetsiz olarak saklanmalıdır. IPFS'i bu iş için kullanırız. şimdi ise bu resmi öncelikle IPFS ağına yükleyelim sonrasında ise metadatasını çıkartıp tekrardan bir IPSF linki alıp bunu akıllı kontratımızda kullanacağız. Ben bunun için Pinatayı kullandım. Sizler isterseniz; nft.storage, web3.storage, Fleek de kullanabilirsiniz. pinataya gitmek için tıklayın.

bizi bu şekilde bir panel karşılayacak. Sağ üst kısımda gördüğünüz "+ add" butonuna tıklayıp file upload ile kendi sanal varlığımızın CID 'sini çıkartıyoruz. Elimizde şöyle bir CID oluyor.
"bafkreiafeaytrjkjgq3vzo3ktx47dvnafktjfa2zdnnuyhruuiwru7ijku"
sonrasında onu bu bağlantıya dönüştürüyoruz.
"https://ipfs.io/ipfs/bafkreiafeaytrjkjgq3vzo3ktx47dvnafktjfa2zdnnuyhruuiwru7ijku"
Şimdi ise metadata için JSON dosyasımızı oluşturuyoruz. bunun için gerekli kodlar şu şekildedir. (metadata.json):
JSON:
{
"name": "dead",
"description": "A dead end",
"image": "https://ipfs.io/ipfs/bafkreiafeaytrjkjgq3vzo3ktx47dvnafktjfa2zdnnuyhruuiwru7ijku"
}
sonrasında oluşturduğumuz bu dosyayı da aynı şekilde pinata aracılığı ile metadataya alıyoruz. ve CID sini alıp son bağlantımızı oluşturuyoruz.
"https://ipfs.io/ipfs/bafkreidxaelcmkj4ncw4d7c77qessxz2g7eg6kct35zpo67oua27acz2y4"
şimdi ise Remix IDE'yi açalım ve akıllı kontratımızı yazmaya başlayalım.
"https://ipfs.io/ipfs/bafkreidxaelcmkj4ncw4d7c77qessxz2g7eg6kct35zpo67oua27acz2y4"
şimdi ise Remix IDE'yi açalım ve akıllı kontratımızı yazmaya başlayalım.
Kod:
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.24;
import "@openzeppelin/contracts/token/ERC721/extensions/ERC721URIStorage.sol";
import "@openzeppelin/contracts/access/Ownable.sol";
contract DeadNFT is ERC721URIStorage, Ownable {
uint256 public nextTokenId;
constructor() ERC721("DeadNFT", "DNFT") Ownable(msg.sender) {}
function mint(address to) public onlyOwner {
string memory metadataURI = "https://ipfs.io/ipfs/bafkreidxaelcmkj4ncw4d7c77qessxz2g7eg6kct35zpo67oua27acz2y4";
_safeMint(to, nextTokenId);
_setTokenURI(nextTokenId, metadataURI);
nextTokenId++;
}
}
Şimdi kodumuzu adım adım açalım.
- // SPDX-License-Identifier: MIT : kontratın MIT lisansı ile yayımlandığını belirtir.
- pragma solidity ^0.8.24: sürüm
- import "@openzeppelin/contracts/token/ERC721/extensions/ERC721URIStorage.sol": NFT'lere URL eklememizi sağlar. (_setTokenURL) fonksiyonu içerir. Her tokene özel metadata bağlantısı tanımlayabiliriz.
- import "@openzeppelin/contracts/access/Ownable.sol": Bu kütüphane sadece kontrata sahibi erişmemizi sağlar.
- contract DeadNFT is ERC721URIStorage, Ownable {: DeadNFT adından kontrat oluşturmuş oluruz ve içe aktardağımız modüllerden kalıtım alır.
- uint256 public nextTokenId; : Her yeni NFT için yeni bir ID değeri sağlar.
- constructor() ERC721("DeadNFT", "DNFT") Ownable(msg.sender) {}: Token adı, Sembolünü ayarlar, kontratın sahibi olarak ilk dağıtan adres ayarlanır.
- function mint(address to) public onlyOwner {
string memory metadataURI = "https://ipfs.io/ipfs/bafkreidxaelcmkj4ncw4d7c77qessxz2g7eg6kct35zpo67oua27acz2y4";
_safeMint(to, nextTokenId);
_setTokenURI(nextTokenId, metadataURI);
nextTokenId++;
}
_setTokenURI(nextTokenId, metadataURI): NFT'ye metadata URI'si atar. nexTokenId++: sonraki NFT için ID artar.
Kodumuzun son haline bakalım.
Sonrasında kontratımızı compile edip sepolia test ağında deploy edelim.
Gördüğünüz gibi Test ağına başarılı bir biçimde attık. Şimdi ilk NFT mizi kendi cüzdanımıza gönderelim. Bunun için sol alttaki Deploy edilmiş kontratları test ettiğimiz panelden mint fonksiyonunu istediğimiz cüzdan adresimizi girip gönderiyoruz.
Transfer için gas fee ödedikten sonra başarılı bir şekilde çıktı alacağız. Ancak cüzdanımızdaki NFT'lere girdiğimizde hiç bir şey görmeyebiliriz. bunun sebebi kontratımızı doğrulamamış olmamız. Bu yüzden NFT'imizi içe aktarmamız gerekiyor. Cüzdanımızın NFT kısmına "içe aktar" a basalım ve sonrasında kontrat adresimizi girelim. Burada farklı olarak bizden NFT ID si isteyecektir. İlk yaptığımız tokenler için bu ID "0" olacaktır.
sonrasında cüzdanımıza tekrar baktığımızda NFT'mizi göreceğiz.
gördüğünüz gibi kendi sanal varlığımızı bu şekilde artık sahiplenmiş olduk ve ona değer kazandırdık. Dilerseniz yazdığımız bu tokeni kontrol etmek için Sepolia Etherscanden kontrol sağlayabilirsiniz.
"0xeb0704389ff42a2416268258cf6d030d2d0eaf20"
Bu yazımızda NFT'lerin ne olduğunu ve ERC-721 ve ERC-1155 standardlarını öğrendik. Ayrıca kendi sanal varlığımızı nasıl NFT'lere dönüştürebileceğimizi öğrendik. Bir dahaki konumuzda Ana ağı ve ana ağa nasıl token yayınlayacağımızı, yazdığımız kontratları nasıl doğrulayacağımızı öğreneceğiz. İyi forumlar.
Türkiye Cumhuriyeti’ni kuran Türkiye halkına Türk milleti denir…
Sonrasında kontratımızı compile edip sepolia test ağında deploy edelim.

Gördüğünüz gibi Test ağına başarılı bir biçimde attık. Şimdi ilk NFT mizi kendi cüzdanımıza gönderelim. Bunun için sol alttaki Deploy edilmiş kontratları test ettiğimiz panelden mint fonksiyonunu istediğimiz cüzdan adresimizi girip gönderiyoruz.

Transfer için gas fee ödedikten sonra başarılı bir şekilde çıktı alacağız. Ancak cüzdanımızdaki NFT'lere girdiğimizde hiç bir şey görmeyebiliriz. bunun sebebi kontratımızı doğrulamamış olmamız. Bu yüzden NFT'imizi içe aktarmamız gerekiyor. Cüzdanımızın NFT kısmına "içe aktar" a basalım ve sonrasında kontrat adresimizi girelim. Burada farklı olarak bizden NFT ID si isteyecektir. İlk yaptığımız tokenler için bu ID "0" olacaktır.

sonrasında cüzdanımıza tekrar baktığımızda NFT'mizi göreceğiz.

gördüğünüz gibi kendi sanal varlığımızı bu şekilde artık sahiplenmiş olduk ve ona değer kazandırdık. Dilerseniz yazdığımız bu tokeni kontrol etmek için Sepolia Etherscanden kontrol sağlayabilirsiniz.
"0xeb0704389ff42a2416268258cf6d030d2d0eaf20"
Bu yazımızda NFT'lerin ne olduğunu ve ERC-721 ve ERC-1155 standardlarını öğrendik. Ayrıca kendi sanal varlığımızı nasıl NFT'lere dönüştürebileceğimizi öğrendik. Bir dahaki konumuzda Ana ağı ve ana ağa nasıl token yayınlayacağımızı, yazdığımız kontratları nasıl doğrulayacağımızı öğreneceğiz. İyi forumlar.
