본문 바로가기
블록체인/WEB3 개발

Hardhat으로 컨트랙트 개발 시작하기

by 제이제이_은재 2024. 5. 16.
반응형

 

Hardhat으로 컨트랙트 개발 시작하기

evm 기반에서 작동하는 스마트 컨트랙트 개발을 위해 하드햇을 사용하고 있다. 컨트랙트 개발을 시작하는 과정을 한 번 정리해보기 초기에 해둬야 할 설정에 대해도 정리해보자.

 

1. Node.js 설치하기

대부분의 Ethereum 라이브러리와 도구는 JavaScript로 작성되었으며 Hardhat도 마찬가지입니다. 그렇기 때문에 node.js 가 설치되어 있어야하며 이 과정은 아래 링크를 참고하면 된다.

https://hardhat.org/tutorial/setting-up-the-environment

 

Hardhat | Ethereum development environment for professionals by Nomic Foundation

Hardhat is an Ethereum development environment. Compile your contracts and run them on a development network. Get Solidity stack traces, console.log and more.

hardhat.org

 

2. 하드햇 프로젝트 생성하기

일단은 내가 원하는 폴더를 하나 생성해주고 npm 프로젝트를 초기화한다. 아래 명령어를 실행해보면 package.json 이 파일이 생성된다.

yarn init

그 다음에는 하드햇을 설치해주고, 아래와 같이 시작해준다.

yarn add --dev hardhat
npx hardhat init

만약, node 버전이 맞지 않는다면 아래와 같은 에러가 발생할 수 있는데, 이럴 경우 노드 버전을 업그레이드 해주어야 한다.

info No lockfile found.
[1/4] 🔍  Resolving packages...
[2/4] 🚚  Fetching packages...
error @nomicfoundation/edr@0.3.8: The engine "node" is incompatible with this module. Expected version ">= 18". Got "16.0.0"
error Found incompatible module.

npx hardhat init 을 시작하면 아래와 같은 선택사항이 나오는데 원하는 프로젝트를 선택해주면 된다.

 

 

3. 컨트랙트 컴파일해보고 테스트 코드 돌려보기

프로젝트 생성이 완료되면 아래와 같이 파일이 생성된 것을 확인할 수 있다. 이 안에는 Lock.sol 컨트랙트와 이 컨트랙트에 대한 테스트 코드가 있다.

 

아래와 같이 해당 컨트랙트를 컴파일해볼 수 있다.

npx hardhat compile

컴파일이 정상적으로 완료되었다면, 이제 테스트 코드도 돌려보자.

npx hardhat test

아래와 같이 모든 테스트 코드가 통과하는 것도 확인할 수 있다.

 

 

npx hadhat test, npx hardhat compile 을 매번 타이핑하기도 귀찮으니 package.json 에 아래와 같이 추가해서 yarn test, yarn build 로 실행이 가능하게끔 만들어줬다.

"scripts": {
  "test": "hardhat test",
  "build": "hardhat compile",
  "hardhat": "hardhat",
  "prepare": "husky install"
},

 

 

4. 원하는 플러그인 추가하기

하드햇에는 다양한 플러그인을 추가하여 사용할 수 있는데, 그 리스트는 여기서 확인가능하다.

https://hardhat.org/hardhat-runner/plugins

나는 일단 hardhat-dependency-compiler 를 추가해려고한다. 일단, 아래와 같이 설치해보자.

yarn add hardhat-dependency-compiler

hardhat.config.ts 에 아래와 같이 추가하고,

import "hardhat-dependency-compiler";

const config: HardhatUserConfig 에 아래와 같이 추가해서 업그레이더블한 컨트랙트를 개발할 준비를 완료했다.

dependencyCompiler: {
    paths: ["@openzeppelin/contracts/proxy/beacon/UpgradeableBeacon.sol"],
    keep: true,
  },

이게 끝은 아니지만 원하는 설정 (prettier라던지 또 다른 모듈 사용이라던지) 을 추가하면 개발 준비 완료!

반응형

댓글