> ## Documentation Index
> Fetch the complete documentation index at: https://injectivelabs-docs-ai-sdk.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Foundry로 스마트 컨트랙트 상호작용

## 사전 요구 사항

Foundry 프로젝트가 이미 설정되어 있고 스마트 컨트랙트가 성공적으로 배포되어 있어야 합니다.
방법은 [Foundry로 스마트 컨트랙트 배포](./deploy-foundry/) 튜토리얼을 참조하세요.

선택 사항이지만 강력히 권장: 스마트 컨트랙트를 성공적으로 검증했어야 합니다.
방법은 [Foundry로 스마트 컨트랙트 검증](./verify-foundry/) 튜토리얼을 참조하세요.

## 함수 호출 - 쿼리

쿼리는 읽기 전용 작업입니다.
따라서 스마트 컨트랙트 상태는 **업데이트되지 않습니다**.
*상태 변경*이 필요하지 않으므로 지갑, 서명 또는 트랜잭션 수수료(가스)가 필요하지 않습니다.

다음 명령을 사용하여 `value()` 함수를 쿼리합니다:

```shell theme={null}
cast call \
  --rpc-url injectiveEvm \
  ${SC_ADDRESS} \
  "value()"
```

`${SC_ADDRESS}`를 스마트 컨트랙트를 배포한 주소로 바꾸세요.

예를 들어 스마트 컨트랙트 주소가 `0x213ba803265386c10ce04a2caa0f31ff3440b9cf`인 경우 명령은 다음과 같습니다:

```shell theme={null}
cast call \
  --rpc-url injectiveEvm \
  0x213ba803265386c10ce04a2caa0f31ff3440b9cf \
  "value()"
```

다음이 출력됩니다.

```text theme={null}
0x0000000000000000000000000000000000000000000000000000000000000000
```

<Callout icon="info" color="#07C1FF" iconType="regular">
  `0x0000000000000000000000000000000000000000000000000000000000000000`은 `0`을 의미합니다.
  이것은 Solidity의 `uint256`(스마트 컨트랙트의 `value()` 함수의 반환 유형)에 대한 16진수 원시 표현입니다.
</Callout>

## 함수 호출 - 트랜잭션

트랜잭션은 쓰기 작업입니다.
따라서 스마트 컨트랙트 **상태가 업데이트됩니다**.
*상태 변경*이 발생할 수 있으므로 트랜잭션은 지갑으로 서명해야 하며 트랜잭션 수수료(가스)를 지불해야 합니다.

다음 명령을 사용하여 `increment(num)` 함수를 트랜잭션합니다.

```shell theme={null}
cast send \
  --legacy \
  --rpc-url injectiveEvm \
  --gas-price 160000000 \
  --gas-limit 2000000 \
  --account injTest \
  ${SC_ADDRESS} \
  "increment(uint256)" \
  1
```

<Callout icon="info" color="#07C1FF" iconType="regular">
  가스 가격은 *wei*로 표시됩니다.
  1 wei = 10^-18 INJ.
</Callout>

`${SC_ADDRESS}`를 스마트 컨트랙트를 배포한 주소로 바꾸세요.

예를 들어 스마트 컨트랙트 주소가 `0x213ba803265386c10ce04a2caa0f31ff3440b9cf`인 경우 명령은 다음과 같습니다:

```shell theme={null}
cast send \
  --legacy \
  --rpc-url injectiveEvm \
  --gas-price 160000000 \
  --gas-limit 2000000 \
  --account injTest \
  0x213ba803265386c10ce04a2caa0f31ff3440b9cf \
  "increment(uint256)" \
  1
```

성공하면 다음과 유사한 결과가 생성됩니다:

```text theme={null}
Enter keystore password:
blockHash            0xe4c1f5faafc5365c43678135d6adc87104f0e288cddfcdffeb2f5aa08282ca22
blockNumber          83078201
contractAddress
cumulativeGasUsed    43623
effectiveGasPrice    160000000
from                 0x58f936cb685Bd6a7dC9a21Fa83E8aaaF8EDD5724
gasUsed              43623
logs                 []
logsBloom            0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
root
status               1 (success)
transactionHash      0x3c95e15ba24074301323e09d09d5967cc2858e255d1fdfd912758fd8bbd353b4
transactionIndex     0
type                 0
blobGasPrice
blobGasUsed
to                   0x213bA803265386C10CE04a2cAa0f31FF3440b9cF
```

상태를 업데이트한 후 새 상태를 쿼리할 수 있습니다.
결과는 상태 변경을 반영합니다.

```shell theme={null}
cast call \
  --rpc-url injectiveEvm \
  ${SC_ADDRESS} \
  "value()"
```

이번에는 `0 + 1 = 1`이므로 결과가 `0x0000000000000000000000000000000000000000000000000000000000000001`이어야 합니다.

```js theme={null}
0x0000000000000000000000000000000000000000000000000000000000000001
```

## 다음 단계

축하합니다. Foundry를 사용하여 Injective에서 EVM 스마트 컨트랙트를 개발하는 전체 가이드를 완료했습니다!

스마트 컨트랙트는 비기술 사용자에게 사용자 경험을 제공하지 않습니다.
이들을 위해 탈중앙화 애플리케이션을 구축해야 합니다.
이를 위해 [첫 번째 dApp](../dapps/) 가이드를 확인하세요!
