ホームページ >テクノロジー周辺機器 >IT業界 >契約の平坦化とリミックスでのデバッグ

契約の平坦化とリミックスでのデバッグ

Lisa Kudrow
Lisa Kudrowオリジナル
2025-02-16 12:47:17583ブラウズ

Solitidity Smart Contractのデバッグとフラット化:Remix IDEとTRUFFLEの使用

この記事では、Remix IDEを使用してSolidity Smart Contractsをデバッグし、簡単なデバッグと検証のためにTruffle Flattenerフラット契約コードを使用する方法について説明します。

Flattening Contracts and Debugging with Remix

キーポイント:

  • 契約の平坦化:複数の堅牢性ファイルを1つのファイルにマージし、インポートステートメントを削除して、手動のレビュー、Etherscan検証、およびリミックスIDEデバッグを容易にします(Remix IDEは現在インポートをサポートしていません)。
  • Remix IDE:強力なSolidity IDEには、タイムトレースバック、ステップスイッチング、ローカル変数と状態探査、ブレークポイント設定、その他の機能をサポートする優れたステップバイステップデバッガーがあります。
  • トリュフとopenzeppelin:カスタムトークンを構築するためのツール。 Truffle Flattenerは、堅実性ファイルとトリュフプロジェクトの依存関係を平らにするためのNPMツールです。
  • Remix IDEデバッグ方法:ユースケースに応じて、2つのデバッグ方法があります。デバッガーの機能は、エラーを導入し、safemathの関数を使用してルールを強制し、契約の問題を特定することでテストできます。 assert()
  • Ethereum Main Networkでは、スマートコントラクトが実際のお金を使用するため、エラーのないスマートコントラクトを構築することが重要であり、デバッガーなどの特別なツールが必要です。 Remix IDEは、最も包括的な堅牢性IDEであり、優れたステップバイステップデバッガーを備えています。時間のバックトラッキング、現在のステップの変更、さまざまなパネルを拡張することによりローカル変数と現在の状態の調査、コード内の異なるポイント間を移動するブレークポイントを設定するなど、さまざまなタスクを実行できます。ターミナルを使用して、リミックスから実行されたトランザクションを表示してデバッグすることもできます。

このチュートリアルは、トリュフとOpenzeppelinを使用して、シンプルなカスタムトークンを構築し、契約を平らにする理由と方法を説明し、最終的にRemix IDEを使用して契約のデバッグを開始します。

なぜフラットなスマートコントラクトがあるのですか?

契約フラット化とは、すべてのソリッドコードを複数のソースファイルではなく1つのファイルにマージすることを指し、インポートステートメントは必要ありません。インポートされたコードは同じファイルに埋め込まれます。手動で契約のレビュー、Etherscanの契約の検証、Remix IDEを使用した契約のデバッグなど、スマート契約を平らにする必要がある理由はたくさんあります(現在輸入をサポートしていないため)。

トリュフとopenzeppelinを使用してシンプルなトークンを書きます

Remix IDEは、小規模契約の構築や学習の堅実さに正式に推奨されますが、より大きな契約を構築する必要がある場合、または高度なコンピレーションオプションが必要な場合は、Solidityコンパイラまたはトリュフなどのその他のツール/フレームワークを使用する必要があります。

エラーのない契約に加えて、セキュリティはスマート契約の構築の重要な部分でもあります。このため、OpenzePpelinのような戦闘テストされたフレームワークを使用して、DAPPの脆弱性を減らすのに役立つ再利用可能で、よくテストされ、コミュニティが参照したスマートコントラクトを提供します。

Openzeppelinの標準トークンを拡張するトリュフとOpenzeppelinを使用して、シンプルなカスタムトークンを作成する方法を見てみましょう。

前提条件このチュートリアルでは、トリュフ、イーサリアム、堅牢性に関する知識を持つ必要があります。ブロックチェーンとイーサリアムを始めるためのチュートリアルを読むことができます。

また、システムにnode.js 5.0とnpmをインストールする必要があります。手順については、そのダウンロードページを参照してください。

取り付けトリュフ

ターミナルを使用して、次のコマンドを実行してトリュフをインストールします。

新しいトリュフプロジェクト最初にプロジェクトの新しいディレクトリを作成します。名前を付けて

<code class="language-bash">npm install -g truffle</code>
に名前を付けて、ナビゲートしてください:

このコマンドは、

などの複数のフォルダーと、契約をブロックチェーンに展開するときに使用されるファイルを作成します。

simpletoken次に、openzeppelin:

をインストールします
<code class="language-bash">mkdir simpletoken
cd simpletoken
truffle init</code>

contracts/単純なトークン契約を作成migrations/

フォルダーで、

という名前のファイルを作成し、以下を追加します。
<code class="language-bash">npm install openzeppelin-solidity</code>

これは、私たちが平らにしてデバッグする契約です。 openzeppelin契約をインポートし、オペレーターを使用して

を延長する

契約を宣言しています。 contracts/ SimpleToken.sol契約は多くの変数と機能を継承し、契約をカスタマイズするためにこれらの変数と関数をオーバーライドする必要があります。

<code class="language-solidity">pragma solidity ^0.4.23;

import 'openzeppelin-solidity/contracts/token/ERC20/StandardToken.sol';

contract SimpleToken is StandardToken {
    address public owner;

    string public name = 'SimpleToken';
    string public symbol = 'STt';
    uint8 public decimals = 2;
    uint public INITIAL_SUPPLY = 10000;

    constructor() public {
      totalSupply_ = INITIAL_SUPPLY;
      balances[owner] = INITIAL_SUPPLY;
    }

}</code>
トリュフプロジェクトを完了するには、プロジェクトの

フォルダーで、StandardToken.solという名前のファイルを作成し、以下を追加します。 SimpleToken このファイルを使用すると、スマートコントラクトをブロックチェーンに展開/移行できますが、この例では、Remix IDEを使用してフラット化後にスマートコントラクトを展開するため、このファイルは実際には必要ありません。 is StandardToken.sol

トリュフフラットナーフラットナーを使用

トリュフフラットナーは、トリュフとそのすべての依存関係の下で開発された堅実性ファイルを正しい順序で搾り出したり組み合わせたりするNPMユーティリティです。 migrations/ 2_deploy_contract.js最初に、次のコマンドを使用して、NPMからグローバルにトリュフフラットナーをインストールします。

<code class="language-javascript">var SimpleToken = artifacts.require("SimpleToken");
module.exports = function(deployer) {
    deployer.deploy(SimpleToken);
};</code>
次に、トリュフプロジェクトで、次のコマンドを実行して

ファイルをフラット化します。

出力標準出力またはターミナルへの契約の平らになった契約。 演算子を使用して、出力を現在のフォルダーの

ファイルに保存します。

Remix IDEを使用して契約をコンパイルおよび展開します

<code class="language-bash">npm install -g truffle-flattener</code>

FlattenedSimpleToken.solファイルからフラットスマートコントラクトにアクセスできます。ファイルを開き、その内容をコピーします。

次に、

https://www.php.cn/link/54af6860114f54728b5c2fd9b5cfeca9からリミックスideを開き、平らなスマート契約をIDEの新しいファイルに貼り付けます。 エラーメッセージが表示されている場合は、モックコンパイラ:ソース

には、

設定タブ&gt;新しいコンパイラバージョンのドロップダウンメニュー新しいコンパイラバージョン。 autocompilation

が無効になっている場合、

コンパイルパネルの[コンパイル]ボタンをクリックします。 次に、パネルを実行します。最初に、環境にjavaScript vmを選択したことを確認してください。 2番目のボックスで、ドロップダウンメニューから契約を選択し、ドロップダウンメニューの下にある

deployボタンをクリックします。 契約は展開され、ブロックチェーンをエミュレートするJavaScript VMで実行されます。これで、さまざまな方法でデバッグを開始できます。 カスタムトークン契約契約のデバッグ方法を理解するために、最初にいくつかのエラーを導入します。

ユースケースに応じて、2つの異なる方法でリミックスIDEでスマートコントラクトのデバッグを開始できます。

最初にスマートコントラクトを展開したり、その後トランザクションを実行したりすると、一部の情報が端末に記録され、ログの横にあるWhite

debugボタンからデバッグを開始できます。それが実際にどのように機能するか見てみましょう。

assert()

を使用します

SafeMathは、エラーをスローするセキュリティチェックのためにOpenzePpelinが使用する数学ライブラリです。

関数は2つの数値を減算し、符号なしの数値を返します。最初のパラメーターは、常に正の数値を取得できるように、2番目のパラメーターよりも大きくする必要があります。この関数は、関数を使用してこのルールを強制します。これは、関数のコードです:

検証条件の値を提供する限りおよび

、実行は問題なく継続されますが、

、関数はエラーをスローし、プロンプト:sub(a,b) assert() subパラメーターエラーを使用して

契約に
<code class="language-bash">npm install -g truffle</code>

に呼び出しを追加しましょう:a b b < a契約を再展開すると、端末で無効なオペコードエラーが表示されます。 b aassert()

<code class="language-bash">mkdir simpletoken
cd simpletoken
truffle init</code>
debug

ボタンをクリックした後、コードのデバッグを開始できるSimpleTokendebuggersub()パネルを入力します。

<code class="language-bash">npm install openzeppelin-solidity</code>

コードエディターでは、最初の行/命令が強調表示され、コード内の現在の位置をマークします。

Flattening Contracts and Debugging with Remix

ステップをクリックして、ボタンを介してコードを踏み出します。

Flattening Contracts and Debugging with Remix

ボタンを使用して、例外に直接ジャンプすることもできます。

Flattening Contracts and Debugging with Remix どのような方法を使用しても、デバッガーは問題を引き起こすコードに連れて行ってから停止します。

Flattening Contracts and Debugging with Remix 現在のステップでローカル変数のステータスを確認できます。

Flattening Contracts and Debugging with Remix

堅牢性ローカル変数

パネルには、現在のコンテキストに関連付けられたローカル変数が表示されます。 ソースコードと Solidity Local変数

から、問題のルートは

メソッドに関連しており、の値は。 assert()b aボタンのデバッグを停止することを使用してデバッグを停止できます。

また、デバッガーの他のパネルをチェックする価値があります。

Flattening Contracts and Debugging with Remix 指示

命令

パネルには、デバッグされた契約のバイトコードが表示されます。現在のステップのバイトコードが強調表示されます。 Flattening Contracts and Debugging with Remix

堅牢性ステータス

堅牢性ステータス

パネルには、現在デバッグされている契約のステータス変数が表示されます。 Flattening Contracts and Debugging with Remix

低レベルのパネル

これらのパネルは、機能のステップの詳細、メモリ、スタック、返品値など、実行に関する低レベルの情報を表示します。

Flattening Contracts and Debugging with Remix 結論

このチュートリアルでは、トリュフとOpenzeppelinを使用してシンプルなトークンを作成し、トリュフフラットナーとのカスタム契約を平らにし、Remix IDEを使用して契約のデバッグエラーを開始しました。

これが大胆に深くなり、段階的な契約をデバッグするのに役立つことを願っています。使用法を教えてください!

(調査コンテンツ、フラット契約のFAQ、およびリミックスでのデバッグは省略されています。これは、記事が長すぎてコアコンテンツとの弱い関係を持っているためです。必要に応じて、個別に尋ねることができます。

以上が契約の平坦化とリミックスでのデバッグの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。