---
title: "NFT कसे लिहावे आणि प्रस्थापित करावे (NFT ट्युटोरियल मालिकेचा भाग 1/3)"
description: "हे ट्युटोरियल NFT वरील मालिकेचा भाग 1 आहे जे तुम्हाला इथेरियम आणि इंटर प्लॅनेटरी फाईल सिस्टीम (IPFS) वापरून नॉन फंजिबल टोकन (ERC-721 टोकन) स्मार्ट कॉन्ट्रॅक्ट कसे लिहावे आणि प्रस्थापित करावे याबद्दल टप्प्याटप्प्याने मार्गदर्शन करेल."
author: "सुमी मुदगील"
tags:
  - ERC-721
  - Alchemy
  - Solidity
  - स्मार्ट कॉन्ट्रॅक्ट्स
skill: beginner
breadcrumb: "NFT लिहा आणि प्रस्थापित करा"
lang: mr
published: 2021-04-22
---

NFTs मुळे ब्लॉकचेन लोकांच्या नजरेत येत असल्याने, इथेरियम ब्लॉकचेनवर तुमचे स्वतःचे NFT कॉन्ट्रॅक्ट (ERC-721 टोकन) प्रकाशित करून ही चर्चा स्वतः समजून घेण्याची आता एक उत्तम संधी आहे!

Alchemy ला NFT क्षेत्रातील सर्वात मोठ्या नावांना सक्षम करण्याचा अत्यंत अभिमान आहे, ज्यामध्ये Makersplace (नुकतेच Christie’s मध्ये $69 दशलक्षला डिजिटल कलाकृती विक्रीचा विक्रम प्रस्थापित केला), Dapper Labs (NBA Top Shot आणि Crypto Kitties चे निर्माते), ओपनसी (जगातील सर्वात मोठे NFT मार्केटप्लेस), Zora, Super Rare, NFTfi, Foundation, Enjin, Origin Protocol, Immutable आणि इतर अनेक समाविष्ट आहेत.

या ट्युटोरियलमध्ये, आम्ही [मेटामास्क](https://metamask.io/), [Solidity](https://docs.soliditylang.org/en/v0.8.0/), [Hardhat](https://hardhat.org/), [Pinata](https://pinata.cloud/) आणि [Alchemy](https://alchemy.com/signup/eth) वापरून Sepolia टेस्टनेटवर ERC-721 स्मार्ट कॉन्ट्रॅक्ट तयार करणे आणि प्रस्थापित करणे याबद्दल मार्गदर्शन करू (यापैकी कशाचाही अर्थ तुम्हाला अद्याप समजला नसेल तर काळजी करू नका — आम्ही ते स्पष्ट करू!).

या ट्युटोरियलच्या भाग 2 मध्ये आपण NFT मिंट करण्यासाठी आपल्या स्मार्ट कॉन्ट्रॅक्टचा वापर कसा करू शकतो हे पाहू आणि भाग 3 मध्ये आपण मेटामास्कवर तुमचे NFT कसे पाहायचे हे स्पष्ट करू.

आणि अर्थातच, तुम्हाला कोणत्याही टप्प्यावर प्रश्न असल्यास, [Alchemy डिस्कॉर्ड्](https://discord.gg/gWuC7zB) मध्ये संपर्क साधण्यास किंवा [Alchemy च्या NFT API डॉक्स](https://www.alchemy.com/docs/reference/nft-api-quickstart) ला भेट देण्यास संकोच करू नका!

## पायरी 1: इथेरियम नेटवर्कशी कनेक्ट करा {#connect-to-ethereum}

इथेरियम ब्लॉकचेनला विनंत्या करण्याचे अनेक मार्ग आहेत, परंतु गोष्टी सोप्या करण्यासाठी, आम्ही [Alchemy](https://alchemy.com/signup/eth) वरील मोफत खाते वापरू, जे एक ब्लॉकचेन डेव्हलपर प्लॅटफॉर्म आणि API आहे जे आम्हाला आमचे स्वतःचे नोड न चालवता इथेरियम चेनशी संवाद साधण्याची परवानगी देते.

या ट्युटोरियलमध्ये, आमच्या स्मार्ट कॉन्ट्रॅक्ट प्रस्थापनेमध्ये तांत्रिकदृष्ट्या काय चालले आहे हे समजून घेण्यासाठी आम्ही मॉनिटरिंग आणि ॲनालिटिक्ससाठी Alchemy च्या डेव्हलपर टूल्सचा देखील फायदा घेऊ. जर तुमच्याकडे आधीपासून Alchemy खाते नसेल, तर तुम्ही [येथे](https://alchemy.com/signup/eth) मोफत साइन अप करू शकता.

## पायरी 2: तुमचे ॲप (आणि API की) तयार करा {#make-api-key}

एकदा तुम्ही Alchemy खाते तयार केले की, तुम्ही ॲप तयार करून API की जनरेट करू शकता. हे आम्हाला Sepolia टेस्टनेटला विनंत्या करण्याची परवानगी देईल. जर तुम्हाला टेस्टनेटबद्दल अधिक जाणून घेण्याची उत्सुकता असेल तर [हे मार्गदर्शक](https://www.alchemy.com/docs/choosing-a-web3-network) तपासा.

1. नॅव्हिगेशन बारमधील “Apps” वर होव्हर करून आणि “Create App” वर क्लिक करून तुमच्या Alchemy डॅशबोर्डमधील “Create App” पेजवर जा

![Create your app](./create-your-app.png)

2. तुमच्या ॲपला नाव द्या (आम्ही “My First NFT!” निवडले), एक लहान वर्णन द्या, चेनसाठी “Ethereum” निवडा आणि तुमच्या नेटवर्कसाठी “Sepolia” निवडा. द मर्ज नंतर इतर टेस्टनेट बंद करण्यात आले आहेत.

![Configure and publish your app](./alchemy-explorer-sepolia.png)

3. “Create app” वर क्लिक करा आणि झाले! तुमचे ॲप खालील टेबलमध्ये दिसले पाहिजे.

## पायरी 3: इथेरियम खाते (पत्ता) तयार करा {#create-eth-address}

व्यवहार पाठवण्यासाठी आणि प्राप्त करण्यासाठी आम्हाला इथेरियम खाते आवश्यक आहे. या ट्युटोरियलसाठी, आम्ही मेटामास्क वापरू, जे तुमच्या इथेरियम खाते पत्त्याचे व्यवस्थापन करण्यासाठी ब्राउझरमधील एक आभासी वॉलेट आहे. जर तुम्हाला इथेरियमवरील व्यवहार कसे कार्य करतात याबद्दल अधिक समजून घ्यायचे असेल, तर इथेरियम फाउंडेशनचे [हे पेज](/developers/docs/transactions/) तपासा.

तुम्ही [येथे](https://metamask.io/download) मोफत मेटामास्क खाते डाउनलोड आणि तयार करू शकता. जेव्हा तुम्ही खाते तयार करत असाल, किंवा तुमच्याकडे आधीपासून खाते असेल, तेव्हा वरच्या उजव्या बाजूला “Sepolia Test Network” वर स्विच करण्याची खात्री करा (जेणेकरून आपण खऱ्या पैशांशी व्यवहार करत नाही).

![Set Sepolia as your network](./metamask-goerli.png)

## पायरी 4: फॉसेटमधून इथर जोडा {#step-4-add-ether-from-a-faucet}

आमचे स्मार्ट कॉन्ट्रॅक्ट टेस्टनेटवर प्रस्थापित करण्यासाठी, आम्हाला काही बनावट ETH ची आवश्यकता असेल. ETH मिळवण्यासाठी तुम्ही Alchemy द्वारे होस्ट केलेल्या [Sepolia फॉसेट](https://sepoliafaucet.com/) वर जाऊ शकता, लॉग इन करा आणि तुमचा खाते पत्ता प्रविष्ट करा, “Send Me ETH” वर क्लिक करा. तुम्हाला लवकरच तुमच्या मेटामास्क खात्यात ETH दिसेल!

## पायरी 5: तुमची शिल्लक तपासा {#check-balance}

आमची शिल्लक तिथे आहे याची खात्री करण्यासाठी, [Alchemy च्या सँडबॉक्स टूलचा](https://sandbox.alchemy.com/?network=ETH_SEPOLIA&method=eth_getBalance&body.id=1&body.jsonrpc=2.0&body.method=eth_getBalance&body.params%5B0%5D=&body.params%5B1%5D=latest) वापर करून [eth_getBalance](https://www.alchemy.com/docs/chains/ethereum/ethereum-api-endpoints/eth-get-balance) विनंती करूया. हे आमच्या वॉलेटमधील ETH ची रक्कम परत करेल. तुम्ही तुमचा मेटामास्क खाते पत्ता प्रविष्ट केल्यानंतर आणि “Send Request” वर क्लिक केल्यानंतर, तुम्हाला असा प्रतिसाद दिसेल:

    `{"jsonrpc": "2.0", "id": 0, "result": "0xde0b6b3a7640000"}`

> **टीप** हा निकाल Wei मध्ये आहे, ETH मध्ये नाही. Wei हे इथरचे सर्वात लहान मूल्य म्हणून वापरले जाते. Wei मधून ETH मध्ये रूपांतरण 1 eth = 10<sup>18</sup> Wei असे आहे. त्यामुळे जर आपण 0xde0b6b3a7640000 चे दशांश मध्ये रूपांतर केले तर आपल्याला 1\*10<sup>18</sup> Wei मिळतात, जे 1 ETH च्या बरोबरीचे आहे.

हुश्श! आमचे सर्व बनावट पैसे तिथे आहेत.
## पायरी 6: आमचा प्रोजेक्ट इनिशियलाईज करा {#initialize-project}

प्रथम, आम्हाला आमच्या प्रोजेक्टसाठी एक फोल्डर तयार करावे लागेल. तुमच्या कमांड लाईनवर जा आणि टाईप करा:

    mkdir my-nft
    cd my-nft

आता आम्ही आमच्या प्रोजेक्ट फोल्डरमध्ये आहोत, आम्ही प्रोजेक्ट इनिशियलाईज करण्यासाठी npm init वापरू. जर तुमच्याकडे आधीपासून npm इन्स्टॉल केलेले नसेल, तर [Node.js इन्स्टॉलेशन सूचनांचे](https://nodejs.org/en/download/) अनुसरण करा (आम्हाला या ट्युटोरियलसाठी Node.js आणि npm ची आवश्यकता असेल).

    npm init

तुम्ही इन्स्टॉलेशन प्रश्नांची उत्तरे कशी देता याने फारसा फरक पडत नाही; संदर्भासाठी आम्ही ते कसे केले ते येथे दिले आहे:

```json
    package name: (my-nft)
    version: (1.0.0)
    description: My first NFT!
    entry point: (index.js)
    test command:
    git repository:
    keywords:
    author:
    license: (ISC)
    About to write to /Users/thesuperb1/Desktop/my-nft/package.json:

    {
      "name": "my-nft",
      "version": "1.0.0",
      "description": "My first NFT!",
      "main": "index.js",
      "scripts": {
        "test": "echo \"Error: no test specified\" && exit 1"
      },
      "author": "",
      "license": "ISC"
    }
```

package.json मंजूर करा, आणि आपण पुढे जाण्यासाठी तयार आहोत!
## पायरी 7: [Hardhat](https://hardhat.org/getting-started/#overview) इन्स्टॉल करा {#install-hardhat}

Hardhat हे तुमचे इथेरियम सॉफ्टवेअर कंपाईल, प्रस्थापित, टेस्ट आणि डीबग करण्यासाठी एक डेव्हलपमेंट एन्व्हायरन्मेंट आहे. हे डेव्हलपर्सना लाईव्ह चेनवर प्रस्थापित करण्यापूर्वी स्थानिक पातळीवर स्मार्ट कॉन्ट्रॅक्ट्स आणि विकेंद्रित ॲप्लिकेशन (dapp) तयार करताना मदत करते.

आमच्या my-nft प्रोजेक्टमध्ये रन करा:

    npm install --save-dev hardhat

[इन्स्टॉलेशन सूचनांवरील](https://hardhat.org/getting-started/#overview) अधिक तपशीलांसाठी हे पेज तपासा.

## पायरी 8: Hardhat प्रोजेक्ट तयार करा {#create-hardhat-project}

आमच्या प्रोजेक्ट फोल्डरमध्ये रन करा:

    npx hardhat

त्यानंतर तुम्हाला एक स्वागत संदेश आणि तुम्हाला काय करायचे आहे ते निवडण्याचा पर्याय दिसेल. “create an empty hardhat.config.js” निवडा:

    888    888                      888 888               888
    888    888                      888 888               888
    888    888                      888 888               888
    8888888888  8888b.  888d888 .d88888 88888b.   8888b.  888888
    888    888     "88b 888P"  d88" 888 888 "88b     "88b 888
    888    888 .d888888 888    888  888 888  888 .d888888 888
    888    888 888  888 888    Y88b 888 888  888 888  888 Y88b.
    888    888 "Y888888 888     "Y88888 888  888 "Y888888  "Y888
    👷 Welcome to Hardhat v2.0.11 👷‍
    ? What do you want to do? …
    Create a sample project
    ❯ Create an empty hardhat.config.js
    Quit

हे आमच्यासाठी एक hardhat.config.js फाईल जनरेट करेल जिथे आम्ही आमच्या प्रोजेक्टसाठी सर्व सेटअप निर्दिष्ट करू (पायरी 13 वर).

## पायरी 9: प्रोजेक्ट फोल्डर्स जोडा {#add-project-folders}

आमचा प्रोजेक्ट व्यवस्थित ठेवण्यासाठी, आम्ही दोन नवीन फोल्डर्स तयार करू. तुमच्या कमांड लाईनमध्ये तुमच्या प्रोजेक्टच्या रूट डिरेक्टरीवर जा आणि टाईप करा:

    mkdir contracts
    mkdir scripts

- contracts/ येथे आम्ही आमचा NFT स्मार्ट कॉन्ट्रॅक्ट कोड ठेवू

- scripts/ येथे आम्ही आमच्या स्मार्ट कॉन्ट्रॅक्टशी संवाद साधण्यासाठी आणि प्रस्थापित करण्यासाठी स्क्रिप्ट्स ठेवू

## पायरी 10: आमचे कॉन्ट्रॅक्ट लिहा {#write-contract}

आता आमचे एन्व्हायरन्मेंट सेट झाले आहे, अधिक रोमांचक गोष्टींकडे वळूया: _आमचा स्मार्ट कॉन्ट्रॅक्ट कोड लिहिणे!_

तुमच्या आवडत्या एडिटरमध्ये my-nft प्रोजेक्ट उघडा (आम्हाला [VSCode](https://code.visualstudio.com/) आवडते). स्मार्ट कॉन्ट्रॅक्ट्स Solidity नावाच्या भाषेत लिहिलेले असतात जे आम्ही आमचे MyNFT.sol स्मार्ट कॉन्ट्रॅक्ट लिहिण्यासाठी वापरू.‌

1. `contracts` फोल्डरवर जा आणि MyNFT.sol नावाची नवीन फाईल तयार करा

2. खाली आमचा NFT स्मार्ट कॉन्ट्रॅक्ट कोड आहे, जो आम्ही [ओपनझेपलिन](https://docs.openzeppelin.com/contracts/3.x/erc721) लायब्ररीच्या ERC-721 अंमलबजावणीवर आधारित केला आहे. खालील मजकूर कॉपी करा आणि तुमच्या MyNFT.sol फाईलमध्ये पेस्ट करा.

   ```solidity
   //[https://docs.openzeppelin.com/contracts/3.x/erc721](https://docs.openzeppelin.com/contracts/3.x/erc721) वर आधारित कॉन्ट्रॅक्ट
   // SPDX-License-Identifier: MIT
   pragma solidity ^0.8.0;

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

   contract MyNFT is ERC721URIStorage, Ownable {
       using Counters for Counters.Counter;
       Counters.Counter private _tokenIds;

       constructor() ERC721("MyNFT", "NFT") {}

       function mintNFT(address recipient, string memory tokenURI)
           public onlyOwner
           returns (uint256)
       {
           _tokenIds.increment();

           uint256 newItemId = _tokenIds.current();
           _mint(recipient, newItemId);
           _setTokenURI(newItemId, tokenURI);

           return newItemId;
       }
   }
   ```

3. कारण आम्ही ओपनझेपलिन कॉन्ट्रॅक्ट्स लायब्ररीमधून क्लासेस इनहेरिट करत आहोत, लायब्ररी आमच्या फोल्डरमध्ये इन्स्टॉल करण्यासाठी तुमच्या कमांड लाईनमध्ये `npm install @openzeppelin/contracts^4.0.0` रन करा.

तर, हा कोड नक्की काय _करतो_? चला ते ओळीनुसार समजून घेऊया.

आमच्या स्मार्ट कॉन्ट्रॅक्टच्या शीर्षस्थानी, आम्ही तीन [ओपनझेपलिन](https://openzeppelin.com/) स्मार्ट कॉन्ट्रॅक्ट क्लासेस इम्पोर्ट करतो:

- @openzeppelin/contracts/token/ERC721/ERC721.sol मध्ये ERC-721 मानकाची अंमलबजावणी आहे, जी आमचे NFT स्मार्ट कॉन्ट्रॅक्ट इनहेरिट करेल. (वैध NFT होण्यासाठी, तुमच्या स्मार्ट कॉन्ट्रॅक्टने ERC-721 मानकाच्या सर्व पद्धतींची अंमलबजावणी करणे आवश्यक आहे.) इनहेरिट केलेल्या ERC-721 फंक्शन्सबद्दल अधिक जाणून घेण्यासाठी, [येथे](https://eips.ethereum.org/EIPS/eip-721) इंटरफेस व्याख्या तपासा.

- @openzeppelin/contracts/utils/Counters.sol असे काउंटर्स प्रदान करते जे फक्त एकाने वाढवले किंवा कमी केले जाऊ शकतात. आमचे स्मार्ट कॉन्ट्रॅक्ट मिंट केलेल्या एकूण NFTs चा मागोवा ठेवण्यासाठी आणि आमच्या नवीन NFT वर युनिक ID सेट करण्यासाठी काउंटर वापरते. (स्मार्ट कॉन्ट्रॅक्ट वापरून मिंट केलेल्या प्रत्येक NFT ला एक युनिक ID नियुक्त करणे आवश्यक आहे—येथे आमचा युनिक ID फक्त अस्तित्वात असलेल्या एकूण NFTs च्या संख्येवरून निर्धारित केला जातो. उदाहरणार्थ, आम्ही आमच्या स्मार्ट कॉन्ट्रॅक्टसह मिंट केलेल्या पहिल्या NFT चा ID "1" आहे, आमच्या दुसऱ्या NFT चा ID "2" आहे, इ.)

- @openzeppelin/contracts/access/Ownable.sol आमच्या स्मार्ट कॉन्ट्रॅक्टवर [अॅक्सेस कंट्रोल](https://docs.openzeppelin.com/contracts/3.x/access-control) सेट करते, त्यामुळे फक्त स्मार्ट कॉन्ट्रॅक्टचा मालक (तुम्ही) NFTs मिंट करू शकतो. (लक्षात घ्या, अॅक्सेस कंट्रोल समाविष्ट करणे ही पूर्णपणे एक पसंती आहे. जर तुम्हाला कोणीही तुमचे स्मार्ट कॉन्ट्रॅक्ट वापरून NFT मिंट करू शकावे असे वाटत असेल, तर ओळ 10 वरील Ownable आणि ओळ 17 वरील onlyOwner हा शब्द काढून टाका.)

आमच्या इम्पोर्ट स्टेटमेंट्सनंतर, आमच्याकडे आमचे कस्टम NFT स्मार्ट कॉन्ट्रॅक्ट आहे, जे आश्चर्यकारकपणे लहान आहे — त्यात फक्त एक काउंटर, एक कन्स्ट्रक्टर आणि एकच फंक्शन आहे! हे आमच्या इनहेरिट केलेल्या ओपनझेपलिन कॉन्ट्रॅक्ट्समुळे आहे, जे NFT तयार करण्यासाठी आम्हाला आवश्यक असलेल्या बहुतेक पद्धतींची अंमलबजावणी करतात, जसे की `ownerOf` जे NFT चा मालक परत करते, आणि `transferFrom`, जे एका खात्यातून दुसऱ्या खात्यात NFT ची मालकी हस्तांतरित करते.

आमच्या ERC-721 कन्स्ट्रक्टरमध्ये, तुमच्या लक्षात येईल की आम्ही 2 स्ट्रिंग्स पास करतो, “MyNFT” आणि “NFT.” पहिले व्हेरिएबल स्मार्ट कॉन्ट्रॅक्टचे नाव आहे आणि दुसरे त्याचे चिन्ह आहे. तुम्ही या प्रत्येक व्हेरिएबलला तुमच्या इच्छेनुसार नाव देऊ शकता!

शेवटी, आमच्याकडे आमचे फंक्शन `mintNFT(address recipient, string memory tokenURI)` आहे जे आम्हाला NFT मिंट करण्याची परवानगी देते! तुमच्या लक्षात येईल की हे फंक्शन दोन व्हेरिएबल्स घेते:

- `address recipient` तो पत्ता निर्दिष्ट करतो ज्याला तुमचे नव्याने मिंट केलेले NFT प्राप्त होईल

- `string memory tokenURI` ही एक स्ट्रिंग आहे जी NFT च्या मेटाडेटाचे वर्णन करणाऱ्या JSON डॉक्युमेंटमध्ये रिझॉल्व्ह झाली पाहिजे. NFT चा मेटाडेटा खरोखरच त्याला जिवंत करतो, ज्यामुळे त्याला नाव, वर्णन, प्रतिमा आणि इतर गुणधर्मांसारखे कॉन्फिगर करण्यायोग्य गुणधर्म मिळतात. या ट्युटोरियलच्या भाग 2 मध्ये, आम्ही हा मेटाडेटा कसा कॉन्फिगर करायचा याचे वर्णन करू.

`mintNFT` इनहेरिट केलेल्या ERC-721 लायब्ररीमधून काही पद्धती कॉल करते आणि शेवटी एक संख्या परत करते जी नव्याने मिंट केलेल्या NFT चा ID दर्शवते.

## पायरी 11: मेटामास्क आणि Alchemy ला तुमच्या प्रोजेक्टशी कनेक्ट करा {#connect-metamask-and-alchemy}

आता आम्ही मेटामास्क वॉलेट, Alchemy खाते तयार केले आहे आणि आमचे स्मार्ट कॉन्ट्रॅक्ट लिहिले आहे, आता या तिन्हींना जोडण्याची वेळ आली आहे.

तुमच्या आभासी वॉलेटमधून पाठवलेल्या प्रत्येक व्यवहारासाठी तुमच्या युनिक खाजगी की चा वापर करून स्वाक्षरी आवश्यक असते. आमच्या प्रोग्रामला ही परवानगी देण्यासाठी, आम्ही आमची खाजगी की (आणि Alchemy API की) एका एन्व्हायरन्मेंट फाईलमध्ये सुरक्षितपणे साठवू शकतो.

व्यवहार पाठवण्याबद्दल अधिक जाणून घेण्यासाठी, Web3 वापरून व्यवहार पाठवण्यावरील [हे ट्युटोरियल](/developers/tutorials/sending-transactions-using-web3-and-alchemy/) तपासा.

प्रथम, तुमच्या प्रोजेक्ट डिरेक्टरीमध्ये dotenv पॅकेज इन्स्टॉल करा:

    npm install dotenv --save

त्यानंतर, आमच्या प्रोजेक्टच्या रूट डिरेक्टरीमध्ये `.env` फाईल तयार करा आणि त्यात तुमची मेटामास्क खाजगी की आणि HTTP Alchemy API URL जोडा.

- मेटामास्कमधून तुमची खाजगी की एक्सपोर्ट करण्यासाठी [या सूचनांचे](https://metamask.zendesk.com/hc/en-us/articles/360015289632-How-to-Export-an-Account-Private-Key) अनुसरण करा

- HTTP Alchemy API URL मिळवण्यासाठी खाली पहा आणि ते तुमच्या क्लिपबोर्डवर कॉपी करा

![Copy your Alchemy API URL](./copy-alchemy-api-url.mp4#842x480)

तुमचे `.env` आता असे दिसले पाहिजे:

    API_URL="https://eth-sepolia.g.alchemy.com/v2/your-api-key"
    PRIVATE_KEY="your-metamask-private-key"

यांना प्रत्यक्षात आमच्या कोडशी जोडण्यासाठी, आम्ही पायरी 13 मध्ये आमच्या hardhat.config.js फाईलमध्ये या व्हेरिएबल्सचा संदर्भ देऊ.

<EnvWarningBanner />

## पायरी 12: Ethers.js इन्स्टॉल करा {#install-ethers}

Ethers.js ही एक लायब्ररी आहे जी [प्रमाणित जेसॉन-आरपीसी पद्धतींना](/developers/docs/apis/json-rpc/) अधिक वापरकर्ता-अनुकूल पद्धतींसह रॅप करून इथेरियमशी संवाद साधणे आणि विनंत्या करणे सोपे करते.

Hardhat अतिरिक्त टूलिंग आणि विस्तारित कार्यक्षमतेसाठी [प्लगइन्स](https://hardhat.org/plugins/) समाकलित करणे अत्यंत सोपे करते. आम्ही कॉन्ट्रॅक्ट प्रस्थापनेसाठी [Ethers प्लगइनचा](https://hardhat.org/docs/plugins/official-plugins#hardhat-ethers) फायदा घेऊ ([Ethers.js](https://github.com/ethers-io/ethers.js/) मध्ये काही अतिशय स्वच्छ कॉन्ट्रॅक्ट प्रस्थापना पद्धती आहेत).

तुमच्या प्रोजेक्ट डिरेक्टरीमध्ये टाईप करा:

    npm install --save-dev @nomiclabs/hardhat-ethers ethers@^5.0.0

आम्हाला पुढील पायरीमध्ये आमच्या hardhat.config.js मध्ये ethers ची देखील आवश्यकता असेल.

## पायरी 13: hardhat.config.js अपडेट करा {#update-hardhat-config}

आम्ही आतापर्यंत अनेक डिपेंडन्सीज आणि प्लगइन्स जोडले आहेत, आता आम्हाला hardhat.config.js अपडेट करण्याची आवश्यकता आहे जेणेकरून आमच्या प्रोजेक्टला त्या सर्वांबद्दल माहिती असेल.

तुमचे hardhat.config.js असे दिसण्यासाठी अपडेट करा:

```js
    /**
    * @type import('hardhat/config').HardhatUserConfig
    */
    require('dotenv').config();
    require("@nomiclabs/hardhat-ethers");
    const { API_URL, PRIVATE_KEY } = process.env;
    module.exports = {
       solidity: "0.8.1",
       defaultNetwork: "sepolia",
       networks: {
          hardhat: {},
          sepolia: {
             url: API_URL,
             accounts: [`0x${PRIVATE_KEY}`]
          }
       },
    }
```

## पायरी 14: आमचे कॉन्ट्रॅक्ट कंपाईल करा {#compile-contract}

आतापर्यंत सर्वकाही काम करत आहे याची खात्री करण्यासाठी, आमचे कॉन्ट्रॅक्ट कंपाईल करूया. कंपाईल टास्क हे अंगभूत hardhat टास्कपैकी एक आहे.

कमांड लाईनवरून रन करा:

    npx hardhat compile

तुम्हाला सोर्स फाईलमध्ये SPDX परवाना आयडेंटिफायर प्रदान न केल्याबद्दल चेतावणी मिळू शकते, परंतु त्याबद्दल काळजी करण्याची गरज नाही — आशा आहे की बाकी सर्वकाही चांगले दिसेल! नसल्यास, तुम्ही नेहमी [Alchemy डिस्कॉर्ड्](https://discord.gg/u72VCg3) मध्ये संदेश पाठवू शकता.

## पायरी 15: आमची प्रस्थापना स्क्रिप्ट लिहा {#write-deploy}

आता आमचे कॉन्ट्रॅक्ट लिहिले गेले आहे आणि आमची कॉन्फिगरेशन फाईल तयार आहे, आता आमची कॉन्ट्रॅक्ट प्रस्थापना स्क्रिप्ट लिहिण्याची वेळ आली आहे.

`scripts/` फोल्डरवर जा आणि `deploy.js` नावाची नवीन फाईल तयार करा, त्यात खालील मजकूर जोडा:

```js
async function main() {
  const MyNFT = await ethers.getContractFactory("MyNFT")

  // प्रस्थापना सुरू करा, जे कॉन्ट्रॅक्ट ऑब्जेक्टमध्ये रिझॉल्व्ह होणारे प्रॉमिस परत करते
  const myNFT = await MyNFT.deploy()
  await myNFT.deployed()
  console.log("Contract deployed to address:", myNFT.address)
}

main()
  .then(() => process.exit(0))
  .catch((error) => {
    console.error(error)
    process.exit(1)
  })
```

Hardhat त्यांच्या [कॉन्ट्रॅक्ट्स ट्युटोरियलमध्ये](https://hardhat.org/tutorial/testing-contracts.html#writing-tests) यापैकी प्रत्येक कोडची ओळ काय करते हे स्पष्ट करण्याचे आश्चर्यकारक काम करते, आम्ही त्यांचे स्पष्टीकरण येथे स्वीकारले आहे.

    const MyNFT = await ethers.getContractFactory("MyNFT");

ethers.js मधील ContractFactory हे नवीन स्मार्ट कॉन्ट्रॅक्ट्स प्रस्थापित करण्यासाठी वापरले जाणारे एक ॲब्स्ट्रॅक्शन आहे, त्यामुळे येथील MyNFT हे आमच्या NFT कॉन्ट्रॅक्टच्या उदाहरणांसाठी एक फॅक्टरी आहे. hardhat-ethers प्लगइन वापरताना ContractFactory आणि Contract उदाहरणे डीफॉल्टनुसार पहिल्या स्वाक्षरीकर्त्याशी जोडलेली असतात.

    const myNFT = await MyNFT.deploy();

ContractFactory वर deploy() कॉल केल्याने प्रस्थापना सुरू होईल आणि एक Promise परत येईल जे Contract मध्ये रिझॉल्व्ह होईल. हा तो ऑब्जेक्ट आहे ज्यामध्ये आमच्या प्रत्येक स्मार्ट कॉन्ट्रॅक्ट फंक्शनसाठी एक पद्धत आहे.

## पायरी 16: आमचे कॉन्ट्रॅक्ट प्रस्थापित करा {#deploy-contract}

आम्ही शेवटी आमचे स्मार्ट कॉन्ट्रॅक्ट प्रस्थापित करण्यासाठी तयार आहोत! तुमच्या प्रोजेक्ट डिरेक्टरीच्या रूटवर परत जा आणि कमांड लाईनमध्ये रन करा:

    npx hardhat --network sepolia run scripts/deploy.js

त्यानंतर तुम्हाला असे काहीतरी दिसेल:

    Contract deployed to address: 0x4C5266cCc4b3F426965d2f51b6D910325a0E7650

जर आपण [Sepolia Etherscan](https://sepolia.etherscan.io/) वर गेलो आणि आमचा कॉन्ट्रॅक्ट पत्ता शोधला तर आम्हाला ते यशस्वीरित्या प्रस्थापित झाले आहे हे पाहता आले पाहिजे. जर तुम्हाला ते लगेच दिसत नसेल, तर कृपया थोडा वेळ प्रतीक्षा करा कारण यास थोडा वेळ लागू शकतो. व्यवहार असा काहीसा दिसेल:

![View your transaction address on Etherscan](./etherscan-sepoila-contract-creation.png)

From पत्ता तुमच्या मेटामास्क खाते पत्त्याशी जुळला पाहिजे आणि To पत्ता “Contract Creation” असे म्हणेल. जर आपण व्यवहारावर क्लिक केले, तर आपल्याला To फील्डमध्ये आमचा कॉन्ट्रॅक्ट पत्ता दिसेल:

![View your contract address on Etherscan](./etherscan-sepolia-tx-details.png)

व्वा! तुम्ही नुकतेच तुमचे NFT स्मार्ट कॉन्ट्रॅक्ट इथेरियम (टेस्टनेट) चेनवर प्रस्थापित केले आहे!

तांत्रिकदृष्ट्या काय चालले आहे हे समजून घेण्यासाठी, आमच्या [Alchemy डॅशबोर्डमधील](https://dashboard.alchemy.com/explorer) एक्सप्लोरर टॅबवर जाऊया. जर तुमच्याकडे एकाधिक Alchemy ॲप्स असतील तर ॲपनुसार फिल्टर करण्याची आणि “MyNFT” निवडण्याची खात्री करा.

![View calls made “under the hood” with Alchemy’s Explorer Dashboard](./alchemy-explorer-goerli.png)

येथे तुम्हाला काही जेसॉन-आरपीसी कॉल्स दिसतील जे Hardhat/Ethers ने आमच्यासाठी तांत्रिकदृष्ट्या केले जेव्हा आम्ही .deploy() फंक्शन कॉल केले. येथे नमूद करण्यासारखे दोन महत्त्वाचे कॉल्स म्हणजे [eth_sendRawTransaction](/developers/docs/apis/json-rpc/#eth_sendrawtransaction), जी प्रत्यक्षात आमचे स्मार्ट कॉन्ट्रॅक्ट Sepolia चेनवर लिहिण्याची विनंती आहे, आणि [eth_getTransactionByHash](/developers/docs/apis/json-rpc/#eth_gettransactionbyhash) जी हॅश दिल्यावर आमच्या व्यवहाराबद्दल माहिती वाचण्याची विनंती आहे (व्यवहार पाठवताना एक सामान्य पॅटर्न). व्यवहार पाठवण्याबद्दल अधिक जाणून घेण्यासाठी, Web3 वापरून व्यवहार पाठवण्यावरील [हे ट्युटोरियल](/developers/tutorials/sending-transactions-using-web3-and-alchemy/) तपासा.

या ट्युटोरियलच्या भाग 1 साठी एवढेच. [भाग 2 मध्ये, आम्ही प्रत्यक्षात NFT मिंट करून आमच्या स्मार्ट कॉन्ट्रॅक्टशी संवाद साधू](/developers/tutorials/how-to-mint-an-nft/), आणि [भाग 3 मध्ये आम्ही तुम्हाला तुमच्या इथेरियम वॉलेटमध्ये तुमचे NFT कसे पाहायचे ते दाखवू](/developers/tutorials/how-to-view-nft-in-metamask/)!
