hyperledger Fabric学习笔记

fabric概念

名词概念

  1. chaincode: 智能合约
  2. transaction: 交易,每条指令都是一次交易
  3. world state: 对同一个key的多次交易形成的最终value,就是世界状态。
  4. endorse: 在我们的共识机制的投票环节里,背书意味着参与投票。
  5. endorsement policy: 背书策略。由智能合约chaincode选择哪些peer节点参与到背书环节来。
  6. peer: 存放区块链数据的结点,同时还有endorse和commit功能。
  7. channel: 私有的子网络,事实上是为了隔离不同的应用,一个channel可含有一批chaincode。
  8. PKI: Public Key Infrastructure,一种遵循标准的利用公钥加密技术为电子商务的开展提供一套安全基础平台的技术和规范。
  9. MSP: Membership Service Provider,联盟链成员的证书管理,它定义了哪些RCA以及ICA在链里是可信任的,包括定义了channel上的合作者。

开发概念

fabric联盟链的开发人员主要分为三类:底层是系统运维,负责系统的部署与维护;其次是组织管理人员,负责证书、MSP权限管理、共识机制等;最后是业务开发人员,他们负责编写chaincode、创建维护channel、执行transaction交易等

开发环境部署

前置环境

  1. docker
  2. docker-compose
  3. git

可参照:docker和docker-compose安装

安装步骤

1、 拉取fabric代码(使用1.1版本的分支)

1
2
3
4
mkdir -p /opt/gopath/src/github.com/hyperledger
cd /opt/gopath/src/github.com/hyperledger
git clone https://github.com/hyperledger/fabric.git
git checkout release-1.1

2、 拉取docker镜像及一些可执行文件

1
2
cd /opt/gopath/src/github.com/hyperledger/fabric/scripts/
./bootstrap.sh

执行完成后有以下镜像

3、安装go语言并配置环境变量

1
yum install golang -y

编辑 /etc/profile文件,添加以下内容

1
export GOPATH=/opt/gopath

使环境变量生效

1
source /etc/profile

4、 启动服务

1
2
cd /opt/gopath/src/github.com/hyperledger/fabric/examples/e2e_cli
bash network_setup.sh up

出现下图表示启动成功:

注意: 以上操作请尽量在root用户下进行,否则会由于权限或者路径问题报错。

fabric cli交互

e2e_cli启动后,可以看到有以下实例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
docker ps --format "{{.ID}}: {{.Names}}"
d09d80cbb69a: dev-peer1.org2.example.com-mycc-1.0
89e9dfab9c10: dev-peer0.org1.example.com-mycc-1.0
f865285adc95: dev-peer0.org2.example.com-mycc-1.0
ff4c56d305e8: orderer.example.com
f03857ea2ff9: kafka1
86657663401e: kafka3
65d678b8d4c7: kafka2
3a7128ce2e3e: kafka0
9e3f75e6b724: zookeeper2
a9e1e9731bea: zookeeper1
de4a92941e58: zookeeper0
cbc16a54b727: peer0.org1.example.com
858e507f523b: peer1.org1.example.com
bb334ea7d4d8: peer1.org2.example.com
a08a01762d55: peer0.org2.example.com

4个peer节点,4个节点构成的kafka集群,3个节点构成的zookeeper集群,一个orderer节点

使用peer命令

启动cli容器

1
docker start cli

进入cli容器中

1
docker exec -it cli bash

查看peer命令

1
2
3
4
5
6
7
8
9
peer --help
## 命令结果
Available Commands:
chaincode Operate a chaincode: install|instantiate|invoke|package|query|signpackage|upgrade|list.
channel Operate a channel: create|fetch|join|list|update|signconfigtx|getinfo.
logging Log levels: getlevel|setlevel|revertlevels.
node Operate a peer node: start|status.
version Print fabric peer version.

example02智能合约

1、安装智能合约

1
2
peer chaincode install -n mycc -v 1.0 -p github.com/hyperledger/fabric/examples/chaincode/go/chaincode_example02
## -n表示合约名字,-p指向合约文件目录路径,-v是版本号

2、 初始化

1
2
peer chaincode instantiate -o orderer.example.com:7050 -C mychannel -n mycc -v 1.0 -c '{"Args":["init","a","100","b","200"]}' -P "OR ('Org1MSP.peer','Org2MSP.peer')"
## -C指向channel名字,-c则是初始构造json格式的消息,-P是背书策略,-o指定共识节点。这里置帐户a初始余额为100,帐户b初始余额为200

3、 查询余额

1
peer chaincode query -C mychannel -n mycc -c '{"Args":["query","a"]}'

4、 转账

1
peer chaincode invoke -o orderer.example.com:7050 --tls true --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem -C mychannel -n mycc -c '{"Args":["invoke","b","a","50"]}'

参考文章

  1. 区块链开源实现HYPERLEDGER FABRIC架构详解
  2. 区块链(BlockChain)技术开发相关资料
  3. Hyperledger Fabric 1.0 从零开始
  4. CentOS7 - Fabric1.0单机安装时的一些记录