티스토리 뷰

✨ Foundry 프로젝트 관련 명령어

프로젝트 생성

forge init

 이미 git 저장소가 초기화되어 있는 디렉터리 안에서 Foundry 프로젝트를 생성하는 경우, '--no-commit' 플래그를 사용하여 자동으로 커밋을 실행하지 않거나, '--no-git' 플래그를 사용하여 git 저장소를 생성하지 않을 수 있습니다.

$ forge init hello_foundry

 생성된 프로젝트 디렉터리 구조는 다음과 같습니다.

$ cd hello_foundry
$ tree . -d -L 1
.
├── lib
├── script
├── src
└── test

4 directories

프로젝트 빌드

forge build

$ forge build
[⠢] Compiling...
[⠃] Compiling 22 files with 0.8.20
[⠢] Solc 0.8.20 finished in 3.61s
Compiler run successful!

 빌드 이후의 디렉터리 구조는 다음과 같습니다.

$ tree . -d -L 1
.
├── cache
├── lib
├── out
├── script
├── src
└── test

6 directories

 'cache'는 컴파일러가 생성한 캐시 파일을 저장되는 디렉터리이며, 'out'은 컨트랙트 빌드 결과인 ABI 코드가 저장되는 디렉터리입니다. 

프로젝트 테스트

forge test

$ forge test
[⠔] Compiling...
No files changed, compilation skipped

Running 2 tests for test/Counter.t.sol:CounterTest
[PASS] testFuzz_SetNumber(uint256) (runs: 256, μ: 27553, ~: 28409)
[PASS] test_Increment() (gas: 28379)
Test result: ok. 2 passed; 0 failed; 0 skipped; finished in 10.82ms
 
Ran 1 test suites: 2 tests passed, 0 failed, 0 skipped (2 total tests)

기존의 Foundry 프로젝트에서 작업하는 경우

forge install

 'forge install' 명령어를 사용하여 기존 프로젝트의 의존성을 설치해야 합니다.

$ git clone https://github.com/abigger87/femplate
$ cd femplate
$ forge install

💿 의존성 (Dependencies)

 Forge는 기본적으로 git submodules를 사용하여 의존성을 관리합니다. 따라서 스마트 컨트랙트가 포함된 어떤 깃허브 저장소에서도 Forge를 사용하여 작업이 가능합니다.

의존성 추가

forge install

 'forge install <dep>' 명령어를 사용하여 의존성을 추가할 수 있습니다. 이 명령어는 기본적으로 최신 버전의 릴리즈를 설치합니다. 'forge init'과 마찬가지로 '--no-commit' 플래그와 '--no-git' 플래그를 사용할 수 있습니다.

$ forge install transmissions11/solmate

 의존성을 추가하면 다음과 같이 lib 디렉터리에 추가되는 것을 확인할 수 있습니다.

$ tree lib -L 1
lib
├── forge-std
└── solmate

2 directories, 0 files

의존성 재매핑 (remapping)

 Forge는 의존성을 불러오기 쉽게 재매핑할 수 있으며 일부는 자동으로 추론이 가능합니다.

$ forge remappings
ds-test/=lib/solmate/lib/ds-test/src/
forge-std/=lib/forge-std/src/
solmate/=lib/solmate/src/

사용자 정의 재매핑

1. 프로젝트 루트 디렉터리에 'remappings.txt' 파일을 생성하여 재매핑 대상 명시

solmate-utils/=lib/solmate/src/utils/

2. 'foundry.toml' 파일에 'remappings' 섹션 추가하기

remappings = [
    "@solmate-utils/=lib/solmate/src/utils/",
]

재매핑된 의존성 불러오기

 '@' 기호를 사용하여 재매핑된 경로의 의존성을 불러올 수 있습니다.

import "@solmate-utils/LibString.sol";

의존성 업데이트

 'forge update <dep> 명령어를 사용하면 특정 의존성을 최신 커밋 버전으로 업데이트할 수 있습니다.

$ forge update solmate

 또는 'forge update' 명령어를 사용하여 모든 의존성을 최신 커밋 버전으로 업데이트할 수 있습니다.

$ forge update

의존성 삭제

 'forge remove <dep> ...' 명령어를 사용하여 특정 의존성을 삭제할 수 있습니다. '<dep>'는 의존성의 전체 경로 또는 단순히 이름으로 지정할 수 있습니다.

$ forge remove solmate

Hardhat 호환성

 Forge는 npm 패키지로 의존성을 관리하는 Hardhat 스타일의 프로젝트를 지원합니다. Hardhat 호환 모드를 사용하려면 '--hh' 플래그를 사용합니다.

프로젝트 레이아웃

.
├── foundry.toml
├── lib
│   └── forge-std
│       ├── LICENSE-APACHE
│       ├── LICENSE-MIT
│       ├── README.md
│       ├── foundry.toml
│       ├── lib
│       └── src
├── script
│   └── Counter.s.sol
├── src
│   └── Counter.sol
└── test
    └── Counter.t.sol

7 directories, 8 files
  • 'foundry.toml': Forge 프로젝트 설정 파일
  • 'remappings.txt': Forge 프로젝트의 사용자 정의 재매핑 파일
  • 'src/': 스마트 컨트랙트 소스 코드
  • 'test/': 스마트 컨트랙트 테스트 코드, 'test'로 이름이 시작하는 함수를 포함하는 컨트랙트는 테스트 컨트랙트로 간주.
  • 'lib/': Forge 프로젝트의 의존성이 설치되는 디렉터리
  • 'script/': Forge 프로젝트의 스크립트가 저장되는 디렉터리

📖 참고자료

 

Foundry Book

A book on all things Foundry

book.getfoundry.sh

글에서 수정이 필요한 부분이나 설명이 부족한 부분이 있다면 댓글로 남겨주세요!
최근에 올라온 글
최근에 달린 댓글
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Total
Today
Yesterday
글 보관함