Hardhat이란? & 설치 및 사용법

HyeongA·2023년 6월 14일
2

Blockchain_dev

목록 보기
18/20
post-thumbnail

📝 Hardhat이란?

  • 개발자들이 더욱 쉽게 스마트 컨트랙트를 개발하고 관리할 수 있도록 도와주는 소프트웨어
  • remix 없이 로컬에서 컨트랙트 만들고 배포가능
  • 주로 ethers.js와 함께 사용

💻 Hardhat (window)

설치 → 프로젝트 생성 → 개발 → 배포 (로컬 / testnet) → 배포확인

1. 설치 (cmd 관리자 권한으로 실행)

//기본 환경 세팅 (Node.js)
npm init
//Hardhat 설치
npm install --save -dev hardhat
npm install --save -dev @nomicfoundation/hardhat-toolbox //추후오류방지

2. 프로젝트 생성

  • npx hardhat => 계속 enter

3. 개발

  • contracts/Lock.sol파일 수정
// sample 코드 
// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.9;
// Uncomment this line to use console.log
// import "hardhat/console.sol";
contract Lock {
    uint public a;
    function getA() public view returns(uint) {
        return a;
    }
    function setA(uint _a) public {
        a = _a;
    }
    function setA2(uint _a) public {
        a = _a*2;
    }
}

4. compile

  • npx hardhat compile

5,6. 배포 및 배포확인

local과 testnet에서 배포하는 방법 아래 작성


💻 local에 배포하기

5. 배포

  • scripts/deploy.js파일 수정
//샘플코드
const hre = require("hardhat");
async function main() {
  const LOCK = await hre.ethers.getContractFactory("Lock"/*contract명*/);
  const lock = await LOCK.deploy();
  console.log("LOCK Info : ", lock);
  console.log("LOCK deployed to : ", lock.target);
}
main().catch((error) => {
  console.error(error);
  process.exitCode = 1;
});

  • 터미널을 2개 생성
  • (오) npx hardhat node ; 로컬 테스트넷 (가나슈와 동일한 역할)
    (왼) npx hardhat run --network localhost .\scripts\deploy.js

6. 배포 확인 (왼쪽 터미널에서 실행)

npx hardhat console --network localhost
//사용할 컨트랙트 설정
const C_lock = await ethers.getContractFactory("Lock"/*컨트랙트명*/)
const ss = await C_lock.attach('Lock의 contract address')
//methods조회
ss.interface.fragments
//컨트랙트 함수 사용
await ss.a()
await ss.getA()
await ss.setA(123)

💻 testnet(goerli)에 배포하기

5. 배포

  • hardhat.config.js파일 수정 (.env에 작성해도 됨)
//샘플코드
require("@nomicfoundation/hardhat-toolbox");
const PVK =
  "개인키";
module.exports = {
  solidity: "0.8.17",
  networks: {
    goerli: {
      url: `https://goerli.infura.io/v3/Infura에서 받은 api키`,
      accounts: [PVK],
    },
  },
};

  • npx hardhat run --network goerli ./scripts/deploy.js

6. 배포 확인

npx hardhat console --network goerli
//사용할 컨트랙트 설정
const C_lock = await ethers.getContractFactory("Lock"/*컨트랙트명*/)
const ss = await C_lock.attach('Lock의 contract address')
//methods조회
ss.interface.fragments
//컨트랙트 함수 사용
await ss.a()
await ss.getA()
await ss.setA(123)


.env파일에 api키 저장하고 싶은 경우

  • npm i dotenv
  • hardhat.config.js와 동일한 위치에 .env파일 생성
  • .env작성 및 hardhat.config.js수정
//hardhat 코드
require("dotenv").config();
require("@nomicfoundation/hardhat-toolbox");
module.exports = {
  solidity: "0.8.17",
  etherscan: {
    apiKey: process.env.ETHERSCAN_API,
  },
  networks: {
    goerli: {
      url: `https://goerli.infura.io/v3/${process.env.INFURA_API}`,
      accounts: [process.env.PVK],
    },
  },
};

➕ npx hardhat node가 안될 때

  • 이유 : 다른 노드가 제대로 꺼지지 않아서
  • 해결법
    netstat -ano | findstr :8545
    stop-process PID(LISTENING에 뜨는 번호)
profile
Solidity | React | Python

0개의 댓글