ERC20 چیست؟

حتما شما هم بارها نام توکن‌های ERC20 را شنیده‌اید. استاندارد ERC20 مخصوص توکن‌هایی است که از بلاکچین اتریوم به عنوان بستر ارزی خود استفاده می‌کنند. 99% از توکن‌های اتریوم دارای استاندارد ERC20 هستند. این استاندارد مخصوص توسعه دهندگانی است که هنوز بلاکچین خود را ایجاد نکرده‌اند و با ایجاد یک توکن ECR20 بر روی بلاکچین اتریوم قصد دارند تا با انجام یک ICO پروژه‌های خود را تامین مالی کنند. در این مقاله سعی شده است تا مفاهیم این استاندارد برنامه‌نویسی معرفی‌شود.

0 364
  • چگونه ERC20 بخریم؟
  • ERC20 چگونه عمل می‌کند؟
  • توکن ERC20 چیست؟

در نگارش این مقاله فرض شده‌ که خواننده پیش از این حداقل با مفاهیمی همچون بلاکچین‌های اتریوم،  اپلیکیشن‌های غیرمتمرکز (dapps )، اتر(ether)، قراردادهای هوشمند و ICOها  آشنا شده است.

برای اینکه سریع به سراغ اصل مطلب برویم باید گفت، اتریوم یک پلتفرم محاسباتی توزیع شده متن باز (open-source) است که مبتنی بر بلاکچین می‌باشد. این پلتفرم محاسباتی، یعنی همان شبکه اتریوم، میزبان نرم افزارهای غیرمتمرکز (dapps) است که با هزاران خط کد اجرا می شوند؛ نام این کدها قراردادهای هوشمند است، تمام معاملات در شبکه اتریوم با ارز رمزنگاری شده اتریوم یعنی همان اتر انجام می‌شوند، و نیز هزینه‌های محاسباتی اجرای قراردادهای هوشمند نیز با اتر پرداخت می‌شوند.

بعضی از این نرم افزارهای غیرمتمرکز نیاز به یک ارز درون نرم افزاری (in-dapp) اضافی دارند. نرم افزارهای غیرمتمرکز جدید، ارز منحصر به فرد خود را با نام توکن (token) معرفی می‌کنند و از طریق ارائه و فروش اولیه سکه (ICO) منابع مالی را ایجاد می‌کنند.

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

تمامی ایده هایی که در اینجا ذکر شدند، به تحقق پیوسته‌اند و همان توکن‌های درون‌نرم افزاری غیرمتمرکز اتریوم هستند که از یک استاندارد برنامه نویسی بسیار معمول استفاده می کنند. در واقع، 99 درصد از تمام توکن‌های اتریوم که به کار بسته شده‌اند از همین استاندارد یعنی استاندارد ERC20 پیروی می‌کنند.

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

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

معرفی Solidity (زبان اختصاصی اتریوم)

در حالی که محبوب‌ترین کلاینت اتریوم در حال حاضر کدهای خود را به زبان GO گوگل نوشته است، گزینه‌های زیادی برای انتخاب یک زبان سازگار با توسعه‌دهنده، برای نوشتن کدهای قرارداد هوشمند وجود دارد. توسعه‌دهندگان می‌توانند از میان زبان هایی مانند Vyper، Bamboo، Serpent و Solidity یکی را انتخاب کنند.

در این مقاله، بیشتر بر سینتکس Solidity تکیه شده و در ادامه مطلب این زبان توضیح داده خواهد شد.

Solidity یک زبان برنامه نویسی قرارداد-محور سطح بالا است که برای اجرای قراردادهای هوشمند استفاده می‌شود. سینتکس Solidity، برای افرادی که با برنامه نویسی آشنا هستند، مخلوطی از مفاهیم مورد استفاده در Javascript، Python و  Cاست؛ یکی از انواع آن که به صورت استاتیک تایپ شده است، از قابلیت وراثت پشتیبانی می‌کند و از همان ابتدا دارای یک کتابخانه است. برای کسب اطلاعات بیشتر در مورد Solidity شما می‌توانید به مطالب موجود در سایت ذیل مراجعه کنید:

پیاده‌سازی گام به گام رابط ERC20

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

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

با پیروی از این منطق، یک قرارداد انتزاعی، که  موکداً برای قابلیت وراثت مورد استفاده قرار می گیرد، همچنین با تعریف آنچه قرارداد جدید باید برای کامپایل کردن داشته باشد، می تواند به عنوان یک ضامن (failsafe) مورد استفاده قرار گیرد. این قراردادهای انتزاعی نیز به عنوان قراردادهای رابط (interface contract) شناخته می‌شوند.

این به آن معنی است که هر قرارداد توکن که یک نمونه ERC20 است بدون موارد زیر کامپایل نمی‌شود؛ در مقابل به این معنی است که توسعه‌دهندگان اتریوم اکنون می‌دانند که انتظار چه عملکرد و رفتارهایی را می‌توانند در هنگام تعامل با هر توکن ERC20 داشته باشند.

استاندارد ERC20 یک قرارداد رابط است که شامل مجموعه‌ای از 6 تابع اجرایی و دو رویداد لاگینگ (logging) به سیستم است.

خرجی

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

تایید

برای تابع تایید، به تابع خرجی مراجعه می‌شود: این تابع این امکان را برای دو آدرس فراهم می‌سازد که مکررا و به صورت یک‌سویه وجه برداشت کنند. تابع تأیید، به صراحت، یک تابع استاندارد ساده است که صاحب کیف پول را به عنوان مرجع تأیید یک تراکنش می‌شناسد، تراکنشی که به زودی به نام او در بستر تابع خرجی انجام خواهد شد. این تابع به دو ورودی، یعنی آدرس خریدار (spender) و مقدار توکن‌های ارسالی نیاز دارد. خروجی این تابع یک مقدار منطقی (boolean) است که این موضوع را بیان می کند که آیا قرارداد تایید شده است یا خیر.

موجودی

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

عرضه کل

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

انتقال

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

انتقالی

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

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

خلاصه

شش تابع مشخص شده در بالا، شش تابع اصلی موجود در 99٪ از تمام توکن های ERC20 رایج هستند. با چند استثناء، توابع اصلی در هنگام ایجاد قراردادهای داخلی یا در تعامل با قراردادهای عمومی خارجی به طور کامل وجود دارند و توسعه‌دهندگان اتریوم با دانستن این موضوع، احساس امنیت خواهند کرد.

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

ارسال پاسخ

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