Hyperledger Caliper Besu踩坑总结(1)官网Sample排雷

Abstract

Caliper是Hyperledger的其中一个子项目,它是一种测试区块链智能合约性能的工具。
可以设置非常多样的测试组合,结果包含吞吐量,延迟,资源使用率。
由于主页给出的测试全都是坑无法通过,这里记录其解决过程,留个笔记。

Repository

  • 本文使用的是官网提供的例子

https://hyperledger.github.io/caliper/v0.4.2/getting-started/#sample-networks

  • Github上开源

https://github.com/hyperledger/caliper-benchmarks

Table of contents

  1. Chapter1:先踩一踩坑
  2. Chapter2:结构分析及各项设置
  3. Reference

Chapter1

git clone [email protected]:hyperledger/caliper-benchmarks.git

这里进到项目要init一下,不然后面步骤都会出错

cd caliper-benchmarks
npm init

安装caliper
绑定到最新版本的besu,这里注意可以选择绑定版本,但是后续的一系列设置都要向这个版本看齐

npm install --only=prod @hyperledger/[email protected]
npx caliper bind --caliper-bind-sut besu:latest

执行Caliper管理员
使用的两个重要设置文件,benchmarks用来配置测试参数,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好像也不太对,相应改成之前绑定的

image: hyperledger/besu:latest

再次运行上面的管理员指令npx caliper launch manager ...
就可以看到一些列的Docker加载安装进来,下面的besu_clique开始启动
然后进行Creating Contracts

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              |
+----------+------+------+-----------------+-----------------+-----------------+-----------------+------------------+

在root下会生成一个report.html文件可以通过浏览器查看
Caliper Report

Chapter2

Caliper主要分为三大部分,区块链搭建,智能合约部署和测试,可以随意拆分组合。

No 组合 备注
1 区块链搭建 Docker自动搭建,可根据需要自己另行搭建
2 智能合约部署 提供合约的abi.json,Caliper会将其中的bytecode部署到链
*注意:这里的abi.json有要求,下篇部署自己的智能合约中详细介绍
3 测试 执行测试生成报告

区块链搭建:
Caliper用Docker自动搭建,设置在networks/besu/1node-clique/docker-compose.yml,启动Start停止end在networks/besu/1node-clique/networkconfig.json的caliper-command中控制。

智能合约部署:
networks/besu/1node-clique/networkconfig.json中配置所有与区块链链接的设置,主要是端口url, contracts的内容。之后部署自己的合约可以参考这里的设置。
contractDeployerAddress, contractDeployerAddressPrivateKey, fromAddressSeed需要设置为Caliper提供的地址,这里Sample运行不用更改,之后部署自己的合约时需要根据自己情况配置。

测试:
测试用例全都在scenario/simple/config.yaml里配置,可以更改发送tps,设置worker数量,等等。

Reference

猜你喜欢

转载自blog.csdn.net/weixin_44565484/article/details/122857254