Published On

HardHat 이란?


HardHat 공식문서를 참고하여 작성하였습니다.

Hardhat이란?

Hardhat은 이더리움 스마트 컨트렉트(계약) 개발을 위한 강력한 개발 환경입니다.

개발자들은 Hardhat을 사용해 Solidity로 작성된 스마트 계약을 컴파일하고, 테스트하며, 블록체인 네트워크 상에 배포할 수 있습니다.

특히, 디버깅테스트가 용이하도록 설계되어 있어, 개발 효율성을 크게 높여주는 도구로 각광받고 있습니다.

Hardhat은 다음과 같은 주요 기능을 제공합니다.

  • Solidity 컴파일러: Solidity 스마트 계약을 자동으로 컴파일하여 배포할 수 있습니다.
  • 테스트 프레임워크: 스마트 계약의 테스트를 손쉽게 수행할 수 있습니다.
  • 디버깅: 스마트 계약이 실행 중일 때 문제를 쉽게 찾을 수 있는 강력한 디버깅 기능을 제공합니다.
  • 플러그인 시스템: 필요한 기능을 확장할 수 있는 플러그인들을 제공합니다. 대표적인 플러그인으로는 Ethers.js, Waffle 등이 있습니다.

설치

npx hardhat init

# 아래와 같은 선택지들 선택
✔ What do you want to do? · Create a TypeScript project
✔ Hardhat project root: · /...
✔ Do you want to add a .gitignore? (Y/n) · y
✔ Do you want to install this sample project's dependencies with npm (hardhat @nomicfoundation/hardhat-toolbox)? (Y/n) · y

Hardhat 디렉토리 구조

my-hardhat-project/
├── contracts/
│ └── Lock.sol
├── scripts/
│ └── deploy.ts
├── test/
│ └── Lock.ts
├── hardhat.config.ts
├── package.json
└── node_modules/

contracts/

이 디렉토리에는 스마트 계약 파일들이 위치합니다. 프로젝트 초기화 시 기본적으로 Lock.sol이라는 예제 스마트 계약이 생성됩니다.

이 디렉토리에서 Solidity로 스마트 계약을 작성하게 됩니다.

scripts/

deploy.ts 파일은 스마트 계약을 이더리움 네트워크(로컬 네트워크나 메인넷 등)에 배포하는 스크립트를 담고 있습니다.

이 파일을 수정하여 스마트 계약 배포 과정을 커스터마이즈할 수 있습니다.

test/

test/ 디렉토리는 스마트 계약을 테스트하기 위한 파일을 담고 있습니다. 기본적으로 Lock.ts 파일이 생성되며, Mocha 및 Chai를 이용해 작성된 테스트 코드가 포함되어 있습니다.

이곳에서 스마트 계약의 동작을 검증하는 테스트 코드를 작성하게 됩니다.

hardhat.config.ts

이 파일은 Hardhat 프로젝트의 핵심 설정 파일입니다. Solidity 컴파일러 버전, 네트워크 설정, 플러그인 사용 여부 등을 이곳에서 정의합니다.

require("@nomiclabs/hardhat-waffle");

module.exports = {
  solidity: "0.8.24",
  networks: {
    localhost: {
      url: "http://127.0.0.1:8545",
    },
  },
};

Solidity란?

Solidity는 이더리움 플랫폼에서 스마트 계약을 작성하기 위한 프로그래밍 언어입니다.

이 언어는 JavaScript, Python과 유사한 문법을 사용하며, 주로 이더리움 가상 머신(EVM)에서 실행되는 계약을 작성하는 데 사용됩니다.

Solidity는 이더리움 네트워크 상에서 자동으로 실행되는 프로그램인 스마트 계약을 구현하기에 최적화되어 있습니다.

스마트 계약은 분산형 애플리케이션(DApps)에서 중요한 역할을 하며, 금융 서비스, 공급망 관리, 디지털 자산 관리 등 다양한 분야에서 사용됩니다.

비교 항목SolidityJavaScriptPython
용도스마트 계약 개발웹, 서버, 다양한 애플리케이션데이터 분석, 웹 개발, 머신러닝
문법JavaScript 및 Python과 유사동적 타입 언어동적 타입 언어
타입정적 타입동적 타입동적 타입
네트워크 실행이더리움 네트워크 상에서 실행일반적으로 웹 브라우저 또는 서버에서 실행로컬 머신 또는 서버에서 실행