ps:本机为windows系统,所使用的虚拟机软件为virtual box,安装的虚拟机为ubuntu20 64位。
一.准备阶段
1.安装git
root@yu-VirtualBox:/home/yu# sudo apt-get install git
2.安装curl
root@yu-VirtualBox:/home/yu# sudo apt-get install curl
3.安装docker
root@yu-VirtualBox:/home/yu# sudo apt-get -y install docker-compose
4.验证docker是否安装成功
root@yu-VirtualBox:/home/yu# docker --version
Docker version 20.10.21, build 20.10.21-0ubuntu1~20.04.1
root@yu-VirtualBox:/home/yu# docker-compose --version
docker-compose version 1.25.0, build unknown
5.运行docker daemon;设置自启动;将你的用户添加到docker组。注意,yu为你的用户名。
root@yu-VirtualBox:/home/yu# sudo systemctl start docker
root@yu-VirtualBox:/home/yu# sudo systemctl enable docker
root@yu-VirtualBox:/home/yu# sudo usermod -a -G docker yu
5.安装go:下载安装包并解压至/usr/local文件夹;增添环境变量;验证go是否安装成功。
root@yu-VirtualBox:/home/yu/下载# rm -rf /usr/local/go && tar -C /usr/local -xzf go1.20.2.linux-amd64.tar.gz
root@yu-VirtualBox:/home/yu/下载# export PATH=$PATH:/usr/local/go/bin
root@yu-VirtualBox:/home/yu/下载# go version
go version go1.20.2 linux/amd64
6.更换go代理,执行
go env -w GOPROXY=https://goproxy.cn,direct
go env -w GO111MODULE=on
7.下载jq,执行sudo apt-get install jq
二.安装示例(fabric-samples),二进制文件(fabric和fabric-ca)和docker镜像 (docker images)
1.创建文件夹并cd到文件夹内
mkdir -p $HOME/go/src/github.com
cd $HOME/go/src/github.com
2.下载hyperledger fabric压缩包,并解压至创建的文件夹内。 解压成功后github.com文件夹内出现fabric文件。
3.手动下载fabric-samples,并解压到github.com/fabric/scripts
4.下载docker images
注意:需要保证下载的镜像版本和hyperledger fabric版本一致,目前最新版本为fabric 2.5.0和fabric-ca 1.5.6。若版本不一致后续会报错。
5.手动下载二进制文件fabric和fabric-ca
注意:下载的二进制版本应该和hyperledger fabric版本一致,当前版本为2.5.0,所以应该下载fabric v2.5.0和fabric-ca v1.5.6
解压后fabric中有bin文件,fabric-ca中有bin和config文件。将两个bin文件合并为一个,并将合并后的bin文件和config文件放入fabric-samples中。
三.测试网络
1.进入路径fabric-samples/test-network,执行./network.sh up启动测试网络
2.创建通道,执行./network.sh createChannel
3.将实例链码asset-transfer-basic安装到通道(链码在fabric-samples/asset-transfer-basic/chaincode-go)。运行./network.sh deployCC -ccn basic -ccp ../asset-transfer-basic/chaincode-go -ccl go
4.使用peer CLI与网络交互,执行
export PATH=${PWD}/../bin:$PATH
export FABRIC_CFG_PATH=$PWD/../config/
5.设置环境变量,作为组织1操作peer CLI,执行
export CORE_PEER_TLS_ENABLED=true
export CORE_PEER_LOCALMSPID="Org1MSP"
export CORE_PEER_TLS_ROOTCERT_FILE=${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt
export CORE_PEER_MSPCONFIGPATH=${PWD}/organizations/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp
export CORE_PEER_ADDRESS=localhost:7051
6.使用一些资产来初始化账本,执行
peer chaincode invoke -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --tls --cafile "${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem" -C mychannel -n basic --peerAddresses localhost:7051 --tlsRootCertFiles "${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt" --peerAddresses localhost:9051 --tlsRootCertFiles "${PWD}/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt" -c '{"function":"InitLedger","Args":[]}'
7.使用CLI工具来查询账本,例如,获取添加到通道账本的资产列表。执行
peer chaincode query -C mychannel -n basic -c '{"Args":["GetAllAssets"]}'
8.调用链码改变账本上的资产所有者。执行
peer chaincode invoke -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --tls --cafile "${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem" -C mychannel -n basic --peerAddresses localhost:7051 --tlsRootCertFiles "${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt" --peerAddresses localhost:9051 --tlsRootCertFiles "${PWD}/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt" -c '{"function":"TransferAsset","Args":["asset6","Christopher"]}'
9. 设置环境变量,作为组织2的peer操作peer CLI,例如,查看账本资产,执行
export CORE_PEER_TLS_ENABLED=true export CORE_PEER_LOCALMSPID="Org2MSP" export CORE_PEER_TLS_ROOTCERT_FILE=${PWD}/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt export CORE_PEER_MSPCONFIGPATH=${PWD}/organizations/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp export CORE_PEER_ADDRESS=localhost:9051
10.查看账本资产的改变情况,执行
peer chaincode query -C mychannel -n basic -c '{"Args":["ReadAsset","asset6"]}'
11.关闭网络,删除节点和链码容器,删除组织加密材料,移除链码镜像,删除运行的通道项目和docker卷。执行./network.sh down