抽象的な
Caliper は Hyperledger のサブプロジェクトであり、ブロックチェーン スマート コントラクトのパフォーマンスをテストするためのツールです。
非常に多様なテストの組み合わせを設定でき、スループット、レイテンシ、リソース使用量などの結果が得られます。
ホームページに掲載されているテストはどれも落とし穴で合格できないため、その解決過程を記録しメモとして残しておきます。
リポジトリ
- この記事では公式 Web サイトで提供されている例を使用しています
https://hyperledger.github.io/caliper/v0.4.2/getting-started/#sample-networks
- Github 上のオープンソース
https://github.com/hyperledger/caliper-benchmarks
目次
第1章
git clone [email protected]:hyperledger/caliper-benchmarks.git
プロジェクトに入る前に初期化する必要があります。そうしないと、次の手順が失敗します。
cd caliper-benchmarks
npm init
キャリパーをインストールし
、besu の最新バージョンにバインドします。ここで、バインディングのバージョンを選択できますが、その後の一連の設定はこのバージョンと一致している必要があることに注意してください。
npm install --only=prod @hyperledger/[email protected]
npx caliper bind --caliper-bind-sut besu:latest
Caliper 管理者が使用する重要な設定ファイルが 2 つあります
。ベンチマークはテスト パラメーターの構成に使用され、networkconfig は名前が示すように、ブロックチェーンに接続するために使用されます。
npx caliper launch manager \
--caliper-benchconfig benchmarks/scenario/simple/config.yaml \
--caliper-networkconfig networks/besu/1node-clique/networkconfig.json \
--caliper-workspace .
もちろんスムーズにはいきません、ここでエラーが報告されます(2022/02/21:実行日)
21 05:58:37.499+00:00 | main | INFO | Besu | Starting Besu version: besu/v22.1.0-RC4/linux-x86_64/openjdk-java-11
besu_clique | Invalid value for option '--rpc-ws-apis'
besu_clique |
besu_clique | To display full help:
besu_clique | besu [COMMAND] --help
エラーは--rpc-ws-apis
値が不正であることです
network/besu/1node-clique/docker-compose.yml にアクセスして確認してください。確かに不正です。
不正な小文字のパラメータを大文字に変更してください。
--rpc-ws-apis admin,eth,miner,web3,net
--rpc-ws-apis ADMIN,ETH,MINER,WEB3,NET
ここのDockerイメージは間違っているようなので、以前バインドしたものに変更する必要があります。
image: hyperledger/besu:latest
上記の管理者コマンドを再度実行するnpx caliper launch manager ...
と、一連の Docker がロードされ、インストールされていることがわかります。以下がbesu_clique
開始され
、コントラクトの作成が開始されます。
Container besu_clique Starting
Container besu_clique Started
2022.02.21-15:22:57.588 info [caliper] [caliper-engine] Executed start command in 65.953 seconds
2022.02.21-15:22:57.602 info [caliper] [caliper-engine] Executed "init" step in 0.014 seconds
2022.02.21-15:22:57.602 info [caliper] [ethereum-connector] Creating contracts...
2022.02.21-15:22:57.615 error [caliper] [caliper-engine] Error while performing "install" step: Error: connection not open on send()
ここにはまだ例外がありますが、理由はわかりませんが、Docker を見返してみると、ブロックは正常に生成されており、問題がないことがわかりました。
1 | INFO | BlockMiner | Produced #45 / 0 tx / 0 om / 0 (0.0%) gas / (0x6544b1ce8b974d297190d4fc832e0b5229762850197c94a1f0de78c26f6d0f92) in 0.007s
ポート設定も正しいです。。。
いろいろ探しましたが原因が見つからなかったので、再度管理者コマンドを実行したところ成功しました。。。
少し言葉を失いましたが、
その後、テストは正常に実行され、レポートが出力されました。
+----------+------+------+-----------------+-----------------+-----------------+-----------------+------------------+
| Name | Succ | Fail | Send Rate (TPS) | Max Latency (s) | Min Latency (s) | Avg Latency (s) | Throughput (TPS) |
|----------|------|------|-----------------|-----------------|-----------------|-----------------|------------------|
| open | 1000 | 0 | 50.1 | 29.13 | 1.78 | 14.35 | 20.5 |
|----------|------|------|-----------------|-----------------|-----------------|-----------------|------------------|
| query | 1000 | 0 | 100.1 | 0.01 | 0.00 | 0.00 | 100.1 |
|----------|------|------|-----------------|-----------------|-----------------|-----------------|------------------|
| transfer | 50 | 0 | 5.1 | 4.95 | 0.14 | 2.54 | 3.9 |
+----------+------+------+-----------------+-----------------+-----------------+-----------------+------------------+
report.html ファイルが root の下に生成され、ブラウザを通じて表示できます。
第2章
Caliperは主に、ブロックチェーンの構築、スマートコントラクトの展開、テストの3つの部分に分かれており、自由に分割したり組み合わせたりすることができます。
いいえ | 組み合わせ | 述べる |
---|---|---|
1 | ブロックチェーン構築 | Docker が自動的にビルドします。必要に応じて自分でビルドできます。 |
2 | スマートコントラクトの展開 | コントラクトの abi.json を指定すると、Caliper がバイトコードをチェーンにデプロイします *注意: ここには abi.json の要件があり、これについては独自のスマート コントラクトのデプロイに関する次の記事で詳しく説明します。 |
3 | テスト | テストを実行してレポートを生成する |
ブロックチェーン構築:
Caliper は Docker を使用して自動構築され、networks/besu/1node-clique/docker-compose.yml に設定され、起動とStart
停止はend
networks/besu/1node-clique/networkconfig.json で制御されます。caliper
command
スマート コントラクトの展開:
ブロックチェーンにリンクされているすべての設定を network/besu/1node-clique/networkconfig.json で構成します (主に port url
) contracts
。ここの設定を参照して、後で独自のコントラクトをデプロイできます。
contractDeployerAddress
, contractDeployerAddressPrivateKey
,fromAddressSeed
は、Caliper が提供するアドレスに設定する必要があります。ここでサンプルを実行する場合は変更する必要はありません。後で独自のコントラクトをデプロイするときに、独自の状況に応じて設定する必要があります。
テスト:
すべてのテスト ケースは scenario/simple/config.yaml で構成されており、送信 TPS の変更、ワーカー数の設定などが可能です。