Abstract
Caliper是Hyperledger的其中一个子项目,它是一种测试区块链智能合约性能的工具。 可以设置非常多样的测试组合,结果包含吞吐量,延迟,资源使用率。 由于主页给出的测试全都是坑无法通过,这里记录其解决过程,留个笔记。
Repository
https://hyperledger.github.io/caliper/v0.4.2/getting-started/#sample-networks
https://github.com/hyperledger/caliper-benchmarks
Table of contents
- Chapter1:先踩一踩坑
- Chapter2:结构分析及各项设置
- Reference
Chapter1
git clone git@github.com:hyperledger/caliper-benchmarks.git
这里进到项目要init一下,不然后面步骤都会出错
cd caliper-benchmarks
npm init
安装caliper 绑定到最新版本的besu,这里注意可以选择绑定版本,但是后续的一系列设置都要向这个版本看齐
npm install --only=prod @hyperledger/caliper-cli@0.4.2
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文件可以通过浏览器查看
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
|