Hyperledger Fabric 是一个开源区块链实现,开发环境建立在 VirtualBox 虚拟机上,部署环境可以自建网络,也可以直接部署在 BlueMix 上,部署方式可传统可 Docker 化,共识达成算法插件化,支持用 Go 和 JavaScript 开发智能合约,尤以企业级的安全机制和 membership 机制为特色。
作为开发具有模块化架构的应用程序或解决方案的基础,Hyperledger Fabric允许组件(例如共识和成员服务)即插即用。Hyperledger Fabric 利用容器技术来托管称为“链代码”的智能合约,其中包含系统的应用程序逻辑。
术语概念
通道( Channel ):通道是构建在 Hyperledger Fabric 区块链网络上的私有区块链,实现了数据的隔离和保密。通道中的 Chaincode 和交易只有加入该通道的节点( Peer )可见。同一个节点可以加入多个通道,并为每个通道内容维护一个账本。每一个通道即为一条逻辑上的区块链。可以按照业务来划分通道,也可以按照行政职能和隐私策略来划分通道。
节点( Peer ): 维护账本的网络节点,通常区块链网络架构中存在多种角色,如 endorser 和 committer 。
排序服务或共识服务( Order Services ) : 提供排序服务或共识服务的网络节点,完成交易的排序和区块打包等工作,支持可插拔的共识组件,当前生产环境下使用 Kafka 进行交易排序。
分布式账本( Distribute Ledger ) :由网络中若干去中心化节点共同维护的数据账本。
组织( Org ) :联盟链中按照 访问和使用账本的网络节点,一个联盟(或者一个区块链网络)有多个组织(成员),一个组织内可以有多个节点( Peer ),每个节点参与账本和世界状态维护。
智能合约( Smart Contract ) :根据特定条件自动执行的合约程序。智能合约是区块链的重要特征,是用户与区块链进行交互,利用区块链实现业务逻辑的重要途径。
链码( Chaincode ):链码是 Hyperledger Fabric 对智能合约的一种实现方式,是运行于 Hyperledger Fabric 网络之上一段应用程序代码,也是用户与 Hyperledger Fabric 交互的唯一途径。
Fabric为应用提供了gRPC API及封装API的SDK供应用调用。应用可以通过SDK访问Fabric网络中的多种资源,包括账本、交易、链码、事件、权限管理等。
应用开发者只需要跟这些资源打交道即可,无需关心如何实现。
(案例链接:https://my.oschina.net/u/3794778/blog/3027089)
1、管理员使用浏览器与Node.js应用交互,我们将该Node.js应用称为Marbles。
2、浏览器中的客户端JS代码将通过websocket与Node.js应用交互,当管理员操作界面时,客户端 JS将向后端发送消息。
3、读写账本的操作在Fabric中被称为提议(Proposal),由Node.js应用负责生成提议并发送给Fabric区块链的对等节点(Peer)。
4、Peer节点与部署在其本地的链码通信,链码将执行/模拟交易,如果模拟的结果没有问题,节点 将对交易进行背书并返回响应给Node.js应用。
5、Node.js应用会将背书过的提议发送给Farbic区块链的排序节点(Orderer),排序节点负责将整个网络上的多个提议打包并生成新的区块,然后广播给所有的对等节点。
6、最后,对等节点将验证收到的区块,然后写入自己维护的账本,交易现在就生效了,任何之后 发生的账本读取操作都可以反应账本的变化。
(2)数据库:LevelDB数据库和CouchDB数据库,链代码数据格式为JSON;
LevelDB 有一个键值数据库,支持键查询、组合键查询和键范围查询。
如果还需要复杂的富格式查询,CouchDB 支持 LevelDB 的基本功能,并添加了全面的富数据查询。
可以选择支持 CouchDB 等文档数据库,内容需是 JSON 格式,而且完全可查询,其数据模型应与现有的键/值编程模型兼容。因此,在利用 CouchDB 时,如果将链代码数据建模为 JSON,则不需要更改应用程序。
(3)区块间密码算法:哈希算法(MD5、SHA-1、SHA-256、SHA-384及SHA-512);
(4)数据加密:非对称加密算法和PKI(利用公钥加密技术的安全基础平台的技术和规范);
(5)共识算法:Kafka共识算法、solo共识算法、PBFT(实用拜占庭容错算法)(1.1版本时取消);
(6)底层技术:点对点网络(P2P网络+gRPC+Gossip协议)
应用与链码的交互是通过与网络上的Peer节点通过gRPC协议通信完成的
(7)案例运行环境:
环境部署 |
版本信息 |
Linux |
Linux ubuntu 4.15.0-29-generic |
go |
go1.10.1 linux/amd64 |
docker |
Docker version 18.06.0-ce-dev |
docker-compose |
docker-compose version 1.21.1 |
nodejs |
node-v8.11.3 |
python |
Python2.7.6 |
maven |
Apache Maven 3.5.3 |
jdk |
java version "1.8.0_161" |
思维导图:
开发者需要了解,所选用智能合约平台的智能合约结构、语言特性、状态存储方式等。此外,开发者还需要对智能合约的生命周期管理进行考虑,包括代码的编写、版本管理、提交验证,以及升级版本等。