EIP-137은 이더리움 도메인 이름 서비스(ENS, Ethereum Name Service)의 기반 규격을 정의합니다. 복잡한 16진수 주소(0x…) 대신 "alice.eth" 같은 사람이 읽을 수 있는 이름을 사용할 수 있게 해주며, 레지스트리 컨트랙트·리졸버 패턴·이름 해싱 알고리즘을 명세합니다.
ENS 아키텍처 개요
ENS는 두 종류의 컨트랙트로 구성됩니다. ① ENS 레지스트리(Registry): 모든 도메인 이름과 그 소유자(owner), 리졸버(resolver), TTL을 저장하는 단일 중앙 컨트랙트입니다. ② 리졸버(Resolver): 이름을 실제 주소·콘텐츠 해시·기타 레코드로 변환하는 컨트랙트입니다. 레지스트리는 "이 이름의 리졸버가 누구인가"를 알려주고, 리졸버가 실제 데이터 조회를 담당합니다.
namehash: 이름 → node 변환
EIP-137은 도메인 이름을 32바이트 node로 변환하는 namehash 알고리즘을 정의합니다. 규칙: namehash('') = 0x000...0 (루트), namehash(label + '.' + parent) = keccak256(namehash(parent) ++ keccak256(label)). 예를 들어 "alice.eth"는 keccak256(namehash("eth") ++ keccak256("alice"))입니다. 이 재귀 구조 덕분에 하위 도메인 소유권을 독립적으로 관리할 수 있습니다.
레지스트리 인터페이스
레지스트리는 세 가지 핵심 정보를 node별로 저장합니다. ① owner(node) → address: 해당 이름의 소유자. ② resolver(node) → address: 이름을 조회할 리졸버 컨트랙트 주소. ③ ttl(node) → uint64: 캐시 유효 시간(초). 소유자는 setOwner, setResolver, setTTL 함수로 이 값들을 변경할 수 있으며, setSubnodeOwner로 하위 도메인의 소유자를 설정할 수 있습니다.
리졸버 패턴
리졸버 컨트랙트는 EIP-137이 정의한 인터페이스를 구현합니다. 가장 기본적인 것은 addr(bytes32 node) → address로, 이름에 매핑된 이더리움 주소를 반환합니다. 이후 EIP-181(역방향 조회), EIP-634(텍스트 레코드), EIP-1577(콘텐츠 해시) 등이 리졸버 인터페이스를 확장했습니다. 리졸버는 ENS 레지스트리와 분리되어 있어 업그레이드가 용이합니다.
ENS의 실용적 의미
"alice.eth"를 MetaMask 수신 주소 란에 입력하면 지갑이 ENS 레지스트리에서 리졸버를 찾고, 리졸버의 addr() 함수로 실제 주소를 조회합니다. 이 외에도 분산 웹사이트 주소, 이메일 주소, Twitter 핸들 등 다양한 레코드를 ENS 이름에 연결할 수 있습니다. ENS는 DNS와 달리 이더리움 블록체인에서 직접 실행되므로 검열 저항성을 가집니다.