Written by Pablo Gómez
Founder & CEO at Metlabs · Reviewed on October 11, 2026
ERC-165 solves capability discovery between contracts with a single function, supportsInterface(bytes4), which returns whether the contract implements a given interface. The interface ID is computed as the XOR of the function selectors (the first 4 bytes of the keccak256 of each signature) of that interface. The selector of supportsInterface is 0x01ffc9a7, which is also the interface ID of ERC-165 itself. A compliant contract must return true for 0x01ffc9a7, false for 0xffffffff and resolve the call in under 30,000 gas, which makes it safe to query via STATICCALL.
Without this mechanism, a contract cannot reliably know whether another implements an interface before interacting. That is why it is an explicit dependency of widely used standards such as ERC-721 (NFTs) and ERC-1155 (multi-token), which use it to advertise support, and of the regulated-asset standards ERC-1400 and ERC-3643, which rely on it for compliance and onboarding flows. Unlike the security-token families, ERC-165 is in Final status and is one of the foundational standards of the ecosystem.
The EIP authors include Christian Reitwiessner, Nick Johnson, Fabian Vogelsteller, Jordi Baylina, Konrad Feldmeier and William Entriken. The canonical implementation is OpenZeppelin Contracts (ERC165 / IERC165), used across almost the entire ecosystem. Wallets and explorers rely on supportsInterface to tell, for example, whether a contract is an NFT collection (721) or a multi-token contract (1155).
Also known as
- ERC165
- Standard Interface Detection





