paint-brush
Truffle の Console.log を使用した簡単なスマート コントラクトのデバッグ@MichaelB
994 測定値
994 測定値

Truffle の Console.log を使用した簡単なスマート コントラクトのデバッグ

Michael4m2023/01/30
Read on Terminal Reader

長すぎる; 読むには

Truffle は [Solidity. Console.log は JavaScript で非常に人気のある機能であり、ログ メッセージを簡単に出力してコードから詳細を抽出するために開発者によって広く使用されています。
featured image - Truffle の Console.log を使用した簡単なスマート コントラクトのデバッグ
Michael HackerNoon profile picture

Solidity 開発者であれば、Truffle がSolidityスマート コントラクトでのコンソール ロギングサポートするようになったことを聞いて興奮するでしょう。 Truffle は長い間、スマート コントラクト開発ツールのリーダーであり、スマート コントラクトの作成、テスト、およびデバッグのための使いやすい環境を提供してきましたが、直接統合された console.log は依然として必要な機能でした。


しかし、もう!開発者は、使い慣れた Truffle (Ganache) 環境内で、メッセージを簡単にログに記録し、スマート コントラクトをデバッグできるようになりました。方法を見てみましょう。

Console.log とは何ですか?

Console.log は JavaScript で非常に人気のある機能であり、開発者がロギング メッセージを簡単に出力し、コードから直接詳細を抽出するために広く使用されています。 web3 とスマート コントラクト開発のコンテキストでは、console.log が同様の役割を果たし、開発者がスマート コントラクトから Solidity 変数やその他の情報を出力できるようにします。


たとえば、console.log を使用して、スマート コントラクト内の変数の値または関数呼び出しの出力を表示できます。これは、スマート コントラクトをデバッグまたはテストするときに非常に役立ちます。

 console.log("Console Logging: The Smart Contract Developer's Best Friend");

Truffle でコンソール ログを使用する方法

console.log の利用は非常に簡単です。まず、コンピューターで最新の Truffle バージョンが実行されていることを確認する必要があります。問題がある場合は、パッケージを完全にアンインストールしてから再インストールすることをお勧めします。この記事で使用するコマンドでは、NPM をパッケージ マネージャーとして使用します。


 $ npm install -g truffle


インストールが成功したら、次のように truffle 構成ファイル (つまりtruffle-config.js ) を変更することをお勧めします。

 module.exports = { . . . solidityLog: { displayPrefix: ' :', // defaults to "" preventConsoleLogMigration: true, // defaults to false }
  • displayPrefix : console.log からの出力を修飾して、CLI によって表示される他のコンテンツと区別します。
  • preventConsoleLogMigration : テストまたはメインネット上でコントラクトのデプロイが行われないようにスクリーニングします。 console.log を含めてコントラクトをデプロイする場合は、これをオプトアウトできます。ただし、これを行う場合は、console.log がガスの使用に関して予測できない動作をすることに注意してください。


これで、試してみる準備が整いました。通常どおり、 contract.solコントラクトを Solidity コードにインポートします。これで、JavaScript と同じように console.log() コマンドを使用する準備が整いました。

これには、 %s%fなどの文字列置換の使用が含まれます。

 pragma solidity ^0.8.9; import "truffle/console.sol"; contract BookStore { //... function transfer(address to, uint256 amount) external { console.log("Transferring %s tokens to %s", amount, to); require(balances[msg.sender] >= amount, "Not enough tokens"); balances[msg.sender] -= amount; balances[to] += amount; emit Transfer(amount, to, msg.sender); } }


上記の伝達関数は、console.log の動作を示しています。 「 Not enough tokens 」エラーで失敗する転送関数の呼び出しを想像してみてください。この場合、console.log の行には、呼び出しが転送しようとしているトークンの数が表示されます。これにより、開発者は転送されているトークンのアドレスを確認できます。メッセージは次のようになります。


 ... Transferring 10 tokens to 0x377bbcae5327695b32a1784e0e13bedc8e078c9c

これをデバッグするさらに良い方法は、 balances[msg.sender]を console.log ステートメントに追加するか、別の行に出力することです。そうすれば、送信者の残高もコンソールに表示されます。あなたはポイントを得る!


テストとメインネットにログを残すこともできます。このようにして、スマート コントラクトを観察する良い方法が得られます。また、 Tenderlyのようなツールはログの破棄を統合することに言及する価値があります。これは、運用環境でスマート コントラクトをデバッグおよびテストするときに役立ちます。


最後に、コンソール ログを使用する場合は、明確で説明的なログ メッセージを使用するなど、既に知っているすべての有効な使用規則に従うことが重要です。これにより、出力を理解しやすくなり、発生する可能性のある問題を特定しやすくなります。

Truffle のその他のデバッグ ツール

コンソール ロギングはスマート コントラクトをデバッグするための強力なツールですが、Truffle には他のデバッグ ツールも用意されていることに注意してください。 Truffle には、スマート コントラクトの実行をステップ実行し、実行のさまざまなポイントで変数の状態を検査するために使用できる、強力な組み込みのデバッガー CLI ツールがあります。さらに、イベントは、メッセージをログに記録し、スマート コントラクトの動作を追跡する優れた方法です。


とはいえ、変数出力のような単純なことにデバッガーを使用するのはやり過ぎになる可能性があることに注意してください。同様に、イベント ログは、トランザクションが成功した場合にのみ機能します。これは、特定の状況では制限になる可能性があります。


要するに、console.log 機能は、Truffle の他のデバッグ ツールと組み合わせて使用すると、そのシンプルさ使いやすさのおかげで、より優れた開発者エクスペリエンスを提供できるということです。開発者は、メッセージをすばやく簡単にログに記録し、スマート コントラクトの動作を監視できます。また、他のデバッグ ツールを使用して、より高度なデバッグとトラブルシューティングを行うことができます。

やってみて

Truffle の新しいコンソール ロギング機能は、スマート コントラクトの開発に役立つ追加機能です。使い方は簡単で、デバッグとテストのプロセスを合理化できます。メッセージをログに記録し、スマート コントラクトの動作をリアルタイムで追跡する機能により、非効率性と頭痛の種を減らすことができます。ツールボックスに入れておくと便利なツールです。