본문 바로가기
블록체인 backEnd

Foundry 학습하기

by gun_poo 2024. 1. 25.

장점

  • 자바 기반 개발환경 대비 실행속도가 빠르다.
  • 솔리디티만으로 테스트 코드를 작성 가능하다
  • 유용한 테스팅 라이브러리 및 내장도구가 존재한다
  • 하드햇과 호환이 가능하다

단점

  • 러닝커브
  • 업그레이더블 플러그인
    • 하드햇을 구성하여 업그레이드 배포만 하드햇 사용으로 우회 가능

 

설치

1.

curl -L https://foundry.paradigm.xyz | bash

 

2.

foundryup

프로젝트 생성

$ forge init yourProjectName
.
├── foundry.toml
├── lib
│   └── forge-std
│       ├── foundry.toml
│       ├── lib
│       ├── LICENSE-APACHE
│       ├── LICENSE-MIT
│       ├── package.json
│       ├── README.md
│       ├── scripts
│       ├── src
│       └── test
├── README.md
├── script
│   └── Counter.s.sol
├── src
│   └── Counter.sol
└── test
    └── Counter.t.sol

10 directories, 10 files

 

우선 프로젝트를 생성하게 되면 샘플 컨트렉트등이 담긴 구조가 생성된다.

작동 방식을 익히기 위해 샘플을 통해 알아보려 한다.

 

하드햇에서는 compile을 하는데 여기서는 build를 사용한다

 

빌드

$ forge build

 

테스트

// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.13;

import {Test, console} from "forge-std/Test.sol";
import {Counter} from "../src/Counter.sol";

contract CounterTest is Test {
    Counter public counter;

    function setUp() public {
        counter = new Counter();
        counter.setNumber(0);
    }

    function test_Increment() public {
        counter.increment();
        assertEq(counter.number(), 1);
    }

    function testFuzz_SetNumber(uint256 x) public {
        counter.setNumber(x);
        assertEq(counter.number(), x);
    }
}
$forge test

 

테스트할 컨트랙트를 import 하고 test를 상속한다.

setup 함수에서 카운터가 새 카운터가 동일하다는 함수를 작성해준다

이하 테스트 코드를 작성한다.

forge 표준 라이브러리 참조 링크

https://book.getfoundry.sh/reference/forge-std/

 

이하 자세 한 내용은 파운더리 docs를 참조하길 바란다. 내용이 많다. 

https://book.getfoundry.sh/

 

Foundry Book

A book on all things Foundry

book.getfoundry.sh

 

이를 활용하여 컨트랙트 개발을 진행하는 방향으로 전환하겠다.

댓글