
استاندارد ERC-165
استاندارد ERC-165 یک رابط برای تشخیص پشتیبانی توکنهای هوشمند از یک مجموعه خاص از توابع است. این استاندارد به عنوان یک طرح تشخیصی برای قراردادهای هوشمند در شبکه اتریوم (Ethereum) طراحی شده است. ERC-165 به این منظور طراحی شده است که برنامههای کاربردی و سایر قراردادها بتوانند به صورت کارآمد و ایمن تشخیص دهند که یک قرارداد هوشمند خاص از استانداردهای معینی پشتیبانی میکند یا خیر.
در ERC-165، تابع اصلی به نام `supportsInterface` وجود دارد. این تابع به صورت زیر تعریف میشود:
function supportsInterface(bytes4 interfaceID) external view returns (bool);این تابع یک شناسه رابط (interfaceID) به عنوان ورودی دریافت میکند و بررسی میکند که آیا قرارداد هوشمند پشتیبانی از رابط مورد نظر را اعلام کرده است یا خیر. در صورت پشتیبانی، تابع مقدار “true” را برمیگرداند و در غیر این صورت مقدار “false” را برمیگرداند.
کاربرد اصلی این استاندارد در توسعه قراردادهای هوشمند و توکنهایی است که با استانداردهای مختلف مانند ERC-20، ERC-721، ERC-1155 و غیره هماهنگی دارند. با استفاده از ERC-165، سایر قراردادها و برنامههای کاربردی میتوانند به طور خودکار و ایمن تشخیص دهند که یک قرارداد هوشمند از چه توابع و استانداردهایی پشتیبانی میکند و بنابراین تعاملات آنها را به درستی انجام دهند.
پیشنهاد ویژه: معرفی دوره برنامه نویسی بلاکچین با تدریس مهندس مریم گوهرزاد
جنبههای مهم استاندارد ERC-165
- محاسبه شناسه رابط (interfaceID): برای محاسبه شناسه رابط از توابعی که قرارداد هوشمند از آنها پشتیبانی میکند، به این صورت عمل میکنیم: ابتدا توابع را با استفاده از الگوریتم Keccak-256 (SHA-3) هش میکنیم و سپس چهار بایت ابتدایی هر هش را به دست میآوریم. در نهایت، با اعمال یک XOR بر روی این چهار بایتها، شناسه رابط به دست میآید.
- ثبت پشتیبانی از استانداردها: به منظور اعلام پشتیبانی قرارداد هوشمند از استانداردهای مختلف، باید شناسههای رابط مربوط به هر استاندارد را در قرارداد ثبت کنیم. این کار باعث میشود که تابع `supportsInterface` بتواند به درستی عمل کند و پشتیبانی از استانداردهای مختلف را تشخیص دهد.
- اجتناب از تداخل شناسههای رابط: برای اطمینان از عدم تداخل بین شناسههای رابط مختلف، استاندارد ERC-165 توصیه میکند که از توابعی با نامهای متفاوت و تعداد پارامترهای متفاوت استفاده کنید. این کار به کاهش احتمال تداخل بین شناسههای رابط کمک میکند.
- استفاده از ERC-165 در برنامههای کاربردی: برای اینکه برنامههای کاربردی و سایر قراردادهای هوشمند بتوانند از استاندارد ERC-165 بهرهبرداری کنند، ابتدا باید یک نمونه از قرارداد هوشمند مورد نظر را بسازند و سپس با استفاده از تابع `supportsInterface`، بررسی کنند که آیا قرارداد هوشمند از استانداردهای مورد نیاز آنها پشتیبانی میکند یا خیر. این کار به اطمینان از سازگاری قراردادها و تعاملات درست بین آنها کمک میکند.
برای مثال، فرض کنید برنامهای کاربردی به دنبال تعامل با توکنهای استاندارد ERC-20 است. این برنامه به صورت زیر میتواند از تابع `supportsInterface` استفاده کند:
javascript
شناسه رابط استاندارد ERC-20
bytes4 constant erc20InterfaceID = 0x36372b07;نمونهسازی از قرارداد هوشمند مورد نظر
IERC165 token = IERC165(tokenAddress);بررسی پشتیبانی قرارداد هوشمند از استاندارد ERC-20
if (token.supportsInterface(erc20InterfaceID)) {قرارداد هوشمند از استاندارد ERC-20 پشتیبانی میکند و میتوان با آن تعامل داشت
} else {#BBD0E0 »

مریم گوهرزاد
مدرس و بنیانگذار هلدینگ آرتا رسانه. برنامه نویس و محقق حوزه بلاکچین




