티스토리 뷰

반응형

hardhat은 이더리움 소프트웨어 개발환경으로 스마트 컨트랙트와 DApp을 개발, 컴파일, 디버깅, 배포하기위한 완전한 개발환경을 제공한다. hardhat은 반복된 작업(like 검증 과정)을 간단한 명령어 한줄로도 자동화 기능을 제공하고 유연하게 개발이 가능하다. 또한 다양한 tasks와 plugins를 사용해 개발자가 원하는 기능을 커스터마이즈할 수 있다(plugin list : https://hardhat.org/hardhat-runner/plugins) 또한 hardhat은 검증 및 테스트 코드 작성, 명령어 한줄로 자동화 구현이 가능하기에 개발에 많은 편의성을 제공한다.

 

본인은 스마트 컨트랙트 개발에 remix를 사용해왔는데, 우선 리믹스는 설치없이 웹 브라우저에서 단순하고 직관적으로 컨트랙트를 개발, 배포할 수 있지만 solidity를 이용한 개발환경을 제공할뿐 다른 언어를 컴파일하는 기능은 제공하지 않는다. 온전한 DApp 개발을 위해선 trupple을 이용해야할 것이다. 하지만 trupple도 기능 제공에 개선이 필요한 점이 있다고 들었으며 다양한 도구를 지원하고 속도가 빠른 hardhat 도입이 필요하다 느꼈다.


Setting

hardhat을 설치해보겠다.

hardhat 버전은 2.10.1을 사용했으며 node 12 버전 이상, npm 7 버전 이상으로 사용해야 설치가 가능할 것이다.

 

스마트 컨트랙트를 배포하기 위해 hardhat을 설치하기 전 아래와 같은 과정을 사전에 완료해야할 것이다.

본인은 테스트넷을 괴리를 사용하므로 괴리에서 이더를 발급 받아 준비한다.

여러분은 자주 쓰는 테스트넷을 사용해도 괜찮다.

1. Alchemy 계정 생성 & API Key 발급
2. 메타마스크 계정 생성
3. 괴리(Go'erli) 테스트넷 faucet 실행
4. VS code 설치다.

위 과정에서 모르는 부분은 아래 링크를 참고 바란다.

 

[Ethereum] 알케미(Alchemy) API Key 발급받는 방법

스마트 컨트랙트를 이더리움 블록체인에 배포하려면 풀 노드에서 네트워크에 참여해야 한다. 실제로 풀 노드를 운영하는 것 보다 알케미와 같이 블록체인 인프라를 제공하는 BaaS 서비스를 이용

jerryjerryjerry.tistory.com

 

 

[Ethereum] Goerli 테스트넷 Faucet 이더 얻기

이더리움 Goerli 테스트넷에서 이더를 얻는 방법을 소개한다. 1. Alchemy Testnet Faucet https://goerlifaucet.com/ Goerli Faucet A fast and reliable Ethereum Goerli testnet faucet for blockchain develope..

jerryjerryjerry.tistory.com


Hardhat 설치

우선 터미널을 켜고 프로젝트를 실행할 경로로 이동한 뒤

npm init 명령어로 package.json을 생성해주자

npm init -y

 

다음은 hardhat을 설치하는 아래의 명령어를 입력해주자

npm install --save-dev hardhat

잘 설치했다면 아래와 같은 로그가 떴을 것이다.

$ npm install --save-dev hardhat

> secp256k1@4.0.3 install /Users/jerry/workspace/mycontract/node_modules/secp256k1
> node-gyp-build || exit 0


> keccak@3.0.2 install /Users/jerry/workspace/mycontract/node_modules/keccak
> node-gyp-build || exit 0


> core-js-pure@3.24.1 postinstall /Users/jerry/workspace/mycontract/node_modules/core-js-pure
> node -e "try{require('./postinstall')}catch(e){}"

Thank you for using core-js ( https://github.com/zloirock/core-js ) for polyfilling JavaScript standard library!

The project needs your help! Please consider supporting of core-js:
> https://opencollective.com/core-js 
> https://patreon.com/zloirock 
> bitcoin: bc1qlea7544qtsmj2rayg0lthvza9fau63ux0fstcz 

Also, the author of core-js ( https://github.com/zloirock ) is looking for a good job -)

npm notice created a lockfile as package-lock.json. You should commit this file.
npm WARN mycontract@1.0.0 No description
npm WARN mycontract@1.0.0 No repository field.

+ hardhat@2.10.1
added 306 packages from 293 contributors and audited 306 packages in 53.654s

58 packages are looking for funding
  run `npm fund` for details

found 0 vulnerabilities

다음은 npx 로 hardhat을 실행시켜 사용가능한 task와 plugin들을 살펴보자

아래는 hardhat에서 기본적으로 제공하는 기능들이다

확인해뒀다가 필요할때 적절히 사용해보자

$ npx hardhat
Hardhat version 2.10.1

Usage: hardhat [GLOBAL OPTIONS] <TASK> [TASK OPTIONS]

GLOBAL OPTIONS:

  --config              A Hardhat config file. 
  --emoji               Use emoji in messages. 
  --help                Shows this message, or a task's help if its name is provided 
  --max-memory          The maximum amount of memory that Hardhat can use. 
  --network             The network to connect to. 
  --show-stack-traces   Show stack traces. 
  --tsconfig            A TypeScript config file. 
  --verbose             Enables Hardhat verbose logging 
  --version             Shows hardhat's version. 


AVAILABLE TASKS:

  accounts      Prints the list of accounts
  check         Check whatever you need
  clean         Clears the cache and deletes all artifacts
  compile       Compiles the entire project, building all artifacts
  console       Opens a hardhat console
  flatten       Flattens and prints contracts and their dependencies
  help          Prints this message
  node          Starts a JSON-RPC server on top of Hardhat Network
  run           Runs a user-defined script after compiling the project
  test          Runs mocha tests

To get help for a specific task run: npx hardhat help [task]

npx는 npm 버전 5.2.0 이상이면 npx 를 이용할 수 있다.

npx는 node.js를 실행시키는 하나의 도구로써 npm을 보다 더 유용하게 쓰고자 나온 패키지 도구이다.

npm을 사용해서 패키지 설치시 패키지의 경로를 package.json에 경로를 모두 정의해서 써야하고,

패키지 버전이 업데이트 되었을때 일일히 업데이트를 해줘야한다.

npx는 이 과정을 줄여줄 수 있어 유용하게 쓰인다.

 

npx hardhat 을 입력하면 [What do you want to do?] 라고 뜨며 입력지 3개가 뜬다.

hardhat은 typescript 사용을 권장하지만

지금은 간단한 테스트만을 하기 위해 3번째 [Create an empty hardhat.config.js]를 선택해준다.

  Create a JavaScript project
  Create a TypeScript project
> Create an empty hardhat.config.js
  Quit
$ npx hardhat
888    888                      888 888               888
888    888                      888 888               888
888    888                      888 888               888
8888888888  8888b.  888d888 .d88888 88888b.   8888b.  888888
888    888     "88b 888P"  d88" 888 888 "88b     "88b 888
888    888 .d888888 888    888  888 888  888 .d888888 888
888    888 888  888 888    Y88b 888 888  888 888  888 Y88b.
888    888 "Y888888 888     "Y88888 888  888 "Y888888  "Y888

👷 Welcome to Hardhat v2.10.1 👷‍

✔ What do you want to do? · Create an empty hardhat.config.js
✨ Config file created ✨

Give Hardhat a star on Github if you're enjoying it! 💞✨

     https://github.com/NomicFoundation/hardhat

 

솔리디티 개발에 필요한 두가지 플러그인을 더 설치할 것이다

먼저 hardhat 업그레이드 플러그인 설치하자

hardhat은 기본적으로 ethers.js를 제공하지만, 더 확장된 런타임 환경을 사용하기위해 아래 명령어를 입력해 플러그인을 설치해준다

npm install --save-dev @openzeppelin/hardhat-upgrades
npm install --save-dev @nomiclabs/hardhat-ethers ethers

 

그 다음 hardhat.config.js 에서 방금 설치한 2개의 패키지 경로를 입력해준다.

// hardhat.config.js
require("@nomiclabs/hardhat-ethers");
require('@openzeppelin/hardhat-upgrades');

/** @type import('hardhat/config').HardhatUserConfig */
module.exports = {
  solidity: "0.8.9",
};

환경변수

 

프로젝트 환경변수 설정을 위해 dotenv를 설치해주자

npm install --save-dev dotenv

설치가 끝나면 .env 파일을 생성한 뒤 두가지 항목을 추가한다.

// .env
ALCHEMY_URL = “<URL-FROM-ALCHEMY-PROJECT>”
METAMASK_KEY = “<YOUR-PRIVATE-KEY>”

 

ALCHEMY_URL은 스마트 컨트랙트가 배포되는 위치이며

알케미 사이트에서 API key가 포함된 URL을 복사해서 입력해준다.

 

메타마스크의 개인키는 

[메타마스크 옵션] > [계정 세부 정보] > [비공개 키 내보내기] 과정을 통해 얻을 수 있다.

METAMASK_KEY는 보내는 사람(from) 주소가 되면서 이 지갑주소에서 가스비가 차감된다.

 

hardhat은 git같은 버전 관리 시스템에 기본적으로 .gitignore 파일을 제공 중이라

git에 푸시할때 .env 파일이 올라갈 염려는 하지 않아도 된다.


여기까지 완료됐다면 hardhat 환경설정이 마무리된 것이다.

다음은 스마트 컨트랙트를 간단하게 작성해서 배포, 실행 해보도록 한다.

배포, 실행에 관한건 아래 글을 참고하길 바란다.

 

[Ethereum] hardhat으로 contract 작성 & 배포하기

hardhat으로 contract를 작성하고 배포해보겠다. 이 과정을 수행하기 위해선 반드시 사전에 환경설정이 완료되어야한다. 환경설정이 필요하다면 아래 링크를 참고해서 세팅해주자. [Ethereum] hardhat 설

jerryjerryjerry.tistory.com

 

반응형
댓글
공지사항