Fabric1.4.1 - helloworld手动部署
作者:jockming
联系方式:1299986041
博客:https://www.cnblogs.com/jockming/
交流群(QQ):537487044(Fabric技术交流群)
HelloWorld案例部署指导
目录结构
########################################
项目地址: 点击这里
(仅供参考)
当前所在目录是/home目录
.
└── helloworld
├── bin
│ ├── configtxgen
│ └── cryptogen
├── bootstrap.sh
├── chaincode
│ └── go
│ └── helloworld
│ ├── chaincode.go
│ └── cmd
│ └── main.go
├── channel-artifacts
│ ├── genesis.block
│ └── mychannel.tx
├── configtx.yaml
├── crypto-config
│ ├── ...
├── crypto-config.yaml
├── docker-oderer.yaml
└── docker-peer.yaml
准备链码
########################################
Helloworld链码实现Init和Invoke两个接口,通过stub.PutState和stub.GetState保存和获取链值对数据。
1、Init(stub shim.ChaincodeStubInterface):
- 用于智能合约初始化及升级初始化,实现初始化时保存链值对;
2、Invoke(stub shim.ChaincodeStubInterface):
- 是节点(peer)调用链码的入口函数,实现对账本进行保存和获取链值对;
实现两个文件,分别在(文件所在位置参看 "一、目录结构")helloworld/chaincode.go 和 helloworld/cmd/main.go,main.go是主入口函数。
准备工具
########################################
工具下载地址:点击这里
下载之后解压,在其文件夹中的"bin"目录下有"cryptogen"和"configtxgen"等工具。(复制到"helloworld/bin"目录中)
拉取镜像
########################################
源码下载地址:点击这里
下载之后解压,在其文件夹中的"scripts"目录中有拉取镜像的脚本"bootstrap.sh"。(复制到"helloworld"目录中)
可以直接上传到服务器,执行以下命令来拉取镜像:
1、赋权
$ chmod +x ./bootstrap.sh
2、执行
$ ./bootstrap.sh 1.4.1 -s -b
准备配置文件
########################################
1、用于生成peer证书和ordeer证书
crypto-config.yaml
2、用于生成创世区块文件和通道配置文件
configtx.yaml
以上两个文件参考当前目录下的这两个文件
准备节点启动文件
########################################
1、启动orderer节点配置
docker-oderer.yaml
2、启动peer和cli节点配置
docker-peer.yaml
以上两个文件参考当前目录下的这两个文件
启动前的最后准备
########################################
helloworld文件目录结构参考目录结构
-
上传"helloworld.tar"
将这个目录下的所有文件整理,并打包上传到服务器上。 -
解压"helloworld.tar"
$ cd /home
$ tar -xvf helloworld.tar && rm -rf helloworld.tar
$ cd helloworld
-
生成公私钥和证书
$ ./bin/cryptogen generate --config=./crypto-config.yaml
-
生成创世区块
$ ./bin/configtxgen -profile OneOrgsOrdererGenesis -outputBlock ./channel-artifacts/genesis.block
-
生成通道(Channel)配置区块
$ ./bin/configtxgen -profile OneOrgsChannel -outputCreateChannelTx ./channel-artifacts/mychannel.tx -channelID mychannel
启动网络
########################################
-
启动orderer节点
$ docker-compose -f ./docker-orderer.yaml up -d
-
启动peer和cli节点
$ docker-compose -f ./docker-peer.yaml up -d
-
查看启动状况
$ docker ps -a
-
查看启动日志("ctrl + c" 可以退出日志查看)
$ docker logs -f 容器ID
cli中的操作
########################################
-
进入cli容器
$ docker exec -it cli bash
-
指定排序节点的CA证书
$ ORDERER_CA=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem
-
创建通道
$ peer channel create -o orderer.example.com:7050 -c mychannel -f ./channel-artifacts/mychannel.tx --tls --cafile $ORDERER_CA
-
peer加入通道
$ peer channel join -b mychannel.block
-
安装智能合约
$ peer chaincode install -n mycc -p github.com/hyperledger/fabric/helloworld/chaincode/go/helloworld/cmd -v 1.0
-
实例化智能合约(添加一个记录"helloworld")
$ peer chaincode instantiate -o orderer.example.com:7050 --tls --cafile $ORDERER_CA -C mychannel -n mycc -v 1.0 -c '{"Args":["a","helloworld"]}' -P "OR ('Org1MSP.peer')"
-
查询智能合约
$ peer chaincode query -C mychannel -n mycc -c '{"Args":["get","a"]}'
PS: 最后就可以在cli容器中看到helloworld