استاندارد ERC-20: قالب فوقالعاده برای ایجاد توکن در بلاکچین اتریوم
از آنجایی که استاندارد ERC-20 قالب فوقالعادهای برای ایجاد توکنهاست، در این مقاله قصد داریم به توکنهای ERC-20 و نحوه ایجاد این توکنها بپردازیم.
اتریوم (Ethereum) توسط ویتالیک بوترین (Vitalic Buterin) در سال ۲۰۱۴ ایجاد و به عنوان یک پلتفرم متن باز (Open Source) برای راهاندازی اپلیکیشنهای غیرمتمرکز (Decentralized Application- DApp) معرفی شد. بیشترین انگیزه بوترین برای ایجاد بلاکچین جدید از عدم انعطافپذیری پروتکلهای بیتکوین نشات میگرفت.
راهاندازی بلاکچین اتریوم توانست نظر کسبوکارها، توسعهدهندگان و کارآفرینان را به خود جلب کند و باعث شد کاربرانی که در زمینه قراردادهای هوشمند و اپلیکیشنهای توزیع شده فعالیت میکنند بتوانند صنعت رو به رشدی را پایهریزی کنند.
چارچوب اصلی این استاندارد مختص شبکه اتریوم است، ولی توانسته است به استانداردهای بلاکچینهای دیگر مثل BEP-2 (زنجیره بایننس) ایدههایی بدهد.
استاندارد ERC-20 چیست؟
در شبکه اتریوم، ERC مخفف عبارت Ethereum Request for Comments و به معنای «درخواست اتریوم برای توضیحات» است. این توضیحات اسناد فنی هستند که طرح کلی استانداردها را برای برنامهنویسی روی اتریوم مشخص میکنند. این commentها را نباید با پروپوزالهای تکمیلی اتریوم (Ethereum Improvements Proposals_EIP) یا با مشابه آنها «بیپ» (BIP)های بیتکوین، که سعی در بهبود پروتکل اصلی دارند، اشتباه گرفت. در عوض هدف ERCها، ایجاد قراردادهایی است که موجب تعامل راحتتر اپلیکیشنها و قراردادها با یکدیگر میشود.
کد ERC-20 توسط ویتالیک بوترین و فابیان فوگل اشتلر (Fabian Vogelsteller) نوشته شده است و قالب نسبتاً سادهای را برای توکنهای بر پایه اتریوم ارائه میکند. براساس این طرح کلی، توسعهدهندگان دیگر نیازی به اختراع مجدد چرخ ندارند. در عوض آنها میتوانند ساز و کار خود را بر پایههایی که قبلاً در کل این صنعت ساخته شده بنا کنند.
وقتی توکنهای ERC-20 ایجاد میشوند، به صورت خودکار میتوانند با خدمات و نرمافزارهایی که از استانداردهای ERC-20 پشتیبانی میکنند (کیف پول نرم افزاری، کیف پول سخت افزاری، صرافیها و غیره) تعامل کنند.
لازم به ذکر است که استاندارد ERC-20 به EIP (مشخصاً EIP-20) اضافه شد. این جریان دو سال بعد از ارائه پروپوزال اصلی به دلیل استفاده گسترده از آن، اتفاق افتاد. با این حال بعد از گذشت سالها نام ERC-20 دست نخورده باقی ماند.
خلاصهای از توکنهای ERC-20
برخلاف ETH (رمزارز اصلی اتریوم)، توکنهای ERC-20 در اکانتها نگهداری نمیشوند. توکنها تنها در داخل یک قرارداد وجود دارند مثل یک پایگاه داده مستقل. در این قرارداد قوانین مربوط به توکنها (یعنی نام، نماد و قابلیت تقسیم شدن) تعیین میشود، همچنین لیستی از موجودیهای کاربران در حسابهای اتریومی آنها نگهداری میشود.
برای جابجایی توکنها، کاربران باید تراکنش خود را به قرارداد فرستاده و از آن درخواست کنند که بخشی از موجودی خود را به دیگری انتقال دهد. به عنوان مثال ، اگر آلیس بخواهد ۵۰۰۰ توکن x را برای باب بفرستد، آلیس میبایست درخواست خود را به بخش داخلی قرارداد هوشمند توکن x ارسال کند و از آن بخواهد این کار را انجام دهد.
درخواست آلیس حاوی مضمونی شبیه به یک تراکنش عادی اتریومی است که هیچ ETH به قرارداد توکن پرداخت نمیکند. این درخواست شامل یک بخش اضافی در تراکنش میشود که کاری که آلیس میخواهد انجام دهد (در این مورد انتقال توکن ها به باب) را مشخص میکند.
خرید سریع بیت کوین |
با اینکه او در واقع اتری انتقال نمیدهد اما باز هم برای این که تراکنش وی در یک بلوک ثبت شود باید کارمزد تراکنش را در شبکه با اتریوم پرداخت کند. اگر او هیچ اتریومی نداشته باشد، باید قبل از انتقال توکنها مقداری اتریوم تهیه کند.
با توجه به مطالبی که در بالا گفته شد، در اینجا به ذکر مثالی واقعی در Etherscan میپردازیم. اگر شخصی درخواستی به قرارداد توکن BUSD بفرستد، شما میتوانید توکنهایی را که انتقال داده شده و همینطور کارمزد پرداخت شده را ببینید، اما در قسمت مقدار انتقال داده شده ETH عدد 0 را خواهید دید.
با توجه به آنچه گفته شد برای درک بهتر به یک قرارداد معمولی ERC-20 میپردازیم.
توکنهای ERC-20 چگونه ایجاد میشوند؟
برای اینکه مطابق با ERC-20 باشید، لازم است قرارداد شما شامل ۶ بخش باشد:
- مقدار عرضه شده (totalSupply)
- موجودی حساب (balanceOf)
- انتقال (transfer)
- انتقال از (transferFrom)
- تأیید (approve)
- مجوز (allowance)
علاوه بر موارد فوق، میتوانید بخشهای اختیاری دیگری مثل نام، نماد و اعشار را مشخص کنید. احتمالا عملکرد بخشهای ذکر شده در بالا از روی نام آنها مشخص است. در عین حال، در ادامه به توضیح آن میپردازیم.
در زیر به توضیحات هر بخش با همان ترتیبی که در زبان اتریوم آمده است، می پردازیم.
-
مقدار عرضه شده (totalSupply)
هنگام درخواست کاربر، تابع فوق به کل توکنهای عرضه شده در قرارداد برمیگردد.
-
موجودی حساب (balanceOf)
برخلاف مقدار عرضه شده، به موجودی حساب یک پارامتر یا به عبارتی یک آدرس اختصاص داده میشود. هنگام درخواست کاربر، این تابع موجودی آدرسی را که توکن در آن ذخیره شده است را نمایش میدهد. به خاطر داشته باشید که حسابها، روی شبکه اتریوم به صورت عمومی هستند. پس میتوانید موجودی هر کاربر را، به شرط این که آدرس وی را داشته باشید، ببینید.
-
انتقال (transfer)
در انتقال، توکنها به درستی از کاربری به کاربر دیگر منتقل میشوند. در این قسمت شما به آدرسی که میخواهید انتقال دهید و همچنین میزان توکنی را که میخواهید انتقال دهید را مشخص میکنید.
وقتی درخواستتان را ارسال میکنید، در قسمت انتقال، چیزی به نام رویداد (event) فعال میشود (در این مرحله، رویداد انتقال گفته میشود). در واقع، این بخش به بلاکچین میگوید که یک مبنای پیگیری برای آن در نظر بگیرد.
-
انتقال از (transferFrom)
تابع «انتقال از» گزینه کارآمدی برای انتقال است که قابلیت برنامهدهی بیشتر را در اپلیکیشنهای غیر متمرکز فراهم میآورد. این تابع نیز مانند تابع انتقال، برای جابجایی توکنها استفاده میشود؛ اما آن توکنها لزوماً متعلق به شخص درخواستدهنده به قرارداد نمیباشد.
به عبارت دیگر، شما میتوانید به شخص (یا قرارداد دیگری) اجازه دهید که از طرف شما وجه را انتقال دهد. احتمالا یکی از موارد استفاده، پرداخت حق اشتراک میباشد. به عبارت دیگر، زمانی که نمیخواهید هر روز، هر هفته و یا هر ماه، شخصاً پرداخت را انجام دهید، در عوض به برنامهای اجازه میدهید که این کار را برای شما انجام دهد.
بنابراین، این تابع همانند تابع «انتقال» رویدادی را فعال میکند.
-
تأیید (approve)
تایید یکی دیگر از توابع مفید از نظر قابلیت برنامهریزی است. در این تابع، شما میتوانید برای تعداد توکنی که قرارداد هوشمند میتواند از حساب شما برداشت کند، محدودیت ایجاد کنید. بدون این بخش، شما با ریسک بد عمل کردن قرارداد (یا سوء استفاده) و یا سرقت از تمام وجه خود مواجه خواهید شد. مثال قبلی در مورد حق اشتراک را در نظر بگیرید. فرض کنید شما به طور مداوم در حال استفاده از خدماتی هستید و نمیخواهید هر هفته به صورت دستی برای یک انجام یک تراکنش زمان بگذارید.
از آنجایی که ممکن است مقدار زیادی توکن داشته باشید و بخواهید یک جریان پرداخت هفتگی را به یک DApp بسپارید، در نتیجه نمیخواهید که بسیار بیشتر از آنچه که برای حق اشتراک لازم است پرداخت کنید. برای اینکه DApp نتواند موجودی شما را تخلیه کند، شما میتوانید با تایید یک سقف پرداخت تعیین کنید. با فرض این که هزینه حق اشتراک شما هر هفته یک واحد از توکن مورد نظر است، اگر مقدار تأیید شده را ۲۰ عدد مشخص کنید، میتوانید حق اشتراک خود را به مدت ۵ ماه پرداخت کنید.
در بدترین شرایط اگر DApp بخواهد همه وجه شما را برداشت کند و یا اشکالی در سیستم وجود داشته باشد، تنها ۲۰ توکن از دست خواهید داد. شاید این موضوع ایده آل نباشد، اما مطمئناً بهتر از این است که تمام موجودی خود را از دست بدهید.
هنگام درخواست، تابع تایید «رویداد تایید» را فعال میکند. همانند «رویداد انتقال» دادهها در بلاکچین نوشته میشوند.
- مجوز (allowance)
این تابع میتواند همراه با تابع تأیید استفاده شود. زمانی که به قراردادی اجازه مدیریت توکنهای خود را میدهید، میتوانید از این گزینه برای مشاهده اینکه چه مقدار دیگر میتواند برداشت کند استفاده کنید. برای مثال، اگر 12 توکن از 20 توکن تأیید شده شما بابت حق اشتراک پرداخت شده باشد، تابع مجوز تنها اجازه برداشت 8 توکن را میدهد.
-
بخش هایاختیاری
بخشهایی که در بالا در مورد آنها صحبت کردیم اجباری هستند. ولی مواردی مثل نام، نماد و اعشار اجباری نیستند. با این موارد شما میتوانید قرارداد ERC-20 خود را کمی زیباتر کنید. بدین ترتیب، موارد اختیاری به شما اجازه میدهند تا یک نام برای توکن خود انتخاب کنید، یک نماد (مثل: بیت کوین، بایننس کوین، اتریوم) خاص برای آن در نظر بگیرید و مشخص کنید که توکنها با چه تعداد اعشاری قابل تقسیم شدن باشند. برای مثال، توکنهایی که به عنوان ارز استفاده میشوند میتوانند نسبت به توکنهایی که نشاندهنده یک دارایی یا یک ویژگی خاص هستند، بخش پذیرتر باشند که این امر سودهی آنها را افزایش میدهد.
کاربرد توکنهای ERC-20
با انجام تمامی بخشهای فوق، یک قرارداد ERC-20 خواهیم داشت که میتوانیم کل عرضه را بررسی کنیم، موجودیها را ببینیم، وجوه را انتقال دهیم و به دیگر DAppها اجازه دهیم تا توکنها را برای ما مدیریت کنند.
بیشترین جذابیتهای توکنهای ERC-20، انعطافپذیری آنهاست. قراردادهای معین شده محدود نمیشوند. بنابراین طرفین از امکانات بیشتری بهرهمند شده و پارامترهای مشخصی را متناسب با نیاز خود تعیین میکنند.
-
کوینهای با ارزش ثابت (Stable Coins)
استیبل کوینها (Stablecoin) توکنهایی با پشتوانه فیات هستند که اغلب از استانداردهای ERC-20 استفاده میکنند. تراکنشهای مربوط به قرارداد BUSD که قبلاً به آن اشاره کردیم، یکی از این موارد است و اکثر استیبل کوینها با این فرمت در دسترس هستند.
برای یک استیبل کوین با پشتوانه فیات، ناشر یا صادرکننده پول، ذخیره یورو، دلار و غیره نگهداری میکند. سپس به ازای هر یک واحد از پولی که ذخیره کرده یک توکن ایجاد میکند. یعنی اگر 10 هزار دلار در صندوق ذخیره داشته باشد، ناشر پول میتواند 10 هزار توکن ایجاد کند که هر کدام با قیمت ۱ دلار قابل بازخرید هستند.
از نظر فنی اجرای این امر در اتریوم بسیار آسان است. یک ناشر پول خیلی راحت یک قرارداد با 10 هزار توکن اجرا میکند، سپس آنها را بین کاربران توزیع میکند، با این وعده که بعدها میتوانند در مقابل، به تناسب آن ارز فیات دریافت کنند.
کاربران با توکنهای خود میتوانند کارهای مختلفی انجام دهند. میتوانند کالا یا خدمات خریداری کنند و یا در DAppها از آن استفاده کنند و یا این که میتوانند بلافاصله از صادرکننده درخواست تعویض توکنها را با پول فیات داشته باشند. در این حالت صادرکننده، توکنها را باطل (غیر قابل استفاده) میکند و دقیقاً به همان مقدار ارز فیات از ذخیره خود خارج میکند.
همانطور که قبلاً گفته شد، قرارداد حاکم بر این سیستم نسبتا ساده است. با این حال راهاندازی یک استیبل کوین به کار زیاد روی عوامل خارجی مثل تدارکات، تطبیق با قوانین و غیره دارد.
-
توکنهای تضامنی (Security Tokens)
“توکنهای تضامنی” همانند استیبل کوینها هستند. در سطح قرارداد، میتوان گفت که هر دو یکسان هستند زیرا شیوههای عملکرد آنها یکسان است. تفاوت آنها در بخش صادرکننده است. “توکنهای تضامنی” به مثابه اوراق بهاداری مثل سهام، اوراق قرضه و یا داراییهای فیزیکی هستند. آنها اغلب (هرچند که همیشه به این شکل نیست) به دارندگان آن، نوعی سهام در یک تجارت یا کالا را ارائه میدهند.
-
توکنهای کاربردی (Utility Tokens)
“توکنهای کاربردی” شاید متداولترین انواع توکنهای امروزی باشند. برخلاف دو مورد قبلی پشتوانهای ندارند. اگر توکنهای با پشتوانه را یک شرکت هواپیمایی در نظر بگیریم، بنابراین توکنهای کاربردی مانند برنامه پروازهای روزانه هستند. آنها عمل یا خدمتی را انجام میدهند اما هیچ ارزش خارجی ندارند. “توکنهای کاربردی” را میتوان برای موارد بیشماری مثل: ارز درون برنامهای مثلا بازیها، سوخت اپلیکیشنهای غیرمتمرکز، امتیاز وفاداری و بسیاری موارد دیگر بکار گرفت.
آیا توکنهای ERC-20 را میتوان استخراج (Mine) کرد؟
اتریوم (ETH) را میتوانید استخراج کنید اما توکنها قابل استخراج نیستند. به عبارتی دیگر، زمانی که توکنها ساخته میشوند موجودیت پیدا میکنند. وقتی قراردادی راه اندازی میشود توسعهدهندگان آن ارز را طبق برنامه و نقشه راه خود کنترل میکنند.
به طور معمول، آنها این کار را از طریق عرضه اولیه کوین (Initial Coin Offering- ICO)، عرضه اولیه صرافی (Initial Exchange Offreing- IEO) و یا عرضهکنندههای تضامنی (Security Token Offering- STO) انجام میدهند. شاید با این کلمات یا مخفف آنها برخورد کرده باشید. در واقع همه آنها مفاهیم مشابهی دارند. سرمایهگذاران، اتریوم را به آدرس قرارداد میفرستند و در عوض توکن دریافت میکنند. پول جمعآوری شده صرف پیشرفت و توسعه پروژه میشود. کاربران انتظار دارند توکنهای خود را بلافاصله و یا بعدها استفاده کنند و یا با پیشرفت پروژه، برای سودآوری مجدداً به فروش برسانند.
لازم نیست عرضه توکن اتومات باشد. بسیاری از رویدادهای سرمایهگذاری جمعی (Crowdfund) امکان پرداخت با تعداد زیادی از ارزهای مختلف (مانند تتر، بیت کوین، بایننس کوین و اتریوم) را برای کاربران فراهم میآورند. سپس دارایی مربوطه به آدرسهای ارائه شده توسط کاربران واریز میگردد.
مزایای توکنهای ERC-20
-
قابلیت تعویض و مبادله (fungible)
توکنهای ERC-20 قابل مبادله هستند (هر واحد با واحد دیگر قابل تعویض است). اگر توکن Binance Academy داشته باشید، میتوانید آن را با شخص دیگری مبادله کنید و آنها از لحاظ عملکرد باز هم با یکدیگر یکسان باشند. مثل پول نقد یا طلا.
اگر توکن شما قرار باشد نقش ارز را ایفا کند ایدهآل است. مسلماً توکنی با ویژگی های متمایزی که می تواند آن را غیر قابل تعویض یا مبادله کند نمیخواهید. این میتواند باعث شود برخی از توکنها ارزشی، کم یا زیاد نسبت به دیگری داشته باشد و هدف کلی آنها را کمرنگ کند.
-
قابلیت انعطاف(Flexibility)
همانطور که در بخش قبلی بررسی کردیم، توکنهای ERC-20 قابلیت تنظیم زیادی دارند و میتوانند متناسب با بسیاری از کاربردهای مختلف انطباق پیدا کند. برای مثال میتوانند به عنوان ارز درون بازی، برنامههای امتیاز وفاداری، حتی به عنوان دارایی دیجیتالی قابل دریافت در ازای نمایش هنرهای زیبا و یا حق مالکیت، استفاده شوند.
-
محبوبیت(Popular)
محبوبیت ERC-20 در صنعت ارزهای دیجیتال دلیل کاملا قانع کننده برای استفاده از آن به عنوان یک طرح اصلی و کلی است. تعداد رو به رشد صرافیها، کیف پولها و قراردادهای هوشمندی که از قبل با توکنهای تازه ایجاد شده سازگار شده بیانگر این امر هستند. علاوه بر این پشتیبانی برای توسعه دهندگان و بستر مستندات آن بسیار فراوان شده است.
معایب توکنهای ERC-20
-
قابلیت توسعه(Scalability)
همانند بسیاری از شبکههای ارزهای دیجیتال، اتریوم نیز نسبت به اختلالات روزافزون مصون نیست. در حالت کنونی قابلیت توسعه خوبی ندارد. تلاش برای انجام یک تراکنش در زمانهای اوج شلوغی، منجر به کارمزد و تأخیر زیاد میشود. اگر شما یک توکن راهاندازی کنید زمانی که تراکم شبکه بالا برود (شبکه شلوغ شود) بر قابلیت استفاده از آن نیز تأثیر منفی خواهد گذاشت.
این مشکل مختص اتریوم نیست. بلکه یک به ناچار قربانی شدن بعضی از موارد، در سیستمهای توزیع شده (distributed) است. کلیت این رمزارز میخواهد این مشکلات را با رفتن به سمت Ethereum 2.0 که از نسخههای به روز شدهایی مثل اتریوم پلاسما (Etereum Plasma) و اتریوم کاسپر (Etehreum Casper) استفاده میکنند، برطرف کند.
-
کلاهبرداری ها(Scams)
اگرچه این مشکل از ذات این تکنولوژی نیست. اما سهولت راه اندازی توکن میتواند از برخی جهات یک نقطه ضعف محسوب شود. برای ایجاد یک توکن ERC-20 تلاش زیادی لازم نیست. به این معنی که هر کسی میتواند -چه خوب یا بد- این کار را انجام دهد. بنابراین باید مراقب سرمایه گذاریهای خود باشید. بسیاری از طرحهای کلاهبرداری هرمی (Pyramid) و پانزی (Ponzy) تحت عناوین “پروژههای بلاکچین” مخفی شدهاند. تحقیقات خود را قبل از سرمایه گذاری انجام دهید تا از درست و سالم بودن فرصت های سرمایه گذاری اطمینان حاصل کنید.
تفاوت میان ERC-20 ،ERC-1155 ،ERC-225 ،ERC-721
ERC-20 اولین و تا امروز محبوبترین استاندارد توکن اتریوم بوده، اما این تنها استاندارد موجود نیست. در طول این سالها، استانداردهای بسیار زیاد دیگری پا به عرصه ظهور گذاشتند که این روزها به دنبال ارائه اصلاحاتی در ERC-20 هستند و یا کلاً برای دستیابی به اهداف دیگری تلاش میکنند.
برخی از استانداردهای رایج، استانداردهایی است که در توکنهای غیر قابل تعویض (non-fungible tokens) یا به اختصار NFT استفاده میشوند. بعضی اوقات بسته به مورد استفاده، داشتن توکنی خاص با ویژگیهای متفاوت به نفع شماست. اگر بخواهید یک اثر منحصر به فرد هنری، یک دارایی داخل بازی و غیره را “توکنیزه” (tokenize) کنید، یکی از این قراردادها، ممکن است که جذابیت بیشتری برای شما داشته باشند. به طور مثال از استاندارد ERC-721 برای DApp بسیار محبوب Cryptokitties استفاده شده است. چنین قراردادی یک API به کاربران ارائه میدهد که توکنهای غیر قابل مبادله خود را ایجاد و فرادادههای (metadata) خود را (عکسها، توضیحات و غیره) کدبندی کنند.
استاندارد ERC-1155، را میتوان به عنوان یک پیشرفت در ERC-20 و ERC-721 در نظر گرفت. این طرح یک نمای کلی از این که یک استاندارد بتواند هر دو توکن قابل مبادله (fungible) و غیر قابل مبادله (non-fungible) را پشتیبانی کند، ترسیم میکند.
گزینههای دیگری مانند ERC-223 یا ERC-621، هدفشان بهبود قابلیت کاربری است. هدف اولی ایجاد اقدامات امنیتی، برای جلوگیری از انتقال تصادفی توکن هاست. دومی بیشتر عملیاتی را برای افزایش یا کاهش عرضه توکن انجام میدهد.
جمع بندی
استاندارد ERC-20 سالهاست که بر فضای داراییهای رمزنگاری شده تسلط دارد و دلیل آن نیز واضح است. با کاربری نسبتاً آسان آن، هرکسی میتواند متناسب با کاربردهای گسترده از جمله توکنهای کاربردی، استیبل کوینها و غیره، یک قرارداد هوشمند راهاندازی کند. همانطور که گفته شد ERC-20 فاقد ویژگیهایی است که توسط دیگر استانداردها به وجود آمده است. در ادامه باید دید که آیا انواع بعدی قراردادها جای آن را خواهند گرفت؟
ترجمه و جمعآوری: تیم خرید و فروش تتر صرافی ارز دیجیتال همتا پی
جالب بود که همچین مطالبی در صرافی های معتبر داخلی به اشتراک گذاشته میشود.