체인의정석

스마트 컨트렉트 프록시 구조 - 세번째 패턴) Upgradeability using Inherited Storage 본문

블록체인/Solidity

스마트 컨트렉트 프록시 구조 - 세번째 패턴) Upgradeability using Inherited Storage

체인의정석 2022. 3. 18. 16:33
728x90
반응형

이전 글 목록

 

프록시 구조 공통 패턴 : https://it-timehacker.tistory.com/256?category=906404 

 

스마트 컨트렉트 프록시 구조 - 기본 구조 학습

코드를 계속해서 분석하다 보니 결국 릴레이어를 사용하는 모델에서는 프록시 구조를 알지 못하고서는 코드를 70%이상 이해하기 어려웠다. 따라서 프록시 구조에 대한 자세한 학습을 하고 이후

it-timehacker.tistory.com

프록시 구조 첫번째 패턴 : https://it-timehacker.tistory.com/257?category=906404 

 

스마트 컨트렉트 프록시 구조 - 첫번째 패턴) Upgradeability using Eternal Storage

https://it-timehacker.tistory.com/256?category=906404 스마트 컨트렉트 프록시 구조 - 기본 구조 학습 코드를 계속해서 분석하다 보니 결국 릴레이어를 사용하는 모델에서는 프록시 구조를 알지 못하고서는

it-timehacker.tistory.com

 

프록시 구조 세번째 패턴: https://it-timehacker.tistory.com/258?category=906404 

 

스마트 컨트렉트 프록시 구조 - 두번째 패턴) Upgradeability using Unstructured Storage

이전 글 목록 프록시 구조 공통 패턴 : https://it-timehacker.tistory.com/256?category=906404 스마트 컨트렉트 프록시 구조 - 기본 구조 학습 코드를 계속해서 분석하다 보니 결국 릴레이어를 사용하는 모델에

it-timehacker.tistory.com

글쓴이의 유튜브 보러가기
https://www.youtube.com/channel/UCHsRy47P2KlE749oAAjb0Yg

 

체인의정석

약력 현) 블록체인 개발자 前 블록워터 테크놀로지, 스마트컨트렉트 개발자 前 위데이터랩(주) 기획,마케팅 팀장 , 블록체인팀 선임연구원 홍익대학교 경영학 전공, 컴공 부전공 서강대학교 정

www.youtube.com

 

상속된 저장소 접근 방식은 논리 계약이 프록시에 필요한 저장소 구조를 통합하도록 하는 데 의존합니다. 프록시와 논리 계약은 둘 다 필요한 프록시 상태 변수를 저장하도록 보장하기 위해 동일한 스토리지 구조를 상속합니다. 이 접근 방식을 탐색하는 동안 우리는 논리 계약의 다른 버전을 추적하기 위해 레지스트리 계약을 갖는 아이디어를 시도했습니다. 새 논리 계약으로 업그레이드하려면 레지스트리에 새 버전으로 등록하고 프록시에 업그레이드를 요청해야 합니다. 레지스트리가 있다고 해서 저장 메커니즘에 영향을 미치지는 않습니다. 실제로 이 게시물에 표시된 모든 스토리지 패턴에서 구현할 수 있습니다.

 

=> 동일한 스토리지 구조를 상속 받는 로직 컨트렉트와 프록시 컨트렉트를 가지고 있는 구조입니다.

새로운 로직 컨트렉트로 업그레이드하려면 레지스트리에 새버전으로 등록하고 프록시에 업그레이트를 요청하는 식으로 작용됩니다. 또한 레지스트리는 저장 메커니즘에 영향을 끼치지 않는 구조입니다.

 

#UpgradeabilityProxy는 Proxy를 통하여서는 #delegatecall을 허용하고, #upgreadeabilityStorage 는 로직 레이어 주소를 위한 상태 변수를 가지고 있습니다. #LogicContract 는 upgreadeability Storage를 같이 상속받아 작성하며, upgradeable에서는 레지스트리를 통한 초기화를 담당합니다.

 

초기화 방법 

1. 레지스트리 계약 배포 계약(v1)의 초기 버전을 배포합니다.

2. 업그레이드 가능한 계약을 상속하는지 확인하십시오.

3.레지스트리에 초기 버전 주소 등록 레지스트리 계약에 UpgradeabilityProxy 인스턴스 생성을 요청
4. UpgradeabilityProxy를 호출하여 계약의 초기 버전으로 업그레이드

 

업그레이드 방법 

1. 초기 버전에서 상속된 새 버전의 계약(v2)을 배포하여 프록시의 스토리지 구조와 컨트렉트의 초기 버전에 있는 구조를 유지하도록 합니다. 

2. 새 버전의 컨트렉트를 레지스트리에 등록

3. UpgradeabilityProxy 인스턴스를 호출하여 새로 등록된 버전으로 업그레이드

 

주요 내용

동일한 UpgradeabilityProxy 계약을 계속 호출하여 향후 배포된 논리 계약에서 업그레이드된 기능과 새로운 기능 및 새로운 상태 변수를 도입할 수 있습니다.

728x90
반응형
Comments