Bir NFT Nasıl Basılır (NFT Eğitim Serisi Bölüm 2/3)
Beeple(opens in a new tab): 69 Milyon ABD Doları3LAU(opens in a new tab): 11 Milyon ABD Doları Grimes(opens in a new tab): 6 Milyon ABD Doları
Hepsi, Alchemy'nin güçlü API'sini kullanarak NFT'lerini bastı. Bu öğreticide, aynısını <10 dakikada nasıl yapacağınızı size öğreteceğiz.
“NFT basımı”, blok zincirinde ERC-721 token'ınızın benzersiz bir örneğini yayınlama eylemidir. Bu NFT eğitim serisinin 1. Bölümünde hazırladığımız akıllı sözleşmemizi kullanarak web3 becerilerimizi gösterelim ve bir NFT basalım. Bu eğitimin sonunda, keyfinizin (ve cüzdanınızın) istediği kadar NFT basabileceksiniz!
Başlayalım!
Adım 1: Web3'ü kurun
NFT akıllı sözleşmenizi oluşturmaya ilişkin ilk öğreticiyi izlediyseniz, zaten Ethers.js kullanma deneyiminiz vardır. Web3, Ethereum blok zincirine istek oluşturmayı kolaylaştırmak için kullanılan bir kütüphane olduğu için Ethers'a benzer. Bu eğitimde, otomatik yeniden denemeler ve güçlü WebSocket desteği sunan gelişmiş bir web3 kütüphanesi olan Alchemy Web3(opens in a new tab)'ü kullanacağız.
Projenizin ana dizininde şunu çalıştırın:
1npm install @alch/alchemy-web32
Adım 2: Bir mint-nft.js dosyası oluşturun
Komut dosyaları dizininizin içinde bir mint-nft.js dosyası oluşturun ve aşağıdaki kod satırlarını ekleyin:
1require("dotenv").config()2const API_URL = process.env.API_URL3const { createAlchemyWeb3 } = require("@alch/alchemy-web3")4const web3 = createAlchemyWeb3(API_URL)5Kopyala
Adım 3: Sözleşme ABI'nizi alın
Sözleşme ABI'miz (Uygulama İkili Arayüzü), akıllı sözleşmemizle etkileşim kurmak için kullanılan arayüzdür. Sözleşme ABI'lerı hakkında daha fazlasını buradan(opens in a new tab) öğrenebilirsiniz. Hardhat, bizim için otomatik olarak bir ABI oluşturur ve bunu MyNFT.json dosyasına kaydeder. Bunu kullanmak için mint-nft.js dosyamıza aşağıdaki kod satırlarını ekleyerek içeriği ayrıştırmamız gerekecek:
1const contract = require("../artifacts/contracts/MyNFT.sol/MyNFT.json")2Kopyala
ABI'yi görmek istiyorsanız onu konsolunuza yazdırabilirsiniz:
1console.log(JSON.stringify(contract.abi))2Kopyala
Mint-nft.js'yi çalıştırmak ve ABI'nizin konsola yazdırıldığını görmek için terminalinize gidin ve şunu yürütün
1node scripts/mint-nft.js2Kopyala
Adım 4: IPFS kullanarak NFT'niz için meta verileri yapılandırın
Bölüm 1'deki öğreticimizden hatırlarsanız, mintNFT akıllı sözleşme fonksiyonumuz, NFT'nin meta verilerini açıklayan bir JSON belgesine çözümlemesi gereken bir tokenURI parametresini alır; bu, NFT'yi gerçekten hayata geçiren ve yapılandırılabilir özelliklere sahip olmasını sağlayan şeylerdir: ad, açıklama, resim ve diğer nitelikler gibi.
Gezegenler Arası Dosya Sistemi (IPFS), dağıtılmış bir dosya sisteminde veri depolamak ve paylaşmak için merkeziyetsiz bir protokol ve eşler arası ağdır.
Uygun bir IPFS API'si ve araç takımı olan Pinata'yı, NFT'mizin gerçekten merkeziyetsiz olmasını sağlamak için, NFT varlığımızı ve meta verilerimizi depolamak için kullanacağız. Pinata hesabınız yoksa buradan(opens in a new tab) ücretsiz bir hesap açın ve e-postanızı doğrulamak için adımları tamamlayın.
Bir hesap oluşturduğunuzda:
"Files" (Dosyalar) sayfasına gidin ve sayfanın sol üst köşesindeki mavi "Upload" (Yükle) düğmesine tıklayın.
Pinata'ya bir resim yükleyin: Bu, NFT'niz için resim varlığı olacaktır. Varlığa istediğiniz adı verin
Yükledikten sonra, Dosyalar sayfasındaki tabloda dosya bilgilerini göreceksiniz. Ayrıca bir CID sütunu göreceksiniz. Yanındaki kopyala düğmesine tıklayarak CID'yi kopyalayabilirsiniz. Yüklemenizi
https://gateway.pinata.cloud/ipfs/<CID>
adresinde görebilirsiniz. Örnek olarak IPFS üzerinde kullandığımız resmi burada(opens in a new tab) bulabilirsiniz.
Görsel olarak daha iyi öğrenenler için yukarıdaki adımlar burada özetlenmiştir:
Şimdi Pinata'ya bir belge daha yüklememiz gerekecek. Ama bunu yapmadan önce, onu yaratmamız gerekiyor!
Kök dizininizde nft-metadata.json adında yeni bir dosya oluşturun ve aşağıdaki json kodunu ekleyin:
1{2 "attributes": [3 {4 "trait_type": "Breed",5 "value": "Maltipoo"6 },7 {8 "trait_type": "Eye color",9 "value": "Mocha"10 }11 ],12 "description": "The world's most adorable and sensitive pup.",13 "image": "ipfs://QmWmvTJmJU3pozR9ZHFmQC2DNDwi2XJtf3QGyYiiagFSWb",14 "name": "Ramses"15}16Tümünü gösterKopyala
json'daki veriyi değiştirmekten çekinmeyin. Nitelikler bölümündekileri kaldırabilir veya buraya ekleme yapabilirsiniz. En önemlisi, görüntü alanının IPFS görüntünüzün konumunu gösterdiğinden emin olun: Aksi takdirde NFT'niz (çok sevimli!) bir köpeğin fotoğrafını içerecektir.
Json dosyasını düzenlemeyi bitirdikten sonra, görüntüyü yüklemek için yaptığımız adımları izleyerek kaydedin ve Pinata'ya yükleyin.
Adım 5: Sözleşmenizin bir örneğini oluşturun
Şimdi, sözleşmemizle etkileşime geçmek için, kodumuzda onun bir örneğini oluşturmalıyız. Bunu yapmak için dağıtımdan veya Etherscan(opens in a new tab)dan sözleşmeyi dağıtmak için kullandığınız adresi arayarak alabileceğimiz sözleşme adresimize ihtiyacımız olacak.
Yukarıdaki örnekte, sözleşme adresimiz 0x81c587EB0fE773404c42c1d2666b5f557C470eED'dir.
Sonrasında ise ABI ve adresi kullanarak sözleşmemizi oluşturmak için web3 sözleşme metodunu(opens in a new tab) kullanacağız. mint-nft.js dosyanızda, şunu ekleyin:
1const contractAddress = "0x81c587EB0fE773404c42c1d2666b5f557C470eED"23const nftContract = new web3.eth.Contract(contract.abi, contractAddress)4Kopyala
Adım 6: .env dosyasını güncelleyin
Şimdi, Ethereum zincirine işlemler oluşturmak ve göndermek amacıyla, hesap nonce değeri almak için genel Ethereum hesap adresinizi kullanacağız (aşağıda açıklanacaktır).
Genel anahtarınızı .env dosyanıza ekleyin: Öğreticinin 1. bölümünü tamamladıysanız, .env dosyamız şimdi şöyle görünmelidir:
1API_URL = "https://eth-ropsten.alchemyapi.io/v2/your-api-key"2PRIVATE_KEY = "your-private-account-address"3PUBLIC_KEY = "your-public-account-address"4Kopyala
Adım 7: İşleminizi oluşturun
İlk olarak, mintNFT(tokenData)
isimli bir fonksiyon tanımlayalım ve sıradakileri yaparak işlemimizi oluşturalım:
PRIVATE_KEY ve PUBLIC_KEY anahtarlarınızı
.env
dosyasından alın.Sonrasında, hesap nonce değerini bulmamız gerekecek. Nonce değeri detayı, adresinizden gönderilen işlem sayısını takip etmek için kullanılır: Buna, güvenlik amaçlarından dolayı ve tekrar saldırılarını(opens in a new tab) engellemek için ihtiyacımız vardır. Adresinizden gönderilmiş işlem sayısını almak için, getTransactionCount(opens in a new tab) kullanırız.
Son olarak, işlemimizi aşağıdaki bilgilerle ayarlayacağız:
'from': PUBLIC_KEY
— İşleminizin kaynağı, açık adresimizdir'to': ContractAddress
— Etkileşimde bulunmak ve işlemi göndermek istediğimiz sözleşme'nonce': nonce
— Adresimizden gönderilen işlem sayısını içeren hesap nonce değeri'gas': trialGas
— İşlemi tamamlamak için gereken tahmini gaz'data': nftContract.methods.mintNFT(PUBLIC_KEY, md).encodeABI()
— Bu işlemde gerçekleştirmek istediğimiz hesaplama: Bu durumda bir NFT basımıdır
Mint-nft.js dosyanız şimdi şöyle görünmelidir:
1 require('dotenv').config();2 const API_URL = process.env.API_URL;3 const PUBLIC_KEY = process.env.PUBLIC_KEY;4 const PRIVATE_KEY = process.env.PRIVATE_KEY;56 const { createAlchemyWeb3 } = require("@alch/alchemy-web3");7 const web3 = createAlchemyWeb3(API_URL);89 const contract = require("../artifacts/contracts/MyNFT.sol/MyNFT.json");10 const contractAddress = "0x81c587EB0fE773404c42c1d2666b5f557C470eED";11 const nftContract = new web3.eth.Contract(contract.abi, contractAddress);1213 async function mintNFT(tokenURI) {14 const nonce = await web3.eth.getTransactionCount(PUBLIC_KEY, 'latest'); //get latest nonce1516 //the transaction17 const tx = {18 'from': PUBLIC_KEY,19 'to': contractAddress,20 'nonce': nonce,21 'gas': 500000,22 'data': nftContract.methods.mintNFT(PUBLIC_KEY, tokenURI).encodeABI()23 };24 }25Tümünü gösterKopyala
Adım 8: İşlemi imzalayın
Artık işlemimizi oluşturduğumuza göre, göndermek için imzalamamız gerekiyor. Özel anahtarımızı burada kullanacağız.
web3.eth.sendSignedTransaction
bize, işlemimizin kazıldığından ve ağdan düşmediğinden emin olmak için kullanabileceğimiz işlem hash değeri verecektir. İşlem imzalama bölümünde, işlemimizin başarılı olup olmadığını anlamamız için bazı hata kontrolleri eklediğimizi göreceksiniz.
1require("dotenv").config()2const API_URL = process.env.API_URL3const PUBLIC_KEY = process.env.PUBLIC_KEY4const PRIVATE_KEY = process.env.PRIVATE_KEY56const { createAlchemyWeb3 } = require("@alch/alchemy-web3")7const web3 = createAlchemyWeb3(API_URL)89const contract = require("../artifacts/contracts/MyNFT.sol/MyNFT.json")10const contractAddress = "0x81c587EB0fE773404c42c1d2666b5f557C470eED"11const nftContract = new web3.eth.Contract(contract.abi, contractAddress)1213async function mintNFT(tokenURI) {14 const nonce = await web3.eth.getTransactionCount(PUBLIC_KEY, "latest") //get latest nonce1516 //the transaction17 const tx = {18 from: PUBLIC_KEY,19 to: contractAddress,20 nonce: nonce,21 gas: 500000,22 data: nftContract.methods.mintNFT(PUBLIC_KEY, tokenURI).encodeABI(),23 }2425 const signPromise = web3.eth.accounts.signTransaction(tx, PRIVATE_KEY)26 signPromise27 .then((signedTx) => {28 web3.eth.sendSignedTransaction(29 signedTx.rawTransaction,30 function (err, hash) {31 if (!err) {32 console.log(33 "The hash of your transaction is: ",34 hash,35 "\nCheck Alchemy's Mempool to view the status of your transaction!"36 )37 } else {38 console.log(39 "Something went wrong when submitting your transaction:",40 err41 )42 }43 }44 )45 })46 .catch((err) => {47 console.log(" Promise failed:", err)48 })49}50Tümünü gösterKopyala
Adım 9: mintNFT'yi çağırın ve mint-nft.js düğümünü çalıştırın
Pinata'ya yüklediğiniz metadata.json'ı hatırlıyor musunuz? Pinata'dan hash kodunu alın ve mintNFT https://gateway.pinata.cloud/ipfs/<metadata-hash-code>
fonksiyonuna parametre olarak aşağıdakini iletin
Hash kodunu şu şekilde alırsınız:
Pinata'da nft meta veri hash kodunuzu nasıl alırsınız
Kopyaladığınız hash kodunun metadata.json'unuza yönlendirdiğini
https://gateway.pinata.cloud/ipfs/<metadata-hash-code>
sayfasını ayrı bir pencereye iki kez kontrol edin. Sayfa aşağıdaki ekran görüntüsüne benzer görünmelidir:
(opens in a new tab)
Sayfanız json meta verilerini göstermelidir
Sonuç olarak kodunuz şöyle görünmelidir:
1require("dotenv").config()2const API_URL = process.env.API_URL3const PUBLIC_KEY = process.env.PUBLIC_KEY4const PRIVATE_KEY = process.env.PRIVATE_KEY56const { createAlchemyWeb3 } = require("@alch/alchemy-web3")7const web3 = createAlchemyWeb3(API_URL)89const contract = require("../artifacts/contracts/MyNFT.sol/MyNFT.json")10const contractAddress = "0x81c587EB0fE773404c42c1d2666b5f557C470eED"11const nftContract = new web3.eth.Contract(contract.abi, contractAddress)1213async function mintNFT(tokenURI) {14 const nonce = await web3.eth.getTransactionCount(PUBLIC_KEY, "latest") //get latest nonce1516 //the transaction17 const tx = {18 from: PUBLIC_KEY,19 to: contractAddress,20 nonce: nonce,21 gas: 500000,22 data: nftContract.methods.mintNFT(PUBLIC_KEY, tokenURI).encodeABI(),23 }2425 const signPromise = web3.eth.accounts.signTransaction(tx, PRIVATE_KEY)26 signPromise27 .then((signedTx) => {28 web3.eth.sendSignedTransaction(29 signedTx.rawTransaction,30 function (err, hash) {31 if (!err) {32 console.log(33 "The hash of your transaction is: ",34 hash,35 "\nCheck Alchemy's Mempool to view the status of your transaction!"36 )37 } else {38 console.log(39 "Something went wrong when submitting your transaction:",40 err41 )42 }43 }44 )45 })46 .catch((err) => {47 console.log("Promise failed:", err)48 })49}5051mintNFT("ipfs://QmYueiuRNmL4MiA2GwtVMm6ZagknXnSpQnB3z2gWbz36hP")52Tümünü gösterKopyala
Şimdi, NFT'nizi dağıtmak için node scripts/mint-nft.js
komutunu çalıştırın. Birkaç saniye sonra terminalinizde şöyle bir yanıt görmelisiniz:
1The hash of your transaction is: 0x10e5062309de0cd0be7edc92e8dbab191aa2791111c44274483fa766039e0e0023Check Alchemy's Mempool to view the status of your transaction!4
Sonrasında, işleminizin durumunu (beklemede, kazılmış veya ağdan düşürülmüş) görmek için Alchemy bellek havuzunuzu(opens in a new tab) ziyaret edin. İşleminiz düştüyse, Ropsten Etherscan(opens in a new tab)'i kontrol etmek ve işlem hash değerinizi aramak da faydalı olur.
(opens in a new tab)
Etherscan'da NFT işlem hash değerinizi görüntüleyin
İşte bu kadar! Ethereum blok zincirinde bir NFT ile dağıtım VE basım yaptınız
Keyfinizin (ve cüzdanınızın) istediği kadar NFT'yi mint-nft.js'yi kullanarak basabilirsiniz! NFT'nin meta verilerini açıklayan yeni bir tokenURI'yi ilettiğinizden emin olun (aksi takdirde, sonuç olarak farklı kimliklere sahip bir sürü özdeş NFT oluşturursunuz).
Büyük ihtimalle cüzdanınızda NFT'nizi gösterebilmek istersiniz: Bu nedenle 3. Bölüm: NFT'nizi Cüzdanınızda Nasıl Görüntüleyebilirsiniz kısmına göz atmayı unutmayın!
Son düzenleme: , Invalid DateTime