> ## 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()` 函数的返回类型）的十六进制原始表示。
</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/) 指南！
