根据《深度探索区块链——Hyperledger技术与应用》的内容及实际操作进行摘要和记录。使用Ubuntu 16.04,下载Hyperledger Fabric 1.0进行学习。
1. 基本环境安装:Hyperledger Fabric 1.0依赖Docker执行智能合约,需要先安装Docker和Docker Compose的运行环境。
(1) Docker的安装和使用
a) Ubuntu安装Docker
方式一:终端输入 sudo apt-get install docker.io
方式二:官方详解 https://docs.docker.com/install/linux/docker-ce/ubuntu/
完成后可以使用docker -v查看版本信息。
b) 用户加入到docker组
sudo groupadd docker ##添加用户组
sudo usermod -aG docker $USER ##非root用户可以执行docker命令
c) 重启Docker服务
sudo service docker start
(2) Docker Compose的安装和使用
使用通过pip进行安装
sudo apt install python-pip
sudo pip install docker-compose
完成后可以使用docker-compose -v查看版本信息
遇到问题:
a) 要求升级pip sudo pip install --upgrade pip
b) 升级后执行pip命令报错:ImportError: cannot import name ‘main‘
解决方法:打开pip配置文件 sudo gedit /usr/bin/pip
将文件中 from pip import main 改为 from pip._internal import main 保存
(3) 下载超级账本源代码
超级账本源代码位于https://github.com/hyperledger/fabric中,可直接使用网页下载release-1.0或者使用git
git clone https://github.com/hyperledger/fabric.git
cd fabric
git checkout -b v1.0.0
实际使用方法为直接下载https://github.com/hyperledger/fabric/tree/release-1.0,并在文件夹中解压zip
sudo unzip fabric-release-1.0.zip
sudo mv fabric-release-1.0 fabric ##重命名
2. 超级账本部署调用
(1) 下载超级账本Docker镜像文件
#进入 fabric/scripts目录,修改文件属性 chmod +x bootstrap.sh #直接下载Docker镜像文件 ./bootstrap.sh
下载内容较多,需要等待时间较长。如下载过程中报错或未下载完成,可以再执行下载代码(./bootstrap.sh)。
完成后使用docker images,至少包括以下内容
(2)部署超级账本网络
运行Hyperledger需要较多初始化配置,该出先绕开初始化过程,本处先用fabric-samples为例,了解网络部署。
a) 下载fabric-samples,可以直接使用网页下载fabric-samples-release-1.0或者使用git
##在文件夹中解压zip
sudo unzip fabric-samples-release-1.0.zip
sudo mv fabric-samples-release-1.0 fabric-samples ##重命名
b) 利用docker-compose启动容器
cd fabric-samples/basic-network
docker-compose -f docker-compose.yml up -d
成功启动后,可使用docker ps查看已启动的容器
c) 切换到管理员,用户再创建通道和加入通道
##切换到root sudo -i ##切换环境到管理员用户的MSP,进入Peer节点容器peer0.org1.example.com docker exec -it -e "CORE_PEER_MSPCONFIGPATH=/etc/hyperledger/msp/users/[email protected]/msp" peer0.org1.example.com bash #创建通道 peer channel create -o orderer.example.com:7050 -c mychannel -f /etc/hyperledger/configtx/channel.tx #加入通道 peer channel join -b mychannel.block #退出Peer节点容器peer0.org1.example.com exit ##进入cli容器安装链码和实例化 docker exec -it cli /bin/bash # 给Peer节点peer0.org1.example.com 安装链码 peer chaincode install -n mycc -v v0 -p github.com/chaincode_example02 # 实例化链码,a分为100,b分为200 peer chaincode instantiate -o orderer.example.com:7050 -C mychannel -n mycc -v v0 -c ‘{"Args":["init","a","100","b","200"]}‘
(3) 链码调用和查询
a) 查询初始值,例如查询a
peer chaincode query -C mychannel -n mycc -v v0 -c ‘{"Args": ["query", "a"]}‘
b) 调用链码,从“a”转移10到“b”
peer chaincode invoke -C mychannel -n mycc -c c0 -c ‘{"Args": ["invoke", "a", "b", "10"]}‘
再查询a和b结果显示,"a"的值为Query Result:90,"b"的值为Query Result:210。
原文地址:https://www.cnblogs.com/zhangjbravo/p/11226997.html