跳转到主要内容

前置条件

你应该已经设置好 Foundry 项目,并成功部署了智能合约。 请参阅使用 Foundry 部署智能合约教程了解如何操作。 可选但强烈推荐:你还应该已经成功验证了智能合约。 请参阅使用 Foundry 验证智能合约教程了解如何操作。

调用函数 - 查询

查询是只读操作。 因此智能合约状态不会更新。 由于不需要状态更改,不需要钱包、签名或交易费用(gas)。 使用以下命令查询 value() 函数:
cast call \
  --rpc-url injectiveEvm \
  ${SC_ADDRESS} \
  "value()"
${SC_ADDRESS} 替换为你部署智能合约的地址。 例如,如果智能合约地址是 0x213ba803265386c10ce04a2caa0f31ff3440b9cf,命令是:
cast call \
  --rpc-url injectiveEvm \
  0x213ba803265386c10ce04a2caa0f31ff3440b9cf \
  "value()"
这应该输出以下内容。
0x0000000000000000000000000000000000000000000000000000000000000000
请注意,0x0000000000000000000000000000000000000000000000000000000000000000 表示 0。 它是 Solidity 的 uint256(智能合约中 value() 函数的返回类型)的十六进制原始表示。

调用函数 - 交易

交易是写操作。 因此智能合约状态会更新。 由于可能发生状态更改,交易必须由钱包签名,并且需要支付交易费用(gas)。 使用以下命令执行 increment(num) 函数的交易。
cast send \
  --legacy \
  --rpc-url injectiveEvm \
  --gas-price 160000000 \
  --gas-limit 2000000 \
  --account injTest \
  ${SC_ADDRESS} \
  "increment(uint256)" \
  1
请注意,gas price 以 wei 为单位。 1 wei = 10^-18 INJ。
${SC_ADDRESS} 替换为你部署智能合约的地址。 例如,如果智能合约地址是 0x213ba803265386c10ce04a2caa0f31ff3440b9cf,命令是:
cast send \
  --legacy \
  --rpc-url injectiveEvm \
  --gas-price 160000000 \
  --gas-limit 2000000 \
  --account injTest \
  0x213ba803265386c10ce04a2caa0f31ff3440b9cf \
  "increment(uint256)" \
  1
如果成功,这应该产生类似以下的结果:
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
更新状态后,你可以查询新状态。 结果将反映状态更改。
cast call \
  --rpc-url injectiveEvm \
  ${SC_ADDRESS} \
  "value()"
这次结果应该是 0x0000000000000000000000000000000000000000000000000000000000000001,因为 0 + 1 = 1
0x0000000000000000000000000000000000000000000000000000000000000001

下一步

恭喜,你已经完成了使用 Foundry 在 Injective 上开发 EVM 智能合约的整个指南! 智能合约不能为非技术用户提供用户体验。 为了服务他们,你需要构建一个去中心化应用。 请查看你的第一个 dApp 指南!