티스토리 뷰
✨ 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 프로젝트의 스크립트가 저장되는 디렉터리
📖 참고자료
글에서 수정이 필요한 부분이나 설명이 부족한 부분이 있다면 댓글로 남겨주세요!
'Solidity > Foundry' 카테고리의 다른 글
Foundry 프로젝트에서 Hardhat 같이 사용하기 (0) | 2024.04.21 |
---|---|
[Foundry] .env 파일 사용하지 마세요 (0) | 2024.02.23 |
Inline Assembly를 사용해 ERC-20 구현하기 & Inline Assembly 활용하기 (1) | 2024.02.17 |
Foundry 테스트 작성하기 (0) | 2023.10.28 |
Foundry 설치 (0) | 2023.10.22 |