نحوه ایجاد توکن ERC721 با قرارداد هوشمند
روش ایجاد توکن ERC721 با قرارداد هوشمند سالیدیتی
اتریوم با ایجاد استاندارد توکن ERC-721 این امکان را برای توسعهدهندگان نرمافزار فراهم کرد تا NFTها را به راحتی مستقر کنند و از سازگاری آنها با اکوسیستم گستردهتر اطمینان حاصل کنند. این استاندارد توکن به همراه ERC-1155 مسئول تولید توکنهای اصلی NFT هستند. در این مقاله از سایت توکن خان قصد داریم تا به بررسی نحوه ایجاد توکن ERC721 (How to create ERC-721 Token) بپردازیم، با ما همراه باشید.
مقایسه ERC20 و ERC721
اگر در بازار ارزهای دیجیتال و به خصوص بلاک چین اتریوم فعال باشید، حتما نام توکنهای استاندارد اتریوم مانند ERC20 و ERC721 را شنیده اید. در واقع ERC20، توکنهای یکسانی هستند و دارای خصوصیات و ویژگیهایی نیستند که آنها را منحصربهفرد کند. توکنهای یک قرارداد ERC20، توکنهایی قابل تعویض و تبدیل شدن به یکدیگر هستند.
اما قرارداد ERC721، توکنهای غیرقابل تعویض که آنها را با نام NFT میشناسیم را ایجاد میکنند، این توکنها منحصربهفرد هستند و قابل کپی و تبدیل به یکدیگر نیستند. هر NFT دارای ارزش و خصوصیات ویژه خود است، دلایلی مثل قدیمی بودن، کمیاب بودن و هر ویژگی دیگری که آن را دارای ارزش میکند.
پیشنهاد خرید دوره آموزشی: آموزش کد توکن دارای مالیات(کارمزد)
قبل از مطالعه کامل مقاله “نحوه ایجاد توکن ERC721 با قرارداد هوشمند” پیشنهاد میکنیم مقالات دیگر حوزه آموزش برنامه نویسی سالیدیتی را هم مطالعه کنید.
توابع Payable در قراردادهای هوشمند Solidity
انواع داده ها و متغیرها در سالیدیتی (solidity)
کتابخانه ها (Library) در قراردادهای هوشمند Solidity
گس فی GAS FEE در شبکه اتریوم چیست؟
استفاده از Import در سالیدیتی Solidity
انواع حافظه در قرارداد هوشمند سالیدیتی
NFT چیست؟
NFT کوتاه شده عبارت Non-Fungible Token به معنی توکن غیرقابل تعویض است. این توکنها را میتوان به عنوان یک دارایی دیجیتال که تقسیمناپذیر و منحصربهفرد هستند تعریف کرد. این توکنها دارای قابلیت تعویض که در مورد سایر توکنهایی که در بازار استفاده میشوند وجود دارد، نیستند.
NFT از اطلاعات شناسایی که در قراردادهای هوشمند ذخیره میشوند، ساخته شده است. در واقع آنچه باعث تمایز قائل شدن بین این توکنها و عدم جایگزینی آنها با یکدیگر میشود، همین اطلاعات است. سه ویژگی هر توکن غیرقابل تعویض را میتوان منحصربهفرد بودن، تقسیمناپذیر بودن و کمیاب بودن آن دانست که در این میان ویژگی اول مهمترین آنها است.
استاندارد توکن ERC721 چیست؟
حالا این سؤال ممکن است برای شما پیش بیاید که استاندارد توکن ERC721 چیست؟ NFTها با دو استاندارد توکن خاص پشتیبانی میشوند که اولین استاندارد توکن توسعه یافته برای پشتیبانی از داراییهای دیجیتال غیرقابل تعویض، ERC-721 است (استاندارد دیگر ERC-1155 است). این استاندارد همچنین به عنوان استاندارد قرارداد هوشمند سالیدیتی که قابل ارثبری است، شناخته میشود. بنابراین توسعهدهندگان میتوانند از کتابخانه Open Zeppelin کمک بگیرند تا قراردادهای سازگار جدید را ایجاد کنند.
استاندارد توکن ERC-721 در پشتیبانی از بسیاری از عملکردها و ویژگیها با استاندارد ERC20 یکسان هستند. مثلا هر دو قرارداد این توکنها از عملکردهایی مثل انتقال، تائید و دریافت پشتیبانی میکنند و به فرادادهها نیاز دارند (مانند نام و نماد در زمان ایجاد قرارداد).
اما برخی ویژگیهای توکنهای ERC721 در مورد استاندارد ERC20 وجود ندارد، مثلا اینکه هر توکن ERC721 از یک قرارداد استخراج میشود و دارای یک شناسه مخصوص به خود است.
توابع مشابه با ERC-20
- نام (Name): این فیلد برای تعیین نام توکن استفاده میشود که سایر برنامهها و قراردادها میتوانند از این نام برای شناسایی توکن استفاده کنند.
- نماد (Symbol) : این فیلد برای تعریف نام کوتاه یا نماد هر توکن استفاده میشود.
- عرضه کل (totalSupply) : این تابع برای تعیین کل عرضه توکنها بر روی بلاک چین استفاده میشود. عرضه توکنها نباید حتما دائمی باشد.
- موجودی (balanceOf) : این تابع تعداد NFTهایی که آدرس دارد را برمیگرداند.
مثالی برای قرارداد ERC721 با URI
کد سالیدیتی که در ادامه مشاهده میکنید، نحوه ایجاد توکن ERC721 و قرارداد هوشمندی است که میتوان از آن برای ایجاد توکنهای NFT استفاده کرد.
همانطور که در قرارداد زیر میبینید، در زمان فراخوانی تابع ایجاد NFT، میتوان یک URI را برای مرتبط کردن آن با NFT ایجاد شده، ارسال کرد. پس اگر یک URIدر فایل سیستم بین سیارهای یا همان IPFS دارید، که این URI پیوندی به یک تصویر دارد، میتوانید در قرارداد زیر آن را استفاده کنید.
این قرارداد قابل تمدید است و میتواند عملکردهای اضافی دیگری را هم به آن اضافه کرد. برای اینکه چگونگی کار کردن این قرارداد و اینکه چگونه توکن erc-721 بسازیم؟ را بهتر درک کنید، نظرات کد زیر را بخوانید و آن را در ریمیکس امتحان کنید.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
//SPDX-License-identifier: MIT pragma solidity ^0.8.0; // وارد کردن کتابخانه ها به قرارداد import "@openzeppelin/contracts/token/ERC721/extensions/ERC721URIStorage.sol"; import "@openzeppelin/contracts/utils/Counters.sol"; // ERC721 ارث بری از قرارداد contract SampleNFTContract is ERC721URIStorage{ // تعریف متغیری به عنوان // ID شمارنده ی using Counters for Counters.Counter Counters.Counter public tokenID; // ERC721 کانستراکتور // به ترتیب شامل اسم و نماد می شود constructor () public ERC721 ("astronaut", "STAR"){} // نعریف تابعی برای ساخت توکن // توکن را به عنوان ورودی می گیرد URI // توکن را برمی گرداند ID function createNFT(string memory tokenURI) public returns (uint256) { // افزایش شمارنده tokenID.increment(); // ID گرفتن شماره // از شمارنده uint256 newNFTId = tokenID.current(); // فراخوانی تابعی یرای ضرب توکن ها _safeMint(msg.sender, newNFTId); // URI ست کردن // ID برای توکن مشخص شده با _setTokenURI(newNFTId, tokenURI); // توکن ID برگرداندن return newNFTId; } } |
مثالی برای قرارداد ERC721 با ویژگی ها
کد سالیدیتی که در ادامه مشاهده میکنید، نحوه ایجاد توکن ERC721 و قرارداد هوشمندی است که توکنهای NFT آن دارای یک ویژگی یا تعدادی ویژگیهای خاص هستند. Mapping ویژگیهای NFT را ذخیره میکند و هنگامی که قصد ایجاد یک NFT جدید را داشته باشیم، برای اینکه یک توکن تکراری ایجاد نشود، Mapping مورد بررسی قرار میگیرد.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
//SPDX-License-identifier: MIT pragma solidity ^0.8.0; // وارد کردن کتابخانه به قرارداد import "@openzeppelin/contracts/token/ERC721/ERC721.sol"; // ERC721 ارث بری از قرارداد contract Astronaut is ERC721 { // ها string تعریف ارایه ای از // برای نگه داری صفت مربوط به هر توکن // یک صفت را نمی توان به دو توکن نسبت داد string[] public trait; mapping(string => bool) _traitExists; // ERC721 کانستراکتور // به ترتیب شامل اسم و نماد می شود constructor() ERC721("astronaut", "STAR") {} // نعریف تابعی برای ساخت توکن function createNFT(string memory _trait) public { // برسی مپینگ برای تعین وضعیت صفت require(!_traitExists[_trait], "Trait already exists"); // صفت جدید به ارایه اضافه می شود trait.push(_trait) // توکن بر حسب طول ارایه داده می شود ID uint _id = trait.lehgth; // فراخوانی تابعی یرای ضرب توکن ها _mint(msg.sender, _id); // وضعیت موجود بودن صفت ست می شود _traitExists[_trait] = true; } } |
جمع بندی
NFTها یا توکنهای غیرقابل تعویض، نوعی از توکنها هستند که منحصربهفرد، غیرقابل تقسیم و کمیاب هستند. بلاک چین اتریوم با ایجاد استاندارد توکن ERC721، به توسعهدهندگان برای سهولت استقرار NFTها کمک زیادی کرده است. در این مقاله، چند مثال برای درک نحوه ایجاد توکن ERC721 آورده شد، بهتر است برای درک بهتر آن، کدهای داده شده در این مثالها را در محیط ریمیکس امتحان کنید.
منابع معتبر مرتبط:
https://medium.com/coinmonks/how-to-create-and-deploy-erc-721-nfts-ad3cb710f879
مطالب زیر را حتما مطالعه کنید
بررسی رفتار توابع View و Pure در سالیدیتی Solidity
توابع Payable در قراردادهای هوشمند Solidity
سالیدیتی Solidity چیست؟
سطح دسترسی Visibility در سالیدیتی Solidity
توابع Function در سالیدیتی Solidity
انواع حافظه در قرارداد هوشمند سالیدیتی
8 دیدگاه
به گفتگوی ما بپیوندید و دیدگاه خود را با ما در میان بگذارید.
سلام عالی بود
خیلی دنبال این موضوع بودم
حرف نداشت👌🏻
خیلی محتوای کامل و عالی بود
این مطلب حرف نداشت
مطلب بی نظیری بود
مطلبتون بسیار مفید بود
خیلی سایت خوبی دارین