JavaScript ile NFT’ler nasıl oluşturulur

Şubat 2021’de Figma CEO’su Dylan Fields, 7,5 milyon dolara bir NFT sanat eseri sattı . Benzer şekilde, Twitter’ın kurucu ortağı Jack Dorsey, Twitter’daki ilk tweet’ini NFT olarak 2.915.835.47 dolara sattı .

Bir NFT (karşılıksız token), bir varlığın sahipliğini dijital olarak temsil eden büyüleyici yeni bir teknolojidir. Bu eğitimde, bazı önemli arka plan bilgilerini ele alacağız, üçüncü taraf hizmetleri ayarlayacağız ve son olarak kendi NFT’mizi Ropsten Testnet’e kodlayıp dağıtacağız.

Başlayalım!

Arkaplan bilgisi

Kendi NFT’mizi oluşturmadan önce, NFT’lerin çalışmasını sağlayan teknolojilere ve özelliklere bir göz atalım.

Fungible vs NonFungible

Değiştirilebilirlik , esasen, aynı değere sahip benzer bir öğe için bir öğeyi değiştirme yeteneğidir. Beş dolarlık bir banknot düşünün. Dünyanın her yerinde her zaman aynı miktara eşittir. Beş dolarlık banknotları beş tane 1 dolarlık banknotla değiştirebilirsiniz ve bunlar her zaman aynı değerdedir.

Öte yandan, karşılıksız kalemler birbirine göre aynı değere sahip değildir. Örneğin, Mona Lisa’nın birebir kopyası, her şekilde aynı olmasına rağmen, orijinal tabloyla aynı değerde değildir. Değiştirilemeyen kalemler doğası gereği benzersizdir ve başka herhangi bir kalemle eşdeğer olarak kabul edilemez.

Bir öğe hem değiştirilebilir hem de değiştirilemez olabilir. Örneğin, bir uçakta ekonomi sınıfındaki iki koltuk aynı fiyattayken, bir kişi camdaki bir koltuğa manevi değer vererek o kişi için diğer her koltuğun değerini düşürebilir.

Blok zinciri

Bir blockchain, veritabanı veya dijital defteri gibi işlemleri izler. Zincirin parçası olan birkaç bilgisayar sisteminde çoğaltılır. NFT’mizi Ethereum blok zincirinde inşa edeceğiz.

ERC721 tokenlerin basılması

Darphane, ilk kez bir şey yaratma sürecidir veya bizim durumumuzda, blok zincirinde ERC721 tokenimizin benzersiz bir örneğini yayınlama sürecidir . ERC-721 , bir NFT oluşturma standardıdır ve bir ERC721 belirteci, Ethereum blok zincirinde yayınlanan dijital içeriğin benzersiz bir temsilidir. İki token asla aynı değildir, bu nedenle aynı kod bloğuyla her yeni jeton bastığınızda, yeni bir adres oluşturulur.

Akıllı sözleşmeler ve NFT’ler

Akıllı sözleşmeler , blok zincirine dağıtılan ve olduğu gibi çalışan basit programlardır, yani bir kullanıcı tarafından kontrol edilmezler. Belirteçlerimizi oluşturmak ve izlemek için akıllı bir sözleşme kullanabiliriz.

NFT, ERC-721 standardına uyan ve halka açık bir blok zincirinde yaşayan dijital bir veri deposudur. NFT’ler, Tweet gibi dijital bir öğe veya kapüşonlu gibi fiziksel bir öğe olabilecek temsil ettikleri varlık hakkında bilgi veya veri içerir .

Akıllı bir sözleşme, ERC-721 standardını uygularsa NFT olarak kabul edilebilir ve bir NFT, akıllı sözleşmenin bir örneğidir. Her yeni NFT bastığımızda, blok zincirine dağıtılan akıllı sözleşme kodunu kullanırız.

Genel ağlar: Mainnet ve Testnet

Ethereum birden fazla ağ kullanır. Üretimde kullanılan ağa genellikle Mainnet, test için kullanılan diğerlerine ise Testnet denir. Biz oluşturmak NFT dağıtacağım Ropsten testnet , Ethereum için kanıtı çalışması testnet.

En sonunda NFT’mizi üretime veya Mainnet’e dağıttığımızda, Ropsten Testnet’te sahip olduğumuz işlem geçmişi ve bakiyelerin taşınmayacağını unutmayın. Testnet’i halka açık bir hazırlama/geliştirme ortamı ve Mainnet’i bir üretim ortamı olarak düşünün.

Özel ağlar

Bir ağ, düğümleri genel blok zincirine bağlı değilse özel olarak kabul edilir. Ethereum blok zincirini yerel makineniz gibi özel bir ağda veya Mainnet veya Testnet’te erişilemeyen konsorsiyum ağları gibi bir grup makinede çalıştırabilirsiniz.

Ethereum blok zincirini bir intranet gibi bir grup makinede çalıştırmak, blokları ve işlem verilerini doğrulayan bir istemci üzerinde çalışan bir Ethereum yazılımı olan bir düğüm ile işlemlerin doğrulanmasını gerektirir .

HardHat ve Ganache , akıllı sözleşme uygulamanızı derlemek, test etmek, dağıtmak ve hatalarını ayıklamak için yerel makinenizde çalıştırabileceğiniz iki Ethereum blok zinciri geliştirme ortamı örneğidir.

Uygulamamızı, ağa bağlı herkesin erişebilmesi için genel bir ağ üzerinde çalıştıracağız.

Musluklar

Uygulamamızı test etmek için, bir musluktan Ethereum kripto para birimi olan Ether’i (ETH) almamız gerekiyor. Musluklar, Ropsten Faucet gibi, test ETH’sini bir adrese belirtmenize ve göndermenize izin veren web uygulamalarıdır ve daha sonra Testnet’teki işlemleri tamamlamak için kullanabilirsiniz.

ETH’nin borsalardaki fiyatı, herhangi bir zamanda Mainnet’te gerçekleşen işlemlerle belirlenir. Ethereum uygulamanızı özel bir ağda çalıştırmayı seçerseniz, ETH testine ihtiyacınız yoktur.

Düğümler ve istemciler

Daha önce belirtildiği gibi, düğümler blokları ve işlem verilerini doğrular. Geth ve OpenEthereum gibi istemcileri kullanarak kendi düğümünüzü oluşturabilir ve blok zincirindeki işlemleri ve blokları doğrulayarak Ethereum blok zincirine katkıda bulunabilirsiniz.

Kendi düğümünüzü oluşturma sürecini atlayabilir ve bunun yerine Alchemy gibi bir hizmet olarak düğüm platformuyla bulutta barındırılan birini kullanabilirsiniz . Geliştirmeden üretime hızla geçebilir ve uygulamamız için önemli ölçümler aldığımızdan emin olabiliriz.

Uygulamamızı Ropsten blok zincirine dağıtmak için Simya API’sini kullanacağız. Alchemy, blok zincirler için AWS olarak tanımlanmıştır ve uygulamamızın nasıl performans gösterdiğine dair içgörüleri görmemize olanak tanıyan geliştirici araçları sağlar.

NFT’yi inşa etmek

Önkoşullar

Fotoğraf çekmeyi seviyorum ve mobil cihazımda çok fazla fotoğraf çekiyorum. Çalışmamı korumanın, fotoğraflarımı seven herkese aktarabileceğim bir NFT basmaktan daha iyi bir yolu var mı? Daha sonra orijinal görüntünün haklarına sahip olduklarını kanıtlamak için Ropsten Testnet veya Mainnet üzerindeki NFT verilerini kullanabilirler.

Eşsiz iyileştirici güçlere sahip olduğuna inanılan aşağıdaki Osun Nehri’nden çektiğim resmi tanımlayan bir NFT oluşturacağız .

Simya hesabı oluşturun

Biz kullanacağız Alchemy bize yerel makinedeki bir Ethereum düğümünü çalıştırmak işlemi atlamak için izin koduna bizim NFT.

“İlk uygulamanızı oluşturun” başlıklı bir ekran göreceğiniz Simya panosuna gidin. Takım adı olarak adımı kullandım ve uygulamaya “The Osun River NFT” adını verdim.

Uygulama için test ağı olarak Ropsten’i seçin.

Devam etmek için Uygulama Oluştur düğmesine basın.

Bir sonraki ekranda ücretsiz planı seçin. Aşağıdaki ekranda Şimdilik atla butonuna basarak ödeme bilgilerini girmekten kurtulabilirsiniz ancak bunu daha sonra yapmayı tercih edebilirsiniz. Son ekranda Sınırlı Kapasite seçeneğini seçin .

Şimdi, uygulamamızın kontrol panelinizde listelendiğini göreceksiniz.

Bir Ethereum hesabı oluşturun

Ethereum hesabı tutmak için bir cüzdan oluşturmamız gerekiyor. Uygulamamızı bir ağa dağıtmak için, gaz ücretleri olarak bilinen ETH cinsinden bir ücret ödememiz gerekecek. Uygulamamızı test ederken, daha sonra bir musluktan alacağımız işlemi tamamlamak için sahte ETH kullanabiliriz.

Chrome uzantısı olarak kullanılabilen sanal bir cüzdan olan MetaMask’ı kullanarak bir Ethereum hesabı oluşturacağız .

MetaMask’i yükledikten ve bir hesap oluşturduktan sonra, Chrome’da MetaMask uzantısını açın ve ağlar listesinden Ropsten Test Ağı’nı seçin.

MetaMask, otomatik olarak ETH cinsinden bir cüzdan adresi oluşturacaktır. Cüzdan adresinizi kopyalamak için Hesap 1’e tıklamanız yeterlidir .

Musluktan ETH almak

Ropsten Faucet kullanarak yeni cüzdanımıza Ether gönderelim. Öncelikle yukarıdan kopyalayabileceğiniz cüzdan adresinizi girin, site cüzdanınıza 1ETH gönderecektir.

MetaMask cüzdanınızı kontrol ederek onaylayabilirsiniz.

Simgemizi ayarlama

NFT jetonumuzu kodlamaya başlayalım! Öncelikle projemiz için yeni bir dizin oluşturun ve npm’yi başlatın:

mkdir the - osun - nehir - nft && cd the - osun - nehir - nft 
npm başlangıç - y

Biz ayarlamanız gerekir Hardhat bize Ropsten testnet dağıtmadan önce yerel makine ve test işlevselliği başvurumuzu derlemek sağlayan Ethereum için bir geliştirme ortamı.

Hardhat’ı projemizde bir geliştirme bağımlılığı olarak kurmak için şunu çalıştırın:

npm kurulumu - D hardhat

Şimdi, şu npx hardhatkomutu kullanarak Hardhat’ı başlatın :

Boş oluştur’uhardhat.config.js seçin . Bu dosyayı daha sonra projemiz için konfigürasyon ayarlamak için kullanacağız.

Şimdi projemizde iki yeni klasör oluşturacağız: biri akıllı sözleşmemizin kodunu tutacak ve diğeri akıllı sözleşme kodunu dağıtan ve onunla etkileşime giren komut dosyalarını tutacak:

mkdir sözleşmeleri && mkdir komut dosyaları

Akıllı sözleşme oluşturma

Akıllı sözleşmeler, basitçe Ethereum blok zincirinde çalıştırılabilen uygulamalardır. Solidity adlı bir dilde yazılırlar .

Akıllı sözleşme kodumuz OpenZeppelin ERC721 uygulamasını temel alacaktır. ERC721, NFT’lerin sahipliğini temsil eden standarttır ve OpenZeppelin sözleşmeleri bize ERC721’i kullanma konusunda biraz esneklik sağlar.

OpenZeppelin sözleşme kitaplığını kurun:

npm  i  @ openzeppelin / sözleşmeler @ 4 . 0 . 0

Senin içinde contractsdizin, oluşturmak için aşağıdaki kodu kullanarak dosyayı. Her satırı netleştiren birkaç yorum bıraktım:OsunRiverNFT.sol

// https://docs.openzeppelin.com/contracts/3.x/erc721'e dayalı sözleşme // SPDX-License-Identifier: MIT 
pragma solidity ^ 0.7 . 3 ;


// ERC721 standart içe aktarımını uygular "@openzeppelin/contracts/token/ERC721/ERC721.sol" ; // "@openzeppelin/contracts/utils/Counters.sol" içe aktarılan jetonların sayısını takip eder ; "@openzeppelin/contracts/access/Ownable.sol" dosyasını içe aktarın ;
 

 
 

// Ownable yöntemine erişmek, yalnızca akıllı sözleşmeyi oluşturan kişinin onunla etkileşime girebilmesini sağlar 
sözleşme TorNFT , ERC721 , Ownable { Counters for Counters kullanarak . Sayaç ; Sayaçlar . Sayaç private _tokenIds ;   
       
     

    // NFT yapıcısının adı ve sembolü () public ERC721 ( "TheOsunRiver" , "TOR" ) {}
        

    // NFT'yi basmak/oluşturmak için bir işlev oluşturun // alıcı bir tür adres alır. Bu, akıllı sözleşme kullanılarak basılan NFT'yi alması gereken kullanıcının cüzdan adresidir // tokenURI, NFT hakkında meta verileri içeren bir dize alır
   
    

    function createNFT ( adres alıcısı , dize belleği tokenURI ) public onlyOwner
         döndürür ( uint256 ) { 
        _tokenIds . artış ();  
         
    

        uint256 newItemId = _tokenIds . akım (); 
        _mint ( alıcı , yeniItemId ); 
        _setTokenURI ( newItemId , tokenURI );

        // yeni oluşturulan simgenin kimliğini döndürür newItemId ; } }
        
    

NFT’mizin geçerli bir ERC721 belirteci olması için tüm ERC721 standartlarını karşılaması gerekir. ERC721 standartlarını dosyamıza aktararak bunu sağlar.import "@openzeppelin/contracts/token/ERC721/ERC721.sol";

MetaMask’i projeye bağlama

Şimdi MetaMask cüzdanımızı projemize bağlayacağız. Sanal cüzdandaki her işlemin tamamlanması için özel bir anahtar gerekir, bu nedenle MetaMask özel anahtarımızı almamız gerekecek.

Chrome tarayıcınızda MetaMask uzantısını açın, sağ üstteki üç noktayı tıklayın ve Hesap Ayrıntıları seçeneğini seçin  Ardından, Özel Anahtarı Dışa Aktar düğmesini tıklayın. Özel anahtarınızı görmek için şifrenizi girin, ardından kopyalayın.

GitHub gibi sürüm kontrol platformlarını kullanırken açığa çıkmasını önlemek için özel anahtarımızı projemizin kod tabanında güvende tutmak önemlidir. Anahtarlarımızı güvende tutmak için dotenv paketini kuracağız :

npm i dotenv

Projenizin kök dizininde bir dosya oluşturun , ardından daha önceki MetaMask özel anahtarınızı buna ekleyin. Simya Panonuza giderek, Uygulamalar açılır menüsünü tıklayarak, daha önce oluşturduğunuz Uygulamayı ve ardından Anahtarı Görüntüle düğmesini seçerek bulabileceğiniz simyanızı da ekleyeceksiniz :.envAPI_URL

METAMASK_PRIVATE_KEY  = "yourMetamaskPrivateKey" API_URL = "https://eth-ropsten.alchemyapi.io/v2/your-api-key" 

Ether.js’yi kurma

Ether.js , Ethereum blok zinciri ile etkileşimi basitleştiren bir kütüphanedir. Hardhat için Ether eklentisini kullanacağız:

NPM  ı  - D  @ nomiclabs / hardhat - eterler  ' eterler @ ^ 5.0.0'

Baş biz yükledim yeni bağımlılıklar bazılarını eklemek için daha önce oluşturulan dosyanın:hardhat.config.js

/**
* @type import('hardhat/config').HardhatUserConfig
*/ gerektirir ( 'dotenv' ). yapılandırma (); gerektirir ( "@nomiclabs/hardhat-eters" ); const { API_URL , METAMASK_PRIVATE_KEY } = süreç . ortam ; modül . ihracat = { sağlamlık : "0.7.3" , defaultNetwork : "ropsten" , ağlar : { hardhat : {}, ropsten : { url : API_URL ,


  
 
    
    
    
       
       
         
         hesaplar : [ `0x ${METAMASK_PRIVATE_KEY} ` ] } }, } 
      
   

Konfigürasyon dosyamızda neler olduğunu gözden geçirelim:

URL’mizde barındırılan düğümler aracılığıyla Ropsten Testnet’e bağlanacağız. Yapılandırma dosyaları hakkında daha fazla bilgiyi Hardhat’ta okuyabilirsiniz .

Şimdi, Hardhat’ın her şeyin doğru çalıştığını kontrol etmek için sağladığı compile görevi çalıştıralım :

npx kask derlemesi

Aşağıdaki gibi bir başarı mesajı görmelisiniz. Terminalde görünen uyarıları yok sayabilirsiniz.

Dağıtım komut dosyası oluşturma

Akıllı sözleşme kodumuzu tamamladığımıza göre, akıllı sözleşmemizi Ethereum blok zincirine yerleştirmek için gerekli komut dosyalarını yazalım.

Senin içinde scriptsdizin adı verilen yeni bir dosya oluşturmak :deploy.js

zaman uyumsuz işlev ana (  ) { const [ konuşlandırıcı ] = etherleri bekliyor . getSigners (); konsol . log ( "hesabı ile dağıtma sözleşmeleri:" , deployer . adresi ); 
       
    

    konsol . log ( "Hesap bakiyesi:" , ( bekliyoruz deployer . getBalance . ()) toString ()); const Devri = bekliyoruz eterler . getContractFactory ( "TorNFT" ); 
     

    // Başlangıç dağıtım, bir söz bir sözleşme nesnesine giderir dönen const tor = bekliyoruz TOR . konuşlandır (); konsol . log ( "Sözleşme şu adrese dağıtıldı:" , tor . address ); }
     
    
 

 ana () . daha sonra ( () => proses . Çıkış ( 0 )) . catch ( error => { konsol . error ( hata ); 
     işlem . çıkış ( 1 ); });
    
     
     

Artık Hardhat konuşlandırma görevini çalıştırabiliriz :

npx hardhat komut dosyalarını çalıştır / konuşlandır . js -- ağ bağlantısı

Hardhat’a belirli bir ağa bağlanmasını söylemek için bayrağı ekliyoruz, bizim durumumuzda, Ropsten.--network ropsten

Birkaç saniye sonra akıllı sözleşmemizin Ropsten Testnet’e başarıyla yerleştirildiğini göreceğiz. Terminal günlüklerimizden akıllı sözleşmemiz için yeni oluşturulan adresi görebiliriz.

Şimdi akıllı sözleşmemizin blok zincirine yerleştirildiğini onaylayalım. İçin baş Ropsten etherscan ve arama çubuğuna sözleşme adresi yapıştırın. Sözleşmenizle ilgili ayrıntıları bir dakika içinde görmelisiniz.

MetaMask üzerinde Ethereum cüzdanınızı kontrol ederseniz, işlemleri gerçekleştirmek için gereken gaz ücretleri nedeniyle sahip olduğunuz ETH miktarının azaldığını fark edeceksiniz. Şimdi, akıllı sözleşmemizi Ropsten Testnet’e başarıyla uyguladık!

NFT basmak

Akıllı sözleşme kodumuz iki argüman alır: alıcı adresi ve bir tokenURI. TokenURI, jetonumuzu eklemek istediğimiz verilere bağlanır. Alıcı adresini kullanmak için, jetonu verdiğiniz kullanıcının cüzdan adresine iletmeniz yeterlidir.

Blok zincirinde depolanan verilerin birden fazla ağda işlenmesi, doğrulanması ve çoğaltılması gerekir, bu da blok zincirinde veri depolamayı çok pahalı hale getirir. Tüm bir görüntünün blok zincirine yüklenmesi önerilmez ve bunun yerine yalnızca NFT için meta verileri saklayabilirsiniz.

Bir NFT’nin URL’si blok zincirinde saklanabilmesine rağmen, bağlantı herhangi bir zamanda çevrimdışı olabilir. Ayrıca, bir URL’deki içeriğe erişimi olan herkes onu değiştirebilir.

Bir NFT sanatçı zaman bir örnek halıyı çekip satmıştı. OpenSea o alıcılara satmıştı orijinal görüntüler değişti yani. Bu görüntülerin bağlantısı hala blok zincirinde mevcuttu, ancak orijinal içerik tamamen değiştirilmişti.

Bu nedenle, uygun maliyetli, kalıcı, merkezi olmayan ve değişmez olan verileri depolamak için bir yola ihtiyacımız var.

IPFS’yi kullanma

IPFS , yukarıdaki sorunu çözmek için içerik adreslemeyi kullanan dosyaları depolamak ve bunlara erişmek için dağıtılmış bir sistemdir . IPFS’ye yüklenen herhangi bir veri parçasına benzersiz bir içerik tanımlayıcısı (CID) verilecektir. Bir veri parçası için bir Müşteri Kimliği oluşturulduğunda, bu Müşteri Kimliği her zaman bu verileri temsil eder ve veriler değiştirilemez.

İşte örnek bir IPFS URI’si:

ipfs : //bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi

Bir IPFS URI’si oluşturmak için CID’nin önüne . Bir tarayıcıda, IPFS URI’leri şu biçimi izler:ipfs://

https : //i pfs.io /ipfs/ {CID}

URI, içeriği görüntülemek için kullanıcı aracınız (tarayıcı) tarafından çözülecektir. IPFS URI’lerini çözebilen birkaç tarayıcı vardır , ancak biz Google Chrome tarayıcısının 90 sürümünü kullanacağız.

web3.js’yi kurma

NFT’mize meta veri eklemeye devam edelim. Biz yükleyeceğiniz Simya Web3 paketi:

npm  install  @ alch / simya - web3

Onun Docs göre eb3.js sen HTTP IPC veya WebSocket kullanarak yerel veya uzaktan Ethereum düğümü ile etkileşim sağlayan kütüphanelerin topluluğudur.

Alchemy, otomatik yeniden denemeler ve güçlü WebSocket desteği sunarak işlevselliğini genişleterek Web3.js kitaplığını sarar .

NFT’leri basmak için komut dosyaları ayarlama

Şimdi, NFT’mizi basmak için senaryoları yazmanın zamanı geldi.

Senin içinde scripts klasöründe adlı bir dosya oluşturun . Ardından, aşağıdaki kod bloğunu ekleyin:mint-nft.js

gerektirir ( 'dotenv' ). yapılandırma (); const API_URL = süreç . env . API_URL ; const { createAlchemyWeb3 } = zorunlu ( "@alch/alchemy-web3" ); const alchemyWeb3 = createAlchemyWeb3 ( API_URL ); const sözleşme = zorunlu ( "../artifacts/contracts/OsunRiverNFT.sol/TorNFT.json" );

   

NFT meta verilerini Pinata’ya yükleme

Pinata , NFT’mizin meta verilerini depolamak için IPFS protokolünü kullanmak için bir platformdur. Henüz yapmadıysanız, bir hesap oluşturun.

Oturum açtıktan sonra deniz mavisi yükleme düğmesini seçin, Dosya ‘ yı tıklayın , ardından NFT resminizi seçin.

Resim başarıyla yüklendikten sonra, kontrol panelinizde göreceksiniz. Yukarıdaki IPFS CID sütununun altındaki alfasayısal karakterleri not ettiğinizden emin olun. Onları daha sonra kullanacağız.

Artık imajımızı Pinata’ya yüklediğimize göre, NFT’miz hakkında bilgi tutmak için bir JSON dosyası oluşturalım. Bir NFT basıldığında URI’yi blok zincirinde saklayacağız.

Uygulamanızın kök dizininde adlı bir dosya oluşturun ve aşağıdaki bilgileri ekleyin. Resminizi Pinata’ya yüklediğinizde oluşturulan müşteri kimliğini kullanmak için resim değerini değiştirmeyi unutmayın:nft-metadata.json

{ "description" : "Osogbo Kutsal Korusu'ndaki asma köprüde yakalanan Osun Nehri'nin bir görüntüsü." , "image" : "https://ipfs.io/ipfs/Qmf1r8igsCAFTFjrQrK7jk6uD6YKVYo5dGu7cvm9TmPhJV" , "fotoğrafçı" : "Adebola Adeniran" }
      
      
      

Resim özniteliği için Pinata panomuzdan IPFS CID’sini önek ile eklediğimize dikkat edin . Dosyayı kaydedin, ardından dosyayı yüklemek için Pinata’ya geri dönün.https://ipfs.io/ipfs/

Kontrol panelimizde hem resmi hem de JSON dosyalarını görmelisiniz.

Sözleşmemizin bir örneğini oluşturma

NFT’yi basmak için, akıllı sözleşmemiz Ropsten Testnet’e dağıtıldığında oluşturulan sözleşme adresini alın. Bunu terminal günlüklerimizde görebilirsiniz. Sözleşme adresimiz 0x9436f34035a4885650C8311cA24e3E2DeD2FF0a2 .

 Dosyaya geri dönün ve aşağıdaki kodu ekleyin:scripts/mint-nft.js

const sözleşmeAdres = "0x9436f34035a4885650C8311cA24e3E2DeD2FF0a2" ; const nftContract = yeni alchemyWeb3 . et . Sözleşme ( sözleşme . abi , sözleşme Adresi ); 

 Dosyamızı daha önce kopyaladığımız hesap adresiyle aynı olan genel Ethereum adresimizle güncelleyelim . Adresi dosyamıza ekleyin :.env.env

METAMASK_PRIVATE_KEY = "Metamask Özel anahtarımız" API_URL = "Simya API URL'miz " METAMASK_PUBLIC_KEY = "Metamask genel anahtarımız"

Ardından, bir işlem oluşturmamız gerekecek.

Aşağıdaki kodu  dosyamıza ekleyin . Her adımda ne yaptığımızı açıklamak için yorumlar ekledim:mint-nft.js

const METAMASK_PUBLIC_KEY = süreç . env . METAMASK_PUBLIC_KEY ; const METAMASK_PRIVATE_KEY = süreç . env . METAMASK_PRIVATE_KEY ;


async işlevi mintNFT ( tokenURI ) { // güvenlik nedenleriyle nonce - nonce'yi al . Adresimizden gönderilen // işlem sayısını takip eder ve replay saldırılarını engeller. const Nonce = bekliyoruz alchemyWeb3 . et . getTransactionCount ( METAMASK_PUBLIC_KEY , 'en son' ); const tx = { dan : METAMASK_PUBLIC_KEY , // bizim MetaMask genel anahtar 
    için : contractAddress ,   
    
    
    
   
      // etkileşim kurmak istediğimiz akıllı sözleşme adresi 
    nonce : nonce , // nonce hesabımızdaki işlem sayısı 
    gaz : 1000000 , // işlem 
    verilerini tamamlamak için ücret tahmini : nftContract . yöntemler
       . createNFT ( "0x0d28235B6191a66A3410cc1e3CeBfE53602D7865" , tokenURI ) . encodeABI (), // OsunRiverNFT.sol dosyamızdan createNFT işlevini çağırın ve basılmış NFT'yi alması gereken hesabı iletin. }; }   
       
  

Yeni bir MetaMask cüzdanı oluşturdum ve cüzdan adresini yukarıda geçtim . Dilerseniz bizimkilere de geçebilirsiniz . Üretimde, buraya iletilen cüzdan adresi, NFT’nin alıcısının cüzdan adresi olmalıdır.tx.dataMETAMASK_PUBLIC_KEY

Artık işlem oluşturulduktan sonra, METAMASK_PRIVATE_KEY.

İşlev içindeki dosyaya aşağıdaki kod bloğunu ekleyin :mint-nft.jsmintNFT

  const signPromise = alchemyWeb3 . et . hesaplar . işaretİşlem ( 
    tx ,
    METAMASK_PRIVATE_KEY
  );
  işaretiSöz vermek
    . Sonra ( ( signedTx ) => { 
      alchemyWeb3 . eth . sendSignedTransaction ( 
        signedTx . rawTransaction , fonksiyon ( err , karma ) { eğer (! err ) { konsol . log ( "Bizim işlemin karma şudur:" , 
              karma , "\ nGüvenlik İşlemimizin durumunu görüntülemek için Alchemy's Mempool!" ); } else { console .  
          
            
            
              
              
            
            
            log ( "İşlemimizi gönderirken bir şeyler ters gitti:" ,
              
              hata
            ); } } ); }) . catch ( ( err ) => { konsol . log ( "Promise başarısız oldu:" , err ); });
          
        
      
    
      
      

Son olarak, IPFS CID karmasını şu dosyadan kopyalamamız gerekiyor: nft-metadata.json Pinata’ya daha önce yüklediğimiz dosya ve mintNFTçağrıldığında bunu fonksiyonumuza aktarın :

mintNFT("https://ipfs.io/ipfs/QmdZMtdApdeobM5iCRcWqAMByfG4No8tW4oheb7jQjKgTm") // pass the CID to the JSON file uploaded to Pinata

Yukarıdaki bağlantıyı tarayıcımızda açarsanız, yukarıdaki  CID’li dosyamızı görmelisiniz :nft-metadata.json

Şimdi, NFT’mizi basmak için terminalimizde koşabiliriz . Birkaç saniye bekleyin ve terminalimizde aşağıdaki resimdeki gibi bir yanıt almalısınız.node scripts/mint-nft.js

Şimdi, Etherscan kullanmadan hesabımızda gerçekleşen tüm işlemlerin durumunu izleyen Alchemy Mempool’a gideceğiz.

Etherscan’da yeni basılan NFT’miz hakkında bilgilerin yanı sıra Ethereum blok zincirindeki dosyamıza bağlanan URL’yi görebiliriz.nft-metadata.json

Veri girişi için aşağı kaydırın, ardından giriş verilerinin kodunu çöz düğmesini tıklayın. Dosyada createNFTişlevimize ilettiğimiz verileri görmelisiniz : alıcı cüzdan adresi ve NFT’mizin meta verilerini içeren JSON dosyasının URL’si.contracts/OsunRiverNFT.sol

Eğer ararsanız sözleşme adresine nane etherscan üzerinde NFT için kullanılan, daha doğru basılmış veya olan tüm NFTli bu akıllı sözleşme kullanılarak gerçekleşen tüm işlemlerin kaydını göreceksiniz.

NFT’mizi MetaMask cüzdanımıza ekleme

  1. Ropsten Test Ağı bağlantısını kontrol edin
  2. MetaMask cüzdan uzantısını açın
  3. Click eklenti belirteç düğmesini
  4. Etherscan’dan yeni jetonunuzun sözleşme adresini kopyalayın ve MetaMask’e yapıştırın. MetaMask, jetonun sembolünü otomatik olarak oluşturacaktır.
  5. Click sonraki cüzdan için belirteç eklemek

Sonuç

 

Umarım, NFT’lerin neden bu kadar kargaşaya neden olduğunu anlamışsınızdır. Bu, bir süre etrafta kalması muhtemel olan büyüleyici bir teknolojidir.

Üretimde, adımlar bu eğitimdeki ile tamamen aynıdır. Tek fark, artık Testnet yerine Mainnet ile etkileşime girecek olmanızdır.