EIP-1167은 단 45바이트의 바이트코드로 구성된 최소형 프록시 컨트랙트 표준입니다. 배포된 프록시는 모든 호출을 고정된 구현(Implementation) 컨트랙트로 DELEGATECALL하므로, 동일한 로직을 공유하는 수많은 인스턴스를 매우 저렴하게 생성할 수 있습니다.
45바이트 바이트코드의 구조
클론 컨트랙트의 바이트코드는 정해진 패턴으로 구현 주소를 인코딩한 45바이트(EVM 옵코드 시퀀스)입니다. 실행 시 모든 calldata를 그대로 받아 구현 컨트랙트로 DELEGATECALL을 발행하고, 반환값과 revert 모두 그대로 전달합니다. 자체적인 로직은 없으며 순수한 포워더(forwarder) 역할을 합니다.
DELEGATECALL과 상태 분리
DELEGATECALL은 구현 컨트랙트의 코드를 프록시의 컨텍스트(storage, msg.sender, msg.value)에서 실행합니다. 따라서 각 클론은 독립적인 상태(스토리지)를 가지면서 로직은 공유합니다. 예를 들어 Gnosis Safe 멀티시그를 수천 개 배포할 때, 로직 컨트랙트는 하나이고 클론만 늘어나는 방식입니다.
CREATE2와 결정론적 주소
EIP-1014(CREATE2)와 조합하면 클론의 주소를 배포 전에 미리 계산할 수 있습니다. salt와 구현 주소를 이용해 동일한 주소를 항상 예측 가능하게 생성합니다. 이 패턴을 "클론 팩토리(Clone Factory)"라 부르며, Uniswap V1 거래소 페어 배포 등에 활용됩니다.
가스 절감 효과
일반 컨트랙트 배포는 바이트코드 크기에 비례해 가스를 소모합니다. ERC-1167 클론은 45바이트만 배포하므로 배포 비용이 극적으로 줄어듭니다. 수백~수천 개의 동일 로직 컨트랙트를 배포해야 하는 프로토콜(지갑 팩토리, AMM 풀 등)에서 전체 배포 비용을 수십~수백 배 절감할 수 있습니다.
한계와 주의사항
클론은 구현 컨트랙트의 주소가 하드코딩되므로 로직 업그레이드가 불가능합니다(업그레이드가 필요하면 EIP-1967 투명 프록시 패턴 등을 사용해야 합니다). 또한 구현 컨트랙트가 selfdestruct되면 모든 클론이 기능을 잃게 됩니다. 초기화 함수(initializer)를 통한 상태 셋업도 직접 구현해야 합니다.