지금까지 회사에서 컨트랙트 개발을 위한 프레임워크로 하드햇(Hardhat)을 사용해 왔지만, 유닛테스트 작성의 편의성과 빠른 속도를 위해 파운드리(Foundry)로의 전환을 생각하고 있다. 파운드리가 나에게는 생소하기 때문에, 어떤 특성이 있는지, 그리고 어떻게 사용하는지 알아보고 있는데, 공부한 것들을 정리해보고자 한다.
유투버인 James Bachini가 블로그 https://jamesbachini.com/hardhat-vs-foundry/ 에 정리한 것들을 요약해본다. 참고로 제임스는 2017년부터 컨트랙트 개발을 해왔고, 트러플을 사용하다가, 하드햇으로 옮기고, 다시 파운드리로 옮겼다가, 최근에는 다시 하드햇으로 돌아오고 결국 둘 다 사용하고 있다고 한다.
하드햇
- 하드햇은 Nomic Foundation이 운영하는 오픈소스로서, 이더리움의 스마트컨트랙트 개발을 위한 유연하고 효율적인 프레임워크다.
- 자바스크립트 또는 타입스크립트로 테스트코드를 짜서 수행할 수 있다.
- 스크립트로 EVM 블록체인을 포크하여 로컬에서 테스트를 쉽게 수행할 수 있다.
- https://hardhat.org/docs
파운드리
- 파운드리는 패러다임(Paradigm)이 운영하는 오픈소스 프레임워크이며, Rust로 돌아가고, 솔리디티 스마트 컨트랙트 개발을 위한 다양한 테스트 툴들을 제공한다.
- forge: 유닛테스트 작성을 위한 테스팅 프레임워크
- cast: 트랜잭션들을 수행할 수 있는 CLI 툴
- anvil: 테스트를 위한 로컬 EVM 노드
- chisel: 솔리디티 테스트 툴 (REPL: Read, Evaluate, Print, Loop)
어떤 프레임워크를 선택할까?
하드햇은 자바스크립트/타입스크립트로 테스트를 작성할 수 있고, 굉장히 많은 플러그인들이 있다. 따라서 자바스크립트에 친숙하다면 하드햇이 빠르게 적응할 수 있을 것 같다. 특히, 프론트엔드 개발도 같이 한다면, 테스트코드를 작성하면, 그 코드를 프론트엔드에서 재사용할 수 있다는 장점이 있다. 같이 하지 않더라도, 프론트엔드 개발자가 하드햇의 테스트코드를 보면, JS/TS로 어떻게 컨트랙트를 호출하고 상호작용할지를 바로 쉽게 알 수 있다는 장점이 있다.
반면 파운드리는 솔리디티로 테스트코드를 작성하기 때문에, JS/TS를 모르는 솔리디티 개발자라면, 새로운 언어를 익힐 필요 없이 쉽게 테스트코드를 작성할 수 있다는 장점이 되겠다. 더욱더 큰 장점은 테스트 속도가 훨씬 빠르다는 것이다. 물론, JS/TS도 수초내에 테스트는 끝나겠지만, 파운드리는 러스트 기반의 프레임워크로 유닛테스트 속도가 압도적으로 빠르기 때문에, 엄청난 양의 입력값을 넣어보는 테스트, 즉 Fuzz 테스르를 빠른 시간 내에 수행해 볼 수 있다는 큰 장점이 있다.
위 블로그에서 제임스는,
- 솔리디티 개발자 --> 하드햇
- 컨트랙트 auditor, 보안 전문가 --> 파운드리
라고 생각하는듯하다. 이것은 하드햇으로 테스트코드를 작성하는 것은, 이후 백엔드, 프론트에서 사용할 코드를 미리 작성해 보는 것일 수 있기 때문이다. 파운드리는 시나리오 테스트, 퍼즈 테스트 작성이 상대적으로 용이하다고 한다.
하지만 결론은 둘 다 사용하자...라고. ㅋㅋ
파운드리,하드햇을 같이 사용할 수 있는 플러그인이나 방법들도 많이 나와있으니 충분히 가능하다.
- 같이 쓰는 방법 튜토리얼
아래에서는 둘의 주요한 링크들
하드햇
- 오피셜 사이트: https://hardhat.org/
- 다양한 문서와 튜토리얼을 제공하고 있어서 여기서도 충분히 많이 배워볼 수 있다.
파운드리
- 파운드리북: https://book.getfoundry.sh/
- 공식 사이트로 다양한 설정 방법과 예제를 배워볼 수 있다.
- 어썸파운드리(유용한 링크들 모음): https://github.com/crisgarner/awesome-foundry
'⛓️ 블록체인 > 솔리디티 Solidity' 카테고리의 다른 글
솔리디티를 배우기 위한 무료 리소스들 (0) | 2023.11.12 |
---|