
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라던지 또 다른 모듈 사용이라던지) 을 추가하면 개발 준비 완료!
댓글