前提条件
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() 関数の戻り値の型)の16進数生表現です。
関数の呼び出し - トランザクション
トランザクションは書き込み操作です。
そのため、スマートコントラクトの状態が更新されます。
状態変更が発生する可能性があるため、トランザクションはウォレットで署名され、トランザクション手数料(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 ガイドをご覧ください!