> ## 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/) チュートリアルを参照してください。

## 関数の呼び出し - クエリ

クエリは読み取り専用の操作です。
そのため、スマートコントラクトの状態は**更新されません**。
*状態変更なし*のため、ウォレット、署名、トランザクション手数料（gas）は不要です。

以下のコマンドで `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>

## 関数の呼び出し - トランザクション

トランザクションは書き込み操作です。
そのため、スマートコントラクトの**状態が更新されます**。
*状態変更*が発生する可能性があるため、トランザクションはウォレットで署名され、トランザクション手数料（gas）を支払う必要があります。

以下のコマンドで `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">
  gas priceは *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()"
```

今回の結果は `0x0000000000000000000000000000000000000000000000000000000000000001` です。`0 + 1 = 1` だからです。

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

## 次のステップ

おめでとうございます！Foundryを使用したInjectiveでのEVMスマートコントラクト開発の全ガイドが完了しました！

スマートコントラクト単体では、非技術ユーザー向けのユーザー体験を提供できません。そのため、ユーザー向けには分散型アプリケーションを構築する必要があります。詳細については「[初めてのdApp](../dapps/)」ガイドをご覧ください。
