스마트 컨트랙트의 가장 큰 특징은 한번 배포되면 컨트랙트 코드의 수정이 불가하다는 것입니다. 그렇기 때문에 배포 전에 엄격한 테스트가 필요하며 만약 그랬다고 하더라도 예기치 못한 수정사항이 발생할 수 있습니다.
이러한 경우 프록시 패턴을 이용하면 프로그램을 업데이트한 것처럼 상태 변수 값을 보존하면서 컨트랙트의 로직을 수정할 수 있습니다.
프록시 패턴

앞서 상태 변수의 값을 보존하면서 로직을 수정할 수 있다는 이유는 위와 같이 프록시 컨트랙트에 상태 변수의 값을 저장하고 로직 컨트랙트에는 수행할 로직만을 작성하기 때문에 상태 변수의 값을 보존할 수 있습니다.
다음은 Open Zeppelin에서 제공하는 프록시 패턴의 구조입니다.

사용자는 프록시 컨트랙트에 요청을 보내면 프록시 컨트랙트는 delegatecall의 형태로 V1에 요정을 보냅니다. 만약 V1을 수정한 V2를 새로 배포한다면

다음과 같이 프록시 컨트랙트가 가리키는 컨트랙트의 주소만 변경하면 됩니다.

프록시가 가리키는 주소를 변경하는 작업을 upgrade라는 함수로 작성한다면 관리자만 변경 가능할 수 있도록 proxy admin이라는 컨트랙트를 따로 두게 됩니다.
'블록체인 > 이더리움' 카테고리의 다른 글
머클트리 (0) | 2022.06.30 |
---|---|
업그레이드 가능한 컨트랙트 작성해보기 (0) | 2022.06.27 |
IPFS? (0) | 2022.06.16 |
UTXO(비트코인) vs Account Balance(이더리움) (0) | 2022.06.15 |
web3.js "Can't resolve ... " 에러 해결 (0) | 2022.05.26 |