区块链应用操作笔记
本文最后更新于53 天前,其中的信息可能已经过时。

前言

8月中旬参加了浙江省的区块链应用操作员竞赛,以下是当时学习的实操部分的代码笔记。该笔记的内容来自21年的课程,仅用参考,部分代码可能记的不太清楚,且因环境不同,部分代码可能会执行失败。

区块链运维

系统环境介绍

pwd                        #查看当前目录
ls                         #查看当前目录下内容
mkdir fabric               #当前目录下创建fabric文件夹
cd fabric                  #进入fabric目录
vi test.yaml               #创建test.yaml文件,并进入vi的编辑页面
shift+i                    #输入模式
esc                        #退出编辑模式
shift+:                    #出现一个冒号
wq                         #保存退出vi
cat test.yaml              #输出test.yaml文件内容
cd ..                      #上级目录
rm -rf fabric              #删除fabric文件夹和里面的文件

系统环境搭建准备

(1)git安装

yum install git -y         #安装git
git version                #查看git版本

(2)fabric-samples下载

git clone https://github.com/hyperledger/fabric-samples.git        #下载fabric-samples代码
cd fabric-samples                                                  #进入文件夹
git checkout v1.4.3                                                #切换v1.4.3的tag分支
git branch                                                         #查看当前分支
wget https://github.com/hyperledger/fabric/releases/download/v1.4.3/hyperledger-fabric-linux-amd64-1.4.3.tar.gz  #下载二进制工具文件,一个压缩包,tar格式
cp hyperledger-fabric-linux-amd64-1.4.3.tar.gz ../                 #复制文件
tar -zxvf hyperledger-fabric-linux-amd64-1.4.3.tar.gz              #解压,出两个文件夹
mv bin fabric-samples/                                             #移动文件夹
mv config fabric-samples/                                          #移动文件夹
ls fabric-samples                                                  #查看

(3)docker安装

yum update -y                                          #更新yum包
yum install -y yum-utils                               #安装yu-utils工具

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos.docker-ce.repo    #添加docker稳定的yum源

yum install docker-ce -y                               #安装docker
docker version                                         #查看docker版本
systemctl start docker                                 #启动docker服务
docker images                                          #查看已下载镜像

(4)docker-compose安装

curl -L https://get.daocloud.io/docker/compose/releases/download/1.12.0/docker-compose-`uname -s`-`uname -m` >/usr/local/bin/docker-compose          #下载docker-compose文件,放到/usr/local/bin/下,docker-compose是一个二进制文件
chmod +x /usr/local/bin/docker-compose                 #给docker-compose增加执行权限
docker-compose

系统配置-配置方式

(1)docker镜像下载

#配置docker国内镜像源
vi /etc/docker/daemon.json        #修改文件
shift+i                           #输入模式
#文件中写入
{
    "registry-mirrors":["http://docker.mirrors.ustc.edu.cn"]
}
esc                               #退出编辑模式
shift+:                           #出现一个冒号
wq                                #保存退出vi
cat daemon.json                   #输出daemon.json文件内容

systemctl restart docker          #重启docker服务,即设置完成
docker images

#下载docker镜像
docker pull hyperledger/fabric-orderer:latest
docker pull hyperledger/fabric-peer:latest
docker pull hyperledger/fabric-tools:latest

#完成后查看镜像
docker images

(2)yaml文件介绍
大小写敏感
缩进表示层级关系
缩进不允许tab,只允许空格,空格数不重要,相同层级元素左对齐
表示注释
对象键值对 key: value,冒号后面加空格
key:{key1: value, key2: value}

节点和客户服通信方式

(1)byfn.sh脚本介绍

./byfn.sh up -o solo -n        #启动示例网络,使用单orderer共识,不装智能合约
./byfn.sh up -o solo           #启动示例网络,使用单orderer共识,安装智能合约
./byfn.sh down                 #停止网络,清理环境

(2)byfn.sh脚本讲解

cd fabric-samples
cd first-network/
cat byfn.sh
./byfn.sh -h

#solo共识网络启动
docker images                          #检查镜像
systemctl start docker                 #若提示错误信息,说明docker未启动,输入指令启动
docker images                          #检查镜像

cd fabric-samples/first-network        #进入目录
./byfn.sh up -o solo -n                #启动solo共识网络,有个确认,输入y回车
docker ps                              #查看节点,可以看到起了四个peer

系统配置 区块链数据存储设置方式

(1)Fabric数据库介绍
levedb 键值对数据库
couchdb 文档型数据库,可以表示更加复杂的结构

  • 分布式
  • 面向文档
  • 支持REST API

(2)启用couchdb数据库

systemctl start docker

#下载couchdb镜像,先修改docker源配置文件
rm -rf /etc/docker/daemon.json                       #删除文件
vi /etc/docker/daemon.json                           #修改/etc/docker/daemon.json 文件
#打开后在文件中写入
{
    "registry-mirrors":["http://docker.mirrors.ustc.edu.cn"]
}
esc                                                  #退出编辑模式
shift+:                                              #出现一个冒号
wq                                                   #保存退出vi
cat /etc/docker/daemon.json                          #输出daemon.json文件内容
systemctl restart docker                             #重启docker服务
docker images                                        #检查镜像

docker pull hyperledger/fabric-couchdb:0.4.10        #下载couchdb
docker images                                        #检查镜像
docker tag hyperledger/fabric-couchdb:0.4.10 hyperledger/fabric-couchdb:latest      #给这个couchdb镜像加一个latest的tag
docker images                                        #检查镜像

#不使用./byfn.sh up -o solo -n -s couchdb直接启动,而是一步一步启动
cd fabric-samples/first-network
/byfn.sh up generate                                 #生成证书和配置文件,有个确认,输入y回车

docker-compose -f docker-compose-cli.yaml -f docker-compose-couch.yaml up -d        #启动yaml文件,启动节点
docker ps                                            #查看节点,每个peer启动了一个couchdb容器
docker ps | grep couchdb                             #这个命令更直观

系统配置 共识方式选择

(1)Fabric共识方式
solo共识 只有一个orderer,主要用于开发测试
kafka共识 kafka集群必须中心部署
raft共识 容忍少于半数的共识节点失效

(2)Fabric共识配置

#启动 docker
systemctl start docker

#下载 kafka 和 zookeeper 镜像
docker pull hyperledger/fabric-kafka:latest
docker pull hyperledger/fabric-zookeeper:latest
docker images                                        #检查镜像

cd fabric-samples/first-network/
./byfn.sh up -o kafka -n                             #启动kafka网络,有个确认,输入y回车
docker ps                                            #查看节点,看到四个peer,一个orderer,一个cli,一个kafka,一个zookeeper节点容器

#raft共识网络启动
./byfn.sh down                                       #清除刚才起的网络,有个确认,输入y回车
./byfn.sh up -o etcdraft -n                          #有个确认,输入y回车
./byfn.sh up -o kafka -n                             #启动kafka网络,有个确认,输入y回车
docker ps                                            #查看节点,看到四个peer,一个cli,5个orderer
docker ps | grep orderer                             #命令查找orderer字段

区块链应用操作

账户创建与管理-数字证书创建/节点证书创建与用户权限管理

(1)Fabric MSP体系回顾
数字证书
身份账户体系

(2)使用工具生成MSP证书

cd fabric-samples/first-network
../bin/cryptogen generate --config=./crypto-config.yaml        #创建证书
ls                                                             #看到生成了一个crypto-config文件夹

#安装tree工具
yum install tree -y

#使用 tree 命令查看 crypto-config 证书目录
tree crypto-config
#目录很深,包含了orderer和peer组织的所有证书

#查看证书内容
#查看peer0.org1的peer节点签名证书和私钥
cd crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/msp/signcerts         #进入证书目录
ls                                                             #可看到该证书
cat peer0.org1.example.com-cert.pem                            #可看到证书内容

#使用openssl解密证书
openssl x509 -in peer0.org1.example.com-cert.pem -text

#查看证书对应的私钥
cd../keystore/
ls                                                             #查看文件
cat<文件名>                                                    #查看私钥内容,该文件名每个人生成不同

账户创建与管理-通道管理

cd fabric-samples/first-network
yum install tree -y                                            #安装tree工具(若版本错误)
../bin/cryptogen generate --config=./crypto-config.yaml
ls

#生成 byfn-sys-channel 和 mychannel 通道配置文件
../bin/configtxgen -profile TwoOrgsOrdererGenesis -channelID byfn-sys-channel -outputBlock ./channel-artifacts/genesis.block
../bin/configtxgen -profile TwoOrgsChannel -outputCreateChannelTx ./channel-artifacts/channel.tx -channelID mychannel

ls channel-artifacts                                           #查看生成的文件

#生成 Anchor peer 配置
../bin/configtxgen -profile TwoOrgsChannel -outputAnchorPeersUpdate ./channel-artifacts/Org1MSPanchors.tx -channelID mychannel -asOrg Org1MSP
../bin/configtxgen -profile TwoOrgsChannel -outputAnchorPeersUpdate ./channel-artifacts/Org2MSPanchors.tx -channelID mychannel -asOrg Org2MSP
ls channel-artifacts                                           #查看生成的文件

#启动fabric网络
systemctl start docker                                         #启动docker服务
#再次启动网络,观察节点创建完成后的控制台输出
./byfn.sh up -o solo -n
docker ps                                                      #查看节点

#使用channel.tx文件创建mychannel通道
#各节点加入mychannel通道
#用Org1MSPanchors.tx和Org2MSPanchors.tx更新Org1,Org2anchor peer

应用接入方法-使用脚本进行合约安装

(1)生成脚本

#生成安装脚本
cd fabric-samples/first-network

#以 scripts.sh 为模板复制文件名为installchaincode.sh
cp scripts/script.sh scripts/installchaincode.sh
ls scripts/

#修改脚本
vi scripts/installchaincode.sh
shift+i                                                          #进入编辑模式
#用#号注释掉创建通道、加入通道、设置 Anchor Peer 的操作
#
#createChannel
#
#joinChannel
#
#updateAnchorPeers 0 1
#
#updateAnchorPeers 0 2

#再把合约操作部分 instantiateChaincode 0 2 后面合约交互的操作注释掉
if里
#
#chaincodeQuery 0 1 100
#chaincodeInvoke 0 1 0 2
#installchaincode 1 2
#chaincodeQuery 1 2 90

#保存关闭vi
esc                                                              #退出编辑模式
shift+:                                                          #出现一个冒号
wq                                                               #保存退出vi

(2)安装合约

systemctl start docker                                           #启动docker服务
./byfn.sh up -o solo -n                                          #启动示例网络
docker pull hyperledger/fabric-ccenv:1.4
docker pull hyperledger/fabric-baseos:amd64-0.4.21               #下载镜像
docker images
docker ps -a

docker exec cli scripts/installchaincode.sh                      #安装合约
docker images

应用接入方法-合约调用与升级

(1)Fabric链码调用
Invoke 上链操作调用
Query 查询操作调用

(2)脚本调用链码

#生成安装脚本
cd fabric-samples/first-network

#以 scripts.sh 为模板复制文件名为installchaincode.sh
cp scripts/script.sh scripts/installchaincode.sh
ls scripts/

#修改脚本
vi scripts/installchaincode.sh
shift+i                                                          #进入编辑模式
#用#号注释掉创建通道、加入通道、设置 Anchor Peer 的操作
#
#createChannel
#
#joinChannel
#
#updateAnchorPeers 0 1
#
#updateAnchorPeers 0 2

#再把合约操作部分 instantiateChaincode 0 2 后面合约交互的操作注释掉
if里
#
#chaincodeQuery 0 1 100
#chaincodeInvoke 0 1 0 2
#installchaincode 1 2
#chaincodeQuery 1 2 90

#保存关闭vi
esc                                                              #退出编辑模式
shift+:                                                          #出现一个冒号
wq                                                               #保存退出vi

#安装合约
systemctl start dockershift+i                                    #进入编辑模式启动docker服务
./byfn.sh up -o solo -nshift+i                                   #进入编辑模式启动示例网络
docker pull hyperledger/fabric-ccenv:1.4
docker pull hyperledger/fabric-baseos:amd64-0.4.21shift+i        #进入编辑模式下载镜像
docker images
docker ps -a

docker exec cli scripts/installchaincode.sh                      #安装合约
docker images
docker ps -a

#合约交互
#生成脚本
#以 scripts.sh 脚本为模板复制文件名为 invokechaincode.sh
cp scripts/script.sh scripts/invokechaincode.sh
#修改脚本
vi scripts/invokechaincode.sh
#shift+i 进入编辑模式
#用#号注释掉创建通道、加入通道、设置Anchor Peer 的操作
#
#createChannel
#
#joinChannel
#
#updateAnchorPeers 0 1
#
#updateAnchorPeers 0 2

#再把合约操作部分 chaincodeQuery 0 1 100 之前合约安装的操作注释掉
if里
#installchaincode 0 1
#installchaincode 0 2
#instantiateChaincode 0 2

#保存关闭vi
esc                                 #退出编辑模式
shift+:                             #出现一个冒号
wq                                  #保存退出vi

执行 docker exec cli scripts/invokechaincode.sh 观察控制台输出
可以看到第一步先调用 peer0.org1节点,査询了a账户的余额,结果为 100
第二步调用 peer0.org1,peer0.org2 节点,进行转账操作,a账户向b账户转 10 元
第三步给 peer1.0rg2 install 了mycc 合约
最后一步通过 peer1.org2节点查询a账户的余额,变成了90,说明合约交互成功,也验证了各节点会自动同步账本。
docker ps 可以看到起了三个合约容器

(3)脚本升级链码

#生成脚本
#以 scripts.sh 脚本为模板复制文件名为 upgradechaincode.sh
cp scripts/script.sh scripts/upgradechaincode.sh

#修改脚本
vi scripts/upgradechaincode.sh
#修改脚本如下:
#用#号注释掉创建通道、加入通道、设置 Anchor Peer 的操作
#
#createChannel
#
#joinChannel
#
#updateAnchorPeers 0 1
#
#updateAnchorPeers 0 2

#将合约操作中的第一个命令 installChaincode 0 1 改为 installChaincode 0 1 2.0
#第二个命令 installChaincode 0 2 注释掉
#第三个命令 instantiateChaincode 0 2 改为 upgradeChaincode 0 1
#然后将后面的命令全部注释掉
#保存退出vi

#合约升级
#调用命令 docker exec cli scripts/upgradechaincode.sh 将 peer0.org1 的 mycc 合约升级到 2.0版本,此命令也需要重新制作合约镜像,启动合约容器,故也需要等待一会
#docker ps 可以看到起了一个2.0的mycc合约容器,升级成功

应用操作问题

(1)问题排查
复现问题,定位问题,分析问题,解决问题,总结问题

(2)日志管理
记录用户操作的审计日志
快速定位问题的根源
追踪程序执行的过程
追踪数据的变化
数据统计和性能分析
采集运行环境数据

(3)排查问题素质
心态建设:自信心,稳定心态,一颗好胜的心
能力积累:知识体系积累,模块功能积累

实验:

#启动网络
cd fabric-samples/first-network
systemctl start docker                                    #启动docker服务
./byfn.sh up -o solo -n                                   #启动fabric网络

#日志查看
#tail 方式查看
docker ps                                                 #查看容器信息
#查看 peer0.org1 节点最新30行日志
docker logs --tail 30 peer0.org1.example.com
#查看 peer0.org1 节点最新30行日志并在控制台持续输出
docker logs --tail 30 -f peer0.org1.example.com

#fabric节点日志等级修改
#停止网络
./byfn.sh down

#修改 peer 日志等级
vi base/peer-base.yaml
#将 [- FABRIC_LOGGING_SPEC=INFO] 日志级别INFO 改为 DEBUG
#保存退出

#启动网络
./byfn.sh up -o solo -n

#观察日志输出
#再次执行
docker logs --tail 30 peer0.org1.example.com
#可以看到多了debug标签的日志

区块链测试

测试设计

需求分析(测试设计)
编写测试用例(测什么 怎么测)
评审测试用例
搭建测试环境
等待开发提交测试包
部署测试包
冒烟测试(对软件主题基本功能进行基本测试)
执行测试用例
BUG跟踪处理(提交及回归BUG)
N轮之后符合需求
测试结束

测试环境搭建

#安装node.js
cd /usr/local                                                          #进入目录
wget https://nodejs.org/dist/v8.11.4/node-v8.11.4-linux-x64.tar.xz     #下载安装包
tar xvf node-v8.11.4-linux-x64.tar.xz                                  #解压
mv node-v8.11.4-linux-x64 nodejs                                       #改短名

#配置,创建软链接,以便全局使用(否则报错)
ln -s /usr/local/nodejs/bin/node /usr/bin/node

ln -s /usr/local/nodejs/bin/npm /usr/bin/npm
#完成校验
node -v && npm -v                                                      #查看版本

#安装node-gyp
sudo apt install node-gyp

#安装docker 和docker-compose

软件测试

#安装caliper
node -v && npm -v                                                      #确认已安装nodejs

cd /usr/local
git clone git://github.com/cao0507/Hyperledger-caliper                 #用git拉取caliper源码

cd Hyperledger-caliper                                                 #进入目录
sudo npm install                                                       #安装

#安装fabric SDKs
#在 Hyperledger-caliper 目录中安装SDKs
sudo npm install fabric-ca-client@1.1.0 fabric-client@1.1.0            #该版本适配 client

#使用grpc version 1.10.1 代替之前的1.24.11版本
sudo npm install grpc@1.10.1

#运行测试例子
#运行测试例子在 Hyperledger-caliper 文件夹中
node benchmark/simple/main.js
#如果出现Request_timeout
#修改 vi scr/fabric/e2eUtils.js
#在25%的位置,120000改为480000,x删除光标上字符,esc后按a光标上输入字符
esc                                                                    #退出编辑模式
wq                                                                     #保存

#正常运行后生成html测试报告,在 /usr/local/Hyperledger-caliper/xxx.html 路径下,复制到浏览器打开
作者:夜月零
版权声明:本博客内容除非另有说明,均为夜月零创作,依据CC BY-NC-SA 4.0协议发布。
转载请务必注明出处及作者。
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇