契約のデバッグ

Solidityコンソール・ログを使用して、シミュレートされたHardhatローカル・ノードで実行されている契約をデバッグできます。

契約をデバッグするには、組み込みの Hardhat Local Node環境にそれを配備し、ローカルのデバッグブランチまたは一時的な作業用コピーでのみすべてのロギング変更を行います。

組込みローカル環境の名前はhardhatnodeで、チェーンIDが31337のhttp://127.0.0.1:8545を使用します。保存されたOracle Blockchain Platformやその他のEVM環境ではありません。契約をデプロイまたは実行するように選択し、ローカル・ノードがリスニングしない場合、Blockchain App Builder for Besuは、選択したプロジェクトのHardhatノードを起動して、Hardhatローカル・ノード・ターミナルを開きます。

  1. 検査するコードパスを含むSolidityファイルの上部に、Hardhatコンソールインポートを追加します。
    import "hardhat/console.sol";
  2. 調査する関数または内部ヘルパーに一時ログを追加します。
    console.log("value", value);
    次のコードは、一般的なログの例を示しています。
    console.log("entered transfer");
    console.log("caller", msg.sender);
    console.log("amount", amount);
    console.log("is allowed", isAllowed);
    検査する変数に一致する値タイプを使用します。これらの例では、文字列、アドレス、整数値およびブール値について説明しています。ログ文を絞り込み、一時的に保持します。秘密キー、認証トークン、またはその他の資格証明は記録しません。
  3. 「デプロイ/実行」フォームで、古いアーティファクトを破棄する必要がある場合は「クリーン」を選択し、「コンパイル」を選択します。
  4. 環境として「Hardhat Local Node」を選択します。
  5. ローカル契約インスタンスをデプロイするか、すでにデプロイされているローカル・プロキシを使用します。ローカル・ネットワークで、ガバナンス契約などのプロジェクト固有のデプロイメント前提条件を満たします。
  6. 「実行」ペインを開き、ローカル・トークンまたはアカウント・プロキシを選択し、ファンクション・パラメータを入力して、「問合せ」または「起動」を選択します。

    「問合せ」はローカル・コールを完了し、「起動」はローカル・トランザクションを送信します。いずれも、記録されたコード・パスに到達できますが、シミュレートされたチェーン状態を変更する呼出しのみです。

  7. Visual Studio CodeでHardhat Local Nodeターミナルを開き、出力されたログ行を検査します。
  8. hardhat/console.solインポート文およびすべての一時console.log文を削除します。
  9. コードをコミットするか、Oracle Blockchain Platform Besu、他のEVMまたは本番環境を使用する前に、再度クリーン・アンド・コンパイルしてください。

Oracle Blockchain Platformまたは他のEVM環境では、Hardhat専用のインストゥルメンテーションを使用しないでください。かわりに、通常のアプリケーション・イベント、オフチェーン・トランザクション・トレースまたは環境承認の可観測性を使用します。コンソール・ロギングは、本番の診断に代わるものではありません。

デバッグ・プロセスのトラブルシューティング

条件 解決策
hardhat/console.solが見つかりません 選択したプロジェクトで「依存性のインストール」を実行し、再度コンパイルします。インポートは、プロジェクトのHardhat依存関係によって提供されます。
ローカルノードが起動しない 選択したプロジェクトにhardhat.config.tsまたはhardhat.config.jsが含まれていることを確認し、Visual Studio CodeでNode.jsおよびnpmを使用できることを確認し、Hardhat Local Node端末で起動エラーを確認します。
ログが表示されません 「Hardhat Local Node」が選択された環境であること、起動されたコード・パスがログ文に到達すること、およびOracle Blockchain Platformまたはプロジェクト・ターミナルではなく「Hardhat Local Node」ターミナルを表示していることを確認します。
アプリケーションは古いコードを使用しています デプロイまたは再呼出しを行う前に、「クリーン」、「コンパイル」の順に選択します。
デバッグ後にローカルでないビルドまたはデプロイメントが失敗する すべてのhardhat/console.solインポートおよびconsole.logコールを削除してから、プロジェクトを再度クリーン・アンド・コンパイルします。