1. अल्केमी(Alchemy) के साथ एक एनएफटी(NFT) स्मार्ट कॉन्ट्रैक्ट (ERC721) कैसे बनाए?

सॉलिडिटी के साथ एक स्मार्ट कॉन्ट्रैक्ट विकसित करना और इसे ब्लॉकचेन पर तैनात करना पहली बार में कठिन लग सकता है: सॉलिडिटी, सिक्योरिटी, गैस ऑप्टिमाइजेशन, डेवलपर एनवायरनमेंट और गैस फीस, केवल यह ही कुछ चीज़ें हैं जिनके बारे में आपको जानना होगा, ब्लॉकचेन पर अपना कोड होस्ट करने के लिए।

सौभाग्य से, पिछले कुछ महीनों में, डेवलपर्स के लिए अपने स्मार्ट कॉन्ट्रैक्ट विकास कार्यों को बहुत आसान बनाने के लिए बहुत सारे टूल जारी किए गए हैं।

ओपनज़ेपेलिन विज़ार्ड(OpenZeppelin Wizard) जैसे टूल्स जो डेवलपर्स को कुछ ही समय में कंपोज़ेबल(जिन्हे बनाया जा सके) और सुरक्षित स्मार्ट कॉन्ट्रैक्ट बनाने के लिए क्लिक और राइट(लिखने की) फ़ंक्शनैलिटी प्रदान करते हैं, जिसका उपयोग अल्केमी(Alchemy) जैसे Web3 डेवलपर टूल के साथ किया जाता है, जो ब्लॉकचेन पर डिप्लॉयमेंट कोड लिखने का अनुभव, आसान, तेज़ और विश्वसनीय बनाता है, जैसे की पहले कभी नहीं था।

इस ट्यूटोरियल में, आप सीखेंगे कि अल्केमी(Alchemy), ओपनज़ेपेलिन(OpenZeppelin), रीमिक्स(Remix) और एथेरियम रिंकीबी(Ethereum Rinkeby) का उपयोग करके एक ERC721 (NFT) स्मार्ट कॉन्ट्रैक्ट को कैसे विकसित और तैनात किया जाए।

अधिक सटीक रूप से, आप सीखेंगे:

  • ओपनज़ेपेलिन और रीमिक्स का उपयोग करके स्मार्ट कॉन्ट्रैक्ट कैसे लिखें और संशोधित(मॉडिफाई) करें ?
  • rinkebyfaucet.com का उपयोग करके मुफ्त रिंकीबी ईटीएच(Rinkeby ETH) कैसे प्राप्त करें ?
  • गैस शुल्क बचाने के लिए इसे एथेरियम रिंकीबी टेस्टनेट ब्लॉकचेन पर कैसे तैनात करें ?
  • फाइलबेस(Filebase) का उपयोग करके आईपीएफएस(IPFS) पर एनएफटी(NFT) टोकन मेटाडेटा(Metadata) होस्ट कैसे करें ?
  • एक एनएफटी(NFT) मिंट करें और ओपन सी(OpenSea) पर इसकी विजुअलाईज(कल्पना) करें

आप इस ट्यूटोरियल को वीडियो के रूप भी देख सकते है:

आइए स्मार्ट कॉन्ट्रैक्ट बनाकर इस ट्यूटोरियल को शुरू करें।

ओपनज़ेपेलिन कॉन्ट्रैक्ट विज़ार्ड के साथ ERC721 स्मार्ट कॉन्ट्रैक्ट बनाए।

जैसा कि पहले कहा गया है, इस ट्यूटोरियल में, आप दो मुख्य कारणों से स्मार्ट कॉन्ट्रैक्ट बनाने के लिए ओपनज़ेपेलिन विज़ार्ड का उपयोग करने जा रहे हैं:

  • यह सुरक्षित है।
  • यह स्टैन्डर्ड शिकायत करने वाले स्मार्ट कॉन्ट्रैक्ट प्रदान करता है।

जब स्मार्ट कॉन्ट्रैक्ट लिखने की बात आती है, तो सुरक्षा महत्वपूर्ण है। स्मार्ट कॉन्ट्रैक्ट के एक्सप्लॉइट्स(कारनामों) के कई उदाहरण हैं जिनमें खराब सुरक्षा के कारण दुर्भावनापूर्ण बुरे व्यक्तियों द्वारा सैकड़ों मिलियन डॉलर की चोरी देखी गई है।

एक बार जब आप ब्लॉकचेन पर सही तरीके से स्मार्ट कॉन्ट्रैक्ट तैनात कर देंगे तो आप नहीं चाहेंगे कि कोई आपके सभी कीमती क्रिप्टो या एनएफटी को चुरा ले, सही कहा ना ?

ओपनज़ेपेलिन इस उद्देश्य को पूरा करता है, स्मार्ट कॉन्ट्रैक्ट स्टैंडर्ड(मानकों) (ERC20, ERC721, आदि) के सबसे बड़े अनुरक्षकों में से एक होने के नाते, डेवलपर्स को विश्वसनीय कॉन्ट्रैक्ट विकसित करने के लिए ओपनज़ेपेलिन पूरी तरह से ऑडिट(अंकेक्षण) किए गए कोड को हमें प्रदान करता है जिसे हम इस्तेमाल कर सकते हैं।

अपने ERC721 NFT स्मार्ट कॉन्ट्रैक्ट को विकसित करने के लिए आपको सबसे पहले ओपनज़ेपेलिन स्मार्ट कॉन्ट्रैक्ट विजार्ड के पेज पर जाना होगा

एक बार जब आप पेज पर पहुँच जाएँ, आप निचे दिखाए गए एडिटर को देखेंगे:

UntitledUntitled

ईआरसी(ERC) सटैन्डर्ड के प्रकार और आप जिस तरह का कॉन्ट्रैक्ट लिखना चाहते हैं, उसका चयन करने के लिए ऊपरी बाएं कोने पर स्थित ERC721 बटन पर क्लिक करें:

985985

अब जब आपने कॉन्ट्रैक्ट सटैन्डर्ड(मानक) का चयन कर लिया है, तो बाईं ओर के मेनू पर आपको कई विकल्प दिखाई देने चाहिए:

आइए अपने टोकन का नाम और प्रतीक(सिंबल) चुनकर शुरू करें। “MyToken” वाले टेक्स्ट बॉक्स पर क्लिक करें और इसे एक नाम दें, “Symbol” के साथ भी ऐसा ही करें, और Base URI फ़ील्ड को खाली छोड़ दें (टोकन का नाम OpenSea और Rarible द्वारा संग्रह(कलेक्शन) के नाम के रूप में उपयोग किया जाएगा)।

997997

एनएफटी(NFT) (ERC721) टोकन फ़ीचर्स/सुविधाओं का चयन करें

अब आपको उन फ़ीचर्स/सुविधाओं का चयन करना होगा जिन्हें आप अपने स्मार्ट कॉन्ट्रैक्ट में एकीकृत करना चाहते हैं, "settings"(सेटिंग) सेक्शन के ठीक बाद, आपको "services"(सुविधाएँ) सेक्शन मिलेगा। जहाँ आप अपने स्मार्ट कॉन्ट्रैक्ट में शामिल करने के लिए विभिन्न मॉड्यूल का चयन कर पाएंगे।

516516

इस मामले में, आप निम्नलिखित एकीकरणों का चयन करेंगे:

  • Mintable(मिटेंबल) केवल प्रिविलेजड/विशेषाधिकार प्राप्त अकाउंटस(खातों) द्वारा कॉल करने योग्य मिंट फ़ंक्शन बनाएगा
  • Autoincrement IDs(ऑटोइनक्रिकमेंट आईडी) ऑटोमेटिक/स्वचालित रूप से आपके एनएफटी को इंक्रीमेंटल(वृद्धिशील) आईडी असाइन कर देगी
  • Enumerable(एन्यूमरेबल) आपको ऑन-चेन टोकन एन्यूमरेशन(enumeration) और "totalSupply"(टोटल सप्लाई) जैसे कार्यों तक पहुंचना प्रदान करेगा। जो आपके प्रत्येक एनएफटी में मेटाडेटा और इमेजिस/तस्वीरें को जोड़ने के लिए डिफ़ॉल्ट ERC 721 यूआरआई(URI) स्टोरेज में मौजूद नहीं है।
  • URI Storage(यूआरआई स्टोरेज) URI को हमारे NFT से एसोसिएट(संबद्ध) करने में सक्षम होने के लिए
258258

इस ट्यूटोरियल के लिए, और क्योंकि आप अपनी एनएफटी के आसपास किसी भी प्रकार की टोकनोमिक्स नहीं बना चाहते हैं, निम्नलिखित मॉड्यूल को अचिह्नित छोड़ दें:

  • Burnable(बर्नेब्ल) - टोकंस जलाने(बर्न करने) के लिए
  • Pausable(पॉज़ेबल) - टोकंस ट्रांसफर, बिक्री आदि को रोकने के लिए
  • Votes(वोट्स) - गवर्नेंस/प्रतिनिधि और वोटों जैसी सुविधाएं प्रदान करने के लिए

यदि आप इन मॉड्यूल के बारे में अधिक जानना चाहते हैं, तो ERC721 स्टैंडर्ड(मानक) के बारे में आधिकारिक ओपनज़ेपेलिन दस्तावेज़ देखें।

अब जब आपने अपनी इच्छित सुविधाओं का चयन कर लिया है, तो ओपेनजिपेलिन विज़ार्ड स्मार्ट कॉन्ट्रैक्ट के कोड को बनाएगा, इसे इस तरह दिखना चाहिए:

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

import "@openzeppelin/contracts/token/ERC721/ERC721.sol";
import "@openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol";
import "@openzeppelin/contracts/token/ERC721/extensions/ERC721URIStorage.sol";
import "@openzeppelin/contracts/access/Ownable.sol";

contract Alchemy is ERC721, ERC721Enumerable, ERC721URIStorage, Ownable {
    constructor() ERC721("Alchemy", "ALC") {}

    function safeMint(address to, uint256 tokenId, string memory uri)
        public
        onlyOwner
    {
        _safeMint(to, tokenId);
        _setTokenURI(tokenId, uri);
    }

    // सॉलिडिटी के लिए आवश्यक निम्नलिखित फ़ंक्शन ओवरराइड हैं।

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

    function _burn(uint256 tokenId) internal override(ERC721, ERC721URIStorage) {
        super._burn(tokenId);
    }

    function tokenURI(uint256 tokenId)
        public
        view
        override(ERC721, ERC721URIStorage)
        returns (string memory)
    {
        return super.tokenURI(tokenId);
    }

    function supportsInterface(bytes4 interfaceId)
        public
        view
        override(ERC721, ERC721Enumerable)
        returns (bool)
    {
        return super.supportsInterface(interfaceId);
    }
}

अब इस कोड को कॉपी करने और इसे REMIX IDE(रीमिक्स आईडीई) पर लाने का समय है ताकि इसे मॉडिफाई(संशोधित) और ब्लॉकचैन पर डेप्लॉय(परिनियोजित) किया जा सके ।

REMIX IDE(रीमिक्स आईडीई) के साथ अपने ERC721 कॉन्ट्रैक्ट को मॉडिफाई और डेप्लॉय करें

अब जब आपके पास अपना ERC721 स्मार्ट कॉन्ट्रैक्ट है, आइए इसे मॉडिफाई(संशोधित) करें और इसे रिंकीबी टेस्टनेट पर डेप्लॉय(परिनियोजित) करें। ऐसा करने के लिए, आप रीमिक्स आईडीई का उपयोग करेंगे, जो एक मुफ़्त और वेब-आधारित IDE (इंटीग्रेटेड डेवलपमेंट एनवायरनमेंट/एकीकृत विकास वातावरण) है, जिसे विशेष रूप से सॉलिडिटी के साथ स्मार्ट कॉन्ट्रैक्ट विकास(डेवलपमेंट) के लिए डिज़ाइन किया गया है।

सबसे पहले, जैसा कि आपने देखा होगा, ओपेनजिपेलिन विज़ार्ड एडिटर के टॉप(शीर्ष) पर, "Open in Remix"(रीमिक्स में खोलें) बटन है:

256256

इस पर क्लिक करने पर आपके ब्राउज़र के एक नए टैब में REMIX IDE(रीमिक्स आईडीई) खुल जाएगा।

एनएफटी स्मार्ट कॉन्ट्रैक्ट को मॉडिफाई(संशोधित)करने के लिए रीमिक्स का उपयोग करना

कॉन्ट्रैक्ट के सबसे उपर से शुरू करते हुए, "SPDX-License-Identifier"(एसपीडीएक्स-लाइसेंस-आइडेंटिफायर) है जो यह तह करता है कि आपका कोड किस प्रकार के लाइसेंस के तहत प्रकाशित किया जाएगा - कोड को ओपन सोर्स रखना वेब3(Web3) ऍप्लिकेशन्स में यह एक अच्छा अभ्यास है क्योंकि यह विश्वसनीयता सुनिश्चित करेगा।

// SPDX-License-Identifier: MIT

फिर “pragma”(परागमा) है - कम्पाइलर का वर्जन(संस्करण), जिसे आप स्मार्ट कॉन्ट्रैक्ट कोड कम्पाइल(संकलित) करने के लिए उपयोग करना चाहते हैं, वह निश्चित करता है।
छोटा सिंबल "^" , कम्पाइलर को बताता है कि 0.8.0 से 0.8.9 के बीच का प्रत्येक वर्जन(संस्करण) हमारे कोड को कम्पाइल करने के लिए उपयुक्त है।


// यहाँ पर ^0.8.4 बताता है की 0.8.4 से ऊपर का कोई भी कम्पाइलर इस कोड को कम्पाइल करने के लिए उचित है
pragma solidity ^0.8.4;

फिर हम बहुत सी लाइब्रेरी को आयात/इम्पोर्ट(import) कर रहे हैं और स्मार्ट कॉन्ट्रैक्ट को इनिशियलाइज़/शुरू कर रहे हैं।
उदाहरण के लिए सबसे पहली लाइन में हम "import" कीवर्ड का इस्तेमाल कर के ओपनज़ेपेलिन(openzeppelin) से “ERC721.sol” कॉन्ट्रैक्ट को इम्पोर्ट कर रहे हैं।

import "@openzeppelin/contracts/token/ERC721/ERC721.sol";
import "@openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol";
import "@openzeppelin/contracts/token/ERC721/extensions/ERC721URIStorage.sol";
import "@openzeppelin/contracts/access/Ownable.sol";
import "@openzeppelin/contracts/utils/Counters.sol";

फिर हम स्मार्ट कॉन्ट्रैक्ट को इनिशियलाइज़(प्रारंभ) कर रहे हैं, उन सभी स्टैण्डर्ड (मानकों) को ध्यान में रखते हुए जो हम ओपनज़ेपेलिन रिपॉजिटरी(भंडार) से आयात(इम्पोर्ट) कर रहे हैं:

contract Alchemy is ERC721, ERC721Enumerable, ERC721URIStorage, Ownable {...}

जैसा कि आप देख सकते हैं, safeMint(सेफमिंट) फ़ंक्शन में "only owner"(केवल मालिक) मॉडिफायर/संशोधक होता है - यह केवल स्मार्ट कॉन्ट्रैक्ट के मालिक (स्मार्ट कॉन्ट्रैक्ट को तैनात करने वाला वॉलेट पता/एड्रेस) को एनएफटी को मिंट करने की अनुमति देगा।

संभावना है कि आप चाहते हैं कि कोई भी एनएफटी को मिंट करे, ऐसा करने के लिए आपको मिंट फ़ंक्शन से “onlyOwner” संशोधक/मॉडिफायर को हटाना होगा, onlyOwner को हटा देंगे तो फंक्शन निचे दिए गए फंक्शन जैसा दिखेगा।

function safeMint(address to, string memory uri) public {
        uint256 tokenId = _tokenIdCounter.current();
        _tokenIdCounter.increment();
        _safeMint(to, tokenId);
        _setTokenURI(tokenId, uri);
    }

आप इसे कॉन्ट्रैक्ट डिक्लेरेशन(कॉन्ट्रैक्ट घोषणा) "Ownable" से भी हटा सकते हैं जो आप ओपेनजिपेलिन लाइब्रेरी से एक कॉन्ट्रैक्ट इम्पोर्ट कर के इस्तेमाल कर सकते हैं।

import "@openzeppelin/contracts/access/Ownable.sol";

अब जबकि हर कोई हमारे NFTs(एनएफटीज) को मिंट करने में सक्षम होगा, अब आपको कलेक्शन/संग्रह में एनएफटी की अधिकतम संख्या की तुलना में अधिक एनएफटी बनाने से लोगों को रोकने की आवश्यकता होगी। ऐसा करने के लिए आइए मिनिटेबल एनएफटी(mintable NFTs) की अधिकतम संख्या निर्दिष्ट करें।

मान लीजिये, आप चाहते हैं कि उपयोगकर्ता कुल 10,000 एनएफटी तक मिंट कर सकें। ऐसा करने के लिए, आइए एक नया uint256 वैरिएबल बनाएं, इसे MAX_SUPPLY कहें, और इसे 10,000 असाइन करें।

Counters.Counter private _tokenIdCounter;
    uint256 MAX_SUPPLY = 100000;

    constructor() ERC721("Alchemy", "ALCH") {}

इसके बाद, safeMint(सेफमिंट) फ़ंक्शन में चलते हैं और लाइन 18 पर एक require स्टेटमेंट/विवरण जोड़ते हैं:

require(_tokenIdCounter.current() <= MAX_SUPPLY, "I'm sorry we reached the cap");

सॉलिडिटी में "require"(रिक्वायर/आवश्यक) कथन क्या है, इसे बेहतर ढंग से समझते हैं।

आप ऑफिसियल/आधिकारिक दस्तावेज़ीकरण में सॉलिडिटी "require" स्टेटमेंट के बारे में अधिक पढ़ सकते हैं।

अब जब आपने अपने एनएफटी की अधिकतम आपूर्ति सीमित कर दी है, तो स्मार्ट कॉन्ट्रैक्ट को कमपाईल/संकलित करने और इसे रिंकीबी टेस्टनेट पर तैनात करने का समय आ गया है। ऐसा करने के लिए, आपको Alchemy.com पर एक मुफ्त खाता बनाना होगा, इसे मेटामास्क पर एक नोड प्रदाता(नोड प्रोवाइडर) के रूप में जोड़ना होगा, और कुछ मुफ्त Rinkeby ETH प्राप्त करना होगा।

एक मुफ़्त Alchemy(अल्केमी) खाता बनाएँ

सबसे पहले, हमें alchemy.com पर जाना होगा। पेज अच्छे से खुलने के बाद "Login"(लॉगिन) पर क्लिक करें और फिर आप “Signup” बटन पर क्लिक करें और एक नया अल्केमी अकाउंट बनाए:

24942494

Ethereum ecosystem(एथेरेयम इकोसिस्टम) का चयन करें:

26602660

अपनी एप्लीकेशन को App Name(एप्लिकेशन नाम) और Team Name(टीम नाम) दें, Rinkeby Network(रिंकीबी नेटवर्क) चुनें और “create App”(क्रिएट ऐप) पर क्लिक करें:

25202520

Create App

एक बार जब आप ऑनबोर्डिंग प्रक्रिया पूरी कर लेंगे, तब आपको dashboard(डैशबोर्ड) पर रीडायरेक्ट कर दिया जाएगा। आपके द्वारा तय किए गए नाम वाले एप्लिकेशन पर क्लिक करें, इस मामले में, “test”(टेस्ट) नामक एप्लीकेशन पर क्लिक करें, फिर ऊपरी दाएं कोने पर "VIEW KEY" बटन पर क्लिक करें, और HTTP URL(यूआरएल) कॉपी करें:

24912491

Your Application Details

इसके बाद, आपको Alchemy(अल्केमी) को Metamask(मेटामास्क) में एक Rinkeby RPC प्रोवाइडर/प्रदाता के रूप में जोड़ना होगा। यदि आपके पास मेटामास्क स्थापित नहीं है, तो इसे अपने ब्राउज़र में जोड़ने और एक नया वॉलेट बनाने के लिए इस गाइड का पालन करें।

अपने Metamask(मेटामास्क) वॉलेट में Alchemy(अल्केमी) रिंकीबी जोड़ें

एक बार मेटामास्क स्थापित हो जाने के बाद, Network dropdown menu(नेटवर्क ड्रॉपडाउन मेनू) पर और "add network" पर क्लिक करें!

796796

आपको अगले पेज पर रीडायरेक्ट किया जाएगा, जहां आपको Rinkeby Network(रिंकीबी नेटवर्क) और RPC URL(आरपीसी यूआरएल) की जानकारी भरनी होगी।

25182518

Fill in the Goerli Network and RPC Url

फॉर्म में निम्नलिखित जानकारी भरें:

  • Network name(नेटवर्क का नाम): Alchemy Rinkeby(अल्केमी रिंकीबी)
  • New RPC URL(नया RPC URL): Rinkeby Alchemy एप्लिकेशन का HTTP URL. जो हमने पिछले हिस्से में अल्केमी डैशबोर्ड से कॉपी किया था
  • Chain ID(चेन आईडी): 4
  • Currency Symbol(मुद्रा प्रतीक): ETH
  • Block Explorer(ब्लॉक एक्सप्लोरर): https://rinkeby.etherscan.io/

एक दम शानदार, आपने अभी-अभी अल्केमी का उपयोग करते हुए रिंकीबी को मेटामास्क में जोड़ा है! 🎉

अब हमारे स्मार्ट कॉन्ट्रैक्ट को रिंकीबी पर तैनात करने का समय है, लेकिन पहले, आपको कुछ Rinkeby Test ETH (रिंकीबी टेस्ट ईटीएच) प्राप्त करने की आवश्यकता होगी।

निःशुल्क Rinkeby Test ETH(रिंकीबी टेस्ट ईटीएच) प्राप्त करें

Rinkeby Test ETH (रिंकीबी टेस्ट ईटीएच) प्राप्त करना बहुत आसान है, बस rinkebyfaucet.com, पर जाइये, Wallet Address(वॉलेट एड्रेस) को टेक्स्ट बार में पेस्ट करें, और "Send Me ETH”(सेंड मी ईटीएच) पर क्लिक करें:

16001600

10-20 सेकंड के बाद आप देखेंगे कि Rinkeby ETH(रिंकीबी ईटीएच) मेटामास्क वॉलेट में दिखाई दे रहा है।

आप बिना लॉग इन किए हर 24 घंटों में 0.1 ETH या अल्केमी खाते से लॉगिन कर के 0.5 ETH तक प्राप्त कर सकते हैं।

अब जब आपके पास test ETH(परीक्षण ईटीएच) है, तो हमारे NFT(एनएफटी) स्मार्ट कॉन्ट्रैक्ट को कम्पाइल और ब्लॉकचैन पर तैनात करने का समय आ गया है।

रिंकीबी टेस्टनेट पर NFT(एनएफटी) स्मार्ट कॉन्ट्रैक्ट को कम्पाइल और तैनात करें

Remix(रीमिक्स) पर वापस चलते हैं, पृष्ठ के बाईं ओर “compiler menu” पर क्लिक करें और उसके बाद नीले "Compile" बटन पर क्लिक करें:

357357

फिर "Deploy and Run Transactions” मेनू पर क्लिक करें, Environment(एनवायरनमेंट) ड्रॉपडाउन मेनू पर क्लिक करें और "injected Web3" चुनें:

सुनिश्चित करें कि मेटामास्क वॉलेट Alchemy Rinkeby network(अल्केमी रिंकीबी नेटवर्क) पर है, कॉन्ट्रैक्ट ड्रॉपडाउन मेनू से NFT(एनएफटी) स्मार्ट कॉन्ट्रैक्ट का चयन करें, और “Deploy” पर क्लिक करें।

366366

एक मेटामास्क पॉप-अप विंडो दिखाई देगी, "sign" पर क्लिक करें और gas fees(गैस शुल्क) का भुगतान करने के लिए आगे बढ़ें।

यदि सब कुछ अपेक्षित रूप से काम करता है, तो 10 सेकंड के बाद आपको Deployed Contracts(डेप्लॉयड कॉन्ट्रैक्ट्स) में अपना कॉन्ट्रैक्ट दिखना चाहिए।

628628

अब जबकि स्मार्ट कॉन्ट्रैक्ट को रिंकीबी टेस्टनेट पर तैनात कर दिया गया है, यह हमारे NFT(एनएफटी) को मिंट करने का समय है, लेकिन पहले, आपको IPFS(आईपीएफएस) पर Metadata(मेटाडेटा) बनाने और अपलोड करने की आवश्यकता होगी, आइए समझते हैं कि "metadata"(मेटाडेटा) शब्द से हमारा क्या मतलब है।

NFTs(एनएफटीज) मेटाडेटा क्या है?

20752075

OpenSea को ERC721 टोकन का ऑफ-चेन मेटाडेटा प्राप्त करने के लिए, कॉन्ट्रैक्ट को होस्ट किए गए मेटाडेटा की ओर इशारा करते हुए एक URI वापस करना होगा। इस URI को खोजने के लिए, OpenSea, Rarible और अन्य लोकप्रिय marketplaces(मार्केटप्लेसेस/बाज़ार) ERC721Uristorage स्टैण्डर्ड में मिलने वाले tokenURI method(मेथड) का उपयोग करेंगे।

ERC721 में tokenURI फ़ंक्शन को एक HTTP या IPFS URL लौटाना चाहिए, जो कि उदाहरण के लिए कुछ इस तरह से दिखता है ipfs://bafkreig4rdq3nvyg2yra5x363gdo4xtbcfjlhshw63we7vtlldyyvwagbq।

पूछे जाने पर, इस URL को आपके टोकन के लिए मेटाडेटा के साथ JSON ब्लॉब का डेटा लौटाना चाहिए।

आप ऑफिसियल(आधिकारिक) OpenSea डॉक्यूमेंटेशन(दस्तावेज़ीकरण) पर मेटाडेटा स्टैण्डर्ड(मानकों) के बारे में अधिक पढ़ सकते हैं।

अपने एनएफटी मेटाडेटा को कैसे फॉर्मेट(प्रारूपित) करें

OpenSea डॉक्यूमेंटेशन/दस्तावेज़ीकरण के अनुसार, NFT मेटाडेटा को एक .json फ़ाइल में स्टोर(संग्रहीत) किया जाना चाहिए और निम्नानुसार स्ट्रक्चर/संरचित किया जाना चाहिए:

{ 
  "description": "YOUR DESCRIPTION",
  "external_url": "YOUR URL",
  "image": "IMAGE URL",
  "name": "TITLE", 
  "attributes": [
    {
      "trait_type": "Base", 
      "value": "Starfish"
    }, 
    {
      "trait_type": "Eyes", 
      "value": "Big"
    }, 
    {
      "trait_type": "Mouth", 
      "value": "Surprised"
    }, 
    {
      "trait_type": "Level", 
      "value": 5
    }, 
    {
      "trait_type": "Stamina", 
      "value": 1.4
    }, 
    {
      "trait_type": "Personality", 
      "value": "Sad"
    }, 
    {
      "display_type": "boost_number", 
      "trait_type": "Aqua Power", 
      "value": 40
    }, 
    {
      "display_type": "boost_percentage", 
      "trait_type": "Stamina Increase", 
      "value": 10
    }, 
    {
      "display_type": "number", 
      "trait_type": "Generation", 
      "value": 2
    }
  }

यहां एक संक्षिप्त विवरण दिया गया है कि ऊपर दी गयी प्रत्येक प्रॉपर्टी क्या स्टोर करती है:

Property (प्रॉपर्टी/गुण)विवरण
image(इमेज/तस्वीर)यह हर वस्तु/आइटम की image(इमेज) का URL है। यह लगभग किसी भी प्रकार की image(इमेज) हो सकती है (जैसे की SVG(एसवीजी), जिसे OpesSea द्वारा PNG(पीएनजी) में cache(कैश) किया जाएगा, और IPFS URLs (आईपीएफएस यूआरएल ) या पथ हो सकते हैं। हम 350 x 350 इमेज का उपयोग करने की सलाह देते हैं।
imagedata(इमेजडेटा)Raw SVG(रॉ एसवीजी) इमेज डेटा, यदि आप जल्दी-जल्दी इमेजेज उत्पन्न करना चाहते हैं (इसकी सलाह नहीं दी जाती)। इस प्रॉपर्टी का उपयोग केवल तभी करें जब आप इमेज पैरामीटर जो इस से ऊपर दिया गया है, उसे शामिल नहीं कर रहे हों।
externalurl(एक्सटर्नलयूआरएल)यह वह URL है जो OpenSea पर इमेज प्रॉपर्टी के नीचे दिखाई देगा और उपयोगकर्ताओं को OpenSea छोड़ने और आपकी साइट पर आइटम देखने की अनुमति देगा।
description(डिस्क्रिप्शन)आइटम का मनुष्य द्वारा पढ़े जा सकने वाला विवरण। मार्कडाउन का समर्थन है।
nameवस्तु/आइटम का नाम
attributes(ऐट्रिब्यूट्स)आइटम के लिए ये विशेषताएँ हैं, जो आइटम के लिए OpenSea पृष्ठ पर दिखाई देंगी। (नीचे देखें)
backgroundcolor(बैकग्राउंडकलर)OpenSea पर आइटम के बैकग्राउंड का रंग। यह छह-वर्णों वाला हेक्साडेसिमल(hexadecimal) होना चाहिए, जिसमें कोई पूर्व-लंबित न हो
animationurl(एनीमेशनयूआरएल)अगर आपको आइटम के साथ कोई मल्‍टी-मीडिया लगाना है तो यह उसका URL(यूआरएल) है। फ़ाइल एक्सटेंशन GLTF, GLB, WEBM, MP4, M4V, OGV, और OGG सपोर्टेड/का समर्थन हैं, साथ ही केवल-ऑडियो एक्सटेंशन MP3, WAV और OGA के साथ।

यह Animationurl(एनीमेशनयूआरएल), HTML(एचटीएमएल) पेजों का भी समर्थन करता है, जिससे हमें जावास्क्रिप्ट कैनवास(Javascript Canvas) WebGL(वेबजीएल), और अधिक का उपयोग करके समृद्ध अनुभव और इंटरैक्टिव NFT बनाने की इजाजत मिलती है।

HTML पृष्ठ के भीतर स्क्रिप्ट और रिलेटिव पथ का भी अब समर्थन हैं। हालांकि, ब्राउज़र एक्सटेंशन तक पहुंच का अभी समर्थन नहीं हैं। |
| youtube_url | किसी YouTube वीडियो का URL |

अब जबकि हमें टोकन मेटाडेटा में क्या शामिल होगा, इसकी संक्षिप्त समझ है, आइए जानें कि इसे कैसे बनाया जाए और इसे IPFS पर कैसे संग्रहीत/स्टोर किया जाए।

मेटाडेटा बनाना और IPFS पर अपलोड करना

सबसे पहले, filebase.com पर जाए और एक नया अकाउंट बनाएं।

एक बार लॉग इन करने के बाद, बाईं ओर के मेनू पर Buckets(बकेटस) बटन पर क्लिक करें और एक नई बकेट बनाएं, “Create Bucket” बटन पर क्लिक करने के बाद:

33883388

Bucket(बकेट) में जाए, ”Upload Button”(अपलोड बटन) पर क्लिक करें, और वह इमेज अपलोड करें जिसे आप अपने एनएफटी के लिए उपयोग करना चाहते हैं, मैं निम्नलिखित का उपयोग करूंगा .

अपलोड होने के बाद उस पर क्लिक करें और IPFS Gateway URL(आईपीएफएस गेटवे यूआरएल) को कॉपी करें:

28942894

किसी भी टेक्स्ट एडिटर का उपयोग करते हुए, निम्नलिखित JSON कोड पेस्ट करें और फाइल को "metadata.json" के नाम से सेव करें।:

{ 
  "description": "This NFT proves I've created and deployed my first ERC20 smart contract on Rinkeby with Alchemy Road to Web3",
  "external_url": "https://alchemy.com/?a=r2w3-hindi"
  "image": "https://ipfs.filebase.io/ipfs/bafybeihyvhgbcov2nmvbnveunoodokme5eb42uekrqowxdennt2qyeculm",
  "name": "A cool NFT", 
  "attributes": [
    {
      "trait_type": "Base", 
      "value": "Starfish"
    }, 
    {
      "trait_type": "Eyes", 
      "value": "Big"
    }, 
    {
      "trait_type": "Mouth", 
      "value": "Surprised"
    }, 
    {
      "trait_type": "Level", 
      "value": 5
    }, 
    {
      "trait_type": "Stamina", 
      "value": 1.4
    }, 
    {
      "trait_type": "Personality", 
      "value": "Sad"
    }, 
    {
      "display_type": "boost_number", 
      "trait_type": "Aqua Power", 
      "value": 40
    }, 
    {
      "display_type": "boost_percentage", 
      "trait_type": "Stamina Increase", 
      "value": 10
    }, 
    {
      "display_type": "number", 
      "trait_type": "Generation", 
      "value": 2
    }
  }

Filebase(फ़ाइलबेस) पर वापस जाएँ और जो “metadata.json” फ़ाइल आपने अभी सेव की है उसे उसी Bucket(बकेट) में अपलोड करें, जहाँ हमने इमेज अपलोड की थी।

34463446

अंत में “metadata.json” की जो CID है उस पर क्लिक करें और इसे कॉपी करें, अगले भाग में NFT को मिंट करते समय token URI बनाने के लिए हमें इसकी आवश्यकता होगी:

28202820

अपनी रिंकीबी NFT को मिंट करें

Remix(रीमिक्स) पर वापस जाएं और “Deploy & Run Transactions”(डिप्लॉय एंड रन ट्रांजैक्शन) मेनू में, "deployed contracts" के निचे जाएं - और हमारे द्वारा अभी-अभी डिप्लॉय/तैनात किए गए कॉन्ट्रैक्ट पर क्लिक करें, यह आपके स्मार्ट कॉन्ट्रैक्ट में निहित सभी मेथड्स/विधियों की एक सूची खोलेगा:

578578

ऑरेंज मेथड्स/विधियाँ वे मेथड्स/विधियाँ हैं जो वास्तव में ब्लॉकचेन पर लिखती हैं या ब्लॉकचैन पर कुछ चेंज करती हैं जबकि ब्लू मेथड्स वह है जो ब्लॉकचैन से पढ़(रीड कर) रही हैं।

SafeMint मेथड ड्रॉपडाउन आइकन पर क्लिक करें और अपना एड्रेस और निचे दी गई स्ट्रिंग को URI फ़ील्ड में पेस्ट करें:

ipfs://<आपका_मेटाडेटा_cid>

  • ऊपर दिए गए स्ट्रिंग में जहाँ "आपका _मेटाडेटा" लिखा हुआ है वहां अपनी इमेज का मेटाडेटा डाले और फिर पुरे स्ट्रिंग को कॉपी कर के URI फ़ील्ड में पेस्ट करें।

transact पर क्लिक करने से एक मेटामास्क पॉपअप बन जाएगा जो आपको गैस शुल्क का भुगतान करने के लिए प्रेरित करेगा।

"sign" पर क्लिक करें और अपना पहला NFT बनाना जारी रखें!

कुछ सेकंड प्रतीक्षा करें और, यह सुनिश्चित करने के लिए कि मिंट सफलतापूर्वक हो गया है, अपने एड्रेस को “balanceOf”(बैलेंसऑफ) विधि इनपुट में कॉपी और पेस्ट करें, और इसे चलाएं - यह आपको दिखाएगा कि आपके पास 1 NFT है।

tokenURI मेथड के साथ भी ऐसा ही करें, id argument(तर्क) के रूप में "0" डालें - यह आपके tokenURI को दिखाएगा।

एक दम शानदार! आपने अभी-अभी अपना पहला NFT बनाया है! 🎉

अब यह जांचने के लिए OpenSea में जाने का समय है कि क्या मेटाडेटा अच्छी तरह से पढ़ा जा रहा है।

OpenSea पर अपने NFT की Visualize(विजुअलाईज) करें

Testnets.opensea.io पर जाएं और अपने मेटामास्क वॉलेट से लॉगइन करें। फिर अपने प्रोफ़ाइल चित्र पर क्लिक करें, आपको वहां अपना नवनिर्मित NFT दिखना चाहिए। यदि इमेज अभी तक दिखाई नहीं दे रही है, तो उस पर क्लिक करें, और "refresh metadata" बटन पर क्लिक करें।

26102610

कभी-कभी Opensea में टेस्टनेट मेटाडेटा को पहचानने में समय लगता है - और इसे देखने में 6 घंटे तक का समय लग सकता है। कुछ समय के बाद आपका NFT अनुसरण के रूप में दिखाई देना चाहिए:

28402840

बधाई हो, आपने अपना पहला स्मार्ट कॉन्ट्रैक्ट सफलतापूर्वक बनाया, मॉडिफाइ और डेप्लॉय किया है। आपने पहला NFT मिंट किया, और IPFS पर अपनी इमेज प्रकाशित की!

अगला कदम? आप अपने स्मार्ट कॉन्ट्रैक्ट को संशोधित क्यों नहीं कर के देखते ताकि उपयोगकर्ताओं को केवल एक निश्चित संख्या तक NFT मिंट करने की अनुमति मिल सके? 5 प्रति उपयोगकर्ता पर्याप्त होना चाहिए, नहीं तो कोई भी व्यक्ति हजारों NFT बनाना शुरू कर सकता है!

ऐसा करने के लिए, “mapping” type देखें, यहां आपको मैपिंग को समझने के लिए आर्टिकल मिल जाएंगे।

इस ट्यूटोरियल का वीडियो चाहते हैं? Alchemy यूट्यूब चैनल को सब्सक्राइब करें और अगर आप चाहते हैं कि हज़ारों डेवेलपर्स आपकी मदद करें तो हमारे डिस्कॉर्ड कम्युनिटी में शामिल हों!

हम हमेशा इस सीखने की यात्रा को बेहतर बनाना चाहते हैं, कृपया हमारे साथ कोई भी फीडबैक हो तो उसे यहाँ साझा करें! https://alchemyapi.typeform.com/roadtofeedback

Help taken from:

  1. Google Translate(translate.google.com/)
  2. Hinkhoj Dictionary(dict.hinkhoj.com)