مباحث پیشرفته‌‌ کریپتو: رابط کاربری ERC20

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

0 95

بررسی رابط کاربری توکن ERC20

بلاکچین‌‌ اتریوم یک پلتفرم رایانشی توزیع شده، متن باز مبتنی بر بلاکچین‌‌ است. شبکه‌‌ حاصل از این یعنی شبکه‌‌ اتریوم، میزبان اپلیکیشن‌‌های غیر متمرکز است. اپلیکیشن‌‌های غیر متمرکز به شکل قرارداد هوشمند (مجموعه‌‌ای از کدها (تابع‌‌ها) و داده‌‌ها که در آدرس مشخصی در شبکه اتریوم قرار دارند) وجود دارند. همه‌‌ هزینه‌‌های تراکنش و رایانش با ارز رمز اتریوم، یعنی اتر (Ether) پرداخت می‌‌شوند.

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

ERC20 که مخفف درخواست اتریوم برای نظر (Ethereum Request for Comment) است، مجموعه‌‌ای از قوانین برنامه‌‌نویسی‌‌ است که از همه‌‌ی توکن‌‌های مبتنی بر اتریوم انتظار می‌‌رود که از آن پیروی کنند. توسعه دهندگان اتریوم بر این سه متغیر، شش تابع و دو لیست رویداد به عنوان استاندارد پروتکل برای حداقل توکن قابل‌‌استفاده توافق کردند تا رفتارهای موردانتظار را در هنگام انجام ارتباطات در شبکه‌‌ی اتریوم به حالت معمول درآورند. توسعه دهندگان اتریوم با برقراری این پروتکل می‌‌توانند به راحتی این این توکن‌‌ها را ادغام کرده و با توکن‌‌هایی کار کنند که پیشتر در شبکه منتشر شده‌‌اند.

معرفی سالیدیتی (Solidity)

در حالی که محبوب‌‌ترین پلتفرم کامپیوتری اتریوم با زبان GO گوگل نوشته شده است، اما گزینه‌‌های زبانی برای نوشتن قراردادهای هوشمند که خوشایند توسعه‌‌دهندگان باشد فراوان است. توسعه دهندگان می‌‌توانند از میان زبان‌‌هایی مثل وایپر (Vyper)، بامبو (Bambo)، سرپنت (Sepent) و سالیدیتی (Solidity) انتخاب کنند.

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

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

بررسی رابط کاربری ERC20

حالا می‌‌خواهیم استاندارد قرارداد رابط کاربری ERC20 را تابع به تابع بررسی کنیم تا بفهمیم در موتور هر توکن چه اتفاقی می‌‌افتد.

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

قرارداد رابط کاربری ERC20 حاوی مجموع شش تابع اجرایی و دو لیست رویداد است.

پذیرش

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

تابع پذیرش (دارنده آدرس، خرج‌‌کننده‌‌ی آدرس) برگشت مداوم (مابقی واحد)

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

تایید

تابع تایید به تابع پذیرش برمی‌‌گردد: آیا خرج‌‌کننده مجاز به برداشت x مقدار از توکن‌‌ها است؟ این تابع یک مقدار واحد بولی را برمی‌‌گرداند. تابع از دارنده اصلی کیف پول می‌‌خواهد تا تراکنشی را که در حال انجام شدن از جانب او است تایید کند.

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

BalanceOf

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

تابع BalanceOf (دارنده توکن آدرس) برگشت عمومی مداوم (موجودی واحد)؛

عرضه کل

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

تابع TotalSupply برگشت مداوم عمومی (واحد)

انتقال

تابع انتقال (Transfer) در کنار تابع Transferfrom که در پایین تعریف شده است، قلب و روح هر توکن ERC20 هستند؛ این دو تابع مسئول هر تراکنش ورودی به پلتفرم مبتنی بر ERC20 و درون تراکنش‌‌های توکن ERC20 آن هستند. تابع انتقال برای ارسال روشن توکن ERC20 از یک کیف پول واحدِ تحت تملک یک کاربر، یه یک آدرس همتای کیف پول دیگر است. از آن‌‌جایی که این خود مالکان کیف پول هستند که این تابع را طلب می‌‌کنند، تنها این ورودی‌‌ها موردنیاز هستند: آدرس دریافت‌‌کننده و مقدار تون. مقدار برگشتی هم یک بولی دیگر است که تایید می‌‌کند آیا دریافت‌‌کننده توکن‌‌های ارسال‌‌شده را دریافت کرده است یا خیر.

تابع انتقال (آدرس، توکن واحد) برگشت عمومی (موفقیت بولی)؛

TransferFrom

تابع TransferFrom اجازه‌‌ی اجرای یک انتقال از جانب دارنده آدرس را به یک قرارداد هوشمند می‌‌دهد. به این تفاوت دقت کنید: Transfer یا انتقال توسط خود دارنده آدرس برای ارسال توکن به آدرس دیگر درخواست می‌‌شود. اما این بار در تابع TansferFrom (انتقال ‌‌از)، به قرارداد هوشمند اجازه می‌‌دهد تا از طرف صاحب کیف پول، توکن ارسال کند. مثلا پر کردن فرم سفارش در یک صرافی، آزادسازی سرمایه به شکل زمان‌‌دار یا پرداخت مبالغی که در یک بازی برنده شده‌‌ایم.

تابع TransferFrom سه پارامتر ورودی، یعنی آدرس دارنده کیف پول، آدرس گیرنده‌‌ و مقدار توکن ارسالی دارد. آنان اغلب به این شکل شروع می‌‌شوند: (آدرس فرستنده، آدرس گیرنده، توکن واحد). خروجی تابع درست به اندازه ورودی آن است: یک بولی عمومی واحد که موفقیت یا شکست تراکنش را با جزییات بیان می‌‌کند.

تابع TransferFrom (آدرس فرستنده، آدرس گیرنده، توکن واحد) برگشت عمومی (موفقیت بولی)؛

جمع‌‌بندی

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

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

ارسال پاسخ

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