EIP-7201은 업그레이드 가능한 스마트 컨트랙트에서 스토리지 충돌을 방지하기 위한 네임스페이스 스토리지 레이아웃 표준입니다. 각 컨트랙트나 모듈이 독립적인 스토리지 네임스페이스를 사용하여 안전한 업그레이드를 보장합니다. Final 상태입니다.
스토리지 충돌 문제
프록시 패턴을 사용하는 업그레이드 가능한 컨트랙트에서 여러 모듈이 동일한 스토리지 슬롯을 사용하면 충돌이 발생합니다. 기존 다이아몬드 패턴이나 비구조화 스토리지 방식은 개발자 실수에 취약했습니다.
네임스페이스 접근법
keccak256 해시를 기반으로 각 네임스페이스의 시작 슬롯을 계산하여 스토리지 공간을 분리합니다. `erc7201:namespace.id` 형식의 네임스페이스 ID를 사용하여 슬롯 위치를 결정론적으로 계산합니다.
Solidity 통합
Solidity 0.8.20+에서 custom storage layout 기능과 함께 사용하면 컴파일러 수준에서 네임스페이스 스토리지를 지원합니다. OpenZeppelin의 최신 업그레이드 가능 컨트랙트 라이브러리에 이미 통합되어 있습니다.
보안 개선 효과
네임스페이스를 사용하면 새 모듈 추가 시 기존 스토리지를 덮어쓸 위험이 없으며, 여러 상속 계층의 컨트랙트도 안전하게 업그레이드할 수 있습니다.
채택 현황
Final 상태로 확정되어 OpenZeppelin Contracts 5.x 이상에서 기본 스토리지 패턴으로 채택되었으며, 업그레이드 가능한 컨트랙트 개발의 사실상 표준이 되었습니다.