Page 106 - 《软件学报》2021年第11期
P. 106
3432 Journal of Software 软件学报 Vol.32, No.11, November 2021
以采用 NFS 文件服务器的方式将上述配置文件共享.
(2) 官方教程启动容器镜像需要注入特定的环境变量以及配置文件.Mictract 将环境变量以及共享的配
置文件以 Deployment 容器变量的形式传入.
(3) 将 peer 声明为外部链码构建形式并为其传入外部链码构建器启动器.同时,将 peer 节点生成外部链码
标识符传入外部链码的 Deployment 容器.
Fig.6 Pseudo code of deploying smart contracts
图 6 智能合约部署伪代码
Table 3 Comparison of two kinds of deployments
表 3 两种部署方式对比
步骤 官方部署 Mictract 启动网络、部署链码原理
创建证书,生成证书文件;
创建证书,生成证书文件;
S1 创建创世区块,生成创世区块文件; 创建创世区块,生成创世区块文件;
创建通道,生成通道文件;
创建通道,生成通道文件
NFS 共享上述配置文件
生成 peer 节点 yaml 文件,包含 Deployment 和
修改节点 Dockerfile
S2 Service,配置 Docker 启动环境变量;
挂载步骤 S1 生成文件
修改 yaml 挂载步骤 S1 生成的文件
打包链码;
修改 peer 节点 Dockerfile 文件声明为外部链码; 修改 peer 节点 yaml 声明为外部链码形式;
S3 修改 peer 节点 Dockerfile 文件 修改 peer 节点的 yaml 挂载外部构建器启动器脚本;
挂载外部构建器启动器脚本; 启动 peer 节点的 Deployment 与 Service
启动 peer 节点
依次在每个 peer 内部将所属 在 master 节点中,将 peer 节点
S4
peer 加入步骤 S1 创建的通道 加入步骤 S1 创建的通道
为 peer 安装外部链码,生成外部链码标识符;
为 peer 安装外部链码,生成外部链码标识符; 修改链码代码,使其从环境变量中读取外部链码标识符;
S5 修改链码代码,添加外部链码标识符; 为链码构建 Dockerfile,将其打包成 Docker 镜像;
部署链码 为链码构建 yaml 文件,将外部链码标识符作为环境参数传入;
启动链码 Deployment 与 Service
实例化链码; 实例化链码;
S6
链码操作 链码操作
在测试方面,Mictract 提供对 Go 语言编写链码的测试.Mictract 借鉴 Hyperledger Fabric MockStub 类提供的
MockInit 函数,在测试环境下调用智能合约中的 Init 接口,完成账本初始化工作.Mictract 采用 MockStub 类调用
智能合约的 Invoke 接口进行单元测试.Mictract 借助 MockStub 类完成智能合约的性能测试,利用 Go 语言提供
pprof 工具完成性能剖析工作.pprof 工具通过采集测试过程中的数据信息,得到一组 profiling 数据.profiling 包含
cpu profiling,heap profiling 以及 block profiling 这 3 种性能指标:cpu profiling 指标用于标识测试过程中使用 cpu
最多的函数,通过对 cpu 上执行的线程进行定期中断来记录一个性能剖析事件;heap profiling 指标用于标识分
配内存最多的语句;block profiling 指标用于标识阻断协程时间最长的操作.
性能测试结果最终被写入一个文件中,利用 pprof 工具和 GraphViz 工具可以将测试结果转换为 svg 的可视
化图,直观地展示智能合约的性能消耗情况.