メインコンテンツへスキップ

前提条件

Foundry プロジェクトが既にセットアップされており、smart contract のデプロイが正常に完了している必要があります。 手順については Foundry を使用した smart contract のデプロイ チュートリアルを参照してください。 任意ですが強く推奨:smart contract の検証も正常に完了していることが望ましいです。 手順については Foundry を使用した smart contract の検証 チュートリアルを参照してください。

関数の呼び出し - クエリ

クエリは読み取り専用の操作です。 そのため、smart contract の状態は更新されません状態変更が不要なため、ウォレット、署名、トランザクション手数料(gas)は必要ありません。 以下のコマンドを使用して value() 関数をクエリします:
cast call \
  --rpc-url injectiveEvm \
  ${SC_ADDRESS} \
  "value()"
${SC_ADDRESS} を smart contract をデプロイしたアドレスに置き換えてください。 例えば、smart contract のアドレスが 0x213ba803265386c10ce04a2caa0f31ff3440b9cf の場合、コマンドは以下のようになります:
cast call \
  --rpc-url injectiveEvm \
  0x213ba803265386c10ce04a2caa0f31ff3440b9cf \
  "value()"
以下の出力が表示されます。
0x0000000000000000000000000000000000000000000000000000000000000000
0x00000000000000000000000000000000000000000000000000000000000000000 を意味します。 これは Solidity の uint256(smart contract の value() 関数の戻り値の型)の16進数による生の表現です。

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

トランザクションは書き込み操作です。 そのため、smart contract の状態が更新されます状態変更が発生する可能性があるため、トランザクションはウォレットで署名する必要があり、トランザクション手数料(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} を smart contract をデプロイしたアドレスに置き換えてください。 例えば、smart contract のアドレスが 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 smart contract 開発ガイドをすべて完了しました! smart contract は非技術的なユーザーにユーザーエクスペリエンスを提供しません。 そのようなユーザーに対応するには、分散型アプリケーションを構築する必要があります。 構築するには、初めての dApp ガイドを確認してください!