契約の実行
ブロックチェーン・アプリケーション・ビルダーを使用して、デプロイされたトークンまたはアカウント/アイデンティティ・プロキシを問い合せたり、状態が変化する契約関数を呼び出すことができます。
プロジェクトをコンパイルした後、「デプロイ/実行」フォームの「実行」タブを使用して、ファンクションを問い合せたり、呼び出すことができます。この拡張機能は、選択した契約ABIを読み取り、使用可能な関数を表示し、パラメータをエンコードし、選択した環境に適したトランスポートを介してリクエストを送信します。構成済プロジェクトの場合、状態変更トークン操作を試行する前に、トークンおよびアカウント・プロキシをデプロイおよびアクティブ化します。
- 「契約」ビューを開きます。
- Hardhatプロジェクトを選択し、「デプロイ/実行」を開きます。
- 「実行」タブを選択します。
- フォームにプロジェクト・セレクタが含まれている場合は、契約およびそのコンパイル済アーティファクトを所有するプロジェクトを選択します。
コールを実行する前に、次のフィールドに入力してターゲットと関数を選択する必要があります。
- トークン:使用するABIを持つコンパイル済トークン契約。
- コール・ターゲット:トークン・プロキシをコールするには「トークン」を、ペア・アカウント・プロキシをコールするには「アカウント/アイデンティティ」を選択します。残高、ミント、転送、構成、アセット・クラス操作などのトークン動作のコール・ターゲットとして、「トークン」を選択します。コンパニオン・アカウント契約のアイデンティティ、権限またはポリシー機能に対して、「アカウント/アイデンティティ」を選択します。
- ターゲットABI:関数のリストとエンコードに使用されるABI。生成されたマニフェストは、ペアになっているアカウントABIをロックします。それ以外の場合は、手動で選択します。
- toAddress:選択したターゲットのデプロイ済プロキシ・アドレス。ヘルパー・ライブラリまたは実装アドレスを入力しないでください。
- 環境:そのプロキシがデプロイされる環境。
- ファンクション:問合せまたは起動するABIファンクション。このリストには、継承された機能を区別するのに役立つ関数の起点が含まれています。
実行パス
拡張機能は、選択した環境に基づいて使用可能なモードを選択または制限します。
| 環境およびAPIモード | 問合せの動作 | 起動動作 | 必要な署名者情報 |
|---|---|---|---|
| Hardhat Local Nodeまたは Other EVM with JSON-RPC | 選択したローカル秘密キーをfromとして使用してノードをコールします。
|
JSON-RPCを介して直接署名およびブロードキャストします。 | 構成された発信者アカウント、または32バイトの秘密鍵を手動で入力します。 |
| JSON-RPC APIを使用したOracle Blockchain Platform Besu | 選択したWalletサービス・アカウント・アドレスをfromとして使用して、Oracle Blockchain Platform JSON-RPCエンドポイントをコールします。
|
トランザクションを構築し、ウォレット・サービス署名をリクエストしてから、Oracle Blockchain Platform JSON-RPCを介してブロードキャストします。 | Walletサービスの署名URL、アカウントJSON、認可トークンおよび選択したウォレット・アカウント。 |
| REST rpc-proxy APIを使用したOracle Blockchain Platform Besu | Oracle Blockchain Platform問合せAPIに投稿します。 | Oracle Blockchain PlatformトランザクションAPIに投稿します。 | 送信元アドレス。オプションでガスおよび受信待機の設定。このモードでは、ローカル秘密キーまたはWalletサービス署名者が入力されていません。 |
REST rpc-proxyモードは、Oracle Blockchain Platform Besu環境でのみ使用できます。RESTコールには、環境のRPC URLホスト、認証トークンおよびTLS設定が使用されます。他のEVMおよびローカルHardhat環境では、ローカル署名でJSON-RPCを使用します。
ファンクションの問合せ
読取りコールの場合は「問合せ」を使用し、現在のチェーン状態に対してファンクションをシミュレートします。
- ターゲット、環境、関数およびパラメータを選択します。
- 選択した実行パスに必要なコール元またはウォレット情報を構成します。
- 「問合せ」を選択します。
- 「出力」フィールドを確認します。JSON-RPC出力には、デコードが成功した場合のRAWコール結果とデコードされたABI結果が含まれます。REST出力にはAPIレスポンスが含まれます。
問合せではコール・リクエストが使用され、トランザクションまたは永続状態はブロードキャストされません。選択したファンクションの条件、コール元権限または指定されたパラメータが現在の契約状態に対して有効でない場合でも、問合せは元に戻すことができます。
ファンクションの呼出し
- ターゲット、環境、関数およびパラメータを選択します。
- 必要な署名方法を構成します。
- 「その他のEVM」または「ハードハット・ローカル・ノード」で、構成済のコール元アカウントを選択するか、認可された秘密キーを入力します。
- Oracle Blockchain Platform Wallet Serviceの場合は、署名URL、アカウントJSON、認可トークンを指定し、ウォレット・アカウントを選択します。
- REST rpc-proxyの場合は、「From Address」と、必要に応じて「gas limit」および「receipt wait」設定を入力します。
- 「起動」を選択します。
- 結果が「出力」になるまで待機します。JSON-RPCおよびWallet Serviceの正常な呼出しには、トランザクション・ハッシュ、ブロック番号、使用されたガス、送信者、ターゲットおよび受信ステータスが含まれます。
パラメータを入力
「パラメータ」の横にある「…」ボタンを選択して、パラメータ・エディタを開きます。ABIパラメータ名、ネストされたプロパティ、タイプおよび入力フィールドが表示されます。エディタの適用アクションを選択して、Execute関数で使用されるJSONパラメータ配列を生成します。
パラメータは、選択したファンクションのABI入力と同じ順序で1つのJSON配列として送信されます。
| ABI入力 | 貼付け可能なパラメータJSON |
|---|---|
| 入力なし | [] |
balanceOf(address) |
["0x1111111111111111111111111111111111111111"] |
transfer(address,uint256) |
["0x1111111111111111111111111111111111111111", "1000"] |
| 単一のタプル | [{"fieldA":"value","fieldB":"1000"}] |
スタンドアロンのtuple[]入力
|
[[{"userAddress":"0x1111111111111111111111111111111111111111","approvalSequence":1}]] |
整数ABIフィールドの場合、JavaScriptの数値精度の損失を回避するために、"1000"などの10進文字列を入力します。ブール値にはJSON trueまたはfalseを使用します。アドレスは有効な0xアドレスである必要があります。
タプルおよびタプル配列入力の場合は、プロパティ名がABIコンポーネント名と一致する名前付きJSONオブジェクトを使用します。パラメータ・エディタでSolidityの位置タプル構文を使用しないでください。
たとえば、エディタにuserAddressおよびapprovalSequenceコンポーネントを含むapproverDetails tuple[]プロパティが表示されている場合は、そのプロパティのJSONエディタに次の値を貼り付けます。
[
{
"userAddress": "0x1111111111111111111111111111111111111111",
"approvalSequence": 1
}
]パラメータ・エディタは、その値を外部の関数引数配列内に配置します。完全なタプルの場合は、選択したABIによって表示されるすべてのコンポーネントを入力します。正確なフィールドは契約バージョンによって異なるため、別のトークン・プロジェクトからタプル・シェイプをコピーするのではなく、パラメータ・エディタに表示されるプロパティを使用します。
Walletサービスの入力形式
Oracle Blockchain Platform JSON-RPCモードの場合は、JSON配列としてウォレット・サービス・アカウントを入力します。各エントリにはアドレスが必要で、次の例に示すようにウォレットIDを含めることができます。
[
{
"address": "0x1111111111111111111111111111111111111111",
"walletId": "0x1111111111111111111111111111111111111111"
}
]「Walletアカウント」で解析済アカウントの1つを選択します。問合せでは、そのアドレスがfromとして使用され、呼出しによってウォレット・サービスにそのアカウントの署名が求められます。ウォレット・サービス認可トークンは、フォームの保存済ドラフトに格納されません。
入力の保存と再利用
「入力の保存」を選択して、現在の秘密ではない実行選択およびプロジェクトのパラメータJSONを保持します。保存済フォームの状態を削除するには、「保存済入力のクリア」を選択します。呼出しの前にプロキシ・アドレス、選択した関数およびパラメータを再チェックします。保存された入力は、ターゲットが現在選択されている環境にまだデプロイされていることを証明しません。
トラブルシューティング
| 条件 | 解決策 |
|---|---|
| アップグレード後、新しく追加されたメソッドは、「実行」ページのABIリストに表示されません | ブロックチェーン・アプリケーション・ビルダーのマニフェスト・ファイル(generated.manifest.json)を更新して、新しくアップグレードされた契約を指すようにcontractClassNameおよびcontractRelativePathを変更します。
|
| ABI関数が見つかりません | プロジェクトをコンパイルし、選択したトークン/アカウント・アーティファクトが存在することを確認します。マニフェストのないアカウントターゲットの場合は、正しいアカウントABIを手動で選択します。 |
| ターゲット住所に契約コードがありません | 選択した環境を確認し、ヘルパー・ライブラリまたは実装アドレスではなく、デプロイされたプロキシ・アドレスを入力します。 |
| パラメータJSONが無効です | 引数配列を再生成するには、…エディタを使用します。配列およびオブジェクトで、二重引用符で囲まれたプロパティ名を持つ有効なJSONが使用されていることを確認します。 |
| Walletサービス・アカウントの選択が必要です | 有効なアカウントのJSON配列を入力し、Walletアカウントを選択します。 |
| REST rpc-proxy APIにはOracle Blockchain Platform環境が必要です | ホスト専用のRPC URLを使用してOracle Blockchain Platform Besu環境に切り替えるか、他のEVM/HardhatにJSON-RPCを使用します。 |
| 未承認のコール元またはデコードされたカスタム・エラー | 選択したコール元/ウォレット・アカウント、ターゲット・プロキシ、アクティブなガバナンス状態、ロール/ポリシーの前提条件およびABIパラメータを確認します。 |
| Queryまたは Invokeは使用不可のままです | 選択したAPIモードの必要なターゲット、環境、関数および署名者フィールドに入力します。 |