استاندارد 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-20 است. این برنامه به صورت زیر میتواند از تابع `supportsInterface` استفاده کند:
شناسه رابط استاندارد ERC-20
bytes4 constant erc20InterfaceID = 0x36372b07;
نمونهسازی از قرارداد هوشمند مورد نظر
IERC165 token = IERC165(tokenAddress);
بررسی پشتیبانی قرارداد هوشمند از استاندارد ERC-20
if (token.supportsInterface(erc20InterfaceID)) {
قرارداد هوشمند از استاندارد ERC-20 پشتیبانی میکند و میتوان با آن تعامل داشت
} else {
#BBD0E0 »