前置条件
你应该已经设置好 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 指南!