Brownie: イーサリアムのスマート コントラクト インフラストラクチャ
編集者注: この記事は以下から引用しましたキッキングホースリバーを定量化する (ID: gh_e9da2a6cbc62)、許可を得てOdailyによって転載されました。
編集者注: この記事は以下から引用しました
キッキングホースリバーを定量化する (ID: gh_e9da2a6cbc62)
キッキングホースリバーを定量化する (ID: gh_e9da2a6cbc62)
、許可を得てOdailyによって転載されました。
ブラウニーといっても、ダークチョコレート味のおいしい小さなケーキだとは思わないでください。ここで言うブラウニーとは、イーサリアム上のブラウニーと呼ばれるスマートコントラクトの基本的な枠組みを指します。 Brownie はイーサリアムのスマート コントラクトの開発に使用されており、堅牢性と使いやすさが非常に高く、以下の目的でよく使用されます。
デプロイメント: 多くのコントラクトをブロックチェーンに自動的にデプロイし、それらに必要なトランザクションを初期化または統合します。
インタラクション: スクリプトを作成するか、コンソールを使用してメインネット上のコントラクトと対話するか、ローカル環境で簡単なテストを実行します。
デバッグ: トランザクションの回復中に詳細情報を取得して、問題を迅速に特定するのに役立ちます。
テスト: Python で単体テストを作成し、スタック トレース分析に基づいてテスト カバレッジを評価します。
次に、Solidity で非常に単純なスマート コントラクトを作成してみましょう。このスマート コントラクトは、getValue と setValue という 2 つの外部関数のみを公開します。このスマート コントラクトをファイル Smart_contract.sol に保存します。
次に、このスマート コントラクトを Brownie 経由でデプロイし、操作します。
設定
この試みでは、Python3.7 と virtualenv を使用して環境を分離します。 Python3.7 がインストールされていない場合は、以下の手順に従ってください。
イーサリアム開発用のパーソナルブロックチェーンであるガナッシュを使用します。代わりに ethereum-testrpc をインストールすることもできますが、その場合は GUI を実行できなくなります。 Ganache をインストールするときは、次の手順に従ってください。
Solidity プロジェクト用の仮想環境を作成します。これが作成され、TestBrownie という名前が付けられました。Brownie をインストールします。
空のプロジェクトを初期化するには、まず新しいフォルダーを作成します。そのフォルダーに次のように入力します。
プロジェクト構造
各ブラウニー プロジェクトには次のフォルダーが含まれています。
契約/: 契約のソース
インターフェース/: インターフェースソース
scripts/: デプロイメントおよび対話用のスクリプト
testing/: プロジェクトをテストするためのスクリプト
Brownie-config.yaml: プロジェクト構成ファイル
以下のフォルダーも Brownie によって作成され、プロジェクト管理のために内部で使用され、編集または削除することはできません。
build/: コンパイラのアーティファクトや単体テストの結果などのプロジェクト データ
reports/: GUI で使用される JSON レポート ファイル
コンパイル
Smart_contract.sol は、スマート コントラクトを契約ディレクトリにコピーします。 Contracts/project サブフォルダー内のすべての契約ソースをコンパイルします。
コンパイラが実行されるたびに、Brownie は各コントラクト ソースのハッシュを既存のコンパイル済みバージョンのハッシュと比較します。契約が変更されていない場合、再コンパイルされません。プロジェクト全体を強制的に再コンパイルする場合は、brownie COMPILE --ALL を使用します。
Solidity コントラクトを別のバージョンでコンパイルする場合は、.sol ファイルの使用説明にそのコントラクトを記載するだけです。存在しない場合は、自動的にインストールされます。ここで注意してください: エンコーダーの設定は Brownie-config.yaml にあります。
Byzantium: Solidity <=0.5.4
Petersburg: Solidity >=0.5.5< =0.5.12
Istanbul: Solidity >=0.5.13, Vyper
コンパイラ設定を変更すると、プロジェクトが完全に再コンパイルされます。
コンパイラのバージョンが構成ファイルに設定されている場合、そのバージョンはプロジェクト内のすべてのコントラクトをコンパイルするために使用されます。バージョンは 0.xx 形式の文字列として指定する必要があります。
version が null に設定されている場合、brownie は各コントラクトのバージョン使用プログラムを調べ、インストールされている最新の一致するコンパイラー バージョンを使用します。
evm_version に関しては、Brownie はコンパイラに従ってルールセットを設定します。
EVM バージョンを手動で設定することもできます。有効なオプションは、byzantium、constantinople、petersburg、istanbul です。Ethereum Classic ルールセット atlantis および agharta も利用可能で、コンパイラーに渡される前に同等のイーサリアムに変換されます。
注: Brownie は、Solidity バージョン 0.4.22 以上および Vyper バージョン 0.1.0-b16 をサポートしています。
コンパイルが成功すると、Brownie は builds/contract フォルダーに SimpleContract.json ファイルを作成します。
展開する
Brownie-config.yaml を開くとネットワーク セクションがあり、既存のネットワークをカスタマイズしたり、ネットワークの下に新しいブロックを作成したりできます。ここでは、ポート 7545 で実行される Ganache GUI が使用されます。
ネットワークの下にプライベートブロックを作成します。
このファイルを保存します。次に、Brownie コンソールを使用して、コンパイルされたスマート コントラクトをデプロイします。これは通常の Python インタープリターと非常によく似ています。プロジェクト フォルダーから、次のように入力してロードします。
出力内のアカウントと Ganache GUI に表示されるアカウントを照合します。
個々のアカウントは、残高の照会や ETH の送信などのアクションを実行できる Account オブジェクトによって表されます。
デプロイ可能なすべてのコントラクトとライブラリには、新しいコントラクトをデプロイしたり、既存のコントラクトにアクセスしたりするための ContractContainer があります。コンパイルされたすべてのコントラクトは、同じ名前の変数として利用できます。
アカウントを使用してコントラクト 0 をデプロイします。
「SimpleContract」と入力すると、SimpleContract が ContractContainer オブジェクトのデプロイされたインスタンスのリストとして表示されます。
交流
この契約で利用可能な方法を参照してください。
まず、スマート コントラクトに変数を設定します。


