오늘 내가 배운 것
1. Hardhat
Hardhat이란?
하드햇이란 트리플과 비슷한 역할을 하는 Ethereum smartcontract를 개발, 컴파일, 테스트, 디버깅을 하기 위한 도구이자 프레임워크이다.
1. 설치
# hardhat 기본설치
$ npm init
$ npm install --save-dev hardhat
2. 사용하기
$ npx hardhat
npx를 이용하여 프로젝트를 생성할 수 있다.
JS뿐 아니라 TS에 대한 기본적인 설정이 되어 있는 프로젝트를 생성할 수 있다.
설치가 완료되면 아래와 같은 디렉토리가 생긴다.
3. 명령어 확인하기
설치가 완료된 후
$ npx hardhat
명령어를 다시 사용하게 되면 하드햇에서 제공하는 명령어나 옵션을 확인할 수 있다.
사진!!!!!
총 13가지의 명령어가 있고 각 명령어는 아래와 같이 사용한다.
# 초기화
$ npx hardhat clean
$ npx hardhat [명령어]
4. 각 명령어의 역할
- check : 사용자 정의 확인 작업을 수행한다. hardhat.config 파일에 지정되어 있는 로직을 이용해서 검사할 수 있다.
- clean : Hardhat의 캐시를 지우고 모든 컴파일된 스마트 컨트랙트를 삭제한다. 프로젝트를 깨끗한 상태로 재설정하는 데 사용한다.
- compile : 프로젝트의 모든 스마트 컨트랙트를 컴파일한다. 컴파일 과정에서는 스마트 컨트랙트의 소스코드를 EVM 바이트코드로 변환한다.
- console : Hardhat의 콘솔을 연다. 스마트 컨트랙트와 직접 상호 작용할 수 있다.
- coverage: 테스트에 대한 코드 커버리지 보고서를 생성한다. 어떤 코드가 테스트 코드에 포함되었는지, 누락되었는지 확인할 수 있다.
- flatten: 스마트 컨트랙트와 그 종속성을 평면화하여 출력한다. 여러 소스 파일에 걸쳐 분산된 스마트 컨트랙트를 단일 파일 합치는 과정이 있다.
- gas-reporter:merge : 트랜잭션의 가스사용량을 추적하고 보고하는 도구이다. merge를 통해서 여러 가스보고서를 병합한다.
- help : 도움말을 출력해 준다. 특정 명령어에 대한 도움말은 "npx hardhat help [명령어]"를 이용한다.
- node: Hardhat Network위에 JSON-RPC 서버를 시작한다. 이를 이용해서 로컬에서 블록체인 시뮬레이션을 실행할 수 있다.
- run : 프로젝트를 컴파일한 후 사용자 정의 스크립트를 실행한다.
- test : test 디렉토리에 지정되어 있는 파일을 이용하여 Mocha테스트를 진행한다.
- typechain : 컴파일된 스마트 컨트랙트에 대한 Typechain 타이핑을 생성한다. TypeScript에서 타입 안전성을 확보할 수 있다.
- verify : Etherscan에서 컨트랙트를 점증한다. 컨트랙트가 소스코드와 일치하는지 확인하는 과정이다.
5. 각 옵션의 역할
- --config : 사용할 Hardhat config 파일을 지정한다. Default로 현재 작업 디렉토리의 hardhat.config를 이용한다.
- --emoji : hardhat 로그메시지에서 이모티콘을 사용하도록 설정한다.
- --flamegraph : hardhat작업의 CPU 프로필을 수집하고, 그 결과를 flamegraph 형태로 출력한다.
- --help : 도움말 메시지를 보여준다.
- --max-memory : hardhat이 사용할 수 있는 최대 메모리 양을 MB eksdnlfh tjfwjdgksek.
- --network : 이 옵션은 연결할 Ethereum 네트워크를 설정한다. config 파일에 정의된 네트워크를 이용해야 한다.
- --show-stack-traces : 에러가 발생했을 때 스택 추적을 보여주도록 설정한다.
- --tsconfig: 사용할 TypeScript config를 지정한다.
- --typecheck : script, test의 TS 타입 검사를 활성화한다.
- --verbose : Hardhat의 상세 로그를 활성화한다.
- --version : 현재 사용 중인 hardhat의 버전을 출력한다.
6. Hardhat 네트워크 지정하기
// hardhat.config.ts
import { HardhatUserConfig } from "hardhat/config"
import "@nomicfoundation/hardhat-toolbox"
const config: HardhatUserConfig = {
solidity: "0.8.18",
networks: {
ganache: {
url: "http://127.0.0.1:8545", // Ganache URL
chainId: 1337,
accounts: require("./accounts.json").privateKey,
},
arbitrum: {
url: "", // arbitrum-goerli 네트워크 infura
chainId: 421613,
accounts: require("./accounts.json").privateKey,
},
goerli: {
url: "", // ethereum-goerli 네트워크 infura
chainId: 5,
accounts: require("./accounts.json").privateKey,
},
},
}
export default config
hardhat network를 설정하기 위해서 위에 같이 config를 이용하여 네트워크를 관리할 수 있다.
7. Hardhat Scripts
Hardhat에 scripts 디렉토리의 scripts 파일을 이용하여 Ethereum 네트워크와 상호작용을 하거나 컨트렉트 배포와 같은 복잡한 작업을 자동화할 수 있다.
//scripts/deploy.ts
import { ethers } from "hardhat"
async function main() {
const currentTimestampInSeconds = Math.round(Date.now() / 1000)
const unlockTime = currentTimestampInSeconds + 60
const lockedAmount = ethers.parseEther("0.001")
const lock = await ethers.deployContract("Lock", [unlockTime], {
value: lockedAmount,
})
await lock.waitForDeployment()
console.log(
`Lock with ${ethers.formatEther(lockedAmount)}ETH and unlock timestamp ${unlockTime} deployed to ${lock.target}`
)
}
// We recommend this pattern to be able to use async/await everywhere
// and properly handle errors.
main().catch((error) => {
console.error(error)
process.exitCode = 1
})
기본 프로젝트 설치 시 예시로 있는 scripts 파일이다.
배포를 위한 추가적인 scripts를 작성하여 배포를 진행할 수 있다.
8. 배포하기
배포하기 위해서는 run 명령어가 필요하다.
$ npx hardhat run --network goerli scripts/[스크립트파일이름]
#예시
$ npx hardhat run --network goerli scripts/deploy.ts
이러한 과정을 통해서 hardhat을 이용하여 지정해 놓은 goerli 네트워크에 배포를 진행할 수 있게 된다.
'시작 > TIL(Today I Learned)' 카테고리의 다른 글
230814 - Electron 구조 (0) | 2023.08.14 |
---|---|
230811 - Electron.js 기초 (0) | 2023.08.11 |
230718 - [기업협약] 블록체인 지갑 애플리케이션 - NFTin (0) | 2023.07.20 |
230607~230625 블록체인 지갑 만들기 프로젝트 (0) | 2023.06.24 |
230603 - ERC721 표준 분석하기 (0) | 2023.06.03 |
댓글