---
title: "NFTని ఎలా వ్రాయాలి & డిప్లాయ్ చేయాలి (NFT ట్యుటోరియల్ సిరీస్‌లో పార్ట్ 1/3)"
description: "ఈ ట్యుటోరియల్ ఎథీరియం మరియు ఇంటర్ ప్లానెటరీ ఫైల్ సిస్టమ్ (IPFS) ఉపయోగించి నాన్ ఫంగిబుల్ టోకెన్ (ERC-721 టోకెన్) స్మార్ట్ కాంట్రాక్ట్‌ను ఎలా వ్రాయాలి మరియు డిప్లాయ్ చేయాలి అనే దానిపై దశలవారీగా మీకు మార్గనిర్దేశం చేసే NFTల సిరీస్‌లో పార్ట్ 1."
author: "సుమి ముద్గిల్"
tags: ["ERC-721", "Alchemy", "Solidity", "స్మార్ట్ కాంట్రాక్ట్‌లు"]
skill: beginner
breadcrumb: "NFTని వ్రాయండి మరియు డిప్లాయ్ చేయండి"
lang: te
published: 2021-04-22
---

NFTలు బ్లాక్‌చైన్‌ను ప్రజల దృష్టికి తీసుకురావడంతో, ఎథీరియం బ్లాక్‌చైన్‌లో మీ స్వంత NFT కాంట్రాక్ట్‌ను (ERC-721 టోకెన్) ప్రచురించడం ద్వారా మీరే స్వయంగా ఈ హైప్‌ను అర్థం చేసుకోవడానికి ఇది ఒక అద్భుతమైన అవకాశం!

NFT స్పేస్‌లో అతిపెద్ద పేర్లకు శక్తినిస్తున్నందుకు Alchemy చాలా గర్విస్తోంది, వీటిలో 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 అనేది ఒకటి చొప్పున మాత్రమే పెంచబడే లేదా తగ్గించబడే కౌంటర్‌లను అందిస్తుంది. ముద్రించబడిన మొత్తం NFTల సంఖ్యను ట్రాక్ చేయడానికి మరియు మన కొత్త NFTలో ప్రత్యేక IDని సెట్ చేయడానికి మన స్మార్ట్ కాంట్రాక్ట్ కౌంటర్‌ను ఉపయోగిస్తుంది. (స్మార్ట్ కాంట్రాక్ట్‌ని ఉపయోగించి ముద్రించబడిన ప్రతి NFTకి తప్పనిసరిగా ఒక ప్రత్యేక ID కేటాయించబడాలి—ఇక్కడ మన ప్రత్యేక ID కేవలం ఉనికిలో ఉన్న మొత్తం NFTల సంఖ్య ద్వారా నిర్ణయించబడుతుంది. ఉదాహరణకు, మన స్మార్ట్ కాంట్రాక్ట్‌తో మనం ముద్రించే మొదటి NFTకి "1" అనే ID ఉంటుంది, మన రెండవ NFTకి "2" అనే ID ఉంటుంది, మొదలైనవి.)

- @openzeppelin/contracts/access/Ownable.sol మన స్మార్ట్ కాంట్రాక్ట్‌పై [యాక్సెస్ నియంత్రణ](https://docs.openzeppelin.com/contracts/3.x/access-control)ను సెటప్ చేస్తుంది, కాబట్టి స్మార్ట్ కాంట్రాక్ట్ యజమాని (మీరు) మాత్రమే NFTలను ముద్రించగలరు. (గమనిక, యాక్సెస్ నియంత్రణను చేర్చడం పూర్తిగా ఒక ప్రాధాన్యత. మీ స్మార్ట్ కాంట్రాక్ట్‌ని ఉపయోగించి ఎవరైనా NFTని ముద్రించగలగాలని మీరు కోరుకుంటే, లైన్ 10లోని Ownable మరియు లైన్ 17లోని onlyOwner అనే పదాన్ని తీసివేయండి.)

మన దిగుమతి స్టేట్‌మెంట్‌ల తర్వాత, మన కస్టమ్ NFT స్మార్ట్ కాంట్రాక్ట్ ఉంది, ఇది ఆశ్చర్యకరంగా చిన్నది — ఇది కేవలం ఒక కౌంటర్, ఒక కన్స్ట్రక్టర్ మరియు ఒకే ఫంక్షన్‌ను మాత్రమే కలిగి ఉంటుంది! ఇది మనం వారసత్వంగా పొందిన ఓపెన్‌జెప్పెలిన్ కాంట్రాక్ట్‌ల వల్ల సాధ్యమైంది, ఇవి NFTని సృష్టించడానికి మనకు అవసరమైన చాలా పద్ధతులను అమలు చేస్తాయి, ఉదాహరణకు NFT యజమానిని తిరిగి ఇచ్చే `ownerOf` మరియు ఒక ఖాతా నుండి మరొక ఖాతాకు NFT యాజమాన్యాన్ని బదిలీ చేసే `transferFrom`.

మన ERC-721 కన్స్ట్రక్టర్‌లో, మేము “MyNFT” మరియు “NFT” అనే 2 స్ట్రింగ్‌లను పాస్ చేయడం మీరు గమనించవచ్చు. మొదటి వేరియబుల్ స్మార్ట్ కాంట్రాక్ట్ పేరు, మరియు రెండవది దాని చిహ్నం. మీరు ఈ వేరియబుల్స్ ప్రతిదానికీ మీకు నచ్చిన పేరు పెట్టుకోవచ్చు!

చివరగా, NFTని ముద్రించడానికి మమ్మల్ని అనుమతించే మన ఫంక్షన్ `mintNFT(address recipient, string memory tokenURI)` ఉంది! ఈ ఫంక్షన్ రెండు వేరియబుల్స్‌ను తీసుకుంటుందని మీరు గమనించవచ్చు:

- `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/) మరింత యూజర్ ఫ్రెండ్లీ పద్ధతులతో చుట్టడం ద్వారా ఎథీరియంతో ఇంటరాక్ట్ అవ్వడం మరియు అభ్యర్థనలు చేయడం సులభతరం చేసే లైబ్రరీ.

అదనపు టూలింగ్ మరియు విస్తరించిన కార్యాచరణ కోసం [ప్లగిన్‌లను](https://hardhat.org/plugins/) ఏకీకృతం చేయడాన్ని Hardhat చాలా సులభతరం చేస్తుంది. కాంట్రాక్ట్ డిప్లాయ్‌మెంట్ కోసం మేము [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()ని కాల్ చేయడం డిప్లాయ్‌మెంట్‌ను ప్రారంభిస్తుంది మరియు కాంట్రాక్ట్‌కు రిజాల్వ్ అయ్యే ప్రామిస్‌ను తిరిగి ఇస్తుంది. ఇది మన స్మార్ట్ కాంట్రాక్ట్ ఫంక్షన్‌లలో ప్రతిదానికీ ఒక పద్ధతిని కలిగి ఉన్న ఆబ్జెక్ట్.

## దశ 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)

మనం .deploy() ఫంక్షన్‌ని కాల్ చేసినప్పుడు Hardhat/Ethers మన కోసం అంతర్గతంగా చేసిన కొన్ని జేసన్-ఆర్‌పీసీ కాల్‌లను ఇక్కడ మీరు చూస్తారు. ఇక్కడ పేర్కొనవలసిన రెండు ముఖ్యమైనవి [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/)!
