dev/Solidity

Hardhat vs Truffle

_April 2022. 6. 2. 05:07

하드햇과 트러플은 모두 블록체인, 이더리움을 개발할때 환경설정을 도와주는 툴이다.

구체적으로는 테스트 노드의 EVM에서 스마트컨트랙트를 compile, run, test 하는과정을 도와준다.

둘다 Javascript 기반 환경을 제공하는데, 예전 튜토리얼을 보면 대부분 트러플을 추천하는데

요새 튜토리얼은 대부분 하드햇을 추천한다. 

어떤 차이와 장단점이 있는지 정리해보려한다.

 

Remix도 좋은 툴이지만 둘과는 완전히 맥락이 다르므로 이번에는 패스.

 

Github

Hardhat

3.3k stars, 마지막 업데이트 1시간 전

 

Truffle

13.2k stars, 마지막 업데이트 1달 전

 

이것만보면 하드햇을 쓰는건 모험처럼 보일수도 있다. 

 

Solidity2021 survey

2020년엔 분명 하드햇-트러플 유저가 반반이었는데

하드햇유저수가 트러플을 완전히 추월해버렸다.

 

제작사

Hardhat

Nomics Labs에서 만들었다. 여기도 계속 개발할 사람을 고용중인것을 보니 팀의 상황은 좋아보인다.

 

Truffle

Metamask로도 유명하고, 이번에 텍사스 컨센시스 행사를 여는 그 Consensys 사가 만들었다. 

정확히는 만든게아니라 트러플팀을 인수한건데, 2020년에 인수해서 계속 트러플을 개선할 인력을 고용중이다.

Ganache라는 스마트컨트랙트를 테스트용 로컬 이더리움 블록체인을 제공한다.

 

 

문서

 

하드햇문서는 심플하고 명료하고 잘된다. 특히 튜토리얼 문서를 따로 제공하는데, 정말 고맙다.

 

트러플문서도 꼼꼼하게 잘나와있다. 그런데 아마 한번 장벽에 부딪힐텐데,

가나슈를 이용해 로컬 이더리움 네트워크를 환경설정 세팅하는 예제가 기본예제이기 때문이다.

처음 컨트랙트를 개발하는사람한테는 좀 어려운 개념이다.

대부분의 초보 개발자는 로컬 이더리움 네트워크 / 가나슈를 돌리기 원하지않는다.

엔드포인트를 Infura나 alchemy걸 쓰지.

그런데 트러플은 기본설정을 가나슈로 잡아버리면서 

module.exports = {
  // See <http://truffleframework.com/docs/advanced/configuration>
  // for more about customizing your Truffle configuration!
  networks: {
    development: {
      host: "127.0.0.1",
      port: 7545,
      network_id: "*" // Match any network id
    },
    develop: {
      port: 8545
    }
  }
};

이렇게 디폴트로 로컬연결 정보를 제공하기때문에 초보 개발자들은 혼란스러워하다가

하드햇으로 탈주해버린다.

생태계 유지도 좋지만 옵션으로 둬야지(알케미나나 인푸라 연결문서도 병기했어야한다고봄)

모든문서에서 가나슈 원툴을 강권하면 겁먹은 초보개발자들이 이탈한다고요~!

 

하드햇에서는 설정이 없을시 하드햇자체 이더리움 네트워크를 기본으로 제공하기때문에

더욱 대비되는 부분이다.

 

커뮤니티

둘다 Stackoverflow 나 Stackexchange 에서 물어보는게 보통이고, 

아니면 깃허브에 가서 이슈나 커뮤니티탭에 가면 대답을 잘해준다.

Hardhat 은 커뮤니티탭만 지원하고 (이슈는 정말 업무정리용으로만 사용)

Truffle 은 깃허브의 모든탭이 오픈되어있다. 따로 커뮤니티도 운영했던것 같은데 깃허브로 통합됨.

 

개인적으로 커뮤니티탭만 지원하는 곳은 소통이 덜된다 느낀적이 많긴한데

그래도 문제는 결국 다 해결되곤 했기에...

트러플이 더 오래되어서 그런가 커뮤니티는 좀더 잘되어있는 느낌이다.

 

테스트

Hardhat

주로 Ethers.js  + Waffle(Mocha&chai) 조합을 쓴다. 당연히 Ethers.js 대신 web3.js를 써도 된다.

 

Truffle

주로 web3.js + Waffle(Mocha&chai) 조합을 쓴다.

 

Library

하드햇은 여러 라이브러리를 제공한다

HRE - Hardhat Runtime Environment

하드햇 네트워크 위에서 작동하는 web3 object를 제공한다.

web3 object 은 blockchain과 상호작용하려면 필요한데, 

hre 위에서 쉽게 Ethers.js 나 web3.js 를 부를수있다.

import { ethers, web3 } from "hardhat";

 

또한 하드햇에서는 컨트랙트 내에서도 console.log 를 찍을수 있다!! (하드햇 자체 네트워크만 지원함)

 

+이뿐만이 아니라 하드햇에서는 바로 이더스캔에 verify 가 가능하다.

+hardhat 플러그인인 Typechain을 이용해서 타입스크립트사용도 편하다.

 

기본 파일

 

하드햇은 만들면 바로 왼쪽같이 기본컨트랙트, 배포 스크립트, 테스트폴더와 파일이 생긴다.

트러플은 빈파일이 생기기 때문에 튜토리얼에 나온대로 truffle box 를 사용해 권장 예제를 받아왔다.

하드햇과 비슷한 모양새이다.

migration이 script 와 같은 역할, 즉 deploy기능을 한다.

 

 

뭘써도 상관없지만 민심은 하드햇으로 기운듯 하다.

하드햇 = 트러플+가나슈 라고 추천하는 곳도 있다

지금부터 배운다면 하드햇을 선택하는게 더 편하지 않을까 싶다.

로컬이더리움 안돌리고 하드햇 이더리움 네트워크를 무노력으로 쓸수있다니 너무나 꿀인것.

 

외전

개인적으로 트러플이 비호감인 이유

구글링하면 자꾸 요리법이 나온다..

이름을 잘못지었다ㅠㅠ 구글링이 너무 힘들다.

하드햇보다 더 힘들다