اگر به دنبال نوشتن قرارداد هوشمند در بستر بلاک چین اتریوم هستید، حتما واژه ERC۲۰ به گوشتان خورده است. در این مقاله میخواهیم توضیح دهیم که این استاندارد چیست و استفاده از آن در نوشتن قرارداد هوشمند چه مزایا و معایبی دارد.
بخش ERC در ERC۲۰ مخفف عبارت Ethereum Request for Comments است. RFC خلاصه شده عبارت Request For Comment بوده و اسناد RFC مجموعه اي از يادداشت هاي تکنيکي و سازمان يافته ميباشند که پيرامون اينترنت و مباحث جنبي آن رشد پيدا کردهاند. اين اسناد که از سال ۱۹۶۹ ميلادي تا به امروز در حال تنظيم و توسعه هستند، حاوي بسياري از مفاهيم شبکه هاي کامپوتري مثل قراردادها (پروتکل ها)، رويه ها، برنامه ها و مفاهيم انتزاعي ميباشند. مرکز رسمی برای تبيين و نظارت بر اين قراردادها سازمان IETF ميباشد.
به زبان سادهتر ERC، پروتکل رسمی برای بهبود بلاک چین اتریوم است. عدد ۲۰ هم نشان دهنده یک شناسه خاص برای پروتکل ERC۲۰ میباشد. این پروتکل در سال های اخیر نقش اساسی در صنعت بلاک چین و ارزهای دیجیتالی داشته است و کمک کرده تا هزاران برنامه غیر متمرکز (DApps) در یک پلتفرم به صورت استاندارد توسعه یابند.
استاندارد ERC۲۰ به توسعه دهندگان و شرکت ها اجازه میدهد تا پروژه های خود را توکنیزه کرده و از طریق ICO جذب سرمایه کنند. این استاندارد مجموعهای از توابع پایهای است که توسعه دهندگان برنامه در بستر بلاک چین اتریوم باید آنها را پیادهسازی کنند تا توکن آنها یک توکن ERC۲۰ باشد. هرچند که استفاده از این استاندارد اجباری نیست، ولی اکثر توسعه دهندگان آن را رعایت میکنند تا مطمئن باشند که توکن آنها میتواند با انواع کیف پول ها، صرافی ها و قراردادهای هوشمند بدون مشکل کار کند.
شرایط استاندارد ERC۲۰
برای اینکه توکن شما یک توکن ERC۲۰ باشد و بتواند به راحتی با سایر قراردادهای هوشمند ارتباط بگیرد، ۶ تابع خاص باید در قرارداد هوشمند توکن شما پیاده سازی شده باشد. این توابع و ورودی و خروجی آنها عبارتند از:
// ----------------------------------------------------------------------------
// ERC Token Standard #۲۰ Interface
// https://github.com/ethereum/EIPs/blob/master/EIPS/eip-۲۰-token-standard.md
// ----------------------------------------------------------------------------
contract ERC۲۰Interface {
function totalSupply() public constant returns (uint);
function balanceOf(address tokenOwner) public constant returns (uint balance);
function allowance(address tokenOwner, address spender) public constant returns (uint remaining);
function transfer(address to, uint tokens) public returns (bool success);
function approve(address spender, uint tokens) public returns (bool success);
function transferFrom(address from, address to, uint tokens) public returns (bool success);
event Transfer(address indexed from, address indexed to, uint tokens);
event Approval(address indexed tokenOwner, address indexed spender, uint tokens);
}
دو مورد آخر رویداد هستند و برای نوشتن روی لاگ بلاک چین استفاده میشوند.
با پیادهسازی این توابع، توکن های ERC۲۰ باید بتوانند ۴ فعالیت زیر را انجام دهند:
- ارائه تعداد کل توکن های عرضه شده
- ارائه موجودی حساب کاربری
- انتقال توکن از یک فرد به فرد دیگر
- موافقت با استفاده از توکن به عنوان دارایی پولی
تفاوت توکنهای ERC۲۰ و کوین های با بلاک چین مستقل
توکن ها در بستر بلاک چین اتریوم، داراییهایی هستند که ارزش دارند. آنها همانند بیت کوین، [ایت کوین و اتریوم ارسال و دریافت میشوند. تفاوت این توکن ها با ارزهای دیجیتالی که مانند بیت کوین بلاک چین جداگانه دارند، این است که این توکن ها از آدرس های اتریوم استفاده میکنند و تراکنش های خود را روی بلاک چین اتریوم میفرستند؛ درحالی که کوینی مثل بیت کوین، بلاک چین مخصوص خودش را دارد و تراکنش های آن روی بلاک چین بیت کوین ثبت میشوند.
مزایای توکنهای ERC۲۰
پیش از اینکه این استاندارد به وجود بیاید، برنامه نویسها از اسامی متفاوتی برای نوشتن کد خود استفاده میکردند. برای مثال یکی از اسم تابع totalAmount برای ارائه تعداد کل توکنهای عرضه شده استفاده میکرد و دیگری از totalNumber. به دنبال آن کیف پولها و صرافیها برای ارتباط گرفتن با هر توکن مجبور بودند کد هر توکن را بخوانند و برای ارتباط با آن توکن، تغییرات لازم را در پلتفرم خود اعمال کنند. بنابراین استفاده از یک استاندارد مشخص مزایای زیر را دارد:
- یکریختی توکنها
- سادگی لیست شدن در اکسچنج ها برای ترید
- سادگی برای ارتباط با سایر قراردادهای هوشمند
- سادگی برای تعامل با کیف پول های مختلف
معایب ERC۲۰
مسائلی وجود دارد که استاندارد ERC۲۰ به آنها نپرداخته است. در این استاندارد گیرنده از دریافت توکن مطلع نمیشود و این امر میتواند منجر به از دست رفتن سرمایه کاربر شود. برای مثال اگر شما توکنهای خود را به آدرس قرارداد هوشمند یک توکن ERC۲۰ دیگر ارسال کنید، توکن های شما در آن آدرس گیر میافتد؛ درحالی که چنین تراکنش هایی باید برگشت بخورند. تا آخر سال ۲۰۱۷ حدودا ۳ میلیون دلار به این دلیل از دست رفته است.
برای حل این مشکل جامعه اتریوم اکنون استاندارد جدیدی به نام ERC-۲۲۳ معرفی کرده است. این استاندارد اجازه نمیدهد که توکن به آدرسی که از دریافت آن توکن پشتیبانی نمیکند، ارسال شوند.
مشکل نرم افزاری batchOverflow مشکل دیگری است که این استاندارد محدودیتی برای آن در نظر نگرفته است. وجود این مشکل در یک توکن میتواند منجر به خرج کردن مبلغی بیش از موجودی، از یک آدرس شود. در ماه آوریل سال ۲۰۱۸ به دلیل این مشکل نرم افزاری، تعدادی از صرافیها امکان برداشت و واریز تعدادی از توکنهای ERC۲۰ را موقتا بستند. این مشکل، همان مشکل کلاسیک سرریزی نوع دادهای integer است که هکرها از طریق آن میتوانند مقداری زیادی توکن بدست آورند.
منبع: