🔧 스마트 컨트랙트 수정·배포 가능한 주요 방법들
분류 업그레이드 가능 여부 대표 방식
- 일반 배포 방식 ❌ 아님 (불가능) 단순 재배포
- Proxy 패턴 기반 업그레이드 ✅ 가능 Transparent Proxy, UUPS, Beacon Proxy
- Eternal Storage + Delegatecall ✅ 가능 (초기 형태) 커스텀 프록시
- 다이아몬드 패턴 (EIP-2535) ✅ 고도화 Diamond Storage 기반
⸻
1️⃣ 일반 배포 방식 (Non-upgradeable)
⚙️ 작동 방식
• 컨트랙트를 직접 배포하고, 그 주소로 상호작용
• 코드 수정 시, 기존 컨트랙트 주소와 별개로 새로운 컨트랙트를 배포
✅ 장점
• 구조가 단순하고 안전함
• 보안 감사를 받기 쉬움
❌ 단점
• 수정 시 반드시 새 주소 배포 + 데이터 마이그레이션 필요
• 프론트엔드에서 주소 업데이트 필요
📌 사용처: 변경 필요 없는 Token, Library, Factory 등
⸻
2️⃣ Proxy 패턴 업그레이드 방식 (OpenZeppelin 호환)
📦 대표 기술: Transparent Proxy, UUPS Proxy, Beacon Proxy
⸻
🔸 A. Transparent Proxy Pattern
⚙️ 작동 방식
• 사용자 → Proxy에 요청 → Proxy는 logic을 Implementation 계약에 delegatecall
• Admin은 upgradeTo() 호출 가능 (일반 사용자는 불가)
✅ 장점
• 오픈젤린이 공식 지원, 보안 안정성 높음
• admin과 사용자 역할 분리 명확
❌ 단점
• Proxy + Logic 분리로 가스비 약간 증가
• 컨트랙트마다 Proxy가 필요함
⸻
🔸 B. UUPS (Universal Upgradeable Proxy Standard)
⚙️ 작동 방식
• Proxy는 upgradeTo()를 지원하지 않음
• Logic 계약이 upgradeTo()를 갖고 있어 스스로 업그레이드 함
✅ 장점
• Proxy 구조가 더 단순해 가스 효율적
• 하나의 Proxy 코드로 여러 UUPS 논리 계약 공유 가능
❌ 단점
• upgradeTo()가 구현된 Logic에서 실수하면 브릭될 위험
• Upgradeability 보안 검사 필요 (OpenZeppelin 플러그인)
⸻
🔸 C. Beacon Proxy Pattern
⚙️ 작동 방식
• Proxy → Beacon 계약 → Implementation 계약
• Beacon을 업그레이드하면 여러 Proxy들이 새 Logic을 공유함
✅ 장점
• 여러 컨트랙트를 동시에 업그레이드 가능
• 대규모 앱에서 유용 (e.g. 여러 Token, Vault 등)
❌ 단점
• 구조가 더 복잡함
• 초기 설정이 번거로움
⸻
3️⃣ Eternal Storage + Delegatecall (초기 커스텀 방식)
⚙️ 작동 방식
• Storage 계약 따로, Logic 계약은 delegatecall로 실행
• 로우레벨에서 직접 관리해야 함
✅ 장점
• 매우 유연하고 커스터마이징 가능
❌ 단점
• OpenZeppelin에서 권장하지 않음 (보안 취약)
• 복잡하고 실수 위험 높음
✅ 현재는 Transparent/UUPS로 거의 대체됨
⸻
4️⃣ 다이아몬드 패턴 (EIP-2535)
모듈화 + 확장성에 최적화된 고급 프록시 패턴
⚙️ 작동 방식
• 여러 기능(facet)을 별도 컨트랙트로 나누고, 다이아몬드가 selector → facet 매핑
• delegatecall로 호출
✅ 장점
• 수백 개 기능을 가진 복잡한 시스템에서 유리
• 각각의 facet을 독립적 upgrade 가능
❌ 단점
• 구조가 매우 복잡하고 이해 난이도 높음
• 보안 및 테스트 부담 큼
• 일반 프로젝트에는 과한 경우 많음
⸻
📊 정리표: 컨트랙트 업그레이드 방식 비교
방식 업그레이드 복잡도 안정성 가스 효율 사용 예
일반 배포 ❌ ⭐ ⭐⭐⭐⭐ ⭐⭐⭐⭐ 간단한 계약, 토큰
Transparent Proxy ✅ ⭐⭐ ⭐⭐⭐⭐ ⭐⭐ 대부분의 업그레이드 시스템
UUPS Proxy ✅ ⭐⭐ ⭐⭐⭐ ⭐⭐⭐ 가스 최적화가 필요한 시스템
Beacon Proxy ✅ ⭐⭐⭐ ⭐⭐⭐ ⭐⭐ 다수 배포가 필요한 앱
Eternal Storage ✅ ⭐⭐⭐⭐ ⭐ ⭐⭐ 직접 구현 실험용
다이아몬드 패턴 ✅ ⭐⭐⭐⭐⭐ ⭐⭐ ⭐⭐⭐ 모듈화 시스템, 복잡한 앱
⸻
🎯 추천 기준
프로젝트 성격 추천 방식
단순 계약, 변경 없음 일반 배포
표준적인 업그레이드 필요 Transparent Proxy
가스 최적화, 배포 많음 UUPS Proxy
수십/수백 개 컨트랙트 Beacon Proxy
고급 구조 실험, 플러그인형 앱 다이아몬드 패턴
'이더리움' 카테고리의 다른 글
| UUPS vs Transparent Proxy (0) | 2025.03.25 |
|---|---|
| 수정 가능한 스마트 컨트랙트 코드 예시 (0) | 2025.03.25 |
| 트랜잭션 오류 발생시, 오류 원인 파악 방법 (0) | 2025.03.20 |
| 스마트 컨트랙트를 수정할 수 있는 구조들 (0) | 2025.03.20 |
| MPC Wallet 의 서명 합계 과정에 대한 수학적 증명 (0) | 2025.01.31 |