استاندارد ERC-20
این استاندارد معمول ترین استاندارد برای پیاده سازی توکنهای بر پایه اتریوم است، به صورتی که با تمامی کیف پولها و حسابهای اتریومی سازگار باشند. این توکنها ساختاری تبدیل پذیر(Fungible) دارند، به این صورت که توانایی تبدیل به اتریوم و یا دیگر توکنهای بر پایه استاندارد ERC-20 را دارند.
برای ساخت این توکنها باید 6 تابع اصلی آن را پیاده سازی کرد و 3 تابع اختیاری نیر موجود است که بهتر است برای تفکیک هرچه بهتر توکنها از یکدیگر آنها را نیز پیاده سازی کرد.
توابع اصلی این استاندارد عبارتاند از:
- totalSupply: بیشترین مقدار ساخته شده از توکن است.
- balanceOf: تعداد توکنهایی که یک آدرس مالک آن است.
- transfer: به مالک قرارداد اجازه میدهد که مقدار مشخصی از توکن را، به یک آدرس دیگر انتقال دهد.
- transferFrom: انتقالهای خودکار مثلا پرداخت اجاره، اقساط و… توسط این تابع صورت میگیرد.
- approve: مالک قرارداد به کاربر اجازه میدهد که مقدار مورد نیاز توکن را، از آدرس قرارداد بردارد و همچنین تراکنش را از نظر تعداد کل توکنها چک میکند که تعداد اضافی و یا از دست رفته توکن نباشد.
- allowance: اگر کاربر اجاره برداشت مقدار کافی توکن برای تراکنش را نداشته باشد آن را لغو میکند.
توابع اختیاری نیز به عبارتاند از:
- name: اگرچه نام گذاری توکن اجباری نیست ولی بهتر است اینکار را انجام دهیم.
- symbol: همان نام اختصاری برای توکن است؛ مثلا نام اختصاری OmiseGO همان OMG است.
- decimal: کمک به فهمیدن کمترین مقدار ممکن توکن میکند. مثلا 0 به معنی این است که کمترین مقدار ممکن توکن 1 است. و یا 2 یعنی کمترین مقدار 01/0 است. بیشترین مقدار decimal 18 است.
- نقصهای این استاندارد عبارتاند از:
- باگ تابع transfer: این باگ برای حسابهای قراردادی است که ممکن است باعث از دست رفتن میلیونها دلار سرمایه شود. ایرادی که در اینجا وجود دارد این است که وقتی تراکنش انجام میشود حتی اگر با موفقیت این کار انجام شود هیچ اطلاعی به گیرنده داده نمیشود. در این حالت اگر دریافت کننده یک اکانت قرارداد باشد از توابع trasferfrom و aprrove استفاده میکند و اگر حساب EOA باشد، از تابع معمولی transfer استفاده میکند. در این حالت اگر کاربر تابع اشتباه را انتخاب کند توکنها در قرارداد میماند و غیر قابل برداشت میشود.
ساخت توکنها برای عموم، بسیار آسان است و باعث وجود تعداد زیادی ICO و توکنهای کلاه برداری میشود.
استاندارد ERC-721
این استاندارد نیز یکی از استانداردهای معمول برای پیاده سازی توکنهای بر پایه اتریوم است. توکنهای ساخته شده توسط این استاندارد ساختاری تبدیلناپذیر (Non-Fungible) دارند. این به آن معنی است که این توکنها قابل تبدیل به توکنهای دیگر و یا به اتریوم نیستند و صرفا میتوان مالکیت آنها را تغییر داد. این استاندارد، از این جهت که توانایی ذخیره در حسابها و کیف پولهای اتریومی را دارد، بسیار شبیه استاندارد ERC20 کار میکند. این توکن ها در جامعه بلاکچین به NFT نیز شهرت دارند.
مالکیت توکنها: تمامی اطلاعات مربوطه مالکیت توکنها و اینکه هرکاربر چه میزان توکن بعد از معامله دارد، همگی در قرارداد هوشمند وجود دارد. ارزش توکنها در استاندارد ERC721 مانند هم نیست، پس علاوه بر اضافه کردن آدرس و مقدار در قرارداد هوشنمد، نیازمند اضافه کردن جزئیات مالکیت، نیز میباشد.
ساخت توکنها: ساخت توکنها در استاندارد ERC20 خیلی ساده است و تنها کاری که باید انجام داد تعیین یک حد بالا برای توکن است، به صورتی که تعداد توکنها از آن حد بیشتر نشود. ولی متقابلاً ساخت توکن در استاندارد ERC721 خیلی پیچیده تر است. این استاندارد یک آرایه از توکنها دارد که هر کدام و همه توکنهای ساخته شده به صورت جداگانه داخل این آرایه قرار میگیرند.
استاندارد ERC721 از 10 تابع و 2 رویداد استفاده میکند. تعدادی از توابع مهم به شرح زیر میباشند:
- ownerOf: آدرس مالک توکن را برمیگرداند.
- approve: یک تابع تایید کننده است و یا به یک موجودیت دیگر اجازه انتقال توکن از طرف مالک آن را میدهد.
- takeOwnership: این تابع مانند یک تابع برداشت میباشد. یک فرد از خارج میتواند این تابع را برای برداشت توکنهای حساب یک کاربر دیگر صدا بزند.
- transfer: یک تابع دیگر برای انتقال توکنها است. مالک توکن آن را همانند انتقال دیگر رمزارزها، به یک کاربر دیگر میفرستد.
- tokenOfOwnerByIndex: این تابع اختیاری میباشد. هر مالک توکن تبدیلناپذیر، میتواند یک و یا چند توکن را در مالکیت خود داشته باشد. هر توکن با یک شناسه منحصر بفرد (Unique ID) شناخته میشود. پس شناسایی آنها میتواند برای کاربر سخت باشد. برای آسان کردن این امر، قرارداد یک رکورد از شناسههای منحصر بفرد هر توکن، که هر فرد مالک آن است را نگه میدارد. به همین دلیل هر توکن که توسط یک شخص نگه داشته میشود میتواند توسط یک نمایه (Index) در آرایه توکنهای یک فرد بازیابی شود.
- tokenMetadata: کمک به تعریف فرا داده برای توکن میکند.
رویدادها: هر بار که قرارداد رویدادها را صدا بزند اجرا میشوند و به هر برنامه شنوندهای که به آنها گوش دهد پخش همگانی (Broadcast) میشوند. برنامههای خارج از قرارداد نیز به آن رویداد گوش میدهند تا به محض اینکه رویداد اجرا شد بتواندد کد آن رویداد را اجرا کنند.
رویدادهای استاندارد ERC721 به شرح زیر میباشد:
- Transfer: هر بار که یک توکن از یک کاربر به کاربر دیگر انتقال داده شود و مالک آن تغییر کند اجرا میشود. جزئیات این رویداد به شرح زیر است:
- کدام حساب توکن را فرستاده است؟
- کدام حساب توکن را دریافت کرده است؟
- کدام توکن انتقال داده شده است؟ (توسط بررسی شناسه توکن)
- Approval: این رویداد هر بار که یک کاربر اجازه دهد کاربری دیگر مالکیت یک توکن مشخص را برعهده گیرد، اجرا میشود. جزئیات این که کدام کاربر در حال حاضر مالکیت توکن را دارد، کدام اکانت اجازه برعهده گرفتن مالکیت آن را بر عهده دارد و شناسه منحصر بفرد توکنی که مالکیت آن در آینده تغییر میکند، در این رویداد قرار دارد.
منابع
(2018). Learn Everything About ERC20 Tokens [Online] https://blockgeeks.com/guides/erc20-tokens/#Enter_ERC20_Tokens
[17] (2019). Intro to ERC-721: The CryptoKitty Token [Online] https://blockgeeks.com/guides/erc-721-token/