Solidity

如何檢查智能合約是否支持介面?

  • January 24, 2022

我有實現IERC2981介面的令牌合約,並且我已經supportsInterface像這樣覆蓋了函式。

function supportsInterface(bytes4 interfaceId) public view virtual override(ERC721,
       IERC165) returns (bool) {
   return (interfaceId == type(IERC2981).interfaceId || super.supportsInterface(interfaceId));
}

我將如何檢查或呼叫supportsInterface另一個合約中的函式?假設從我的銷售契約中我想檢查令牌契約是否支持IERC2981如果它確實呼叫了該royaltyInfo函式。

如果您有address目標契約的 並且想要強制執行IERC2981受支持,您將執行以下操作:

require(
 IEIP165(target).supportsInterface(type(IERC2981).interfaceId),
 "Contract does not support IERC2981" interface.
);

IEIP165介面可以在OpenZepplin 合約中找到。

引用自:https://ethereum.stackexchange.com/questions/119794