Fabric01-2
准备工作
- 官方帮助文档:https://hyperledger-fabric.readthedocs.io/en/release-1.2/
- 安装 cURL(https://curl.haxx.se/download.html),
curl --version
查询版本 - 安装docker,
docker --version
查询版本 - 安装docker-compose,
docker-compose --version
查询版本 - 安装 go 语言环境,
go version
查询版本 - 安装node.js,
node -v
查询版本 - Python 版本要求为 2.7,
python --version
查询版本
curl -sSL https://raw.githubusercontent.com/hyperledger/fabric/master/scripts/bootstrap.sh | bash -s 1.4.1 1.4.1 0.4.15
1.JPG# fabric-peer :存储账本
# fabric-orderer :排序结点,没有矿工,不用挖矿,相当于矿工
# fabric-ccenv :go的运行环境,智能合约(链码)支持go语言编程
# fabric-tools :工具节点,作为客户端使用
# fabric-ca :注册账号
# fabric-couchdb : 数据库,key-value
# fabric-kafka :排序服务器
# fabric-zookeeper :kafka工作的时候需要zookeeper 协助
设置fabric中的可执行程序全局访问
/home/itcast
ls -a
vi .bashrc
最后一行写:export PATH=/home/itcast/hyperledger-fabric/fabric-samples/bin:$PATH
. .bashrc //生效
测试网络演示
cd /home/itcast/hyperledger-fabric/fabric-samples/first-network
./byfn.sh generate
./byfn.sh up
./byfn.sh down
一:Hyperledger Fabric基本概念
1.Hyperledger简介
Hyperledger项目,Linux基金会托管,IBM牵头做的,Hyperledger里有很多模块,其中最大的,最重要最核心的模块Fabric,其他模块都是为Fabric服务的.
2.Hyperledger Fabric是什么
Hyperledger Fabric是一个框架,私有网络(不发币),里面有一个账本,账本的操作需要使用智能合约,Hyperledger Fabric是参与者管理交易的系统.比如:淘宝买东西,也是交易,但是有中心服务器,Fabric可以替换,并且去掉中心服务器.不会出错,效率更高了.Fabric支持溯源.
3.特点
Hyperledger Fabric与其他区块链系统不同的地方是私有和许可。
(1)私有:Fabric中所有的数据都是受保护的,私有的,私有网络,想看数据,必须加入到小的网络中去,Hyperledger Fabric支持隐私, 提供了创建通道的功能,允许一组参与者中部分成员创建单独的交易账本。
(2)许可:通过正规的渠道申请,得到账号,账号是数字证书(CA证书),能够保证网络中数据安全性.任意一笔交易都需要签名,非对称加密,私钥签名,别人用公钥验证,Hyperledger Fabric网络的成员通过可信赖的,会员服务提供商(MSP)注册,获取签发证书,有了证书,还要有秘钥对,而不是开放式的无权限系统。
二:Hyperledger Fabric逻辑架构
(一).成员服务:身份管理
(二).共识服务
- 账本管理
- 交易管理
(三).链码服务:智能合约
1.用户身份:
- orderer节点 : 排序节点, fabric不用挖矿,order结点相当于矿工的角色,对数据排序, 打包变成区块,order节点将打包的区块发送给peer节点,peer节点收到区块之后, 将数据写入账本中,打包的块大小, 频率可以通过环境配置进行配置.
为什么要排序? 解决双花问题,排序算法有两种:- solo: 测试用的, 确实很慢,队列,串行,很慢
- kafka : 分布式的排序服务器,效率高,企业级
-
peer节点 : 账本只在peer节点上, 存储数据,在整个分布式区块链网络中, 分布着很多peer节点,每个peer节点中的数据相同,对一个节点进行操作, 数据会被同步到网络的其他节点上
peer节点从职责上可以划分:- 背书节点
- 提交节点
- 主节点
- 锚节点
-
客户端程序:访问orderer节点, peer节点,有普通用户和管理员用户
2-1.账本管理:账本在peer节点上, 由两部分组成
- 区块链:所有的交易记录
- 世界状态: 就是一键值对,数据库, 存储区块链最新,最后一条记录,默认的数据库: levelDB, 不想使用leveldb, 可以使用couchdb
2-2.交易管理
- 部署交易:编写链码, 业务逻辑, 智能合约,将链码安装到peer节点上
- 调用交易:对链码中的业务逻辑进程调用,链码中有对应的接口
3.智能合约: 链码,需要部署到有账本的peer结点上,智能合约的编写支持的语言 go, node.js
三:Peer(结点)、Ledger(账本)和 ChainCode(链码,智能合约)关系
1.Ledger账本:在peer节点上,默认就有
2.ChainCode智能合约:程序猿编写完智能合约, 然后安装到peer节点,默认是没有,客户端调用链码(智能合约), 链码修改账本
在一个peer节点上可以同时有多个账本,账本和账本之间数据不可见, 相互隔离,一个账本可以对应一个合约, 也可以是多个
1.JPG四:通道(channel)
用来隔离数据的, 用户在不同的通道中, 使用的数据是不同的, 而且数据不共享, 理解为群
通道是由共识服务(ordering)提供的一种通讯机制,将peer和orderer连接在一起,形成一个个具有保密性的通讯链路(虚拟),实现了业务隔离的要求
2.JPG
五:组织(channel)
fabric中的组织是通过职能划分的
在Fabric中一个组织里边都有什么?
- 有 (1 - N )个用户
- 存储账本的peer节点
图:
1.JPG
p1- p8: peer节点
a1-a4: 客户端
C: 通道
org1 - org4: 组织
1.组织1中有2个peer节点,在同一个组织中peer结点的职责相同, 没有部署在同一个地方,同一个组织的节点上安装的智能合约相同,不同组织的节点,安装的智能合约不同,每个组织内用一个专门的客户端, 用来访问当前组织内的节点
2.组织1中要存储数据,修改账本数据,需要客户端a1,a1作用连接peer1或者peer2
3.多个组织加入到同一个通道, 那么这些组织中节点上的账本数据相同