برنامه نویسی سالیدیتی: استاندارد ERC721 (بخش اول)

این مجموعه آموزشی که توسط Andrew Parker از medium.com تهیه شده، به معرفی توکن‌های غیرقابل تعویض (Non-Fungibles) و استانداردهای ERC می‌پردازد. برای مطالعه این مجموعه باید با اتریوم و اصول زبان برنامه نویسی‌‌ سالیدیتی (Solidity) آشنا باشید.

0 118

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

این مقاله مقدمه‌‌ای بر سالیدیتی نیست، پس فرض می‌‌کنم که شما می‌‌دانید بلاکچین‌‌ چیست، اتریوم چیست و اصول سالیدیتی را می‌‌دانید.

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

استاندارد ERC721

استاندارد ERC721 چیست؟

استاندارد ERC721 یک استاندارد پیش‌‌نویس برای ساخت قراردادهای توکن‌‌های غیرقابل تعویض است. غیرقابل تعویض یعنی کاملا قابل مبادله نیست. سکه دلار قابل تعویض است چون اگر من به شما یک سکه دلار بدهم شما هم به من یک سکه دلار می‌‌دهید و هیچ‌‌کداممان سود یا ضرر نمی‌‌کنیم؛ یک دلار یک دلار است. با این حال اگر من گربه‌‌ام را به شما بدهم و شما گربه‌‌تان را به من بدهید امکان دارد هیچکدام راضی نباشیم چون گربه‌‌ها کاملا قابل تبادل نیستند (غیرقابل تعویض‌‌اند).

در سال 2017، بازی کریپتوکیتیز (Cryptokities) نشان داد که چطور دارایی‌‌های غیرقابل تعویض در بلاکچین‌‌ اتریوم ساخته تبادل می‌‌شوند. بازیکنان در این بازی می‌‌توانند بچه گربه تولید کرده و معامله کنند؛ اما اساسا همه بچه گربه‌‌ها روی بلاکچین‌‌ هستند و تنها می‌‌توانند توسط بازیگری که مالک آنان است تولید و معامله شوند. این را با بازی‌‌های سنتی آنلاین مقایسه کنید که در آن داده‌‌ها روی یک سرور مرکزی ذخیره شده و مدیران بازی می‌‌توانند هرجا صلاح دیدند تغییرات ایجاد کنند. در بازی کریپتوکیتیز، بازیگران بچه‌‌ گربه‌‌هایشان را روی یک شبکه‌‌ی غیرمتمرکز و بدون واسطه خرید و فروش می‌‌کنند و تملک بچه گربه‌‌هایشان قابل اثبات است. اگر شما یک بچه گربه داشته باشید بلاکچین‌‌ ثابت می‌‌کند که او مال شماست و متعلق به هیچ کس دیگری نیست.

شاید فکر کنید «خب که چی؟ فقط یک بازی با گربه‌‌های فرضی!»

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

بنابراین اید‌‌ه‌‌ی استاندارد یک توکن غیرقابل تعویض از طریق کریپتوکیتیز به جامعه اتریوم معرفی شد. این ایده به یک پیشنهاد تبدیل و آن پیشنهاد به عنوان یک پیش‌‌نویس برای یک استاندارد بدل شد که همان چیزی است که امروز به نام استاندارد ERC721 می‌‌شناسیم. عدد 721 چندان معنادار نیست و تنها 721مین ارتقای اتریوم در گیت‌‌هاب بود.

پس این استاندارد واقعا چیست؟

یک استاندارد ERC اساسا مجموعه‌‌ای از قوانین هستند که قراردادتان را قادر به کار و بازی کردن با دیگر قراردادها می‌‌کنند. برنامه‌‌نویسان دیگر با ارائه دستورالعمل‌‌هایی برای کارکردهای مورد نیاز و برخی محدودیت‌‌ها درباره چگونگی رفتار، می‌‌توانند کدهایی بنویسند تا با قرارداد شما بدون اینکه کل پایگاه کد شما را بدانند تعامل کنند.

برای مثال کارکرد BalanceOf توسط این استاندارد تعریف شده است:

استاندارد می‌‌گوید که قرارداد ERC721 شما باید شامل این تابع باشد. باید یک استدلال (یک آدرس) را گرفته و تعداد توکن‌‌هایی که در اختیار آن آدرس است را برگرداند.

این استاندارد اهمیتی نمی‌‌دهد که تابع شما چطور کار می‌‌کند. می‌‌تواند به سادگی برگرداندن ارزش نقشه‌‌‌‌برداری یا مجموعه‌‌های پیچیده‌‌ای از معادلات و توابع درونی باشد. تنها چیزی که برای استاندارد مهم است این است که وقتی کسی تابع BalanceOf را در آدرسی ایجاد می‌‌کند، واحدی دریافت می‌‌کند که موجودی آن آدرس را در خود دارد.

من می‌‌گویم که این استاندارد اصلا اهمیتی به روش کار تابع شما نمی‌‌دهد، چون در برخی موارد دستورات یا محدودیت‌‌های اضافه‌‌ای وجود خواهد داشت. برای تابع BalanceOf بالا، استاندارد محدودیت زیر را اعمال کرده است:

/// @dev NFTهای تعین شده در آدرس صفر نامعتبر شناخته می‌‌شوند و این تابع تحقیقاتی درباره آدرس صفر انجام می‌‌دهد.

پس اگر کسی تابع

(balanceOf(0x0

را فعال کند، تابع‌‌تان باید ارور بدهد. وقتی قرارداد سازگار با ERC721تا را می‌‌نویسید، باید مطمئن باشید که توابعتان به قوانین مربوط به خود پایبند است. وقتی نوبت این مسائل بشود درباره‌‌شان توضیح خواهم داد.

نکات قابل توجه

استاندارد مانع اضافه کردن توابع اضافه یا قوانین اضافه به قراردادتان نمی‌‌شود. تا جایی که این افزودن‌‌ها با قوانینی که توسط استاندارد مقرر شده است تداخل و تضاد نداشته باشد، کاملا قابل قبول هستند.

من سوالات زیادی را در Stack Exchange دیده‌‌ام که در آن مردم فکر می‌‌کردند یک قرارداد یا فایل رابطی که در اینترنت یافته بودند همان استاندارد، 721 یا 20 است (استاندارد توکن قابل تعویض). آنان نگرانند که قراردادشان با یک پیاده‌‌سازی معمولی یکسان نباشد و اغلب سعی می‌‌کنند چیزی که اصلا یک مشکل به حساب نمی‌‌آید را حل کنند. به همین دلیل است که برگشتن به استاندارد ERC721 در زمان نوشتن قراردادتان همیشه یک ایده‌‌ی خوب است. این استاندارد همه چیز را به خوبی توضیح می‌‌دهد و آنچه را که مجاز به انجام آن هستید یا نیستید را بیان می‌‌کند.

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

امیدوارم که این معرفی خوبی برای استاندارد ERC721 بوده باشد. در پست بعدی نگاهی به برخی از کدهای رابط‌‌های این استاندارد خواهیم داشت و برخی از ابعاد ERC721 که در ابتدا برایم گیج‌‌کننده بودند را پوشش خواهم داد.

شاید از این مطالب هم خوشتان بیاید.

ارسال پاسخ

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