궁금한 주제를 찾아보세요

비트코인, 스테이블코인, 온체인 데이터처럼 주제로 검색하세요.

다시 읽을 이야기

저장한 글은 이 브라우저에만 보관됩니다.

해설기술·생태계

UUPS와 Transparent 프록시의 업그레이드 권한 위치 비교

Transparent는 proxy admin dispatch, UUPS는 implementation의 upgrade logic·authorization을 쓰는 차이와 잘못된 조합의 위험을 비교합니다.

난이도 중급주제 카테고리와 개념 밀도 기준검토 정보AI 보조 초안 · 출처 목록 제공 · 주장별 대조 진행 중
구현 계약 안의 업그레이드 권한과 별도 관리자 문을 비교한 UUPS·Transparent 프록시 그림
주제의 이해를 돕기 위해 imagegen으로 제작한 AI 생성 개념 일러스트
먼저 읽는 핵심

Transparent는 proxy/admin 계층, UUPS는 implementation에서 upgrade 권한을 실행합니다.
두 패턴 모두 ERC-1967 slot과 delegatecall storage 호환성이 필요합니다.
새 구현의 upgrade capability·authorization과 selector 경로를 실제 caller별로 시험해야 합니다.

Transparent proxy는 proxy가 admin 호출을 구분해 upgrade 관리 함수로 처리하고 일반 사용자의 호출만 implementation에 delegate합니다. UUPS는 proxy를 단순 ERC-1967 delegate proxy로 두고 implementation code가 upgrade 함수와 authorization을 제공합니다. 둘 다 implementation slot을 쓸 수 있지만 권한 코드 위치가 다릅니다. UUPS 새 구현이 upgrade 기능이나 authorization을 잘못 제거하면 영구 고정되거나 탈취될 수 있고, UUPS implementation을 Transparent proxy 뒤에 잘못 놓으면 비-admin 사용자가 implementation의 upgrade 함수에 도달하는 조합 위험이 생길 수 있습니다.

권한 코드가 사는 위치가 다릅니다

Transparent pattern에서 admin의 호출은 proxy 관리 경로로 가며 implementation fallback으로 전달되지 않습니다. 일반 사용자의 호출은 implementation으로 delegate됩니다. Admin이 implementation의 일반 함수를 proxy를 통해 호출하지 못하는 제약이 selector clash 혼동을 줄입니다.

UUPS pattern에서는 ERC1967Proxy fallback이 대부분의 호출을 implementation에 전달하고 implementation의 upgradeToAndCall 계열이 ERC-1967 slot을 바꿉니다. _authorizeUpgrade를 owner·role·governance로 구현해야 합니다. Proxy bytecode가 작아도 implementation 교체마다 upgrade logic 검증이 필요합니다.

두 프록시는 같은 구현 슬롯을 쓸 수 있지만, 누가 그 슬롯을 바꾸는지 판정하는 코드는 서로 다른 주소에 있습니다.

JOBCOIN 해설

VISUAL GUIDE프로토콜 실행의 기본 구조
입력이 실행 규칙을 통과할 때 상태가 바뀌는 프로토콜 개념도
그림과 함께 짚어볼 본문 내용

그림은 이 주제의 공통 개념을 단순화한 설명입니다. 아래 항목에서 이 글의 구체적인 조건과 예외를 함께 읽어보세요.

  1. 권한 코드가 사는 위치가 다릅니다

    Transparent pattern에서 admin의 호출은 proxy 관리 경로로 가며 implementation fallback으로 전달되지 않습니다.

  2. 호출자별 dispatch를 표로 추적합니다

    Transparent admin이 business selector를 호출하면 implementation에 전달되지 않고 관리 interface 규칙에 따라 처리되거나 실패할 수 있습니다.

  3. 잘못된 구현 조합은 예상치 못한 upgrade 경로를 엽니다

    UUPS-capable implementation을 Transparent proxy에 연결하면 proxy 자체 admin upgrade 외에도 non-admin이 delegate된 implementation upgrade 함수에 접근할 수 있습니다.

AI로 제작한 개념도 · 실제 가격·거래 내역·통계가 아닙니다.

호출자별 dispatch를 표로 추적합니다

Transparent admin이 business selector를 호출하면 implementation에 전달되지 않고 관리 interface 규칙에 따라 처리되거나 실패할 수 있습니다. 운영 admin 주소를 일반 사용자로 쓰면 기능 호출이 예상과 달라집니다. ProxyAdmin 같은 별도 관리 contract가 사용되는 이유입니다.

UUPS에서는 사용자도 implementation의 upgrade selector에 도달할 수 있으므로 함수 자체의 authorization이 방어선입니다. onlyProxy·proxiableUUID 검사는 delegatecall 문맥과 slot 호환성을 확인하는 데 쓰이지만 access control을 대신하지 않습니다.

Transparent와 UUPS 비교
항목 Transparent UUPS
Upgrade logic Proxy/admin 계층 Implementation
일반 dispatch non-admin delegate 대부분 delegate
권한 변경 admin·ProxyAdmin _authorizeUpgrade
새 구현 요구 business+layout layout+upgrade capability
주요 오조합 admin UX·selector 권한 누락·brick

잘못된 구현 조합은 예상치 못한 upgrade 경로를 엽니다

UUPS-capable implementation을 Transparent proxy에 연결하면 proxy 자체 admin upgrade 외에도 non-admin이 delegate된 implementation upgrade 함수에 접근할 수 있습니다. 그 함수가 제대로 제한됐다면 거부되지만 public 또는 잘못 초기화된 owner라면 slot을 바꿀 수 있습니다.

반대로 UUPS proxy를 upgrade 함수가 없는 implementation으로 바꾸면 이후 정상 upgrade entry가 사라질 수 있습니다. 최신 라이브러리는 compatibility 검사를 제공하지만 custom assembly와 권한 우회가 없는지 bytecode와 test로 확인합니다.

  • Proxy runtime code와 pattern을 식별합니다.
  • Implementation·admin slots를 block별로 읽습니다.
  • Admin·owner·일반 사용자 세 caller로 dispatch를 시험합니다.
  • 새 구현의 proxiable UUID와 authorization을 확인합니다.
  • Storage layout·initializer와 rollback 절차를 검증합니다.

업그레이드 권한과 초기화 권한을 함께 봅니다

UUPS _authorizeUpgrade가 onlyOwner여도 proxy owner가 zero이거나 공격자에게 initializer를 선점당하면 방어가 무너집니다. Transparent ProxyAdmin 소유권도 multisig·timelock 실제 구성과 연결해 확인합니다. Source modifier 이름만으로 권한자를 확정하지 않습니다.

Upgrade와 reinitializer를 한 transaction에 묶으면 새 code가 필요한 state를 즉시 설정할 수 있지만 delegatecall initializer의 revert 처리와 reentrancy를 시험해야 합니다. 분리하면 중간 미초기화 상태의 공격 창이 생깁니다.

운영 증거는 slot·event·권한 실행을 연결합니다

Upgraded event는 변경 발견에 유용하지만 현재 implementation은 ERC-1967 raw slot로 확인합니다. Upgrade transaction sender가 relayer나 timelock일 수 있어 최종 governance authorization까지 trace합니다.

점검표에는 proxy address, pattern, implementation code hash, admin 또는 authorization contract, delay, layout diff와 initializer calldata를 넣습니다. ‘UUPS가 더 저렴하다’ 또는 ‘Transparent가 더 안전하다’는 한 줄 대신 실제 배포의 권한 경로를 평가합니다.

자주 묻는 질문

UUPS와 Transparent는 다른 implementation slot을 쓰나요?

둘 다 ERC-1967 implementation slot을 사용할 수 있으며 핵심 차이는 upgrade logic과 dispatch 위치입니다.

UUPS proxiableUUID가 맞으면 안전한가요?

Slot 호환성 확인에 도움을 주지만 authorization·layout·business logic 안전을 보장하지 않습니다.

Transparent admin도 일반 함수를 호출할 수 있나요?

Proxy를 통한 admin 호출은 일반적으로 implementation에 fallback되지 않으므로 별도 사용자 주소를 사용합니다.

더 깊이 읽기

본문에서 다룬 개념과 확인 절차를 다음 글에서 이어서 살펴보세요.

참고한 원문 자료

자료 확인 기준일 2026.09.27
  1. OpenZeppelin Contracts 5.x — Proxydocs.openzeppelin.com
  2. ERC-1822: Universal Upgradeable Proxy Standardeips.ethereum.org
자료 대조 기록과 확인 범위
출처 수집
원문 링크 2개 제공
핵심 주장 대조
완료 근거가 아직 기록되지 않았습니다.
분야 전문가 검수
별도 완료 기록이 없습니다.

원문 링크와 자료 확인일은 글 전체의 주장 대조나 전문가 검수 완료를 뜻하지 않습니다. 별도 확인이 필요한 절차는 원문의 적용 대상과 최신 안내를 함께 확인해 주세요.

AI 활용 안내

이 글은 초안 구성과 자료 정리에 AI를 활용했습니다. 글에 표시된 출처와 기준일을 함께 확인해 주세요. 별도 검토 정보가 없다면 전문가 검수를 뜻하지 않습니다.

이해를 위한 정보 콘텐츠

이 글은 특정 자산의 매수·매도 또는 수익을 권유하지 않습니다. 자료의 발표 시점과 이후 변경 사항을 함께 확인해 주세요.

편집 원칙 보기 →이 기사 정정 제보 →