آنچه در این مقاله خواهید خواند
ERC مخفف عبارت “Ethereum Request for Comments” و به معنای «درخواست اتریوم برای توضیحات» است. استاندارد ERC721 نیز یک چارچوب فنی برای توسعه توکن های ان اف تی (NFT) روی بلاک چین اتریوم است. در این مطلب ضمن بررسی مزایا، معایب و تفاوت ERC-721 با ERC-20، به آموزش ساخت قرارداد هوشمند مبتنی بر این استاندارد توکن میپردازیم.
توکن غیر مثلی چیست؟
عبارت قابل تعویض یا مثلی (Fungible) اصطلاحی است که برای توکنهای قابل معاوضه با یکدیگر که همه واحدهای آن ارزش و ویژگی یکسانی دارند، استفاده میشود. مثلا، توکنهای اتریوم همگی متعلق به یک کلاس توکن مشخص هستند که ارزش یکسانی دارند. همین امر برای رمز ارزهای کاردانو، بیت کوین و بسیاری دیگر نیز قابل تعمیم است. به عبارت دیگر، ارزهای مثلی به نسبت 1:1 قابل تعویض با یکدیگر هستند. این یعنی شما با خرید اتریوم، قادر به تعویض این ارز دیجیتال با یک واحد دیگر بدون تغییر ارزش آن هستید.
اما Non-fungible بهمعنای غیر قابل تعویض یا غیرمثلی، عبارتی است که برای برخی از کلاس توکنهای خاص بهکار میرود. هر کدام از این دسته از توکنها ارزش و مشخصه منحصربهفردی دارند، بههمین خاطر به آن توکن ان اف تی (NFT) میگویند. از انواع فیزیکی و واقعی این نوع توکنها میتوان کارت بازی، آثار هنری، بلیت هواپیما و موارد دیگر را نام برد. همه این داراییها حتی در صورت داشتن ارزش و قیمت برابر، از نظر برخی ویژگیها با یکدیگر متمایز هستند. مثلا هر بلیت هواپیما مخصوص یک فرد و یک شماره صندلی است.
در فضای بلاک چین، این نوع توکنها که دارای مشخصات منحصربهفرد، کمیابی، ویژگیهای نامرسوم و متادیتای خاص هستند، آثار هنری دیجیتال، آیتمهای درون بازی، کالکتیبلها و موارد بسیار دیگر را شامل میشوند.
ERC چیست؟
ERC مخفف عبارت “Ethereum Request for Comments” و به معنای «درخواست اتریوم برای توضیحات» است. ERC یک فناوری یا پلتفرم نیست، بلکه مجموعهای از قواعد استاندارد و دستورالعملهای فنی برای کار توسعهدهندگان است. این دستورالعملها فروش، خرید، محدودیتهای واحد و وجود توکنها را مشخص میکنند.
قوانین مربوط به هر استاندارد توکن میتواند به پلتفرمهای صرافی، برنامه و کیف پول در درک عملکردهای پولی پایهای کمک کند. در کل، توسعهدهندگان مسئول تولید استاندارد توکن هستند که توضیحات مربوط به مشخصات پروتکل را نیز تعیین میکنند. در پایهایترین سطح، ERC یک سیستم باز و عمومی است که اجازه ساخت و نظردهی روی طرحهای پیشنهادی برای استانداردسازی توکنها و قراردادهای هوشمند اتریوم را به همه افراد میدهد.
توکن ERC-721 چیست؟
استاندارد ERC 721 یک مشخصه فنی برای توسعه توکنهای ان اف تی روی بلاک چینهای سازگار با ماشین مجازی اتریوم (Ethereum Virtual Machine) است. بنابراین با استفاده از این استاندارد میتوان به ساخت توکنهایی با ویژگیهای متفاوت پرداخت که بهخاطر مثلا سن، کمیابی یا حتی ویژگی ظاهری، با یک توکن دیگر ساختهشده توسط یک قرارداد هوشمند «یکسان»، ارزش متفاوتی داشته باشد. این یعنی هر توکن مبتنی بر این استاندارد منحصربهفرد است و قابلیت تعویض آن با توکنهای دیگر وجود ندارد.
هدف پشت طراحی این استاندارد، توسعه توکنهای منحصربهفردی است که ارزش ذاتی خود را از ویژگیهای خاص خود نظیر کمیابی میگیرند. این قابلیت اجازه ساخت اکوسیستمی کاملا جدید از توکنها را روی بلاک چین اتریوم فراهم کرده است که با بهرهگیری از مفهوم ذخیره دیجیتال، به ثبت ارزش و هویت مالک اینگونه داراییها میپردازد. البته دقت داشته باشید که ان اف تیها تنها از نوع ERC721 نیستند، بلکه با استفاده از استاندارد توکن ERC1155 نیز قابلیت ساخت آنها وجود دارد.
حال اجازه دهید این استاندارد را کمی از نظر فنی بررسی کنیم. همه توکنهای NFT دارای یک متغیر یونیت256 (unit256) بهنام “tokenID” هستند. بنابراین هنگام کدنویسی، برای هر قرارداد مبتنی بر استاندارد توکن ERC-721، جفت “contract address, unit256 tokenID” باید منحصربهفرد باشد. بههمین خاطر، مثلا یک برنامه غیر متمرکز میتواند دارای تبدیلگری (Convertor) باشد که با استفاده از “tokenID” بهعنوان ورودی، یک خروجی بهصورت یک تصویر جالب نظیر زامبی، اسلحه، مهارت یا هر چیزی دیگری تولید کند.
حال اگر قرارداد هوشمند ما دارای متد (Methods) یا توابع و رویدادهای (Events) زیر باشد، میتوان به آن «قرارداد توکن غیر مثلی ERC 721» گفت که پس از پیادهسازی روی شبکه اتریوم، مسئول پیگری و انجام تراکنشهای توکن مربوطه خواهد بود:
متدها:
1 function balanceOf(address _owner) external view returns (uint256);
2 function ownerOf(uint256 _tokenId) external view returns (address);
3 function safeTransferFrom(address _from, address _to, uint256 _tokenId, bytes data) external payable;
4 function safeTransferFrom(address _from, address _to, uint256 _tokenId) external payable;
5 function transferFrom(address _from, address _to, uint256 _tokenId) external payable;
6 function approve(address _approved, uint256 _tokenId) external payable;
7 function setApprovalForAll(address _operator, bool _approved) external;
8 function getApproved(uint256 _tokenId) external view returns (address);
9 function isApprovedForAll(address _owner, address _operator) external view returns (bool);
رویدادها:
1 event Transfer(address indexed _from, address indexed _to, uint256 indexed _tokenId);
2 event Approval(address indexed _owner, address indexed _approved, uint256 indexed _tokenId);
3 event ApprovalForAll(address indexed _owner, address indexed _operator, bool _approved);
چه کسی ERC721 را اختراع کرد؟
استاندارد توکن غیر قابل تعویض ERC 721 اتریوم توسط ویلیام انتریکن (William Entriken)، دیتر شیرلی (Dieter Shirley)، جیکوب ایوانز (Jacob Evans) و ناستازیا ساکس (Nastassia Sachs) از طریق یک طرح پیشنهادی اتریوم (EIP) در 24 ژانویه 2018 (4 بهمن 96) معرفی شد.
ویژگی های استاندارد توکن ERC721
توکنهای ERC-721 از نظر ساختاری بسیار به استاندارد توکن ERC-20 شبیه هستند. در واقع، قرارداد هوشمند پایهای این استاندارد دارای توابع مشابه ERC20 است. با این حال، برخی از ویژگیهای ERC 721 شامل توابع و رویدادها باعث تمایز آن نسبت به دیگر استانداردها شده است از جمله:
- توابع مشابه ERC20:
- Name: هر توکن ERC721 دارای یک نام است که قراردادها و برنامهها توکن مربوطه را از طریق آن تشخیص میدهند.
- Symbol: این توکنها دارای سمبل یا نماد هستند که به اپلیکیشنهای غیرمتمرکز اجازه دسترسی به نام کوتاه آنها را میدهد.
- TotalSupply: عرضه کل هر توکن در این قراردادها مشخص و تعریفشده است.
- BalanceOf: موجودی در قرارداد هوشمند یک توکن ERC 721 مشخصکننده تعداد توکنهای داخل یک آدرس است.
- توابع مالکیت:
- OwnerOf: این تابع آدرس مالک یک توکن را ارجاع میدهد. از آنجایی که هر توکن با استاندارد ERC721 منحصربهفرد و غیر قابل تعویض است، توسط یک شناسه روی بلاک چین نمایش داده میشوند. دیگر کاربران، قراردادها و برنامهها نیز با استفاده از این آیدی قادر به تعیین مالک آن توکن هستند.
- Approve: با استفاده از تابع تصویب، مجوز انتقال توکن از طرف مالک به فرد دیگر داده میشود.
- TakeOwnership: وجود این تابع در دستورات یک توکن ERC-721 دلخواه است و از آنجایی که یک فرد خارجی قادر به فراخوانی آن برای خارج کردن توکنها از حساب یک کاربر دیگر است، بهشکل یک تابع برداشت فعالیت میکند. بنابراین، زمانی از takeownership میتوان استفاده کرد که مالکیت مقدار مشخصی از توکنها برای یک کاربر تصویب و وی نیز مایل به برداشت آنها از موجودی حساب کاربر دیگر باشد.
- Transfer: با استفاده از تابع انتقال، مالک همانند هر رمز ارز دیگری، قادر به ارسال توکنهاست.
- TokenOfOwnerByIndex: این تابع دلخواه است، اما استفاده از آن توصیه میشود. از آنجایی که هر نفر میتواند مالک بیش از یک توکن ان اف تی بهصورت همزمان باشد، قرارداد مربوطه شناسه منحصربهفرد هر توکن را در یک آرایه ذخیره میکند تا اطلاعات مربوطه قابل بازگردانی باشد.
- تابع متادیتا:
- tokenMetaData: ویژگی دلخواه توکنمتادیتا یک رابط کاربری است که اجازه کشف متادیتا یک توکن یا لینک مربوط به دادههای آن را به ما میدهد.
- رویدادها:
- Transfer: این رویداد با تغییر مالکیت توکن از یک فرد به فرد دیگر فعال میشود. این ایونت اطلاعات حساب انتقالدهنده، دریافتکننده و شناسه توکن را منتشر میکند.
- Approve: این رویداد با صدور اجازه کسب مالکیت برای کاربر جدید توسط کاربر فعلی فعال میشود؛ یعنی با انجام تابع approve (در بخش مالکیت)، این رویداد اتفاق میافتد و اطلاعات مربوط به حساب مالک فعلی، حساب دارای اجازه کسب مالکیت در آینده و شناسه توکن تحت انتقال را منتشر میکند.
دلیل ایجاد توکن ERC-721 چیست؟
دلیل ایجاد و ساخت استاندارد ERC 721، امکان تولید توکنی منحصربهفرد با مشخصات غیر قابل تکرار است. اگر برایتان سوال است که این نوع از ویژگیها چه کارایی دارند، باید بگوییم که از نظر «خاص بودن، یکتایی یا منحصربهفردی» این توکنها بهقدری کمیاب هستند که یک مزیت بزرگ برایشان محسوب میشود.
مثلا حالتی را فرض کنید که در آن یک موزه مایل به ثبت باارزشترین آثار خود در یک مزایده است. از طرفی، شما نیز میتوانید به لطف قرعه کشی ویژهای که بلیت خاص هر یک از شرکتکنندگان را در نظر میگیرد، این آثار هنری را خریداری کنید. در این حالت، هر بلیط با مشخصات منحصربهفرد و تکرار نشدنی صادر شده است. حال فرد دارای بلیت برنده، قادر به خرید اثر هنری مورد نظر خود خواهد بود. در این مثال، بلیت ما یک توکن مبتنی بر استاندارد ERC-721 است. این بلیط در واقع توکنی است که با مشخصات منحصربهفرد صادر شده و همان ویژگی است که باعث ارزشمندی آن میشود.
کاربردهای توکن ERC-721 چیست؟
از جمله کاربردهای توکنهای مبتنی بر استاندارد ERC 721 اتریوم میتوان موارد زیر را نام برد:
- اثر هنری دیجیتال یا فیزیکی: آثار هنری از جمله مهمترین کاربردهای ان اف تی ها بوده و مزایدههای آثار دیجیتال از اولین موارد عملی این نوع توکنها هستند که هنوز هم به رشد خود ادامه میدهند.
- بازی: این توکنها برای خریدهای درون بازی و کسب آیتمهای کمیاب بهکار میروند.
- ملک: توکنیزه کردن داراییها و قراردادهای هوشمند به همراه قابلیت خرید و فروش از دیگر کاربردهای ان اف تی ها هستند.
- امور مالی: ابزارهای مالی نظیر وام، اوراق آتی و دیگر مسئولیتها با استفاده از این توکنها رنگ و بوی دیگری دارند.
- نرم افزار: این توکنها مجوزهای نرم افزاری برای ایجاد حریم شخصی و جلوگیری از استفاده غیر قانونی فراهم میکنند.
- بلیت کنسرت/مسابقات ورزشی: ان اف تی های مبتنی بر استاندارد ERC721 برای حصول اطمینان از عدم کلاهبرداری در فروش بلیت کاربرد دارند.
- احراز هویت: ساخت توکن ERC-721 برای احراز هویتهای کاربری از دیگر کاربردهای این رمز ارزهاست.
تفاوت توکن ERC-20 با ERC-721 چیست؟
استاندارد ERC20 در سال 2015 توسط فابیان وگلستلر (Fabian Vogelsteller) معرفی شد. این استاندارد توکن فقط API یک قرارداد هوشمند اتریوم را تعریف میکند و در پیادهسازی آن دخالتی ندارد. بنابراین، ERC20 نیز یک پروتکل استاندارد برای بلاک چین اتریوم است که برای بهاشتراکگذاری، تبادل یا انتقال توکنها بهکار میرود.
بنابراین با ساخت یک اسمارت کانترکت، گروهی از کدها تحت عنوان “function” یا «تابع» ایجاد میشود. در ظاهر، این رابط کاربری جزئیات تابع یک قرارداد هوشمند را تعیین میکند و در پشت صحنه، پیادهسازی آن اتفاق میافتد. کدهای تابع ERC20 به صورت زیر است:
- Token name: نام توکن
- Symbol: نماد
- Decimal: رقم اعشار تا 18
- totalSupply: عرضه کل
- balanceOf: موجودی آدرس
- transfer: نحوه انتقال
- transferFrom: هویت انتقالدهنده
- approve: تصویب مالکیت
- Allowance: برای ارائه مجوزهای خاص توسط هولدرهای این توکنها به برنامهها، صرافیهای غیر متمرکز و دیفای
3 تابع اول توکنهای ERC20 دلخواه است، اما باقی آنها الزامی هستند. مثلا، یک توکن ERC20 باید دارای تابع transfer باشد که نحوه انتقال و حساب انتقالدهنده را مشخص میکند.
با وجود شباهتهای زیاد استاندارد ERC20 و ERC721، از جمله تفاوتهای آنها عبارتند از:
- برخلاف ERC20، توکنهای ERC 721 ان اف تی و غیر مثلی هستند. این یعنی توکنهای استاندارد ERC-721 همانند ERC-20 قابل تخریب نیستند.
- ارزهای ERC20 تقسیمپذیر هستند، یعنی شما میتوانید مثلا 0.1 آنها را (بسته به رقم اعشار تعریف شده) انتقال دهید. اما توکنهای استاندارد ERC 721 بهصورت واحد کل قابل انتقال هستند.
- تابع Allowance در قراردادهای با استاندارد توکن ERC721 وجود ندارد.
در جدول زیر، تفاوتهای میان این دو استاندارد توکن را مشاهده میکنید:
معیار | ERC-20 | ERC-721 |
تعویض پذیری | تعویض پذیر | غیر تعویض پذیر |
هویت توکن | عدم وجود تمایز میان توکنها | دارای هویت مشخص و متمایز |
خصیصه کالکتیبل | غیر قابل کالکتیبل | دارای قابلیت کالکتیبل همانند پول فیات |
تغییرات ارزش | بر اساس عرضه و تقاضا | بر اساس ویژگیهای کمیابی و منحصربهفردی |
پذیرش | پذیرش گسترده | پذیرش محدود |
جایگزین | جایگزینی راحت | عدم وجود جایگزین مشخص |
تقسیمپذیری | قابل تقسیم به اعشار | غیر قابل تقسیم به اعشار |
تابع مالکیت | عدم وجود تابع مالکیت خاص | دارای تابع مالکیت ویژه |
مشهورترین توکن های مبتنی بر استاندارد ERC-721
یکی از مشهورترین بازیهای غیر متمرکز روی اتریوم بهنام کریپتوکیتیز (Cryptokitties)، از استاندارد ERC 721 برای ساخت کالکتیبلهای دیجیتال منحصربهفرد به شکل بچه گربه استفاده میکند. هر گربه این بازی قیمت متفاوتی در بازارچه آن دارد که توسط کاربران آن مشخص میشود. در ادامه، برخی از محبوبترین ان اف تیهای ساخته شده با استاندارد توکن ERC-721 اتریوم را معرفی میکنیم.
معروفترین NFTهای ساخته شده در استاندارد شبکه ERC-721
امروزه بسیاری از ان اف تیها بر اساس استاندارد ERC721 ساخته شدهاند. از جمله مشهورترین این توکنها میتوان موارد زیر را نام برد:
بورد ایپ یات کلاب (Borde Ape Yacht Club)
بورد ایپ یات کلاب (BAYC) معروف به کلکیسیون میمونهای خسته، یک مجموعه توکن ان ف تی مبتنی بر استاندارد ERC 721 ساخته شده روی بلاک چین اتریوم است. در این کلکسیون تصاویر کارتونی میمونهایی گنجانده شده است که با استفاده از یک الگوریتم ساخته شدهاند.
آدرس قرارداد هوشمند استاندارد توکن ERC721 این مجموعه به صورت زیر است:
0xbc4ca0eda7647a8ab7c2061c2e118a18a936f13d
کول کتز (Cool Cats)
کول کتز یکی دیگر از پروژههای جذاب در فضای ان اف تیهاست. این پروژه پس از راهاندازی در ژوئیه 2021 (تیر 1400)، سریعا به رتبه سوم NFTهای برتر از نظر حجم فروش بعد از بورد ایپ یات کلاب و کریپتوپانکز (CryptoPunks) رسید.
با اینکه این مجموعه امروزه تا حدودی از توجهات فاصله گرفته است، اما همچنان در جمع 20 پروژه برتر قرار دارد. آدرس قرارداد هوشمند استاندارد توکن ERC-721 کول کتز روی اتریوم به صورت زیر است:
0x1a92f7381b9f03921564a437210bb9396471050c
کلکسیون تیکل بیچ (Tickle Beach)
تیکل بیچ مجموعهای از 58 کاراکتر 3بعدی حیوان بامزه روی شبکه اتریوم با استاندارد ERC 721 است که در می 2022 (اردیبهشت 1401) عرضه شد. این مجموعه در حال حاضر اولین مجموعه ترند و پنجمین کلکسیون برتر در بازارچه ان اف تی اوپن سی است.
آدرس قرارداد هوشمند کلکسیون تیکل بیچ روی اتریوم به صورت زیر است:
0x6F4388602C5DD6c593bf7c9Cf3128AaA2a3E09cE
چگونه یک توکن ERC-721 بسازیم؟
اگر هدف شما از ساخت توکن ERC-721 صرفا مینت یک ان اف تی در یک مارکتپلیس است، میتوانید از آموزش ساخت توکن NFT در اوپن سی که برایتان تهیه کردهایم استفاده کنید.
اما برای ساخت قرارداد هوشمند استاندارد ERC 721 اتریوم و سپس مینت توکن مربوط به آن، در این قسمت به آموزش استفاده از ویزارد OpenZeppelin و محیط توسعه Remix IDE میپردازیم. استفاده از این ویزارد به دو دلیل امنیت بالا و ارائه قراردادهای هوشمند استاندارد توسط این ابزار توصیه میشود.
در رابطه با اسمارت کانترکتها، امنیت کلید کار است. هزاران نمونه حمله به قراردادهای هوشمند در تاریخ وجود دارد که به علت امنیت پایین، صدها میلیون دلار از آنها به سرقت رفتهاند. اوپن زپلین یکی از بزرگترین پلتفرمها برای توسعه اسمارت کانترکتهای استاندارد ERC20 و ERC721 و موارد دیگر است که به توسعهدهندگان اجازه میدهد از کدهای کاملا ممیزیشده برای توسعه قراردادهای مطمئن خود استفاده کنند.
ساخت قرارداد هوشمند توکن ERC 721 اتریوم با ویزارد OpenZeppelin
برای استفاده از ابزار OpenZeppelin جهت توسعه یک اسمارت کانترکت ان اف تی ERC-721، باید مراحل زیر را انجام دهید:
1. ابتدا وارد صفحه ویزارد اوپن زپلین به آدرس docs.openzeppelin.com/contracts/4.x/wizard شوید. در این صفحه، ویرایشگر زیر را مشاهده خواهید کرد:
2. حال برای انتخاب نوع استاندارد، باید روی گزینه “ERC721” گوشه چپ بالای صفحه کلیک کنید.
3. پس از انتخاب استاندارد قرارداد، در منوی سمت چپ یک سری گزینه مشاهده خواهید کرد. ابتدا با انتخاب نام و نماد توکن شروع میکنیم. برای این کار در قسمت Name نام توکن و در قسمت Symbol نماد آن را باید وارد کنید. از BaseURI هم برای مشخص کردن URI متادیتا استفاده میشود. متادیتا اساسا تصویری است که به NFT و مشخصات اضافی آن متصل میشود. این قسمت را خالی بگذارید. بازارچههای اوپن سی و راریبل (Rarible) از نام توکن بهعنوان نام کلکسیون استفاده میکنند.
4. از قسمت “FEATURES” میتوانید ویژگیهای قرارداد هوشمند توکن ان اف تی ERC 721 خود را انتخاب کنید. ویژگیهای زیر را تیک بزنید:
- Mintable: این ویژگی برای ایجاد قابلیت مینت توکنهای جدید است که تنها حسابهای مجوزدار قادر به فراخوانی آن هستند.
- Auto Increment IDs: یک شناساگر سریالی را برای توکن میسازد.
- Enumerable: این ویژگی قابلیت دسترسی به شمارش توکنهای روی شبکه اصلی و توابعی نظیر totalSupply که بهصورت پیشفرض در حافظه یکپارچهسازی URI استاندارد ERC721 حضور ندارد را فراهم میکند تا متادیتاها و تصاویر برای هر NFT فراهم شود.
- URI Storage: تا امکان متصل کردن URI به ان اف تیها وجود داشته باشد.
از آنجایی که در این آموزش درصدد ساخت توکنامیکس برای ان اف تی خود نیستیم، ماژولهای زیر را خالی میگذاریم.
- Burnable: برای سوزاندن توکنها
- Pausable: برای متوقف کردن انتقالات، فروشها و موارد دیگر
- Votes: برای دسترسی به ویژگیهای شبه حاکمیتی نظیر اعطای نمایندگی و رایدهی
5. پس از انتخاب ویژگیهای مورد نظر، ویزارد اوپن زپلین کدهای قرارداد هوشمند را برای شما پر کرده و به صورت زیر نمایش میدهد:
حال باید این کد را کپی کرده و برای ویرایش و استقرار روی بلاک چین، در محیط Remix IDE پیست کنید.
ویرایش قرارداد استاندارد ERC-721 با استفاده از محیط Remix IDE
اکنون که قرارداد هوشمند استاندارد ERC 721 ما آماده شده است، باید آن را بهبود داده و روی یک شبکه آزمایشی مانند Goerly یا Ropsten منتشر کنیم. در این مثال، شبکه آزمایشی Goerli را آموزش میدهیم. برای این کار، به محیط توسعه مبتنی بر وب Remix IDE نیاز داریم که منحصرا برای توسعه قراردادهای هوشمند به زبان برنامهنوسی سالیدیتی طراحی شده است.
1. اول از همه، همانطور که احتمالا تا به اینجای کار دیدهاید، در گوشه راست بالای ویرایشگر ویزارد اوپن زپلین گزینهای به نام “Open in Remix” وجود دارد. روی آن کلیک کنید تا یک تب جدید در مرورگر شما باز شود.
2. در بالای کدهای قرارداد، خطی تحت عنوان “SPDX-License-Identifier” وجود دارد که نوع مجوز برای انتشار کدهای شما را مشخص میکند. پیشنهاد میشود که کدهایتان را برای توسعه برنامههای غیر متمرکز در وب3 بهصورت متن باز نگه دارید، چراکه باعث افزایش اعتماد عموم به آن میشود.
3. دستور پراگما (Pragma)، یعنی نسخه کامپایلری که از آن برای کامپایل کردن کدهای قرارداد هوشمند استفاده میشود، در پایین خط قبلی وجود دارد. نماد ^ به کامپایلر شما میگوید که هر نسخه بین 0.8.0 تا 0.8.9 برای کامپایل کردن کدهای شما مناسب است.
4. در خطوط بعدی که با import شروع میشوند، در حال اضافه کردن یک سری کتابخانه و آغاز بهکار اسمارت کانترکت مبتنی بر استاندارد توکن ERC-721 اتریوم هستیم.
5. در خط بعد، قرارداد هوشمند ما آغاز میشود و از تمام استانداردهایی که به مخزن ابزار اوپن زپلین وارد کردهایم، استفاده میکند.
6. همانطور که مشاهده میکنید، تابع “safeMint” دارای مودیفایر “only owner” است که اجازه مینت کردن ان اف تیها را تنها به مالک آن (یعنی آدرس والت سازنده قرارداد هوشمند) میدهد. اگر مایل به اعطای مجوز مینت NFTها به همه افراد هستید، باید مودیفایر onlyOwner را از تابع Mint پاک کنید.
7. همچنین میتوانید این مودیفایر را از اعلان “Ownable” و ایمپورتهای کتابخانه قرارداد خود حذف نمایید.
8. حال که همه افراد قادر به مینت کردن ان اف تی هستند، باید از امکان مینت کردن NFTهایی بیشتر از تعداد ماکسیمم توکن در کلکسیون خود، جلوگیری کنید. فرض کنید میخواهید کاربران قادر به مینت کردن حداکثر 10,000 توکن در کل باشند. برای این کار باید یک متغیر یونیت256 بهنام “MAX_SUPPLY” ساخته و مقدار آن را مساوی 10,000 قرار دهید.
9. حال دوباره به تابع safeMint برگشته و یک عبارت تحت عنوان require در خط 18 اضافه میکنیم. مثلا عبارت “I’m sorry we reached the cap” میتواند اطلاعیه خوبی باشد.
اکنون که عرضه حداکثری ان اف تیهایمان را محدود کردهایم، زمان کامپایل کردن قرارداد هوشمند و انتشار آن روی تستنت Goerli فرا رسیده است. برای این کار، میتوانید یک حساب رایگان در پلتفرم توسعه وب3 Alchemy ساخته و آن را بهعنوان یک ارائهدهنده نود در کیف پول متامسک اضافه کنید. علاوه بر این، برای کار با تستنت گوارلی به مقداری رمز ارز اتر آزمایشی روی این شبکه نیاز دارید که میتوانید از GoerliFaucet آن را به صورت رایگان دریافت کنید. در ادامه به صورت جزئیتر به آموزش همه این موارد خواهیم پرداخت.
ساخت حساب رایگان در پلتفرم توسعه وب3 Alchemy
1. اول از همه، باید وارد سایت Alchemy.com شده و روی “Login” کلیک کرده و یک حساب جدید بسازید.
2. سپس باید اکوسیستم اتریوم را انتخاب نمایید.
3. اکنون باید برای برنامه خود یک اسم انتخاب کرده و “Network” را Goerli انتخاب کنید. میتوانید در قسمت “Description” هم توضیحات مربوط به اپ خود را بنویسید.
4. پس از ثبت نام به صفحه داشبورد هدایت خواهید شد. روی اپلیکیشن ساختهشده کلیک کرده و سپس با کلیک روی دکمه “VIEW KEY” در گوشه راست بالای صفحه، URL نمایش دادهشده در قسمت “HTTPS” را کپی کنید.
در مرحله بعد، برای تست قرارداد هوشمند استاندارد توکن ERC 721 اتریوم، باید Alchemy را بهعنوان یک ارائهدهنده Goerli RPC به کیف پول متامسک خود اضافه کنید.
اضافه کردن شبکه Alchemy Goerli به کیف پول متامسک
1. اگر هنوز کیف پول متامسک نساختهاید، میتوانید از مقاله آموزشی که برایتان تهیه کردهایم استفاده کنید. پس از ساخت والت متامسک، روی منوی آبشاری شبکه بالای صفحه و سپس “Add Network” کلیک کنید.
2. سپس به صفحه زیر هدایت خواهید شد. حال باید اطلاعات زیر را وارد کنید:
- Network Name (نام شبکه): Alchemy Goerli
- NEW RPC URL: همان URL کپیشده در مرحله قبل
- Chain ID (شناسه زنجیره): 5
- Currency Symbol (نماد ارز): GoerliETH
- Block Explorer (اکسپلورر بلاک): https://goerli.etherscan.io
دریافت اتر تستنت Goerli
برای دریافت اتر رایگان شبکه آزمایشی گوارلی، کافی است به فاست goerlifaucet.com مراجعه کرده و آدرس والت متامسک خود را در باکس مربوطه پیست کنید. نهایتا روی “Send Me ETH” کلیک کنید. پس از 10 تا 20 ثانیه اترهای شبکه گوارلی در کیف پول متامسک شما نمایش داده خواهند شد. شما میتوانید بدون ساخت حساب هر 24 ساعت یکبار 0.1 اتر و با حساب Alchemy، معادل 0.5 اتر دریافت کنید.
پس از کسب رمز ارز اتر، اکنون زمان کامپایل کردن قرارداد هوشمند توکن ان اف تی مبتنی بر استاندارد ERC721 روی بلاک چین فرا رسیده است.
کامپایل و انتشار قراداد هوشمند ERC 721 روی تستنت Goerli
1. دوباره به محیط Remix برمیگردیم. ابتدا از منوی سمت چپ روی گزینه کامپایلر و سپس گزینه آبی رنگ “Compile” پایین کلیک کنید.
2. سپس روی منوی “Deploy and Run Transaction” کلیک کرده و از منوی آبشاری “Environment”، گزینه “injected Web3” را انتخاب کنید. دقت داشته باشید که کیف پول متامسک شما روی شبکه Alchemy Goerli قرار داشته باشد و سپس از منوی آبشاری “Contract”، قرارداد هوشمند NFT را انتخاب کنید.
3. سپس یک پنجره پاپآپ ظاهر میشود. روی “Sign” کلیک کرده و کارمزد گس مربوطه را پرداخت کنید. اگر همهچیز طبق انتظار پیش برود، باید پس از 10 ثانیه قرارداد هوشمند خود را زیر بخش “Deployed Contracts” مشاهده نمایید.
اکنون که قرارداد هوشمند شما مبتنی بر استاندارد توکن ERC-721 اتریوم روی شبکه آزمایشی Goerli منتشر شده، زمان مینت توکن NFT فرا رسیده است. البته پیش از این کار، باید متادیتا ان اف تی خود را ساخته و در IPFS آپلود کنید.
ساخت متادیتا ان اف تی ERC-721 در IPFS
همانطور که گفتیم، متادیتا تصویر و مشخصات اضافی توکن شماست. برای اینکه مثلا بازارچه اوپن سی قادر به دریافت متادیتای برون زنجیرهای استاندارد توکن ERC721 شما باشد، قرارداد مربوط به آن به یک URI متصل به متادیتای میزبان آن نیاز دارد. حال اوپن سی، راریبل و دیگر مارکتپلیسها، از تابع tokenURL داخل ویژگی URI Storage این استاندارد استفاده میکنند.
تابع tokenURI در استاندارد توکن ERC-721 باید یک آدرس HTTP یا IPFS نظیر ipfs/bafkreig4rdq3nvyg2yra5x363gdo4xtbcfjlhshw63we7vtlldyyvwagbq را بازگرداند. بنابراین با فراخوانی این آدرس، یک JSON blob از داده بههمراه متادیتای توکن شما بازگردانی خواهد شد.
به استناد توضیحات سایت اوپن سی، متادیتای ان اف تی شما باید به صورت یک فایل json. ذخیره و دارای ساختار زیر باشد:
در جدول زیر، توضیحات مربوط به هر خصیصه را مشاهده میکنید:
خصیصه | توضیحات |
image | URL مربوط به تصویر آیتم. میتواند هر نوعی (از جمله SVG که بعدا توسط اوپن سی به PNG کش خواهد شد) یا IPFS باشد. توصیه ما استفاده از یک تصویر 350×350 است. |
image_data | داده خام تصویر SVG اگر به دنبال تولید تصاویر بهصورت Fly هستید (توصیه نمیشود). تنها در صورت عدم پیوست پارامترهای تصویر از این قسمت استفاده کنید. |
external_url | URLی که زیر تصویر ان اف تی در اوپن سی نمایش داده میشود و به کاربران اجازه میدهد با ترک اوپن سی، آیتم مربوطه را در سایت خودتان مشاهده کنند. |
description | توصیحات قابل خواندن برای انسان |
name | نام آیتم |
atributes | خصیصههای مربوط به آیتم که در صفحه اختصاصی آن در اوپن سی نمایش داده میشود. |
background-color | تصویر زمینه آیتم در اوپن سی. باید 6 هگزادسیمال کاراکتر داشته باشد. |
animation_url | URLی به سمت پیوستهای رسانه اجتماعی آیتم. پسوندهای GLTF ،GLB ،WEBM ،MP4 ،M4V ،OGV و OGG و همچنین پسوندهای صوتی MP3 ،WAV و OGA پشتیبانی شدهاند. این آدرس صفحات HTML را نیز پشتیبانی میکند. |
حال که با مفهوم متادیتا آشنا شدید، میتوانیم مراحل ساخت آن را برای استاندارد توکن ERC-721 اتریوم آغاز کنیم:
1. اول از همه، وارد سایت filebase.com شده و در آن ثبت نام کنید. پس از ورود به حساب، از منوی سمت چپ روی گزینه “Buckets” کلیک کرده و با انتخاب “Create Bucket”، یک باکت جدید بسازید.
2. اکنون وارد باکت شده و با کلیک روی گزینه “Upload”، تصویر دلخواه خود برای توکن NFT را بارگذاری کنید. پس از آپلود تصویر، روی آن کلیک کرده و آدرس IPFS Gateway URL را کپی کنید.
3. حال با استفاده از یک ویرایشگر متن به دلخواه خود، کد JSON زیر را در آن پیست کرده و نهایتا آن را به صورت یک فایل metadata.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
}]
}
4. اکنون به سایت Filebase بازگشته و این فایل را در همان باکتی که تصویرتان را در آن آپلود کردید، بارگذاری کنید.
5. نهایتا روی CID کلیک و آن را کپی کنید. به این متادیتا برای ساخت URI هنگام مینت توکن ان اف تی خود مبتنی بر استاندارد ERC 721 اتریوم نیاز داریم.
مینت توکن ان اف تی Goerli
1. ابتدا به محیط Remix و منوی “Delpoy and Run” بازگشته و زیر قسمت “Deployed Contract”، روی قرارداد تازه منتشرشده کلیک کنید. سپس لیستی از تمام متدهای درون قرارداد هوشمند استاندارد ERC721 شما نمایش داده میشود. متدهای به رنگ نارنجی روی بلاک چین نوشته میشوند، اما متدهای آبی رنگ از بلاک چین اطلاعات میگیرند.
2. اکنون روی منوی آبشاری “safeMint” کلیک کرده و آدرس کیف پول متامسک و رشته کد زیر را در فیلد URI وارد کنید:
ipfs://\<your\_metadata\_cid>
3. با کلیک روی “Transact” یک پیام در متامسک باز میشود که باید هزینه گس مربوطه را پرداخت کنید. روی “Sign” کلیک کنید تا NFT شما روی شبکه مینت شود. چند ثانیه صبر کرده و برای حصول اطمینان از موفقیتآمیز بودن مینت، آدرس خود را کپی و در ورودی متد balanceOf پیست و نهایتا آن را اجرا کنید. اکنون باید دارایی 1 واحد ان اف تی برایتان نمایش داده شود.
4. همین کار را برای متد tokenURI هم انجام داده و مقدار 0 را وارد کنید. با این کار باید tokenURI شما نمایش داده شود.
اکنون ان اف تی شما در شبکه Goerli ساخته شده است. حال با مراجعه به بازارچه اوپن سی میتوانیم درستی خوانش متادیتا توسط این وبسایت را نیز بررسی کنیم.
مشاهده NFT در اوپن سی
ابتدا به آدرس testnets.opensea.io مراجعه کرده و با استفاده از والت متامسک خود وارد آن شوید. سپس روی تصویر پروفایل خود کلیک کنید. در این قسمت باید توکن ان اف تی مینتشده شما با استاندارد ERC721 اتریوم نمایش داده شود. اگر تصویر مربوطه هنوز قابل مشاهده نیست، روی آن کلیک کرده و گزینه “refresh metadata” را انتخاب کنید.
گاهی اوقات اوپن سی در تشخیص متادیتای استاندارد توکن ERC-721 روی شبکه آزمایشی دشواری دارد و شاید تا 6 ساعت هم نمایش آن زمان ببرد. پس از گذشت این مدت زمان، NFT شما مشابه حالت زیر نمایش داده خواهد شد:
در این مرحله، ساخت، ویرایش و انتشار قرارداد هوشمند توکن ان اف تی مبتنی بر استاندارد ERC721 شما به پایان میرسد.
سخن پایانی ؛ چشمانداز و آینده توکنهای ERC-721
استاندارد توکن ERC 721 اتریوم صرفا بهخاطر ماهیت فناوری دیجیتال، دارای محدودیتهای خاص خود است. هر شیء دیجیتالی حاصل مجموعهای از بیتهاست که امکان دستکاری و تغییر آنها وجود دارد. فرض کنید شما بهعنوان یک هنرمند، بهترین پرتره دیجیتال را تا کنون ساختهاید. حالا اگر فردی خواهان کپی و نقاشی کردن یک سبیل روی آن باشد، آیا شما فقط با اثبات مالکیت این دارایی دیجیتال قادر به جلوگیری از این کار هستید؟ آیا شما مالک تصویر جدید حاصل از دارایی تحت تملک خود هستید؟ اگر این نقاشی نه یک اثر هنری، بلکه یک کد قابل اجرا بود، آیا قادر به محدود کردن استفاده از آن کد بودید؟
زمانی که یک فناوری جدید وارد صحنه میشود، تمام احتمالات و محدودیتها خودشان را سریعا نشان نمیدهند. به همین خاطر، مهندسان این حوزه همیشه درصدد کشف پتانسیلها و چالشها هستند. سخن مطمئن درباره آینده توکنهای ERC721 این است که این استاندارد یک رویکرد بسیار فکرشده است و برای رفع برخی از کمبودهای پروتکلهای دنیای ورلد وایب وب کارایی خوبی دارد.
همانطور که دیدیم، سال گذشته توکنهای NFT سر و صدای زیادی به پا کردند و برخی از کلکسیونهای معروف به قیمتهای فضایی میلیون دلاری به فروش رسیدند. با این حال، باید در نظر داشت که همیشه با ظهور تکنولوژیهای جدید، فناوریهای قدیمیتر از کار افتاده و جای خود را به تازه واردان میدهند. بنابراین تا زمانی که جایگزینی برای استاندارد توکن ERC-721 معرفی نشود، میتوان به آینده درخشان این فضا امیدوار بود.
ERC-721 استاندارد توکن پیشران در اکوسیستم اتریوم بوده است. این استاندارد بنیاد قراردادهای هوشمند است که عنصر محوری برنامههای غیر متمرکز مبتنی بر بلاک چین مدرن محسوب میشود. درک قابلیتها و کاربردهای استاندارد توکن ERC 721 برای حضور در فضای ان اف تیها حیاتی است و با افزایش تقاضا برای توکن های استاندارد ERC-721، فضای NFT به موضوعی داغ تبدیل شده است.
تهیه شده در بیت 24