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

hardhat과 typechain을 사용한 컨트랙트 개발

엘리시아가 스마트 컨트랙트 개발 프레임워크를 Truffle 에서 hardhat 으로 옮긴 후기다. Truffle 의 불편함 두 가지를 먼저 짚고, hardhat 이 그것을 어떻게 해결하는지와 Typechain 플러그인으로 TypeScript 를 쓰는 방법으로 이어진다.

핵심 포인트
  • Truffle 의 불편함 ①: 검증(Verify)이 번거롭다. 배포한 컨트랙트를 etherscan 에 올려야 Read/Write Contract 기능이 활성화되는데, Truffle 은 이를 돕지 않아 직접 소스를 업로드해야 한다.
  • 경우에 따라 import 한 파일을 하나로 합치는 flatten 도 필요하다. `truffle-flattener` 가 있지만 컨트랙트를 배포할 때마다 반복하는 것은 부담이다.
  • Truffle 의 불편함 ②: TypeScript 지원이 빈약하다. bigNumber·uint·keccak256 같은 solidity 타입을 자바스크립트가 받아들이는 방식이 조금씩 달라 정적 타이핑이 아쉬웠다.
  • hardhat 의 이점 ①: Verify 자동화. 명령어 한 줄로 검증되고, 스크립트를 쓰면 연관된 여러 컨트랙트의 deploy 와 verify 를 한 번에 진행할 수 있다.
  • hardhat 의 이점 ②: Typechain 플러그인이 컴파일과 동시에 `.sol` 을 TypeScript artifact 로 만들어 준다.
상세 정리
  • 글 앞에 수정 공지가 붙어 있다. `hardhat-typechain` 대신 `@typechain/hardhat` 을 써야 하며, 전자를 쓰면 module 을 찾을 수 없다는 에러가 날 수 있다. hardhat 공식 문서에는 아직 반영되지 않은 사항이다.
  • 검증의 의미를 예시로 설명한다. uniswap 의 wBTC-Eth pair 컨트랙트처럼 검증된 컨트랙트는 웹 앱 없이 etherscan 에서 직접 쓸 수 있다.
  • hardhat 은 compile·deploy·test 를 모두 진행할 수 있는 이더리움 개발 프레임워크로 node 에서 동작하며 npm 으로 설치한다.
  • Typechain 산출물의 쓰임: 테스트 코드에 import 해 쓸 수 있고, dApp 개발 환경에서 컨트랙트 ABI 로 접근하지 않고도 쓸 수 있어 작성과 디버깅이 빨라진다.
  • 이점 ③ `console.log`: solidity 파일에서 쓸 수 있어 자바스크립트 개발과 비슷한 환경이 된다. 진입 장벽을 낮추려는 hardhat 팀의 의도가 보이는 기능이라고 평가한다.
  • 저자는 solidity 가 자바스크립트 문법과 비슷해 보이면서도 다른 점이 많아 헤맸는데 이 기능으로 간단히 디버깅하게 됐다고 밝힌다.
  • 이점 ④ 문서화: compile·deploy·test 과정의 오류 로그가 잘 나오고 에러 코드 공식 문서도 정리돼 있다. Truffle 때는 문서에 없어 `node_modules` 를 뒤져 에러 코드를 찾기도 했다.
  • OpenZeppelin 등 다른 팀들도 hardhat 을 자주 언급하며 관련 문서를 잘 제공한다는 점도 생태계 이점으로 든다.
  • 그 밖의 지원으로 빠른 테스트 환경, 손쉬운 upgrade proxy, 테스트 커버리지, 테스트 환경 가스 리포터, 리액트 핫 리로더 플러그인을 나열한다.
  • 도입 동기도 솔직하다. Truffle 에도 좋은 도구가 많고 다 써 본 것은 아니지만, 검색 결과 hardhat 을 좋게 보는 글이 많아 도입해 봤다고 밝힌다.
왜 읽나Truffle 로 컨트랙트를 개발하며 검증과 타입 지원에 불편을 느낀 개발자에게, hardhat 으로 옮겼을 때 실제로 무엇이 달라지는지 항목별로 알려준다.
엘리시아
엘리시아 블로그
원문은 여기서 이어서 읽을 수 있어요
원문 읽기
읽음 (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