1.1 Fabric 介绍
- Fabric Hyperledger 项目组中的核心项目,Fabric 的特性以及 Hyperledger 项目组中与 Fabric 相关的项目的基本属性,重点介绍 Fabric 的编译 安装 使用等内容
1.2 Fabric 的技术特性
- 使用基于 町的查询、范围查询、复合键查询来查询或更新账本
- 只读查询支持丰富的查询语句( CouchDB
- 只读的历史查询一一实现数据追溯场景
- 交易包含读取链码键值对(读集),以及写入链码键值对(写集)的版本
- 交易包含所有背书节点提交至排序服务的签名
- 交易被打包排序成区块,井通过通道从共识节点传至对 节点
- 对等节点通过背书政策标准来验证交易
- 在增加区块前,需要执行版本检查以确保数据在链码执行时间段没有被篡改
- 当交易被验证并承诺后,便不可改变
- 每个通道的账本都包含配置区块,它定义了政策标准、访问控制列表与其他相关信息
- 通道包含了会员服务提供商实例,因此加密证书能传递到不同的证书颁发机构
1.3 Fabric 的智能合约
- Fabric 中的智能合约称为链码(英文名为: Chaincode ,链码英文名的中文直译,统称为 Chain code), Chain code 是一段用计算机语言编写的程序 Chaincode运行在容器中, Fabric 通过 Chain code 可以读取和修改账本数据,同时会把交易的日志保存
- 在状态数据库中 Chaincode 可以通过多种编程语言来开发,目前支持 Go Java Node.js等语言 但是目前支持最完善的还是 Go 语言版本的 Chaincode ,建议读者在实际的项目中使用 Go 语言来开发 Chain code ,除非超级账本的官方发出其他语言版本的 Chaincode 已经成熟可用的信息。Chaincode Fabric 的重要组成部分,在 Fabric 的技术架构中 Chaincode 的设计常重要的一个环节。
1.4 Fabic 的权限系统
-
Fabric 和其他区块链的最大区别是: Fabric 的网络是不公开的,如想进入网络中必须获取授权,因此 Fabr 可以说是前面所提到的联盟链 通过前面的介绍我们知道类似比特以太坊等区块链是没有身份验证系统的,任何人都可以在任何时间、任何能够接人网络的点加入区块链中,这样的区块链称为公有链 在公有链区块链网络中任何人都可以加入网络中,但是如想要获取交易的记账权需要付出代价(算力),这个代价就是我们经常提到的POW (工作量证明算法),通过这种方式使得单个节点的造假成本被无限扩大,从而达到防止单个节点造假的目的。
-
Fabric 中没有采用类似 POW 这样的算法,因此成员如果想加入网络必须获取授权,否则不论算力多大都无法进入网络 为了解决成员授权加入的问题, Fabric 有一个会员服务系统( Membership Service Provider, MSP MSP 是基于 PKI 规范而建立的一个用户证书和私钥体系 MSP Fabric 中非常重要的内容。
1.5 Fabri 的共识算法
- Fabric 中不同 员发起的 易是按照 定的顺序写入区块中, 块链之间连接起来之后形成 块链 在交易排序的过程需要防止恶意篡改,这不只在区块链系统中,在所有的分布式系统中都存在这个问题 在比特币中通过 POW 证明)部分解决了这个问Fabric 提供的官方文档 Fabric 支持 Solo (单节点 识) Kafka (分布式队列SBFT (简单拜占庭容错) 种共识方式 但是在目前最新 Fabric 版本中只 Solo Kafka 这两种 算法 ,在未来 Fabric 会支 PBFT 算。
1.6 Fabric 相关的项目
- 以上项目的源代码都可以从 Hyperledger Github 上面的项目中寻找井下载,Hyperledger Github 中的项目 组的地址如下所示:
https ://github . com/ hyperledger
2.1 Fabric 的模块、安装和使用
- Fabric 并不是一个单独 程序 是由一组模块组成 ,这些模块中的每一个都是一个可独立运行的可执行文件 。
2.2 Fabic 的编译和安装
- 第一步:创建目录并下载代码
mkdir -p $GOPATH/src/g thub.com/hyperledger
cd $GOPATH/src/github.com/hype rledger
git clone http : //gerrit . hyperledger.org/r/fabric
- 第二步:安装相关依赖软件
go ge t github . com/golang/protobuf/protoc gen- go
mkdir -p $GOPATH/src/github com/hyperledger/fabric/build/docker/gotools/bin
cp $GOPATH/bi 口/ protoc-gen-go $GOPATH/src/github.com/hyperledger/fabric/build/
docker/gotools/bin
-
go get 后编译好的文件会存放到环境变量 GOBIN 的值, 系统默认将生成的文体存放到 $GOPATH/bin 下面
-
第三步 编译 Fabric 模块(mac系统的联系博主获取资料)
进入 Fabric 源码所在的文件夹,执行以下命令可以一次完成 Fabrics 个主要模块的编译过程,具体的命令如下所示:
cd $GOPATH/src/github com/hyperledger/fabr
make release
make docker
上述命 执行完成之后,会自动将编译好的 进制文件存放在以下路径中:
$GOPATH/src/g thub.com/hyperledger/fabric/release/linux-amd64/bin
- 第四步 Fabric 模块的安装
编译 成之后,这些模块就可以被运行了,但是目前只能在编译文件所在的文件夹中运行这些模块,这样是非常不方便的 为了更加方便地使用这些模块,可以通过下面的命令将这些模块的可执行文件 制到系统目 中,这样在系统中的任何路径下面都能运行这些可执行这些模块
Ubuntu CentOS Fabric 模块编译后的文件复制到系统文件夹中的方法如下:
cp $GOPATH/src/github com/hyperledger/fabric/release/l 工口ux-amd64 /bin/ * /usr I
local/bin
复制成功之后通过以下命令修改文件的执行权限,否则无法执行
sudo chmod R 775 /usr/local/bin/configtxge
sudo chmod R 775 /usr/local/bin/configtxlator
sudo chmod R 775 /usr/local/bin/cryptogen
sudo chmod -R 775 /usr/local/bin/peer
sudo chmod -R 775 /usr/local/b n/orderer
2.3 Fabric 模块安装结果检查
通过 组命令来检查安装过程是否成功执行命令
peer version
peer:
Version : l . 1 . 0-snapshot-900850f
Go version : gol.8 . 3
OS/Arch : nux/amd64
Exp er me al features : true
Chaincode :
Base mage Ver 0口 0 4 . 1
Ba s e Docker Namespace hyperledger
Base Docker Label : org . hyperledger . fabric
Docker Namespace : hyperledger
orderer version
orderer :
Version : 1 . 1 0-snapshot 900850f
Go vers gol . 8 . 3
OS /Ar c h: l inux/amd64
Experi me ntal features : true
cryptogen version
cryptogen :
Ve rs on development build
Go versi on : gol . 8 . 3
OS/Arch : li 口ux/amd64
configtxgen-version
confi gtxgen:
Version : development build
Go version : gol . 8 . 3
OS/Arch : nux/amd64
configtxlator version
configtxlator :
Versio development build
Go version : gol . 8 . 3
OS/Arch : li 口ux/amd64
-
只能正确地显示版本信息且没有抛出异常,则表示这些 Fabric 的模块编译和安装是正确的, 则说明安装 程存在问题。
-
必须正确安装成功,否则一切都是白瞎,白瞎,白瞎…
2.4 利用 Docker 运行 Fabric 相关模块
本地源代码生成Fabric 模块的 Docker 镜像文件
cd $GOPATH/src/github.com/hyperledger/fabric
make docker
保持网络畅通
- Docker 仓库中下载 Fabric 模块的 Docke 镜像文件
//设置环境变量
export set ARCH=x86 64
export set BASEIMAGE RELEASE=0.4 . 1
export set PROJECT_VERSION=l 1.0
export set MG TAG=l.1.0
//获取 Docker 镜像
docker pull hyperledger/fabr -peer : $ARCH-$IMG_ TAG
docker pull hyperledger/fabric-orderer : $ARCH-$IMG_TAG
docker pull hyperledger/fabric-ca : $ARCH-$IMG_TAG
docker pull hyperledger/fabric-tool : $ARCH-$IMG_ TAG
docker pull hyperledger/fabric-ccenv : $ARCH-$PROJECT_VERSION
docker pull hyperledger/fabric-baseimage : $ARCH-$BASEIMAGE_RELEASE
docker pull hyperledger/fabric baseos : $ARCH $BASEIMAGE_RELEASE
docker ps 查看镜像文件
示例代码
$GOPATH/src/g thub com/hyperledger/fabric/examples/e2e_ll
- Docker Compose 是在使用 Docker 容器部署分布式应用时的工具,可以定义哪个容器运行哪个应用 使用 Docker Compose ,你只需定义 个多容器应用的yml 文件,然后使用一条命令即可部署运行所有容器
2.5 行一个简单的 Fabric 网络的步骤
- Fabric 环境准备
- 生成 Fabric 需要的证书文件
- 创始块的生成
- Orderer 节点的启动
- Peer 节点的启动
- 创建通道
- Chaincode 的部署和调用
- 这就是一个简单的fabric的部署大步骤。
2.6 小结
主要介绍了运行一 Fabric 系统所需要的步骤,包括 Fabric 核心模块的编译行和配置 同时-还介绍了 Fabric 核心概 Channel 的创建和使用, 最后介绍了 Fa 的智能合约 Chaincode 安装、实例化以及调用的方法。