EIP-2535(Diamonds, Multi-Facet Proxy)는 여러 개의 구현 컨트랙트(Facet)를 하나의 프록시 다이아몬드 컨트랙트에 연결하는 업그레이더블 스마트 컨트랙트 패턴의 표준입니다. 이 패턴은 컨트랙트 크기 제한을 극복하고 모듈식 업그레이드를 가능하게 합니다.
다이아몬드 구조
다이아몬드 컨트랙트는 fallback 함수를 통해 들어오는 모든 호출을 적절한 Facet 컨트랙트로 라우팅합니다. 각 Facet는 특정 기능 그룹을 구현하며, 다이아몬드는 함수 셀렉터와 Facet 주소를 매핑하는 테이블을 유지합니다.
핵심 인터페이스
IDiamondCut 인터페이스를 통해 Facet 추가, 교체, 제거가 가능합니다. IDiamondLoupe 인터페이스는 다이아몬드에 연결된 모든 Facet과 지원 함수를 조회할 수 있게 합니다.
장점과 활용 사례
24KB 컨트랙트 크기 제한을 우회하고, 다이아몬드 스토리지 패턴으로 스토리지 충돌 없이 모듈식 업그레이드가 가능합니다. DeFi 프로토콜, 게임, DAO 거버넌스 시스템 등에서 광범위하게 활용됩니다.
표준화 과정
2020년 제안 이후 커뮤니티의 광범위한 검토와 여러 차례의 업데이트를 거쳐 Final 상태로 채택되었습니다. Nick Mudge가 제안했으며, 이더리움 생태계에서 가장 복잡하고 강력한 업그레이더블 패턴 중 하나로 인정받습니다.
보안 고려사항
다이아몬드 패턴은 강력하지만 복잡성으로 인해 스토리지 레이아웃 충돌, 접근 제어 취약점, 잘못된 Facet 라우팅 등의 위험이 존재합니다. 구현 시 다이아몬드 스토리지 패턴과 세심한 감사가 필수적입니다.