궁금한 주제를 찾아보세요

비트코인, 스테이블코인, 온체인 데이터처럼 주제로 검색하세요.

다시 읽을 이야기

저장한 글은 이 브라우저에만 보관됩니다.

해설블록체인 기술

ERC-165 supportsInterface가 보장하는 것과 보장하지 않는 것

Interface ID XOR 계산과 30,000 gas 제한, ERC-165 탐지 절차를 설명하고 true 응답이 실제 함수 의미를 보장하지 않는 경계를 짚습니다.

난이도 중급주제 카테고리와 개념 밀도 기준
퍼즐 표지로 인터페이스 지원 여부를 묻는 문과 실제 내부 동작을 분리한 ERC-165 개념도
주제의 이해를 돕기 위한 개념 일러스트
먼저 읽는 핵심

Interface ID는 함수 selector들의 XOR이며 상속 ID 결합을 정확히 계산해야 합니다.
ERC-165 자체와 invalid ID를 먼저 검사해 오탐을 줄입니다.
True 응답은 capability 후보이며 실제 동작·보안은 별도 호출로 검증합니다.

ERC-165는 계약이 특정 인터페이스를 구현한다고 스스로 밝히는 supportsInterface(bytes4) 조회 규약입니다. 인터페이스 ID는 해당 인터페이스에 속한 함수 선택자들을 XOR한 bytes4 값이며, supportsInterface 호출은 30,000 가스 안에서 응답해야 합니다. 탐지하는 쪽은 먼저 ERC-165 ID 0x01ffc9a7에 true, 무효 ID 0xffffffff에 false를 돌려주는지 확인한 뒤 목표 ID를 묻습니다. 하지만 true는 계약의 자기 선언일 뿐, 각 함수가 올바른 의미·권한·반환값으로 동작한다거나 악성 콜백이 없다는 암호학적 증명이 아닙니다.

인터페이스 ID는 선택자 집합의 XOR입니다

함수 선택자는 정규 시그니처를 keccak256으로 해시한 값의 앞 4바이트입니다. ERC-165 인터페이스 ID는 그 인터페이스에 속한 함수 선택자들을 XOR해서 만듭니다. 반환 타입은 선택자에 들어가지 않고, 이름이 같은 오버로드 함수는 인수 타입이 달라 선택자도 따로 생깁니다. 이벤트와 오류 선택자는 인터페이스 ID에 넣지 않습니다.

솔리디티에서는 type(IMyInterface).interfaceId로 계산할 수 있지만, 상속한 인터페이스의 함수가 어떻게 포함되는지와 컴파일러 표현은 시험 벡터로 확인합니다. 소스의 함수 이름을 정렬해 문자열 해시 하나를 만드는 방식이 아닙니다.

supportsInterface의 true는 계약이 그 표찰을 붙였다는 뜻이며, 표찰에 적힌 행동을 정직하게 수행한다는 보증서는 아닙니다.

JOBCOIN 해설

그림으로 보기프로토콜 실행의 기본 구조
입력이 실행 규칙을 통과할 때 상태가 바뀌는 프로토콜 개념도
그림과 함께 짚어볼 본문 내용

그림은 이 주제의 공통 개념을 단순화한 설명입니다. 아래 항목에서 이 글의 구체적인 조건과 예외를 함께 읽어보세요.

  1. 인터페이스 ID는 선택자 집합의 XOR입니다

    함수 선택자는 정규 시그니처를 keccak256으로 해시한 값의 앞 4바이트입니다.

  2. 두 단계 사전 검사로 ERC-165 지원을 확인합니다

    EIP-165의 탐지 절차는 STATICCALL 방식의 조회로 0x01ffc9a7에 true를 돌려주는지, 0xffffffff에는 false를 돌려주는지 확인합니다.

  3. NFT 수신자 사례에서 실제 콜백을 따로 봅니다

    ERC-721 계약이 수신자의 ERC165 응답만 보고 safeTransfer를 끝내지 않고, onERC721Received를 실제로 호출해 약속된 반환값(magic value)을 검사하는 이유가 바로 이 경계에 있습니다.

설명을 위한 개념도 · 실제 가격·거래 내역·통계가 아닙니다.

두 단계 사전 검사로 ERC-165 지원을 확인합니다

EIP-165의 탐지 절차는 STATICCALL 방식의 조회로 0x01ffc9a7에 true를 돌려주는지, 0xffffffff에는 false를 돌려주는지 확인합니다. 두 검사를 통과한 계약에만 목표 인터페이스 ID를 묻습니다. 호출이 실패하거나 반환 데이터가 짧거나 형식이 깨져 있으면 false 또는 알 수 없음으로 처리합니다.

30,000 가스 제한은 조회가 지나친 연산으로 호출자의 가스를 다 써 버리지 않게 하려는 장치입니다. 프록시 폴백, 되돌림, 빈 반환이 있을 수 있으므로 ABI bool 값을 디코딩하기 전에 성공 여부와 정확한 반환 길이를 검사합니다.

ERC-165 판정 결과와 의미
관찰 판정 후속
165 true·ffff false ERC-165 후보 목표 ID 조회
165 false 미지원 다른 탐지 정책
ffff true 규약 불일치 결과 불신
목표 ID true 지원 선언 실제 동작 시험
되돌림·형식 오류 알 수 없음·미지원 안전한 대체 처리

NFT 수신자 사례에서 실제 콜백을 따로 봅니다

ERC-721 계약이 수신자의 ERC165 응답만 보고 safeTransfer를 끝내지 않고, onERC721Received를 실제로 호출해 약속된 반환값(magic value)을 검사하는 이유가 바로 이 경계에 있습니다. 수신자가 인터페이스 지원을 true로 선언해도 콜백에서 되돌리거나 다른 값을 돌려줄 수 있습니다.

반대로 일부 오래된 계약은 기능은 구현했지만 ERC-165 선언은 하지 않았을 수 있습니다. 애플리케이션이 미지원 계약을 허용할지, 안전 확인 없는 전송을 제공할지는 자산 복구 위험과 함께 정책으로 정합니다. 인터페이스 탐지를, 있지도 않은 함수를 안전하게 부르는 방법으로 바꿔 쓰지 않습니다.

  • 목표 함수의 정규 시그니처를 확정합니다.
  • 선택자 각각과 XOR 인터페이스 ID를 독립적으로 계산합니다.
  • ERC-165 ID와 무효 ID 응답을 먼저 검사합니다.
  • 성공 여부·반환 데이터 길이·bool 값을 검증합니다.
  • 목표 함수의 실제 반환값과 상태 변화도 시험합니다.

프록시와 업그레이드는 응답을 바꿀 수 있습니다

프록시는 폴백의 delegatecall로 구현 계약의 supportsInterface를 실행하므로 업그레이드 뒤에는 같은 주소라도 응답이 달라질 수 있습니다. 결과를 캐시에 영구 저장하면 새 기능을 놓치거나, 이미 빠진 인터페이스를 계속 지원한다고 표시할 수 있습니다. 블록 해시와 구현 계약의 코드 해시를 함께 기록합니다.

다이아몬드 같은 모듈형 계약은 선택자 라우팅 표와 supportsInterface 등록 정보가 어긋날 수 있습니다. 등록 정보 갱신과 패싯 변경을 한 번에 처리하고, 실제 선택자가 어느 대상으로 가는지 확인합니다.

보안·경제적 의미는 따로 검증합니다

ERC-165는 함수의 의미, 접근 제어, 토큰 지급 능력, 표준 전체 준수 여부를 검사하지 않습니다. 악성 계약은 어떤 ID에든 true를 돌려주면서 실제 호출 때 자산을 훔치거나 가스를 다 태워 버릴 수 있습니다.

인덱서는 인터페이스 지원 true를 분류용 참고 정보로만 쓰고 검증된 코드, 호출 결과, 이벤트와 교차 확인합니다. 프런트엔드는 ‘ERC-721 지원’ 같은 표시를 감사나 공식 인증처럼 보여 주지 말고, 관찰한 블록과 확인 범위를 함께 남깁니다.

자주 묻는 질문

supportsInterface가 true면 함수 호출도 성공하나요?

아닙니다. 함수가 되돌리거나 잘못된 값을 돌려줄 수 있으므로 실제 호출 조건을 검증해야 합니다.

인터페이스 ID에 이벤트도 포함하나요?

아닙니다. 해당 인터페이스의 함수 선택자만 XOR합니다.

일반 지갑 계정(EOA)에 supportsInterface를 호출해도 되나요?

코드가 없으므로 정상적인 ERC-165 응답을 기대할 수 없습니다. 먼저 코드가 있는지와 호출 결과를 확인합니다.

더 깊이 읽기

본문에서 다룬 개념과 확인 절차를 다음 글에서 이어서 살펴보세요.

참고한 원문 자료

자료 확인 기준일 2026.09.27
  1. ERC-165: Standard Interface Detectioneips.ethereum.org
  2. Solidity ABI Specification — Function Selectordocs.soliditylang.org
작성 방식과 확인 범위
출처 수집
원문 링크 2개 제공
작성·확인
공식 기관 자료를 근거로 AI 도구를 활용해 작성했고, 운영자가 발행 전에 읽어 확인합니다.
전문가 검토
세무·법률 전문가 검토는 거치지 않았습니다.

투자·세무 판단은 전문가와 상의하세요. 제도와 거래소 안내는 바뀔 수 있으니 원문의 적용 대상과 최신 안내를 함께 확인해 주세요.

이해를 위한 정보 콘텐츠

이 글은 특정 자산의 매수·매도 또는 수익을 권유하지 않습니다. 자료의 발표 시점과 이후 변경 사항을 함께 확인해 주세요.

편집 원칙 보기 →이 기사 정정 제보 →