Hyperledger Caliper手册

在线工具推荐: Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在线转换 - 可编程3D场景编辑器

从源代码安装Caliper

修改Caliper的源码的流程一般包含以下步骤:

  • 引导软件仓库
  • 修改、测试代码
  • 本地发布NPM包
  • 构建Docker镜像

启动引导软件仓库

要安装基本的依赖包,以及解析不同包之间的交叉依赖,需要 在仓库的根目录执行以下命令:

  • npm i:安装开发期依赖,例如Lerna等开发包
  • npm run repoclean:清理node_mudles目录,新克隆的仓库不需要这个步骤
  • npm run bootstrap:安装所有的依赖,并在交叉依赖的包之间建立连接。这需要 花一点时间。如果用ctrl+c中断的话,请首先恢复package.json文件,然后再次 运行npm run bootstrap

具体命令可以写成一行:

user@hubwiz:~/caliper$ npm i && npm run repoclean -- --yes && npm run bootstrap

测试Caliper代码

测试你修改的代码最简单的方法是本地运行CI过程。目前,CI进程为特定的 适配器执行基准测试。你可以在根目录运行以下脚本来触发这些基准测试, 记得设置BENCHMARK环境变量为指定的平台名称:

user@hubwiz:~/caliper$ BENCHMARK=fabric ./.travis/benchmark-integration-test-direct.sh

BENCHMARK可以设置为以下值:

  • besu
  • ethereum
  • fabric
  • fisco-bcos
  • sawtooth

脚本将执行以下测试:

  • 语法检查
  • 许可协议头检查
  • 单元测试
  • 运行示例的基准测试

如果要运行其他示例,你可以直接使用packages/caliper-cli目录下的 caliper命令行程序,不必本地发布:

user@hubwiz:~/caliper$ node ./packages/caliper-cli/caliper.js launch master \
    --caliper-workspace ~/caliper-benchmarks \
    --caliper-benchconfig benchmarks/scenario/simple/config.yaml \
    --caliper-networkconfig networks/fabric/fabric-v1.4.1/2org1peergoleveldb/fabric-go.yaml

发布到本地NPM仓库

可以利用本地NPM代理服务器Verdaccio来测试NPM发布和安装,主要步骤包括:

  • 启动本地的Verdaccio服务
  • 从本地修改后的Caliper仓库发布NPM包到Verdaccio服务器
  • 从Verdaccio服务器安装并绑定caliper命令行
  • 运行集成测试或其他任何示例的基准测试

packages/caliper-publish目录包含了内置的命令行工具来管理上述步骤。 因此以下命令必须在 packages/caliper-publish 目录执行:

user@hubwiz:~/caliper$ cd ./packages/caliper-publish

启动Verdaccio

要安装启动Verdaccio服务器,只需要运行以下命令:

user@ubuntu:~/caliper/packages/caliper-publish$ ./publish.js verdaccio start
...
[PM2] Spawning PM2 daemon with pm2_home=.pm2
[PM2] PM2 Successfully daemonized
[PM2] Starting /home/user/projects/caliper/packages/caliper-tests-integration/node_modules/.bin/verdaccio in fork_mode (1 instance)
[PM2] Done.
┌───────────┬────┬──────┬────────┬────────┬─────────┬────────┬─────┬───────────┬────────┬──────────┐
│ App name  │ id │ mode │ pid    │ status │ restart │ uptime │ cpu │ mem       │ user   │ watching │
├───────────┼────┼──────┼────────┼────────┼─────────┼────────┼─────┼───────────┼────────┼──────────┤
│ verdaccio │ 0  │ fork │ 115203 │ online │ 0       │ 0s     │ 3%  │ 25.8 MB   │ user   │ disabled │
└───────────┴────┴──────┴────────┴────────┴─────────┴────────┴─────┴───────────┴────────┴──────────┘
 Use `pm2 show <id|name>` to get more details about an app

Verdaccio服务器现在已经在以下地址监听:http://localhost:4873

发布NPM包

一旦Verdaccio包运行起来,你就可以运行如下命令在本地发布Caliper包:

user@hubwiz:~/caliper/packages/caliper-publish$ ./publish.js npm --registry "http://localhost:4873"
...
+ @hyperledger/caliper-core@0.3.0-unstable-20200206065953
[PUBLISH] Published package @hyperledger/caliper-core@0.3.0-unstable-20200206065953
...
+ @hyperledger/caliper-fabric@0.3.0-unstable-20200206065953
[PUBLISH] Published package @hyperledger/caliper-fabric@0.3.0-unstable-20200206065953
...
+ @hyperledger/caliper-cli@0.3.0-unstable-20200206065953
[PUBLISH] Published package @hyperledger/caliper-cli@0.3.0-unstable-20200206065953

记录日志中的动态版本号,你在从Verdaccio安装Caliper时需要。

由于发布的包在版本中包含了时间戳,因此你可以重新发布任何修改而无需重新启动Verdaccio服务器。

运行基于NPM包的测试

一旦包发布到本地Verdaccio服务器,你就可以使用正常的NPM install方法来安装。 唯一的区别在于你需要指定使用本地的Verdaccio注册库作为安装源:

user@hubwiz:~/caliper-benchmarks$ npm init -y
user@hubwiz:~/caliper-benchmarks$ npm install --registry=http://localhost:4873 --only=prod \
    @hyperledger/caliper-cli@0.3.0-unstable-20200206065953
user@hubwiz:~/caliper-benchmarks$ npx caliper bind --caliper-bind-sut fabric:1.4.0
user@hubwiz:~/caliper-benchmarks$ npx caliper launch master \
    --caliper-workspace . \
    --caliper-benchconfig benchmarks/scenario/simple/config.yaml \
    --caliper-networkconfig networks/fabric/fabric-v1.4.1/2org1peergoleveldb/fabric-go.yaml

构建docker镜像

一旦修改的包发布到本地Verdaccio服务器,你就可以重新构建Docker镜像。 Dockerfile在packages/caliper-publish目录。

执行如下命令重新构建caliper的docker镜像:

user@hubwiz:~/caliper/packages/caliper-publish$ ./publish.js docker
...
Successfully tagged hyperledger/caliper:0.3.0-unstable-20200206065953
[BUILD] Built Docker image "hyperledger/caliper:0.3.0-unstable-20200206065953"