پاسخ به ERC-20 چیست ارتباط مستقیمی با بلاکچین اتریوم و اکوسیستم این شبکه دارد. توکن های بلاکچین اتریوم از همان ابتدا، توسعهدهندگان نرمافزار، کسبوکارها و کارآفرینان بسیاری را به خود جذب کرد و منجر به رشد صنعتی شد که کاربران را قادر به نوشتن قراردادهای هوشمند و راهاندازی برنامههای توزیعشده بر روی این شبکه می کرد. در این میان استاندارد ERC-20 به عنوان یک چارچوب مهم برای ایجاد ارزهای دیجیتال در این بستر حضور داشته و نقشی کلیدی ایفا میکند.
تاریخچه پيدايش توکنهای ERC-20
ویتالیک بوترین (Vitalik Buterin) و فابیان فوگلشتلر (Fabian Vogelsteller) در سال 2015 به دنبال ساختاری نسبتا ساده برای ایجاد توکن های مبتنی بر شبکه اتریوم بودند و استاندارد ERC-20 همان نقطه آغاز پیشبرد این هدف بود.
در گذشته اگر فردی مایل به توسعه یک پروژه مبتنی بر بلاکچین بود، ابتدا مجبور بود یک بلاکچین منحصر به پروژه را توسعه دهد سپس ارز دیجیتال مخصوص آن را بر روی این بلاکچین بگنجاند. وضعیت طوری بود که گویی انسان برای هر بار استفاده از چرخ، آن را از ابتدا اختراع کند! اما به کمک بلاکچین اتریوم و استاندارد ERC-20 انسان دیگر نیازی به اختراع دوباره چرخ یا همان بلاکچین ندارد و در عوض میتواند بنیان پروژه خود را به کمک ابزارهایی که قبلاً مورد استفاده قرار گرفته است؛ بنا کند.
پس از ایجاد یک توکن جدید ERC-20، این توکن به طور خودکار با تمامی سرویسها و نرمافزارهایی که از استاندارد ERC-20 پشتیبانی میکنند (مانند کیف پولهای نرمافزاری ، کیف پولهای سختافزاری ، صرافیها و…) تعامل برقرار میکند.
استاندارد ERC-20 چیست و چگونه كار میكند؟
ویتالیک بوترین (Vitalik Buterin) در سال 2014 بلاکچین اتریوم را در پاسخ به انعطافناپذیری پروتکلهای بیت کوین تأسیس کرد و این پروژه در جایگاه یک پلتفرم منبع باز برای راهاندازی برنامههای غیرمتمرکز (DApps) قرار گرفت. ERC-20 در واقع مجموعه قواعدی است که استانداردهای برنامهنویسی در شبکه اتریوم را تعیین میکند. ERC-20 مخفف (Ethereum Request for Comments) به معنای ناملموس “درخواست اتریوم برای یادداشتها” است. این استاندارد مختص شبکه اتریوم است، اما این چارچوب و استاندارد باعث الهام شبکههای بلاکچینی دیگری مانند Binance Chain’s شده است و بلاکچین بایننس هم شبکه BEP-2 را توسعه داده است.
البته در این میان نباید ERC را با طرحهای پیشنهادی بهبود شبکه اتریوم (EIP) اشتباه گرفت. EIP مانند BIP های بیت کوین، شامل یک سری پروپوزال یا پیشنهادات است که به بهبود کلی پروتکل و شبکه میانجامد. ERC ها با هدف برقراری ارتباط آسانتر بین برنامهها و قراردادها ایجاد شدهاند. البته باید اشاره داشت که استاندارد ERC-20 در به صورت یک EIP (به طور خاص EIP-20) توسعه یافت. این اتفاق دو سال پس از پیشنهاد اصلی به دلیل استفاده گسترده از آن رخ داد. بااینحال، حتی پس از این همه سال، نام “ERC-20” روی آن باقیمانده است.
یک بازبینی سریع در توکن های Ethereum
برخلاف اتر ETH (ارز بومی شبکه اتریوم)، توکنهای ERC-20 در داخل حسابها نگهداری نمیشوند. توكنها داخل قراردادی معین وجود دارند که این قرارداد به شکل یک پایگاه داده مستقل عمل میکند. در داخل این قراردادها قوانین مربوط به توكنها مشخص شده است و اطلاعاتی نظیر نام، نماد، تقسیمپذیری و.. مربوط به توکن به صورت یک لیست درون این قرارداد نگهداری می شود و مانده دارایی حساب کاربران، از طریق آدرس اتریومیشان به آنها نشان داده می شود.
برای جابجایی توكنها، کاربران باید تراکنشی را به قرارداد بفرستند و از آن بخواهند که بخشی از موجودی خود را به جایی دیگر اختصاص دهد. بهعنوانمثال ، اگر آلیس بخواهد 5000 توکن Nobitex Academy را به باب بفرستد، او باید توابعی از پیش تعیین شده داخل قرارداد هوشمند توکن Nobitex Academy را فراخوانی کند تا این کار صورت بگیرد.
فراخوانی او در یک تراکنش معمول اتریوم رخ میدهد البته این تراکنش میزان 0 اتر را به قرارداد توکن پرداخت میکند. در این فراخوانی و تراکنش بخشی اضافی وجود دارد که مشخصات حاوی دستوری است که آلیس میخواهد انجام دهد؛ که در این مثال، انتقال توكنها به باب مدنظر است.
اگرچه آلیس قرار نیست برای باب اتر واریز کند اما کارمزد این تراکنش باید با اتر پرداخت شود تا بهطورکلی این تراکنش در بلوک ثبت شود. اگر در حساب آلیس هیچ میزان اتری نباشد، لازم است قبل از انتقال توكنها به باب، مقداری اتر (Eth) تهیه کند. البته کاربر متوجه فعل و انفعالات پشت پرده نمی شود و تمامی این مراحل تنها با ایجاد یک تراکنش رخ می دهد.
توكنهای ERC-20 چگونه ایجاد میشوند؟
برای انطباقپذیری با استاندارد ERC-20 ، قرارداد هوشمند باید حتماً شامل شش تابع اجباری زیر باشد:
- totalSupply:میزان کل توكنها
- balanceOf: موجودی
- transfer:انتقال
- transferFrom:انتقال از
- approve:موافقت
- allowance: بازپرداخت یا خرجی
علاوه بر موارد اشارهشده، میتوان توابعی اختیاری مانند نام، نماد و اعشار نیز برای تراکنش مشخص شود. نام این توابع تا حد زیادی گویای کارایی آنهاست اما در ادامه میتوانید بیشتر درباره آنها بدانید.
زبان برنامهنویسی استفادهشده برای ایجاد قرارداد هوشمند در شبکه اتریوم، زبان Solidity است و کدهای زیر به این زبان نوشتهشده است.
totalSupply یا میزان کل توکنها:
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)
انتقال فرایند اختصاص توکن به کاربر است. در اینجا کاربر، آدرس مقصد و میزان توکنها را مشخص میکند.
زمانی که این تابع فراخوانده میشود، چیزی به نام رویداد یا Event (در اینجا رویداد انتقال) فعال شده که اساساً به بلاکچین میگوید ارجاعی یا Reference ی از این انتقال داشته باشد.
TransferFrom یا انتقال از:
function transferFrom(address _from, address _to, uint256 _value) public returns (bool success)
تابع transferFrom یک گزینه مفید جایگزین برای تابع انتقال یا transfer است که امکان برنامهریزی بیشتر در برنامههای غیر متمرکز را فراهم میكند. مانند تابع transfer، این تابع هم برای جابجایی توکنها استفاده میشود، اما این توکنها لزوماً متعلق به شخصی نیست که قرارداد را فراخوانی کند.
به زبان ساده در این تابع شما به شخص یا یک قرارداد هوشمند اجازه میدهید تا از حساب شما پول برداشت کند. از جمله موارد استفاده احتمالی این تابع پرداخت هزینههای اشتراک است. شما میتوانید به برنامه اجازه بدهید تا به صورت خودکار این هزینه را در موعد مقرر از حساب شما برداشت کند.
این تابع هم دقیقا رویداد یا Event انتقال را فعال میکند با این تفاوت که همه چیز در آن به صورت خودکار انجام میگیرد.
Approve یا موافقت
function approve(address _spender, uint256 _value) public returns (bool success)
موافقت یا تأیید یک تابع مفید دیگر ازنقطهنظر برنامهریزی است. با استفاده از این تابع میتوانید تعداد توکنهایی را که یک قرارداد هوشمند میتواند از موجودی شما برداشت کند را محدود کنید. بدون این تابع امکان خطا و سو استفادههای احتمالی در قرارداد هوشمند و همینطور سرقت دارایی بسیار زیاد میشود.
به همان مثال پرداخت حق اشتراک برگردیم. فرض کنید که شما مقدار زیادی Binance Academy توکن دارید و میخواهید پرداختهای دورهای هفتگی خود را به کمک یک streaming DApp راهاندازی کنید. اما از طرفی شما فردی بسیار مشغول هستید و یا حوصله ندارید که هر هفته یک تراکنش دستی ایجاد کنید.
با توجه به اینکه تعداد توكنهای موجود در حساب شما، بسیار بیشتر از میزانی است که برای پرداخت حق اشتراک لازم است، باید از برداشت هر میزان توکن بیشتر، جلوگیری کنید. برای اینکه برنامه غیرمتمرکز DApp تمام توكنهای شما را برداشت نکند شما میتوانید به کمک تابع approve برای برنامه حد مصرف تعیین کنید. اگر هزینه اشتراک شما هر هفته شما یک توکن باشد و مقدار تأییدشده را بیست علامتگذاری کنید، در واقع حق اشتراکی به مدت 5 ماه را پرداخت کردهاید.
در بدترین حالت ، اگر DApp بخواهد همه وجوه شما را برداشت کند و یا اشکالی در سیستم پیدا شود، فقط به بیست عدد از توكنهای شما دسترسی خواهد داشت و نه بیشتر. هرچند که از دست دادن همین 20 توکن میتواند ناخوشایند و ناراحتکننده باشد ولی فراموش نکنید که خیلی بهتر از این است که کل داراییتان را از دست بدهید.
هنگام فراخوانی این تابع رویداد تأیید یا موافقت فعال میشود. مانند رویداد انتقال، این تابع هم دادهها را در بلاکچین ثبت میکند.
Allowance یا بازپرداخت
function allowance(address _owner, address _spender) public view returns (uint256 remaining)
این تابع میتواند به همراه تابع تأیید (approve) مورد استفاده قرار بگیرد. فرض کنیم که شما اجازه مدیریت توكنها را به یک قرارداد هوشمند دادهاید و حالا میخواهید بخشی از وجه را برداشت کنید.
بهعنوانمثال، اگر سازوکار حق اشتراک به صورت خودکار 12 توکن از 20 توکنی که شما مجوز آن را صادر کردهاید، دادهاید برداشت کرده باشد با وجود تابع تأیید شما میتوانید با فراخوانی تابع allowance، میزان 8 توکن باقیمانده را به حساب خود بازگردانید.
توابع اختیاری
توابع ای که پیشتر معرفی شدند از جمله توابع اجباری هستند. از طرف دیگر، نام، نماد و اعشار نیازی به درج شدن ندارند، اما از طرفی میتوانند قرارداد ERC-20 شما را دقیقتر و حتی زیباتر کنند! به ترتیب ، این توابع این امکان را به شما میدهند که یک نام خوانا یا یک نماد مانند ETH ، BTC ، BNB و از این نوع امکانات را به قرارداد هوشمند خود اضافه کنید.
توکنهای ERC-20 چه کاری میتوانند انجام دهند؟
با کنار هم قراردادن تمام توابع فوق یک قرارداد هوشمند ERC-20 به وجود خواهد آمد. در این قرارداد میتوان کل عرضه و موجودی را بررسی کرد و وجوه را منتقل کرد و به سایر برنامههای غیرمتمرکز مجوز داد تا توکنهای هر حساب را مدیریت کنند.
بخش عمدهای از جذابیت توکنهای ERC-20 انعطافپذیری آنهاست. موارد ذکرشده توسعه را محدود نمیکند، بنابراین طرفین میتوانند از امکانات زیادی برخوردار بوده و پارامترهای خاصی را متناسب با نیازهای خود تنظیم کنند. از نمونه ارزهای دیجیتال با استاندارد ERC-20 میتوان به شیبا، تتر، یونی سواپ، چین لینک، دای، آوه، اکسی، مانا و سندباکس اشاره کرد.
ارز دیجیتال با قیمت ثابت یا Stablecoin
Stablecoins (توکنهای مرتبط با ارزهای فیات) اغلب از استاندارد رمز ERC-20 استفاده میکنند. ایجاد ارز با ثبات با استاندارد ERC-20 ساده است. سازنده مقداری پول فیات مانند دلار یا یورو در اختیار داشته و به ازای هر واحد پول فیات امکان صدور توکن وجود دارد. این به این معناست که اگر 10000 یورو در صندوق صادرکننده این ارز وجود داشته باشد بنابراین 10000 توکن به قیمت 1 یورو برای هر واحد هم میتوان در اختیار داشت.
از نظر فنی، اجرای چنین چیزی در شبکه اتریوم بسیار آسان است. یک صادرکننده به سادگی قراردادی هوشمند را با 10000 توکن ایجاد میکند. سپس متعهد میشود که کاربران بعداً خواهند توانست این توکنهای توزیعشده را به قیمت برابر پول فیات توکن به صادرکننده بفروشند.
کاربران میتوانند کارهای مختلفی را با توکنهای خود انجام دهند. آنها میتوانند کالاها و خدمات را خریداری کنند یا از آنها در برنامههای غیرمتمرکز یا DApps استفاده کنند. همچنین، آنها میتوانند درخواست کنند تا صادرکننده فوراً توکن آنها را تبدیل به پول فیات کند. در این حالت، صادرکننده توکنهای برگشتی را میسوزاند و آنها را غیرقابل استفاده کرده و مقدار صحیح فیات را از ذخایر خود خارج کرده و به کاربر تحویل میدهد.
همانطور که گفته شد ، قرارداد حاکم بر این سیستم ، نسبتاً ساده است. بااینحال ، راهاندازی یک Stablecoin نیاز به کار زیادی در مورد عوامل خارجی مانند تدارکات ، انطباق با مقررات و غیره دارد.
توکنهای سهامی یا Security tokens
توکنهای سهامی مشابه ارز دیجیتال با ثابت (Stablecoins) هستند. در بخش قرارداد این دو نوع میتوانند کاملاً یکسان باشند. در واقع تفاوت سهام و ارز دیجیتال ارز ثابت در بخش صادرکننده رخ میدهد. توکنهای سهامی نماینده اوراق بهادار مانند سهام ، اوراق قرضه یا داراییهای فیزیکی است. غالباً (هرچند که همیشه اینگونه نیست) ، آنها نوعی سهام در یک کسبوکار یا کالا را به دارنده اعطا میکنند.
توکنهای کاربردی
توکنهای کاربردی شاید متداولترین توکنهایی باشند که امروزه مورد استفاده قرار میگیرد. برخلاف توکنهای پیشین، توکنهای کاربردی هیچ پشتوانهای ندارند. اگر توکنهای با پشتوانه را مانند سهام یک شرکت هواپیمایی در نظر بگیریم، پس توکنهای کاربردی میتوانند برنامههای وفاداریای باشند که شرکتهای هواپیمایی به مسافران خود ارائه میکنند. بهعنوانمثال در ازای هر هزار کیلومتر پرواز به هر مسافر ده کیلومتر پرواز رایگان تعلق میگیرد. چنین کوپنی میتواند شما را به یک سفر رایگان دعوت کند اما هیچ ارزش خارجیای ندارد و نمیتوانید آن را بفروشید یا نگهدارید و از آن سود به دست آورید. توکنهای کاربردی نیز به همین ترتیب کاربرد داشته اما هیچ ارزش خارجی ندارند. توکنهای کاربردی میتوانند در فضای بسیار گستردهای مورد استفاده قرار گیرند بهعنوانمثال ارز درون یک بازی، سوخت برنامههای غیرمتمرکز، امتیاز وفاداری و موارد مانند موارد اشاره شده از جمله کاربردهای این توكنها هستند.
آیا میتوان توکنهای ERC-20 را استخراج کرد؟
شما میتوانید اتریوم (ETH) را استخراجکنید، اما توكنها قابل استخراج نیستند. زمانی که توکنهای جدید ضرب یا ساختهشده از طرف تیم آن توکن اعلام میشود و زمانی که قراردادی راهاندازی میشود، توسعهدهندگان عرضه توکن را طبق برنامه و نقشه راه خود توزیع میکنند.
بهطورمعمول توزیع سکه جدید از طریق عرضه اولیه سکه (ICO) ، عرضه اولیه صرافی (IEO) یا عرضه اولیه سهام (STO) انجام میشود. اگرچه نام اینها متفاوت است اما عملاً مفاهیم کاملاً یکسانی دارند. سرمایهگذاران اتر را به آدرس قرارداد میفرستند و در عوض، توکنهای جدیدی دریافت میکنند. پول جمع شده برای تأمین بودجه و توسعه بیشتر پروژه استفاده میشود. کاربران انتظار دارند که با توسعه پروژه بتوانند از توکنهای خود (بلافاصله یا در تاریخ دیگر) استفاده کنند یا برای سودآوری مجدداً آنها را به فروش برسانند.
توزیع توکن نیازی به فرایند خودکار سازی ندارد. بسیاری از رویدادهای سرمایهگذاری، به کاربران این امکان را میدهند که با طیف وسیعی از ارزهای دیجیتال مانند BNB ، BTC ، ETH و USDT در این رویدادها شرکت کنند.
مزایا و معایب توکنهای ERC-20
مزایای توکنهای ERC-20
قابلیت تعویضپذیری
توکنهای ERC-20 قابلانعطاف هستند به این معنا که فرقی ندارد شما صاحب کدام واحد یک توکن ERC-20 هستید. همیشه میتوانید توکن خود را با شخص دیگری مبادلهکنید و هیچ فرقی میان توکنهای در دست شما و دیگران وجود ندارد.
اگر توکن شما نوعی ارز باشد، این موضوع ملموستر میشود. چرا که توكنها در نقش ارز یک جنس هستند و هیچ برتری یا ضعفی به نوع مشابه خود ندارند بنابراین بههیچعنوان از یکدیگر قابلتشخیص نیستند و تفاوتی میان آنها وجود ندارد.
انعطافپذیری
همانطور که در بخش قبلی بررسی کردیم ، توکنهای ERC-20 بسیار قابل تنظیم یا Customizable هستند و توانایی تناسب با کاربردهای مختلف را دارند. بهعنوانمثال، میتوانند به عنوان ارز درون یک بازی ویدئویی، برنامههای امتیاز وفاداری مشتریها، به عنوان مجموعههای دیجیتالی یا حتی برای نمایش هنرهای زیبا و حقوق مالکیت استفاده شوند.
محبوبیت
محبوبیت ERC-20 در صنعت ارزهای دیجیتال دلیل بسیار قانعکنندهای که از آن همیشه به عنوان یک مهره اصلی استفاده شود. انبوهی از صرافیها، کیف پولها و قراردادها وجود دارند که خود را با توکنهای تازهوارد وفق دادهاند همینطور توسعهدهندگان همواره ERC-20 را پشتیبانی کرده و مدارک و مستندات بسیاری درباره این استاندارد در دسترس است.
معایب نشانههای ERC-20
مقیاسپذیری
همانند بسیاری از شبکههای ارز دیجیتال، اتریوم هم از مشکل مقیاسپذیری رنج میبرد. در حال حاضر تلاش برای ارسال یک تراکنش در زمان اوج، منجر به کارمزد و تأخیر زیاد میشود. اگر یک توکن ERC-20 راهاندازی کنید و شبکه شلوغ باشد، توکن شما نیز تحت تأثیر این قرار خواهد گرفت.
همانطور که اشاره شد این یک مشکل اختصاصی برای اتریوم نیست. بلکه یک مسئله اساسی در سیستمهای توزیعشده و ایمن است. ادارهکنندگان شبکه اتریوم امیدوارند با راهاندازی Ethereum 2.0 و انجام بهروزرسانیهایی مانند Ethereum Plasma و Ethereum Casper از شر مشکل مقیاسپذیری خلاص شوند.
کلاهبرداری
سهولت راهاندازی توکن میتواند از برخی جهات یک نقطهضعف به شمار بیاید. ایجاد یک توکن ساده ERC-20 اصلاً دشوار و چالشبرانگیز تقریباً هر کسی میتواند این کار را انجام دهد.
همینطور باید مراقب آنچه در آن سرمایهگذاری میکنید باشید. تعداد زیادی از طرحهای هرمی و پانزی خود را به عنوان پروژههای بلاکچینی جا میزنند. حتماً قبل از سرمایهگذاری تحقیق کاملی پیرامون آنچه قرار است رویش سرمایهگذاری کنید انجام دهید.
فرق استانداردهای مختلف ERC چیست؟
ERC-20 اولین استاندارد و تاکنون محبوبترین توکن اتریوم بوده است، اما این تنها استاندارد موجود نیست. در طول سالها، استانداردهای بسیاری ایجادشدهاند که ممکن است اصلاحاتی را برای استاندارد ERC-20 پیشنهاد دهند یا اساساً برای دستیابی به اهداف دیگری خلقشدهاند.
برخی از استانداردهای کمتر رایج، استانداردهایی است که در توکنهای تعویض ناپذیر (NFT) استفاده میشوند. گاهی اوقات، لازم است که توکن منحصربهفرد، با ویژگیهای خاص باشد. اگر بخواهید یک قطعه هنری منحصربهفرد یا یک دارایی درون بازی را ثبت یا اصطلاحاً توکنایز (Tokenize) کنید، ممکن است یکی از قراردادهای زیر جذابیت و کاربرد بیشتری برای شما داشته باشد.
بهعنوانمثال از استاندارد ERC-721 برای برنامه غیرمتمرکز محبوب CryptoKitties DApp استفاده شد. چنین قراردادی یک API را برای کاربران فراهم میکند تا توکنهای تعویض ناپذیر خود را ضرب کرده و فراداده یا متادیتا (تصاویر ، توضیحات و غیره) آن را رمزگذاری کنند.
یا استاندارد ERC-1155 میتواند به عنوان یک نسخه بهبودیافته ERC-721 و ERC-20 محسوب شود. این یک استاندارد امکان داشتن توکنهای تعویضپذیر و توکنهای تعویض ناپذیر را در یک قرارداد پشتیبانی میکند.
استاندارهای دیگر مانند ERC-223 یا ERC-621 برای بهبود کلی استفاده و کاربردها توسعهیافتهاند. مثلاً ERC-223 از انتقال تصادفی توكنها جلوگیری میکند و استاندارد ERC-621 یک تابع اضافی برای افزایش یا کاهش عرضه کلی توکن است.
سخن پایانی
استاندارد ERC-20 سالهاست که بر فضای رمزارزها به خصوص در حوزه قرارداد های هوشمند مسلط است، یافتن دلیل این امر هم آنچنان چالشبرانگیز نیست. هرکسی میتواند یک قرارداد ساده متناسب با طیف گستردهای از کاربردهای ایجاد کند. باید در نظر داشت که استاندارد ERC-20 فاقد برخی از ویژگیها است و استانداردهای دیگر این کمبودها را جبران و پشتیبانی میکنند. بااینحال شبکه اتریوم سال هاست که با مشکلات مقیاس پذیری و افزایش ناگهانی کارمزدها دست و پنجه نرم می کند و در این میان در طول این سال ها رقبایی همچون پولکادات، سولانا و کاردانو هم پا به عرصه رقابت گذاشته اند و در بسیاری از جنبه ها عملکرد بهتری از شبکه اتریوم و استاندارد ERC-20 از خود نشان داده اند. باید دید که آیا استاندارهای دیگری جایگزین استاندارد ERC-20 میشوند یا خیر و همینطور آیا اتریوم می تواند کماکان محبوب ترین شبکه برای نوشتن قراردادهای هوشمند در اکوسیستم رمزارزها باشد یا خیر.