ERC-20 چیست؟
تعریف خلاصه
مجموعه استانداردهایی است که به توسعه دهندگان امکان می دهد توکن هایشان را بر روی شبکه اتریوم ایجاد کنند.
پیشینه
بیاید اول نگاه کوتاهی داشته باشیم که رمز ارز یا کریپتوکارنسی چیست؟ بطور ساده گونه ای از ارز دیجیتال است که میتواند در اینترنت به صورت مستقیم و بدون دخالت هرگونه واسطه ای تبادل شود.
بیت کوین اولین رمزارز بود که از از اصطلاحات امروزی می شناسیم. این مفهوم انتقال ارزش آنلاین را ارائه داد اما کامل نبود. پس از آن اتریوم (Ethereum) متولد شد. یک زیرساخت کامل که با هدف پیاده سازی قراردادهای هوشمند و توسعه برنامه های غیرمتمرکز (DAPP) پا به عرصه ظهور گذاشت.
ویژگی قابل توجه آن امکان راه اندازی رمزارزهای جدید بر پایه بلاک چین اتریوم است. بنابراین هر شخص یا سازمانی می تواند عرضه اولیه سکه (ICO) خود را به بهره گیری از قرارداد هوشمند بر روی آن پیاده سازی و توسعه دهد. از ملموس ترین توکن ها از ICO های موجود در شبکه اتریوم، توکن های ERC-20 هستند.
در حال حاضر یکی از پرکاربردترین توکن ها در دنیای رمزارزها ERC-20هستند بطوری که هم اکنون بیش از 80 هزار توکن ERC-20 داریم که همگی بر روی بلاک چین اتریوم راه اندازی شده اند. این چارچوب به اندازه کافی گسترده است و قادر است کاربردهای مختلفی را بدون ایجاد اختلال در عملکرد زنجیره اصلی اتریوم فراهم کند. دقیقا همین انعطاف پذیری بالا است که موجب استاندارد شدن توکن های ERC-20 شده است.
Blockquote
توجه: اتریوم و توکن های ERC-20 بر روی بلاک چین اتریوم اجرا می شوند. اما بیت کوین و اتریوم بر رو بلاک چین مشابهی اجرا نمیشوند. در نتیجه والت های ERC-20 همیشه می توانند رمز ارز اتر را بپذیرند اما نمیتوانند بیت کوین را قبول کنند.
ERC مخفف عبارت Ethereum Request for Comment است و اشاره به اسناد تکنیکی (پروپوزالهایی) دارد که در زمانهای مختلف توسط دولپرهای قرارداد هوشمند در بلاک چین اتریوم مورد استفاده قرار گرفته است. عدد ۲۰ نیز یک شماره ID یکتا است که تمایز نسخه های مختلف را نشان می دهد.
استاندارد ERC-20 اولین با توسط Vitalik Buterin در سال 2015 مطرح شد و از سال 2016 به بعد در اغلب قراردادهای هوشمند و عرضه اولیه سکه ها (ICOs) مورد استفاده قرار گرفته است. لازم به ذکر است که ERC-20 تنها استاندارد موجود برای توسعه دهندگان توکنهای اتریوم نیست و به جز آن، استانداردهای دیگری مانند ERC-721 ، ERC-777 ، ERC-865 ، ERC-1410 ، ERC-1151 و ERC-1337 نیز وجود دارند که هر یک برای اهداف متفاوتی مناسب هستند.
توابع و قوانین ERC-20
استاندارد ERC-20 از 6 تابع اصلی (اجباری)، 3 تابع اختیاری و 2 رویداد تشکیل شده است.
توابع اختیاری:
function name() public view returns (string)
function symbol() public view returns (string)
function decimals() public view returns (uint8)
- نام توکن: (Token name) نامی است که به توکن خود در قرارداد هوشمند اختصاص میدهید.
- نماد یا علامت اختصاری: (Symbol) نماد اختصاری مربوط به توکن است و معمولا 3 یا 4 کاراکتر است مانند BTC، ETH و USDT
- تعداد اعشار: (Decimal) این فیلد، برای تعیین تعداد رقم اعشار توکن است و بین 1 تا 18 می باشد. در واقع نشان می دهد چه تعداد 0 در سمت راست نقطه اعشاری برای نمایش نقطه ثابت یک توکن وجود دارد.
توابع اجباری:
function totalSupply() public view returns (uint256)
function balanceOf(address _owner) public view returns (uint256 balance)
function transfer(address _to, uint256 _value) public returns (bool success)
function transferFrom(address _from, address _to, uint256 _value) public returns (bool success)
function approve(address _spender, uint256 _value) public returns (bool success)
function allowance(address _owner, address _spender) public view returns (uint256 remaining)
-
مقدار کلی (total supply): مقدار نهایی توکن های در گردش را بر می گرداند.
-
موجودی (balance of): موجودی توکن های هر آدرس را بر می گرداند.
-
انتقال (transfer): امکان ارسال مقدار معینی توکن از صاحب قرارداد به آدرس های دیگر را می دهد. همچنین برای این طراحی شده است که اگر آدرس مبدا، توکن کافی برای انتقال نداشته باشد، آن تراکنش را خاتمه دهد.
-
انتقال از (transfer from): این تابع به یک قرارداد هوشمند اجازه می دهد تا فرایند انتقال را به صورت اتوماتیک انجام دهد و مقدار مشخصی از توکن ها را از طرف دارنده به آدرس دیگری ارسال شود.
-
تایید (approve): هنگام فراخوانی این تابع، صاحب قرارداد، آدرس داده شده را مجاز یا تایید می کند تا مقدار توکن تعیین شده را از آدرس دارنده توکن برداشت کند.
-
مجوز (allowance): مانده موجودی توکن ها در حساب و آنچه را می توان معامله یا انتقال داد را بر می گرداند.
شاید این سوال پیش بیاید که Transfer و Transfer from چیست و چرا به هر دوی آنها نیاز داریم؟
انتقال پول برای پرداخت یک صورتحساب را درنظر بگیرید. ارسال پول به صورت دستی با صرف وقت برای نوشتن چک و پرداخت صورتحساب بسیار معمول است. این شبیه استفاده از تابع Transfer() است. شما بدون کمک شخص دیگری، فرایند انتقال پول را خودتان انجام می دهید.
در حالت دیگر، شما می توانید پرداخت اتوماتیک صورتحساب را با بانک هماهنگ کنید. این کار شبیه استفاده از تابع Transfer from() است. بانک پول شما را برای پرداخت صورتحساب از طرف شما به طور اتوماتیک ارسال می کند. با استفاده از این رویکرد، یک قرارداد می تواند بدون دخالت شما، مقدار مشخصی از توکن را از طرف شما به آدرس دیگری ارسال کند.
رویدادها:
در هر بار که یک عمل از هریک از توابع اجباری فعال می شوند، از 2 دستور برای ردیابی و بررسی موجودی و تغییرات در آدرس ها انجام می شود:
event Transfer(address indexed _from, address indexed _to, uint256 _value)
event Approval(address indexed _owner, address indexed _spender, uint256 _value)
-
انتقال (Transfer): این رویداد معمولا در هر بار انتقال توکن ها، انجام می شود و جزئیات انتقال از یک حساب به حساب دیگر را نشان می دهد.
-
موافقت (Approval): با انتقال توکن ها، این رویداد هر بار که “تایید تابع ارسال کننده” یعنی approve() فراخوانی می شود، فعال می گردد و جزئیات معامله را منتشر می کند.
جمع بندی:
ERC-20 یک نرم افزار یا قطعه کد نیست. بلکه یک پروتکل استاندارد است همانند پروتکل HTTP در دنیای شبکه و اینترنت. ERC-20 فرایند ساخت یک توکن را کنترل می کند و این اطمینان را حاصل می کند که مشخصات فنی توکن ها طبق قونین برآورده می شود.