توکن های nft

همه چیز درباره برنامه نویسی برای nft

اگر توسعه‌ دهنده‌ا ی هستید که به توسعه بلاک چین علاقه ‌مند است، باید درباره NFT یا توکن ‌های غیرقابل تعویض بدانید. بنابراین در این مقاله، با مهندسی پشت آن ‌ها آشنا می ‌شویم تا بتوانید برنامه نویسی خود را در این زمینه شروع کنید.

در پایان پروژه، کیف پول اتریوم خود را با یک NFT جدید در آن خواهید داشت. این مقاله برای مبتدیان است و نیازی به دانش قبلی در مورد شبکه اتریوم یا قرارداد های هوشمند ندارد.

nft چیست؟

NFT مخفف non-fungible token است. این نقل قول از ethereum.org آن را به خوبی توضیح می دهد:

NFT ها نشانه هایی هستند که می توانیم از آن ها برای نشان دادن مالکیت اقلام منحصر به فرد استفاده کنیم. آن ها به ما اجازه می دهند چیز هایی مانند هنر، کلکسیون ها، حتی املاک و مستغلات را نشانه گذاری کنیم. آن ها در هر زمان فقط می توانند یک مالک رسمی داشته باشند و توسط بلاک چین اتریوم ایمن شده اند – هیچ کس نمی تواند سابقه مالکیت را تغییر دهد یا یک NFT جدید را کپی / پیست کند.

استاندارد NFT یا ERC-721 چیست؟

کدهای nft

ERC-721 رایج ترین استاندارد NFT است. اگر قرارداد هوشمند شما روش ‌های استاندارد API خاصی را پیاده‌ سازی می ‌کند، می ‌توان آن را ERC-721 Non-Fungible Token Contract نامید.

این روش ها در EIP-721 مشخص شده است. پروژه های منبع باز مانند OpenZeppelin با اجرای رایج ترین استاندارد های ERC به عنوان یک کتابخانه قابل استفاده مجدد، فرآیند توسعه را ساده کرده اند.

اگر قصد دارید تا به صورت حرفه ای وارد دنیای nft شوید باید زبان برنامه نویسی سالیدیتی را برای سرمایه گذاری کردن انتخاب کنید.

منتینگ NFT چیست؟

با برش یک NFT، یک توکن منحصر به فرد را در یک بلاک چین منتشر می کنید. این توکن نمونه ای از قرارداد هوشمند شماست.

هر توکن دارای یک TokenURI منحصر به فرد است که حاوی فرا داده دارایی شما در یک فایل JSON است که با طرح خاصی مطابقت دارد. فرا داده جایی است که اطلاعات مربوط به NFT خود را مانند نام، تصویر، توضیحات و سایر ویژگی ها ذخیره می کنید.

نمونه ای از فایل JSON برای “ERC721 Metadata Schema” به شکل زیر است:

{
"attributes": [
		{
			"trait_type": "Shape",
			"value": "Circle"
		},
		{
			"trait_type": "Mood",
			"value": "Sad"
		}
	],
	"description": "A sad circle.",
	"image": "https://i.imgur.com/Qkw9N0A.jpeg",
	"name": "Sad Circle"
}

چگونه ابر داده های NFT خود را ذخیره کنم؟

سه راه اصلی برای ذخیره ابر داده NFT وجود دارد.

ابتدا می توانید اطلاعات را روی زنجیره ذخیره کنید. به عبارت دیگر، می‌ توانید ERC-721 خود را گسترش دهید و ابر داده‌ ها را بر روی بلاک چین ذخیره کنید، که می ‌تواند پر هزینه باشد.

روش دوم استفاده از IPFS است. و راه سوم این است که به سادگی API شما فایل JSON را برگرداند.

روش اول و دوم معمولاً ترجیح داده می شود، زیرا نمی توانید فایل JSON زیرین را تعدیل کنید. برای محدوده این پروژه، روش سوم را انتخاب خواهیم کرد.

چیزی که ما خواهیم ساخت:

برنامه نویسی nft

در این مقاله، ما NFT خود را ایجاد و ضرب می کنیم. برای مبتدیان مناسب است و نیازی به دانش قبلی در مورد شبکه اتریوم یا قرارداد های هوشمند ندارد. با این حال، داشتن درک خوب از این مفاهیم به شما کمک می کند تا بفهمید پشت صحنه چه اتفاقی می افتد.

پیشنهاد می کنیم مقاله بهترین زبان های برنامه نویسی برای یادگیری در سال ۲۰۲۲ را از دست ندهید.

پیش نیاز ها

متاماسک

برای تعامل با قرارداد هوشمند خود به یک آدرس اتریوم نیاز داریم. ما از Metamask به عنوان کیف پول خود استفاده خواهیم کرد. این یک کیف پول مجازی رایگان است که آدرس های اتریوم شما را مدیریت می کند. برای ارسال و دریافت تراکنش‌ ها به آن نیاز داریم. به عنوان مثال، ضرب یک NFT یک تراکنش است.

افزونه کروم و برنامه تلفن همراه آن ها را دانلود کنید. ما به هر دو نیاز داریم زیرا افزونه کروم، NFT های شما را نمایش نمی دهد.

نرم افزار متامسک

برای اهداف توسعه، مطمئن شوید که شبکه را به “Ropsten Test Network” تغییر دهید. برای پوشش هزینه های استقرار و ضرب NFT خود به مقداری Eth نیاز دارید. به Ropsten Ethereum Faucet بروید و آدرس خود را وارد کنید. به زودی باید مقداری Eth آزمایشی را در حساب Metamask خود مشاهده کنید.

کیمیاگری

برای تعامل با شبکه اتریوم، باید به یک گره اتریوم متصل باشید.

اجرای Node خود و حفظ زیر ساخت به تنهایی یک پروژه است. خوشبختانه، ارائه دهندگان گره به عنوان یک سرویس وجود دارند که زیر ساخت را برای شما میزبانی می کنند. گزینه های زیادی مانند Infura، BlockDaemon و Moralis وجود دارد. ما از Alchemy به عنوان ارائه دهنده گره خود استفاده خواهیم کرد.

به وب سایت آن ها بروید، یک حساب کاربری ایجاد کنید، اتریوم را به عنوان شبکه خود انتخاب کنید و برنامه خود را ایجاد کنید. Ropsten را به عنوان شبکه خود انتخاب کنید.

مرحله اول ساخت nft

در داشبورد خود، روی “مشاهده جزئیات” در برنامه خود و سپس روی “کلید مشاهده” کلیک کنید. کلید http خود را در جایی ذخیره کنید زیرا بعداً به آن نیاز خواهیم داشت.

مرحله دوم ساخت nft

ما از NodeJS برای پروژه استفاده خواهیم کرد. اگر آن را نصب نکرده اید، این آموزش ساده توسط freeCodeCamp  را دنبال کنید.

پروژه را راه اندازی کنید

در ترمینال خود، این دستور را اجرا کنید تا یک دایرکتوری جدید برای پروژه خود ایجاد کنید:

mkdir nft-project
cd nft-project

اکنون، بیایید یک دایرکتوری دیگر ethereum/، در داخل nft-project/ ایجاد کنیم و آن را با Hardhat مقدار دهی اولیه کنیم. Hardhat یک ابزار توسعه دهنده است که استقرار و آزمایش نرم افزار اتریوم را آسان می کند.

mkdir ethereum
cd ethereum
npm init

هر طور که می خواهید به سوالات پاسخ دهید. سپس، این دستورات را اجرا کنید تا یک پروژه Hardhat بسازید:

npm install --save-dev hardhat
npx hardhat

این اعلان را خواهید دید:

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.8

? What do you want to do? …
  Create a sample project
❯ Create an empty hardhat.config.js
  Quit

ایجاد یک hardhat.config.js خالی را انتخاب کنید. این یک hardhat.config.js فایل خالی ایجاد می کند که بعداً آن را به روز خواهیم کرد.

برای برنامه وب، از Next.js برای مقدار دهی اولیه یک برنامه وب کاملاً کاربردی استفاده خواهیم کرد. به فهرست اصلی باز گردید، nft-project/ و یک برنامه boilerplate Next.js به نام web را مقدار دهی اولیه کنید:

cd ..
mkdir web
cd web
npx create-next-app@latest

پروژه شما اکنون به شکل زیر است:

nft-project/
        ethereum/
        web/

ما آماده ایم تا به کد نویسی واقعی بپردازیم.

چگونه متغیرهای env خود را تعریف کنیم؟

کلید کیمیاگری را که قبلاً از پروژه آزمایشی خود برداشتیم را به خاطر دارید؟ ما از آن به همراه کلید های عمومی و خصوصی حساب Metamask خود برای تعامل با بلاک چین استفاده خواهیم کرد.

دستورات زیر را اجرا کنید، یک فایل به نام .env داخل ethereum/ دایرکتوری خود بسازید و dotenv را نصب کنید. بعدا از آن ها استفاده خواهیم کرد.

cd ..
cd ethereum
touch .env
npm install dotenv -- save

برای فایل .env خود، کلیدی را که از Alchemy صادر کرده اید قرار دهید و آن دستورالعمل ها را دنبال کنید تا کلید خصوصی Metamask خود را بگیرید.

این فایل env شما است:

DEV_API_URL = YOUR_ALCHEMY_KEY
PRIVATE_KEY = YOUR_METAMASK_PRIVATE_KEY
PUBLIC_KEY = YOUR_METAMASK_ADDRESS

قرارداد هوشمند برای NFT

قراردادهای هوشمند

به پوشه ethereum/ بروید و دو دایرکتوری دیگر ایجاد کنید: قرارداد ها و اسکریپت ها. یک پروژه ساده hardhat شامل آن پوشه ها است.

  • contracts/ حاوی فایل های منبع قرارداد های شما است
  • scripts/ حاوی اسکریپت هایی برای استقرار و ضرب NFT های ما است
mkdir contracts
mkdir scripts

سپس، OpenZeppelin را نصب کنید. OpenZeppelin Contract یک کتابخانه منبع باز با کد های قابل استفاده مجدد از قبل آزمایش شده است تا توسعه قرارداد هوشمند را آسان تر کند.

npm install @openzeppelin/contracts

در نهایت، ما در حال نوشتن قرارداد هوشمند برای NFT خود خواهیم بود. به فهرست قراردادهای خود بروید و یک فایل با عنوانEmotionalShapes.sol.  ایجاد کنید. شما می توانید NFT های خود را هر طور که صلاح می دانید نام گذاری کنید.

برنامه  .solافزودنی به زبان Solidity اشاره دارد، که ما از آن برای برنامه ریزی قرارداد هوشمند خود استفاده خواهیم کرد. ما فقط 14 خط کد با Solidity می نویسیم، بنابراین اگر قبلاً آن را ندیده اید نگران نباشید.

cd contracts
touch EmotionalShapes.sol

این قرارداد هوشمند ما است:

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

import "@openzeppelin/contracts/token/ERC721/ERC721.sol";
import "@openzeppelin/contracts/utils/Counters.sol";

contract EmotionalShapes is ERC721 {
    using Counters for Counters.Counter;
    Counters.Counter private _tokenIdCounter;

    constructor() ERC721("EmotionalShapes", "ESS") {}

    function _baseURI() internal pure override returns (string memory) {
        return "YOUR_API_URL/api/erc721/";
    }

    function mint(address to)
        public returns (uint256)
    {
        require(_tokenIdCounter.current() < 3); 
        _tokenIdCounter.increment();
        _safeMint(to, _tokenIdCounter.current());

        return _tokenIdCounter.current();
    }
}

مرور کدها

  1. در بالای فایل، ما مشخص کردیم که کدام ماژول OpenZeppelin را وارد کنیم. ما به قرارداد ERC721 نیاز داریم زیرا “پایه” قرارداد هوشمند ما است. قبلاً تمام روش های مشخص شده در EIP-721  را پیاده سازی کرده است تا بتوانیم با خیال راحت از آن استفاده کنیم.
  2. یک شمارنده برای تولید شناسه های افزایشی برای NFT های ما مفید است. ما متغیر را نامگذاری کردیم _tokenIdCounter
  3. در سازنده، ERC721 خود را با نام و نماد آن مقدار دهی اولیه کردیم. من EmotionalShapes و ESS را انتخاب کردم.
  4. _baseURI ما تابع پیش فرض را با برگرداندن تابع خود لغو می کنیم. در یک ثانیه آن را خواهیم ساخت. به طور خلاصه، این URL است که به عنوان “پیشوند” به همه tokenURI های ما اضافه می شود. در مثال بالا، ابر داده های NFT های ما در یک فایل JSON در .YOUR_API_URL/api/erc721/1 قرار دارد.
  5. ما تابع “mint” را اجرا می کنیم. این تابعی است که به شما امکان می دهد نمونه ای از این قرارداد هوشمند را در بلاک چین منتشر کنید. من نیاز داشتم که _tokenIdCounterمتغیر کمتر از 3 باشد زیرا فقط سه نمونه از NFT خود را ایجاد خواهم کرد. اگر می خواهید بیشتر mint کنید، می توانید آن را حذف کنید.
  6. در نهایت، در داخل تابع  mint، _tokenIdCounterمتغیر را 1 واحد افزایش می دهیم، بنابراین شناسه ما 1، به دنبال آن 2 و به دنبال آن 3 می شود. سپس، تابع ارائه شده توسط OpenZeppelin _safeMint را برای انتشار توکن فراخوانی می کنیم.

سخن پایانی

شما به تازگی NFT خود را ساخته اید. قدم بعدی پروژه، برنامه front end React را برای تعامل با قرارداد خود باید بسازید. هدف نهایی ساخت یک برنامه وب کاملاً کاربردی است که در آن بتوانید NFT های خود را بفروشید.

برای شروع یادگیری برنامه نویسی می توانید از قسمت مسیرهای کارآموزی برنامه نویسی آکادمی رستاوا استفاده کنید.

پاسخ‌ها

آدرس ایمیل شما منتشر نخواهد شد.

پل ورود به بازار تکنولوژی

مشاوره رایگان انتخاب مسیر

با کمک مشاورهای رستاوا آکادمی مسیر کارآموزی مناسب برای خودت رو برای ورود به بازار کار تکنولوژی انتخاب کن

توسعه فردی برای حرفه‌ای شدن

منتورهای رستاوا و دوره‌های ما شما رو برای کارآموزی و در نهایت جذب و استخدام آماده میکنن

مدرک بین المللی و استانداردهای جهانی

یادگیری با استاندار های بین المللی و دریافت مدرک از Credx Academy کانادا

اگر در مسیرهای کارآموزی ما پذیرش بگیری موقعیت‌های کارآموزی و استخدام در پروژه‌ها و شرکت های بین المللی از طریق مجموعه رستاوا به روت باز می شه.

۲ هفته رایگان

همین حالا با منتورها

ارتباط آنی بگیر!