pile·
백엔드·엘리시아엘리시아·

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

Hardhat 연재의 후속으로, 배포를 돕는 hardhat-deploy 플러그인과 typechain 을 붙여 ERC20 토큰을 작성하고 테스트넷까지 배포하고 verify 하는 과정을 다룬다. 배포 결과가 로컬에 JSON 으로 남아 배포 이후 컨트랙트와 상호작용하기 쉬워지는 게 이 플러그인의 핵심 이점이다.

핵심 포인트
  • hardhat-deploy 는 배포를 편하게 할 뿐 아니라 배포된 컨트랙트 정보를 로컬에 저장해 이후 상호작용을 돕는다.
  • named account 기능으로 accounts[0] 같은 인덱스 대신 계정에 이름을 붙여 쓸 수 있다.
  • deploy 함수는 컨트랙트 이름과 옵션을 받아 배포한 뒤 address, abi, transactionHash 를 담은 DeployResult 를 반환하고, 결과는 deployments 폴더에 JSON 으로 남는다.
  • typechain 으로 컨트랙트 타입을 정의해두면 불러온 컨트랙트의 메서드를 타입이 잡힌 상태로 호출할 수 있다.
  • 예전에는 flatten 후 수동으로 하던 etherscan verify 를 etherscan-verify task 로 배포 스크립트 안에서 자동화한다.
상세 정리
  • 설치 패키지는 hardhat, typescript, ts-node, typechain 과 @typechain/hardhat, @typechain/ethers-v5, 테스트용으로 hardhat-waffle, ethereum-waffle, chai, hardhat-ethers, ethers 다. 프로젝트 초기화 때는 빈 hardhat.config 를 고른다.
  • 컨트랙트는 openzeppelin 의 ERC20 을 상속한 SimpleToken 이다. 이름과 심볼을 constructor 인자로 받고 총 발행량 10의 12제곱 개를 decimal 18 로 컨트랙트 주소에 발행한다.
  • faucet 함수는 발행 컨트랙트에서 호출한 sender 에게 10,000 개를 전송한다. 작성 후 hardhat compile 로 컴파일한다.
  • 환경변수는 dotenv 로 관리하며 ETHERSCAN_API_KEY, INFURA_API_KEY, ADMIN, DEPOSITOR private key 를 둔다.
  • 배포 스크립트는 script 대신 deploy 폴더에 두고 tsconfig.json 의 include 옵션도 그에 맞춰 바꾼다.
  • getNamedAccounts 는 public key 만 반환한다. 다만 deploy 의 from 옵션에 public key 가 들어가면 hardhat.config 의 network 설정에 있는 private key 로 Wallet 객체를 만들어준다.
  • 컨트랙트 호출은 DeployResult 의 abi 와 address 로 객체를 만들고, getSigner 로 얻은 depositor Signer 를 connect 해 faucet 을 실행하는 식이다.
  • 웹앱이나 디앱을 만들 때 abi 를 따로 export 할 필요 없이 deployments 폴더에 접근해 컨트랙트 객체를 불러오면 된다.
  • 실행 순서는 먼저 hardhat 로컬 네트워크에 배포해 스크립트 동작을 확인한 뒤, 각 계정에 테스트 이더를 채우고 ropsten 등 테스트넷에 배포한다. 글 작성 시점에 ropsten faucet 이 멈춰 kovan 이나 rinkeby 를 쓰라고 안내한다.
  • task 는 hardhat 런타임에서 실행하는 작업 단위로 배포, 상호작용, 조회를 자동화할 수 있다. verify 도 이 task 로 배포 스크립트 안에서 네트워크 이름만 넘겨 실행한다.
  • hardhat-deploy 는 이 밖에도 library linking, proxy deploy, deploy function tag 등을 제공한다.
왜 읽나Hardhat 으로 스마트 컨트랙트를 배포하며 스크립트와 verify 를 손으로 돌리던 개발자에게 hardhat-deploy 와 typechain 조합의 설정 흐름을 짚어주는 실습 가이드.
엘리시아
엘리시아 블로그
원문은 여기서 이어서 읽을 수 있어요
원문 읽기
읽음 (0)

이 글과 비슷한

  1. 백엔드·twilio-engTwilio Engineering·

    Programmable Messaging에서 Verify API로 마이그레이션하기

    Twilio의 Programmable Messaging API로 자체 OTP 솔루션을 운영하던 서비스가 Verify API로 전환하는 방법을 코드 예시와 함께 설명한다. Verify는 OTP 전송·검증을 위한 전용 API로, 전화번호 구매, 토큰 생성, DB 저장·만료 관리를 내부에서 처리해 개발자가 직접 구현할 코드를 크게 줄인다.

    요약 이어보기
    #authentication#twilio#sms+2
  2. 백엔드·포스타입포스타입·

    포스타입이 개인화 추천을 하는 방법 2부

    포스타입 백엔드 엔지니어가 벡터 기반 개인화 추천 시스템을 실제 운영하며 맞닥뜨린 성능 장애와 용량 문제를 해결한 과정을 담은 2부다. 수백만 개의 벡터 KNN 검색이 피크 시간대에 전체 Elasticsearch 검색 성능을 흔드는 문제부터 클러스터 OOM 사태까지, 쿼리 최적화와 인프라 분리 두 가지 경로로 근본 해결에 이른다.

    요약 이어보기
    #elasticsearch#vector-search#recommendation-system+2
  3. 백엔드·포스타입포스타입·

    포스타입이 개인화 추천을 하는 방법 1부

    포스타입이 태그 기반 추천의 한계를 극복하고 벡터 임베딩 기반 개인화 추천 시스템을 구축한 과정을 담은 1부다. 유사한 콘텐츠가 다른 용어를 쓰거나 동일한 태그가 전혀 다른 톤의 콘텐츠를 가리키는 문제를 임베딩 벡터로 해결하고, OpenSearch의 HNSW ANN 검색으로 수백만 벡터를 실시간 검색하는 시스템을 구축해 구매율 15% 향상을 달성했다.

    요약 이어보기
    #opensearch#vector-search#recommendation-system+2