Ethereum-Solidity Quiz Q2: Solidity에서 프록시란 무엇인가?
Source: Dev.to
Solidity에서 프록시란?
Solidity에서 프록시는 계약 업그레이드 가능성을 제공하기 위해 사용되는 디자인 패턴입니다. 이는 스마트 계약 코드가 블록체인에 배포된 후에는 변경할 수 없기 때문에 중요합니다.
프록시는 상태 변수를 저장하면서 모든 로직을 하나 이상의 구현 계약(implementation contract)에게 위임하는 스마트 계약입니다. 프록스가 호출을 받으면, 낮은 수준의 delegatecall을 사용해 로직 계약에 전달합니다. 이때 구현 계약의 코드는 실행되지만, 프록스 계약 자체의 컨텍스트(스토리지, msg.sender, msg.value 등) 내에서 실행됩니다.
기본 업그레이드 가능한 아키텍처
- 프록시 계약 – 상태를 저장하고 구현 계약에 호출을 위임합니다.
- 구현 계약 – 실제 로직을 포함합니다.
- 관리자(Admin) – 프록시가 보관하고 있는 구현 계약 주소를 업그레이드할 수 있는 별도의 주소(또는 멀티시그, 더 좋음)입니다.
일반적인 프록시 패턴
- UUPS (Universal Upgradeable Proxy Standard) – 업그레이드 로직이 구현 계약에 존재합니다.
- Transparent Proxy – 관리자와 사용자 함수 간의 함수 선택자 충돌을 방지하기 위해 더 복잡한 패턴을 사용합니다.
- Beacon Proxy – 여러 프록시가 단일 비콘 계약을 가리키며, 비콘 계약이 구현 주소를 보관합니다.