목록 보기
Hardhat과 Hardhat-deploy를 이용한 upgradeable smart contract 개발 (상)
백엔드

Hardhat과 Hardhat-deploy를 이용한 upgradeable smart contract 개발 (상)

엘리시아
엘리시아
2022년 6월 3일

두줄요약

Hardhat-deploy와 OpenZeppelin Transparent Proxy로 업그레이더블 컨트랙트 배포 구조를 설명했습니다. initializer, delegatecall, storage 분리와 Etherscan 프록시 검증 방법을 다뤘습니다.

구조와 흐름

  • Hardhat, hardhat-deploy, OpenZeppelin 업그레이더블 패키지 기반 프로젝트 설정
  • Proxy의 storage와 Implementation의 로직을 분리한 Transparent Proxy 구조
  • Proxy fallback에서 delegatecall로 Implementation 로직을 Proxy context에서 실행하는 호출 흐름

선택 이유

  • constructor 대신 한 번만 실행 가능한 initializer로 상태 변수 초기화
  • proxy 옵션의 owner·execute 설정을 통한 업그레이드 권한 관리와 초기화 실행
  • 로직 주소만 교체하고 Proxy 주소와 저장 데이터는 유지하는 업그레이드 방식

주의할 점

  • storage slot 원칙 위반 시 기존 변수 데이터 변경 또는 사용 불가 위험
  • Implementation 주소 직접 호출 시 Proxy storage 기반 기능 미동작
  • 업그레이드 가능한 패키지의 Initializable 상속 및 initializer modifier 필요

적용해볼 점

  • hardhat-deploy 배포 후 Implementation, Proxy, DefaultProxyAdmin 컨트랙트 구성 확인
  • Etherscan의 proxy verification으로 Read as Proxy·Write as Proxy 인터페이스 연동
  • 후속 V2 컨트랙트에서 로직 변경과 함수 추가를 통한 업그레이드 수행

다음 읽기

#Hardhat 주제를 이어서 읽기

Hardhat plugin 사용하기 — hardhat-deploy & typechain

hardhat-deploy로 ERC20 컨트랙트 배포와 배포 정보 저장, Etherscan 검증을 자동화했습니다. TypeChain과 named account를 결합해 타입 안전한 컨트랙트 상호작용 흐름을 구성했습니다.

엘리시아
엘리시아
백엔드
전체 보기

댓글 0개

댓글을 작성하려면 로그인이 필요합니다.

댓글을 불러오는 중...