آنچه در این مقاله خواهید خواند
از استاندارد شبکه توکن ERC20 برای ساخت قراردادهای هوشمند روی بلاک چین اتریوم استفاده میشود. توکنهای روی شبکه اتریوم توسط ERC-20 ساخته میشوند. شبکه اتریوم در سال 2014 توسط ویتالیک بوترین (Vitalik Buterin) راهاندازی شد و خود را بهعنوان یک پلتفرم متن باز برای عرضه برنامههای غیر متمرکز معرفی کرد. بسیاری از انگیزههای آقای بوترین برای ساخت یک بلاک چین جدید، از فقدان انعطافپذیری در پروتکل بیت کوین نشات گرفته بود.
اتریوم از زمان راهاندازی تا کنون، توسعهدهندگان، کسب و کارها و کارآفرینان زیادی را به خود جلب کرده و صنعت رو به رشدی از کاربران خواهان قراردادهای هوشمند و اپلیکیشنهای توزیعشده را ایجاد کرده است. در این مطلب، به یک چارچوب مهم ساخت توکن ها یعنی استاندارد ERC20 شبکه اتریوم نگاهی میاندازیم. با اینکه این چارچوب مختص شبکه Ethereum است، اما الهامبخش استانداردهای بلاک چینهای دیگری نظیر BEP2 صرافی بایننس نیز بوده است. حتی در ساخت ارزهای دیجیتال مهمی همچون بایننس کوین که رمز ارز اول زنجیره هوشمند بایننس محسوب میشود از استاندارد BEP-20 استفاده شده که خود تا حد زیادی از ERC-20 الهام گرفته است.
استاندارد توکن ERC20 چیست؟
در شبکه اتریوم، ERC مخفف “Ethereum Request for Comments” و به معنای «درخواست اتریوم برای توضیحات» است. این توضیحات در واقع سندهای فنی هستند که استانداردهای برنامهنویسی در اتریوم را مشخص میکنند. البته ERC را نباید با EIP یا همان “Ethereum Improvement Proposal” به معنای «طرح پیشنهادی بهبود اتریوم» اشتباه گرفت. EIPها مشابه BIP در شبکه بیت کوین، صرفا طرحهایی برای بهبود خود پروتکل هستند. اما هدف ERCها، ایجاد کنوانسیونی است تا تعامل برنامهها و قراردادها با یکدیگر را هموار سازد.
استاندارد توکن ERC20 که توسط ویتالیک بوترین (بنیانگذار شبکه اتریوم) و فابیان فوگشتلر (Fabian Folgesteller) در سال 2015 نوشته شد، یک فرمت نسبتا ساده برای توکن های مبتنی بر اتریوم است. توسعه دهندگان با پیروی از این طرح کلی، دیگر نیازی به اختراع دوباره چرخ ندارند. بلکه در عوض، قادر به استفاده از بنیاد مورد استفاده در این صنعت هستند.
توکن های ERC20 به محض ساخت، بهصورت خودکار با سرویسها و نرمافزارهای پشتیبان استاندارد ERC-20 (مانند والتهای نرمافزاری، سختافزاری، صرافیها و دیگر موارد) قابل برقراری تعامل هستند. شایان ذکر است که استاندارد ERC-20 در یک EPI بهنام EIP-20 توسعه داده شده است. این اتفاق، چند سال پس از طرح پیشنهادی اصلی و بهخاطر استفاده گسترده از آن اجرایی شد. با این وجود، حتی با وجود گذشت چندین سال همچنان نام ERC-20 باقی مانده است.
آشنایی با ساز و کار توکن های اتریومی
برخلاف کوین ETH (رمز ارز بومی شبکه اتریوم)، توکن های شبکه اتریوم با استاندارد ERC20 درون حسابها نگهداری نمیشوند. این توکنها تنها درون یک قرارداد حضور دارند که شبیه به یک پایگاه داده مستقل است. این دیتا بیس، قوانین توکنها (مانند اسم، نماد، تقسیمپذیری) را مشخص کرده و لیستی ترسیمکننده از موجودی کاربران به آدرسهای اتریومشان را نگه میدارد.
برای انتقال توکنها، کاربران باید با ارسال یک تراکنش به قرارداد، تخصیص بخشی از موجودیشان در جای دیگر را از آن درخواست کنند. مثلا، اگر آلیس خواهان ارسال 5،000 واحد رمز ارز Bit24Token به باب باشد، با فراخوانی تابعی درون قرارداد هوشمند Bit24Token، این کار را از قرارداد درخواست میکند.
درخواست آلیس درون یک تراکنش عادی اتریومی قرار میگیرد که 0 واحد ETH به قرارداد آن توکن میپردازد. این درخواست در یک بخش اضافی در این تراکنش قرار میگیرد که قصد آلیس برای ارسال آن تراکنش (در اینجا ارسال توکن به باب) را مشخص میکند.
البته با اینکه آلیس توکن اتری ارسال نمیکند، اما همچنان ملزم به پرداخت کارمزد مربوط به آن است تا تراکنش وی درون بلاک ثبت شود. بنابراین اگر آلیس هیچ رمز ارز اتری ندارد، باید با خرید اتریوم پیش از انتقال توکنها، مقداری ETH تهیه کند.
در تراکنش زیر، نمونه واقعی مثال بالا را در وب سایت اتر اسکن مشاهده میکنید: فردی ابتدا قرارداد BUSD را فراخوانی کرده است. در این تصویر، توکنهای ارسالی را مشاهده میکنید. اما حتی با وجود نمایش ارسال 0 ETH در بخش Value، همچنان کارمزد 0.00224302 اتری پرداخت شده است.
در ادامه، با ساختار یک قرارداد ERC20 معمول آشنا میشویم.
توکن های استاندارد ERC20 چگونه ساخته میشوند؟
برای انطباق با استاندارد ERC20، قرارداد توکن شما در شبکه اتریوم باید شامل شش تابع الزامی باشد: عرضه کل (totalSupply)، موجودی (balanceOf)، انتقال (transfer)، انتقال از (transferFrom)، تصویب (approve) و مستمری (allowance). علاوه بر این، امکان تعیین توابع اختیاری مانند اسم (name)، نماد (symbol) و رقم اعشار (decimal) نیز وجود دارد. احتمالا از اسم این توابع نوع کارکردشان برایتان مشخص است. اما در ادامه، به تشریح جزئیات هر کدام میپردازیم. توابع موجود در زبان سالیدیتی (Solidity) اتریوم به صورت زیر نوشته میشوند:
تابع عرضه کل (totalSypply)
function totalSupply() public view returns (uint256)
زمانی که این تابع توسط کاربری فراخوانی شود، عرضه کل توکنهای موجود در قرارداد را برمیگرداند.
تابع موجودی (balanceOf)
function balanceOf(address _owner) public view returns (uint256 balance)
برخلاف تابع totalSupply، تابع balanceOf در هنگام فراخوانی یک پارامتر (مانند آدرس) را گرفته و موجودی توکنهای آن آدرس را برمیگرداند. به یاد داشته باشید که حسابهای روی شبکه اتریوم عمومی بوده و بنابراین، قادر به بررسی موجودی تمام کاربران در صورت دانستن آدرس آنها هستید.
تابع انتقال (transfer)
function transfer(address _to, uint256 _value) public returns (bool success)
تابع transfer توکنها را از یک کاربر به کاربر دیگر ارسال میکند. در این قسمت، شما باید آدرس مورد نظر و مقدار دلخواه ارز دیجیتال برای ارسال را مشخص کنید. این تابع در هنگام فراخوانی، چیزی به نام event یا رویداد (در اینجا رویداد انتقال transfer event) را فعال میسازد که در واقع دستور ثبت یک رفرنس را به آن صادر میکند.
تابع انتقال از (transferFrom)
function transferFrom(address _from, address _to, uint256 _value) public returns (bool success)
تابع transferFrom یک جایگزین کاربردی برای تابع transfer است که قابلیت برنامهنویسی بیشتری را برای اپلیکیشنهای غیر متمرکز فراهم میکند. مشابه تابع transfer، از این تابع برای انتقال توکن با استاندارد ERC20 در شبکه اتریوم استفاده میشود، اما این توکنها لزوما نباید متعلق به خود فرد فراخوانیکننده قرارداد باشند. به عبارت دیگر، مثلا میتوانید به فرد یا قراردادی مجوز دهید تا وجوه را از طرف شما ارسال کند.
یکی از موارد کاربرد تابع transferFrom، برای پرداخت هزینه سرویسهای اشتراکی است که نمیخواهید خودتان به صورت دستی هر روز/ماه/سال مبلغی را ارسال کنید. در عوض، به برنامهای اجازه میدهید تا این کار را برایتان انجام دهد. این تابع همان رویداد تابع transfer را فعال میکند.
تابع تصویب (approve)
function approve(address _spender, uint256 _value) public returns (bool success)
تابع approve یکی دیگر از توابع سودمند از نظر قابلیت برنامهنویسی است. با استفاده این تابع، میتوانید تعداد توکنهای قابل برداشت از موجودیتان توسط قرارداد هوشمند را محدود کنید. بدون این تابع، ریسک سوءعملکرد قرارداد (یا حمله به آن) و سرقت وجوه از آن را به همراه خواهید داشت.
یک مدل اشتراکی را در نظر بگیرید. فرض کنید مقدار زیادی رمز ارز Bit24Token دارید و مایل به تعیین پرداختهای هفتگی به یک اپلیکیشن غیر متمرکز استریم هستید. حال مثلا هر روز مشغول خواندن مقالات بیت 24 بوده و نمیخواهید هر هفته به صورت دستی تراکنشی را انجام دهید.
فرض کنید موجودی Bit24Token شما بسیار بیشتر از مقدار مورد نیاز برای پرداخت حق اشتراک است. حال برای جلوگیری از خالی شدن حسابتان توسط برنامه غیر متمرکز مربوطه، میتوانید با تابع approve برای آن محدودیت تعیین کنید. فرض کنید هزینه اشتراک شما یک واحد Bit24Token در هفته باشد. حالا اگر مقدار مجاز را مثلا روی 20 توکن قرار دهید، حق اشتراک شما به مدت 5 ماه به صورت خودکار پرداخت خواهد شد.
در بدترین حالت، اگر باگی پیدا شود یا دیاپ مربوطه درصدد برداشت تمام موجودی شما باشد، فقط 20 توکن خود را از دست خواهید داد. این حالت هم ایدهآل نیست، اما قطعا بهتر از سرقت تمام دارایی شماست.
تابع approve در هنگام فراخوانی، رویداد approval را فعال میکند. مشابه رویداد transfer، این رویداد نیز اطلاعات را روی بلاک چین ثبت میکند.
تابع مستمری (allowance)
function allowance(address _owner, address _spender) public view returns (uint256 remaining)
از تابع allowance میتوان در کنار تابع approve استفاده کرد. در هنگام ارائه مجوز به قراردادی برای مدیریت توکن های مبتنی بر استاندارد ERC20 شبکه اتریوم خود، میتوانید از این تابع برای بررسی مقدار قابل برداشت توسط قرارداد استفاده کنید. مثلا، اگر قرارداد تا کنون 12 واحد از 20 توکن شما را مصرف کرده باشد، فراخوانی تابع allowance باید مقدار 8 را برگرداند.
توابع اختیاری
توابع ذکرشده تا به اینجا همگی الزامی هستند. اما از طرف دیگر، اجباری برای تعیین توابعی مانند name ،symbol و decimal وجود ندارد، اما گنجاندن آنها، قرارداد استاندارد توکن ERC20 شما را زیباتر میکند. این توابع به ترتیب امکان اضافه کردن اسم خوانا برای انسان، نماد (مثلا ETH ،BTC ،BNB و…) و تعداد رقم اعشار برای تقسیم توکن را فراهم میکنند. مثلا، کاربرد تعیین مقدار قابل تقسیم برای توکنهای مورد استفاده بهعنوان ارز، بیشتر از توکنهای نماینده حق مالکیت یک دارایی است.
توکن های استاندارد ERC20 چه کارهایی انجام میدهند؟
با ترکیب تمام توابع بالا، یک قرارداد مبتنی بر استاندارد شبکه توکن ERC20 خواهیم داشت. بنابراین مثلا میتوانیم عرضه کل، موجودی و مقدار وجه ارسالی را بررسی کرده و به دیگر برنامههای غیر متمرکز اجازه مدیریت توکنهایمان را بدهیم.
بخش عمده جذابیت توکن های ERC20 در انعطافپذیری آنهاست. قوانین کنوانسیون محدودکننده توسعه نیست، بنابراین افراد قادر به پیادهسازی ویژگیهای اضافی و تعیین پارامترهای خاص متناسب با نیازهاشان هستند.
استاندارد ERC20 در استیبل کوینها (Stablecoins)
استیبل کوینها (توکنهای گره خورده به ارزهای فیات) عموما از استاندارد توکن ERC20 استفاده میکنند. تراکنش ارسالی به قرارداد ارز BUSD که پیشتر به آن اشاره کردیم و اکثر استیبل کوینهای بزرگ نیز طبق همین فرمت هستند.
برای یک استیبل کوین معمولی دارای پشتوانه ارز فیات، صادرکننده آن ذخایر یورو، دلار یا هر ارز دیگر مربوطه را نگهداری میکند. سپس، این سازمان برای هر واحد از ذخایر خود، یک توکن صادر میکند. این یعنی مثلا در ازای 10,000 دلار ذخیرهشده در خزانه، صادرکننده قادر به تولید 10,000 واحد توکن به قیمت هر واحد 1 دلار است.
از نظر فنی، پیادهسازی این کار در شبکه اتریوم بسیار ساده است. صادرکننده صرفا باید یک قرارداد با 10,000 توکن را راهاندازی کرده و سپس با وعده امکان بازخرید این توکنها با مقدار متناسب و پرداخت بهصورت ارز فیات، آنها را میان کاربران توزیع میکند.
کاربران با این توکنها قادر به انجام کارهای مختلفی از جمله خرید کالاها و خدمات یا استفاده در دیاپها هستند. از سوی دیگر، کاربران میتوانند درخواست تبدیل سریع به ارز فیات را به صادرکننده ارسال کنند. در این حالت، صادرکننده توکنهای برگشتی را سوزانده و مقدار دقیق پول فیات را از ذخایر خود خارج میکند.
همانطور که پیشتر ذکر شد، قرارداد ادارهکننده این سیستم نسبتا ساده است. با این وجود، راهاندازی یک استیبل کوین مبتنی بر استاندارد توکن ERC20 نیازمند کار روی عوامل خارجی مانند لجستیک، رعایت مقررات و دیگر موارد است.
استاندارد ERC20 در توکن های اوراق بهادار (Security Tokens)
توکنهای اوراق بهادار مشابه استیبل کوینها هستند. در سطح قرارداد، هردوی این توکنها کاملا مشابه بوده و به یک روش فعالیت میکنند. تفاوت بین این دو نوع توکن در سطح صادرکننده رخ میدهد. Security Tokenها نماینده اوراق بهاداری مانند سهام، اوراق قرضه یا داراییهای فیزیکی هستند. عموما (البته نه همیشه)، این توکنها نوعی سهم در یک کسب و کار یا کالا را اعطا میکنند.
استاندارد ERC20 در توکن های کاربردی (Utility Token)
شاید بتوان گفت که توکنهای کاربردی رایجترین نوع توکنهای امروزی هستند. برخلاف دو مدل قبل، این توکنها هیچ پشتوانهای ندارند. اگر توکنهای دارای پشتوانه دارایی، مشابه سهام یک شرکت هواپیمایی باشند، در این صورت توکنهای کاربردی شبیه به برنامههای Frequnet-flyer (برنامههای وفاداری) هستند. یعنی در واقع یک عملیات را اجرا میکنند، اما ارزش خارجی ندارند. از توکنهای کاربردی میتوان برای موارد بیشماری مانند ارز داخل بازی، سوخت برنامههای غیر متمرکز، امتیازات وفاداری و بسیاری دیگر استفاده کرد.
آیا توکن های دارای استاندارد ERC20 قابل استخراج هستند؟
رمز ارز اتر قابل استخراج است، اما توکنها خیر. بنابراین برای توکنها بهجای کلمه “Mine” به معنی «استخراج»، از کلمه “Mint” به معنی «چاپ» استفاده میکنیم.
در هنگام راهاندازی یک قرارداد، توسعهدهندگان بر اساس برنامه و نقشه راه خود به توزیع عرضه توکن میپردازند. معمولا این کار از طریق عرضه اولیه سکه (ICO)، عرضه اولیه صرافی (IEO) یا عرضه توکن اوراق بهادار (STO) انجام میشود. ممکن است تا به حال با انواع مدلها برخورد کرده باشید، اما مفهوم همگی بسیار مشابه است. سرمایهگذاران به آدرس قرارداد رمز ارز اتر ارسال کرده و در عوض، توکنهای جدید دریافت میکنند. سپس از پول جمعشده، برای تامین سرمایه توسعههای بیشتر پروژه استفاده میشود. کاربران نیز با توسعه پروژه، انتظار استفاده (به محض دریافت یا پس از مدت مشخص) یا فروش و کسب سود از توکنهای خود را دارند.
توزیع توکن لزوما به صورت خودکار انجام نمیشود. بسیاری از رویدادهای تامین سرمایه جمعی، اجازه پرداخت از طریق طیف وسیعی از ارزهای دیجیتال (مانند بیت کوین، بیت کوین کش، اتریوم، تتر و ترون) را به کاربران میدهند.
مزایا و معایب ارزهای مبتنی بر استاندارد ERC20 اتریوم
توکن های ERC20 با توجه به کارکردشان مزایا و معایب متعددی دارند که در این بخش به آنها میپردازیم.
تعویض پذیری
توکنهای ERC-20 تعویض پذیر هستند؛ یعنی هر واحد قابلیت جایگزینی با دیگری را دارد. مثلا اگر رمز ارز Bi24Token داشته باشید، فرقی نمیکند که کدوم توکن خاص در دست شما باشد. بنابراین، دقیقا همانند پول یا طلا، قادر به ترید و معامله آن با اشخاص دیگر بوده و همچنان همان عملکرد یکسان را از آن خواهید دید.
این امر برای توکنی با هدف تبدیل شدن به نوعی «ارز» مناسب است و نباید هر واحد دارای ویژگی متمایز باشد چون در این صورت، آنها را غیر قابل تعویض (non-fungible) میکند. تعویض ناپذیری تا حدودی باعث افزایش یا کاهش ارزش یک واحد نسبت به دیگران میشود و تعضیف هدف مورد نظر را به دنبال دارد.
انعطاف
همانطور که در بخشهای قبل گفتیم، توکن های مبتنی بر استاندارد ERC20 قابلیت شخصیسازی بالایی دارند و برای کاربردهای مختلفی ساخته میشوند. مثلا، از این توکنها میتوان بهعنوان ارز درون بازی، کالکتیبلهای دیجیتال، برای برنامههای امتیاز وفاداری، یا حتی نماینده حقوق مالکیت و هنرهای زیبا استفاده کرد.
محبوبیت
محبوبیت توکن های ERC20 در صنعت رمز ارزها، دلیل بسیار قانعکنندهای برای استفاده بهعنوان یک نقشه ساخت است. تعداد کثیری از صرافیها، والتها و قراردادهای هوشمند وجود دارد که با توکنهای تازه عرضهشده سازگاری دارند. علاوه بر این، پشتیبانی و سندسازی توسعهدهنده فراوان است.
مقیاسپذیری
اتریوم نیز همانند بسیاری از شبکههای رمز ارزی، از مشکلات روزافزون مصون نیست. این شبکه در حالت فعلی خود مقیاس پذیری خوبی ندارد؛ ارسال یک تراکنش در زمانهای شلوغی، تاخیر زیاد و کارمزدی بالا دارد که بسته به قیمت اتریوم گاهی میتواند از مبلغ رمز ارزی که قصد انتقالش را داریم نیز بیشتر شود! با عرضه یک توکن با استاندارد ERC20 و در صورت تراکم بیش از حد شبکه، قابلیت استفاده این توکن نیز تحت تاثیر قرار خواهد گرفت.
این مشکل مختص اتریوم نیست، بلکه یک سبک سنگین کردن ضروری در سیستمهای توزیعشده و امن است. جامعه این شبکه قصد دارد تا با مهاجرت به اتریوم 2 که بهروزرسانیهایی مانند پلاسما (Plasma) و کسپر (Casper) را پیادهسازی خواهد کرد، به این مشکلات بپردازد.
کلاهبرداریها
با اینکه این مسئله مشکل خود این فناوری نیست، اما راحتی عرضه یک توکن ERC20 یکی از معایب آن محسوب میشود. این یعنی هر کسی با نیت خوب یا بد قادر به ساخت آن است. به همین ترتیب، باید مراقب توکنی که در آن سرمایه گذاری میکنید باشید. امروزه، تعداد زیادی طرح پانزی و هرمی در قالب پروژههای بلاک چینی حاضر شدهاند. همیشه پیش از سرمایه گذاری تحقیقات کامل را شخصا انجام داده و از مشروعیت و اعتبار یک فرصت اطمینان حاصل کنید.
استاندارد توکن ERC20 با ERC115 ،ERC223 و ERC721 چه تفاوتی دارد؟
ERC20 اولین (و تا به امروز محوبترین) استاندارد توکن شبکه اتریوم است، اما تنها استاندارد این شبکه نیست. طی سالها، استانداردهای دیگری نیز با هدف بهبود ERC20 یا دستیابی به مقاصد دیگر، ظهور کردند.
برخی از استانداردهای با محبوبیت کمتر، در حوزه توکن غیر مثلی (NFT) استفاده میشوند. گاهی اوقات بهتر است که هدف شما، به توکنهای منحصربهفرد با مشخصههای متفاوت مجهز باشد. مثلا برای توکنیزه کردن یک اثر هنری یا دارایی درون بازی و امثالهم، یکی از این نوع قراردادها مناسب است.
مثلا استاندارد ERC-721، در دیاپ محبوب کریپتوکیتیز (CryptoKitties) استفاده شده است. چنین قراردادی برای کاربران یک API را فراهم میکند تا به چاپ توکنهای NFT پرداخته و متادیتاها خود (مانند تصاویر، توضیحات و دیگر موارد) را رمزگذاری کند.
استاندارد ERC-1155 را میتوان بهبود هر دوی توکنهای ERC-20 و ERC-721 در نظر گرفت. ERC-1155 دارای استانداری است که از هر دوی توکنهای قابل تعویض و غیرقابل تعویض در یک قرارداد یکسان پشتیبانی میکند.
دیگر گزینهها مانند ERC-223 یا ERC-621 بهبود قابلیت استفاده را هدف قرار دادهاند. ERC-223 برای جلوگیری از انتقال تصادفی توکنها ضمانتهایی را پیادهسازی میکند. ERC-621 نیز برای افزایش و کاهش عرضه توکن، عملیاتهای بیشتر را اضافه میکند.
جمعبندی
استاندارد شبکه توکن ERC20 فضای داراییهای کریپتو را به سلطه خود درآورده است و درک چرایی آن دشوار نیست. هر کسی به راحتی قادر به استقرار یک قرارداد ساده برای کاربردهای متعدد (توکنهای کاربردی، استیبل کوینها و غیره) است. با این وجود، ERC-20 برخی از ویژگیهای دیگر استانداردها را در خود ندارد. باید منتظر ماند و دید که آیا دیگر انواع قراردادها جای آن را خواهند گرفت یا خیر.
تهیه شده در بیت 24