از آنجایی که استاندارد 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 را میتوان استخراج (Mine) کرد؟
اتریوم (ETH) را میتوانید استخراج کنید اما توکنها قابل استخراج نیستند. به عبارتی دیگر، زمانی که توکنها ساخته میشوند موجودیت پیدا میکنند. وقتی قراردادی راه اندازی میشود توسعهدهندگان آن ارز را طبق برنامه و نقشه راه خود کنترل میکنند.
به طور معمول، آنها این کار را از طریق عرضه اولیه کوین (Initial Coin Offering- ICO)، عرضه اولیه صرافی (Initial Exchange Offreing- IEO) و یا عرضهکنندههای تضامنی (Security Token Offering- STO) انجام میدهند. شاید با این کلمات یا مخفف آنها برخورد کرده باشید. در واقع همه آنها مفاهیم مشابهی دارند. سرمایهگذاران، اتریوم را به آدرس قرارداد میفرستند و در عوض توکن دریافت میکنند. پول جمعآوری شده صرف پیشرفت و توسعه پروژه میشود. کاربران انتظار دارند توکنهای خود را بلافاصله و یا بعدها استفاده کنند و یا با پیشرفت پروژه، برای سودآوری مجدداً به فروش برسانند.
لازم نیست عرضه توکن اتومات باشد. بسیاری از رویدادهای سرمایهگذاری جمعی (Crowdfund) امکان پرداخت با تعداد زیادی از ارزهای مختلف (مانند تتر، بیت کوین، بایننس کوین و اتریوم) را برای کاربران فراهم میآورند. سپس دارایی مربوطه به آدرسهای ارائه شده توسط کاربران واریز میگردد.
ترجمه و جمعآوری: واحد تحقیق و توسعه مجموعه همتا پی