> For the complete documentation index, see [llms.txt](https://whs3-doge5k.gitbook.io/smartcontract-security-docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://whs3-doge5k.gitbook.io/smartcontract-security-docs/basics/6.-foundry.md).

# 6. Foundry

<figure><img src="https://2462457462-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FLf9vwRuaws92ULgGvzTi%2Fuploads%2FbvQSn9pxASoyfTYg4p4U%2Fimage.png?alt=media&amp;token=5e815d40-bbbf-469d-8afd-133b693113e8" alt=""><figcaption></figcaption></figure>

파운드리는 solidity기반의 스마트 컨트랙트를 테스트하고 개발하기 위해 만들어진 개발 도구 모음이다.

## 목차

* [설치](/smartcontract-security-docs/basics/6.-foundry/undefined.md)
* [forge](/smartcontract-security-docs/basics/6.-foundry.md)
  * [forge init](/smartcontract-security-docs/basics/6.-foundry/forge/forge-init.md)
  * [forge build](/smartcontract-security-docs/basics/6.-foundry/forge/forge-build.md)
  * [forge test](/smartcontract-security-docs/basics/6.-foundry/forge/forge-test.md)
  * [forge create](/smartcontract-security-docs/basics/6.-foundry/forge/forge-create.md)
  * [forge script](/smartcontract-security-docs/basics/6.-foundry/forge/forge-script.md)
  * [forge \<subcommend> --debug](/smartcontract-security-docs/basics/6.-foundry/forge/forge-less-than-subcommend-greater-than-debug.md)
* [cast](/smartcontract-security-docs/basics/6.-foundry/cast.md)
  * [cast send](/smartcontract-security-docs/basics/6.-foundry/cast/cast-send.md)
  * [cast call](/smartcontract-security-docs/basics/6.-foundry/cast/cast-call.md)
  * [cast balance](/smartcontract-security-docs/basics/6.-foundry/cast/cast-balance.md)
  * [cast tx](/smartcontract-security-docs/basics/6.-foundry/cast/cast-tx.md)
  * [cast block](/smartcontract-security-docs/basics/6.-foundry/cast/cast-block.md)
  * [cast storage](/smartcontract-security-docs/basics/6.-foundry/cast/cast-storage.md)
* [anvil](/smartcontract-security-docs/basics/6.-foundry/anvil.md)

***

## 개요

파운드리 기능

* 테스트
* 트랜잭션 전송
* 로컬 테스트 환경 제공
* 복합적 트랜잭션 전송

이러한 기능을 사용하기 위해 파운더리는 크게 3가지로 구성된다.

***

### forge

forge : 컨트랙트의 컴파일, 테스트, 배포 등을 담당하는 도구이다.

### cast

cast : 배포된 컨트랙트나 네트워크에 대해 **직접적인 상호작용**을 가능하게 해주는 CLI 도구이다. **상태 조회, 트랜잭션 전송, 디버깅** 등을 할 수 있다.

### anvil

anvil : 로컬 개발용 이더리움 노드를 실행하는 도구이다. 테스트용 체인을 제공하며 트랙잭션 시뮬레이션, 로컬 테스트넷 환경 구성 등을 할 수 있다.

### forge Standard Library

테스트 작성을 더 쉽고, 빠르게, 사용자 친화적으로 만들어 주는 유용한 계약 모음이다.

대표적 라이브러리

Vm.sol : 치트코드 인터페이스

Script.sol : 솔리디티 스크립팅 위한 기본 유틸리티

Test.sol : 표준 라이브러리 , console.sol, vm.sol을 포함하고 기본적으로 사용하는 라이브러리

```solidity
import {선택적 심볼} form [파일 위치];
```

솔리디티 코드에서 위와같이 명시한다.

forge-std/Test.sol 에서 Test 컨트랙트를 가져오겠다는 뜻

### Chisel

대화형으로 코드에 빠른 피드백을 준다.

```solidity
$ chisel
```

chisel모드가 시작되고부터는 solidity 코드를 작성할 때 바로바로 피드백을 준다.

변수를 선언하면 현재 변수와 메모리 상태를 보여준다.

### foundry.toml

여기에 써있는 내용들을 forge,cast,anvil 명령어가 인식한다.

***

## 기능(기본적 명령어)

| 도구        | 명령어          | 설명                                |
| --------- | ------------ | --------------------------------- |
| **Forge** | forge init   | 새 Foundry 프로젝트 디렉토리 초기화           |
|           | forge build  | 스마트 컨트랙트 컴파일 및 아웃풋 생성             |
|           | forge test   | Solidity 기반 테스트 실행                |
|           | forge create | 컨트랙트 배포 트랜잭션 생성 (옵션에 따라 실제 배포 가능) |
|           | forge script | 배포 및 상호작용 스크립트 실행 (테스트 or 브로드캐스트) |
|           | forge debug  | 트랜잭션을 디버깅                         |
| **Cast**  | cast send    | 상태 변경 함수 호출 (트랜잭션 발생, 가스 소모)      |
|           | cast call    | 조회용 함수 호출 (트랜잭션 아님, 가스 없음)        |
|           | cast balance | 주소의 이더 잔액 확인                      |
|           | cast tx      | 트랜잭션 상세 정보 조회                     |
|           | cast block   | 블록 정보 조회                          |
| **Anvil** | anvil        | 로컬 이더리움 개발 네트워크 실행 (테스트 노드)       |
