# Foundry를 이용한 컨트랙트 배포

파운드리 (Foundry)는 개발자가 명령 줄 인터페이스(CLI)를 통해 솔리디티 (Solidity)종속성을 관리하고, 컨트랙트를 컴파일, 테스트, 배포하며 블록체인과 상호 작용을 할 수 있도록 도와주는 러스트 (Rust)기반의 이더리움 개발 도구입니다.

파운드리과 디카르고 웨어하우스을 사용하여 지갑 디앱 (dApp)을 구축하는 방법을 살펴보겠습니다.

{% hint style="info" %}
모든 블록체인에 컨트랙트를 배포할 때는 해당 체인의 네이티브 토큰을 사용하여 배포 가스 수수료를 지불해야 하며, 이는 디카르고도 마찬가지입니다. 디카르고 웨어하우스에 배포하기 전에 [포우셋 (faucet)](https://docs.dkargo.io/undefined-4/undefined)을 통해 $DKA 테스트넷 토큰을 획득할 수 있습니다.
{% endhint %}

## STEP 1 - 파운드리 시작

파운드리 설치를 설치하기 위해서 다음 명령을 실행합니다.

* Linux or MacOS

```
curl -L <https://foundry.paradigm.xyz> | bash foundryup
```

* Windows

```
curl --proto '=https' --tlsv1.2 -sSf <https://sh.rustup.rs/> | sh cargo install --
git <https://github.com/foundry-rs/foundry> foundry-cli anvil --bins --locked
```

## STEP 2 - 파운드리 프로젝트 설정

파운드리를 설치했으면 다음 단계는 새 프로젝트의 초기화입니다.

```bash
mkdir helloDka
cd helloDka
forge init .
```

다음은 파운드리의 폴더 구조에 대한 예시입니다.

```bash
/helloDka
├── README.md
├── foundry.toml
├── lib
|  └── forge-std
├── script
|  └── Counter.s.sol
├── src
|  └── Counter.sol
└── test
   └── Counter.t.sol
```

## Step 3 - 예시 컨트랙트: Counter.sol

파운드리의 새로운 프로젝트는 기본적으로 샘플 컨트랙트 <mark style="color:blue;">`counter.sol`</mark>와 샘플 테스트 파일을 포함합니다. <mark style="color:blue;">`counter.sol`</mark> 코드는 변수 Number를 설정할 수 있는 간단한 기능이 구현되어 있습니다.

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

contract Counter {
    uint256 public number;

    function setNumber(uint256 newNumber) public {
        number = newNumber;
    }

    function increment() public {
        number++;
    }
}

```

## Step 4 - 컨트랙트 컴파일

오류 없이 컴파일되면 컨트랙트가 올바른 것이며, 디카르고 웨어하우스에 배포할 준비가 된 것입니다.

```jsx
forge build
```

## Step 5 - 컨트랙트 배포

컨트랙트 배포는 Forge CLI 명령어 한 번으로 간단하게 완료할 수 있습니다.&#x20;

다만, 이 과정에서는 웨어하우스 RPC 엔드포인트와 $DKA를 보유한 개인키가 필요합니다.&#x20;

아래 제공된 RPC 엔드포인트 URL을 사용하시고, 개인 키를 준비해 주세요.

* 웨어하우스 RPC 엔드포인트 : <https://it-full.dknote.net>

```jsx
forge create --rpc-url "<https://it-full.dknote.net>" --private-key YOUR_PRIVATE_KEY  src/Counter.sol:Counter
```

명령어 성공 시, 다음과 같은 응답이 표시됩니다.

<figure><img src="https://4000320385-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FDcRxyI4TUcDlkSjOJywa%2Fuploads%2FrRmFvWjgxxrrRjMsoO9U%2F%E1%84%8F%E1%85%A5%E1%86%AB%E1%84%90%E1%85%B3%E1%84%85%E1%85%A2%E1%86%A8%E1%84%90%E1%85%B3%E1%84%87%E1%85%A2%E1%84%91%E1%85%A91.png?alt=media&#x26;token=1a354de9-90dc-4a41-96fb-b74009db49a6" alt=""><figcaption></figcaption></figure>

컨트랙트를 디카르고 웨어하우스에 성공적으로 배포했습니다.

“Deployed to” 에 명시된 컨트랙트 주소를 복사하여 [디스캐너 (dScanner)](https://warehouse.dscanner.io/)에서 컨트랙트 배포 정보를 검색해보세요.
