[toc]
从头开始了解Hyperledger
Hyperledger词汇表
- Anchor Peer -锚节点
锚节点是通道中能被所有对等节点探测、并能与之进行通信的一种对等节点;
通道中的每个成员都有一个(或者多个,以防单点故障) 锚节点 ;
允许属于不同成员身份的节点来发现通道中存在的其它节点;
- Block - 区块
在一个通道上,(区块是)一组有序交易的集合;
区块往往通过密码学手段(Hash值)连接到前导区块;
区块是一组有序的交易集合,在通道中经过加密码(哈希加密,后与前序区块连接);
- Chain - 链
chain就是block之间以hash连接为结构的交易日志。peer从order service接收交易block;
并根据背书策和并发冲突标记block上交易是否有效;
然后将该block追回到pper文件系统中的hash chain
帐本的链是一个交易区块经过”哈希连接”结构化的交易日志;
对等节点从排序服务收到交交易区块;
基于背书策略和并发冲突来标注区块的交易为有效或者无效状态;
并且将区块追回到等结点文件系统的哈希链中;
- Chaincode-链码
链码是一个运行在帐本上的软件,它可以对资产过行编码;
其中的交易指令(或者叫业务逻辑)也呆以用来修改资产;
- Channel-通道
通道是构建在”Fabric”网络上的私有区块链,实现了数据的隔离和保密;
通道特定的帐本在通道中是与所有对等节点共享的;
并且交易方必须通过该通道的正确验证才能与账本进行交互;
通道是由一个”配置块”来定义的;
- Commitment-提交
一个通道中的每个对等节点都会难交易的有序区块,然后将区块提交至该通道上帐本的各个副本;
对等节点也会票房每个区块中的每笔交易的状态 是有效或者无效;
- Concurrency Control Version Check- 并发控制版本检查(CCVC)
CCVC是保持通道中各对等节点状态同步的一种方法。对等节点并行的交易;
在交易提交到帐本之前,对等节点会检查交易在执行期间读到的数据是否被修改;
如果读取的数据在执行和提交之间被改变,就会引发CCVC冲突;
该交易就会在帐本中被标记为无效,而且值不会更新到状态数据库;
- Configuration Block - 配置区块
包含为系统链(排序服务)或通道定义成员和策略的配置数据。对某个通道或整个网络的修改;
(比如,成员离开或加入)都将导致生成一个新的配置区块并追回到适当的链上;
这个配置区块会包含创始区块的内容加上增量;
- Consensus - 共识
共识是贯穿整个交易流程的广义术语,其用于产生个对于排序的同意书和确认构成区块的交易集的正确性;
- Current State -当前状态
ledger的current state表示其chain交易log中所有key的最新值。peer会将处理过的block中的每个交易;
对应的修改value提交到ledger和current state。由于current state 表示channel所知的所有最新的k-v;
所以current state也被称为World State. Chaincode执行交易proposal就是针对的current state;
- Dynamic Membership -动态成员
Fabric支持动态添加-移除member、peer 和ordering服务节点,而不会影响整个网络的操作性;
当业务关系调整或因各种原因需添加-移除实体时,Dynamic Membership 至关重要;
- Endorsement-背书
Endorsement是指一个peer执行一个交易并返回YES-NO给生成交易proposal的client app的过程;
chaincode具有相应的endorsement policies.其中指定了endorsing peer;
- Endorsement plolicy - 背书策略
Endorsement policy定义了依赖于特定chaincode执行交易的channel上的peer和响应结果;
(endorsements) 的必要组合条件(即反回Yes或NO的条件)。 Endorsement policy可以指定对于某一chaincode;
可以对交易背书的最小背书节点或者最小背书节点百分比;
背书策略由背书节点基于应用程序和对抵御不良行为的期望水来来组织管理;
在install和instantiate Chaincode (deploy tx)时需要指定背书策略;
- Fabric-ca
Fabric-ca是默认的证书管理组件,它向网络成员及其用户颁发基于PKI的证书;
CA为每个成员颁发一个根证书(RootCert),为每个授权用户颁发一个注册证书(eCert);
为每个注册证书颁发大量交易证书(tCerts);
- Genesis Block - 初始区块
Genesis Block是初始化区块链网络或channel的配置块,也是链上的每一个区块;
- Gossip Protocol - Gossip 协议
Gossiop数据传输协议有三项功能
1.管理peer发和channel成员;
2.channel上的所有peer间广播帐本数据;
3.channel上的所有peer间同步收本数据;
- Initialize- 初始化
一个初始化chaincode程序的方法;
- Install -安装
将chaincode放到peer的文件系统的过程;
- Instantiate - 实例化
启动chaincode容器的过程;
- Invoke - 调用
用于调用 chaincode内的函数; Chaincode invoke就是一个交易proposal;
然后执行模块化的流程(背书、共识、验证、提交);
invoke的结构就是一个函数和一个参数数组;
- Leading Peer - 主导节点
每一个Member在其订阅的channel上可以拥有多个peer;
其中一个peer会作为chanel的leading peer 代表该Member与ordering service 通信;
ordering service 将block传递给leading peerd, 该peer再将此block分发给同一memer下的其他peer;
- Ledger - 帐本
Ledger是个channel的chain和由channel中每个peer维护 的world state;
- Member- 成员
拥有网络唯一根证书的合法独立实体。像peer节点和app client这样的网络组件会链接到一个Member;
- Membership Service Provider -MSP
MSP是指为client和peer提供证书的系统抽象线件。Cient用证书来谁他们的交易;
peer用证书认证其交易背书。该接口与系统的交易处理组件密切相关;
旨在使已定义的成员身份服务组件以这种方式顺利挺好入而不会修改系统的交易处理组件的核心;
- Membership Services - 成员服务
成员服务在许可的区块链网络上认证、授权和管理身份 ;
在peer和order运行的成员服务的代码者会认证和授权区块链操作;
它是基于PKI的MSP实现;
fabric-ca组件实现了成员服务,来管理身份。特别的,它处理ECert和TCert的颁发和撤销;
ECert是长期的身份任证; TCert是短期的身份凭证,是匿名和不可链接的;
- Ordering Service -排序服务或共识服务
将交易排序放入block的节点的集合。ordering service 独立于peer流程之外;
并以先到先得的方式为网络上所有的channel作交易排序;
ordering service 支持可插拔实现,目前默认实现了SOLO和Kafka;
ordering service是整个网络的公用binding, 包含每个Member相关的加密材料;
- Peer -节点
一个网络实体,维护ledger并运行Chaincode容器来对ledger很乖read-write操作;
peer由Member拥有和维护;
- Policy-策略
有背书策略;校验策略;区块提交策略;Chaincode管理策略和网络-通道管理策略;
- Proposal - 提案
一种针对channel中某peer的背书请求。每个proposal要么是Chaincode instantiate 要么是Chaincode inovke;
- Query- 查询
对于current state中某个key的value的查询请求;
- Software Development Kit -SDK
SDk为开发人员提供了一个结构化的库环境,用于编写和测试链码应用程序;
SDK完全可以通过标准接口实现配置和扩展,像签名的加密算法;
日志框架和state存储这样的组件都可以轻松地实现替换;
SDK API 使用gRPC进行交易处理,成员服务、节点遍历以及事件处理都是据此与fabric通信;
目前SDK支持Node.js Java 和python ;
- State Database - stateDB
为了从Chainncode中高效的读写,Current state数据礁在stateDB中, 包括levelDB和souchDB;
- System chain-系统链
包含在系统级定义网络的配置区块。系统链存在于ordering service中;
具有包含以下信息的初始配置:MSP信息、策略和信息配置。对整个网络的任何变化;
(例如新的Or加入或者添加新的Ordering 节点)将导致新的配置区块被添加到系统链;
Transaction- 交易
Caincode的invoke或instantiate操作; Invoke是从ledger中请求read-write set;
Instantiate是请求在peer上启动Chaincode容器;
了解Hyperledger Farbic
Hyperledger Fabric是一个提供 分布式账本方案的平台。Hyperledger Fabric由模块化架构支撑; 并具备极佳的保密性、可伸缩性、灵活性和可扩展平台; Hyperledger Fabirc被设计成支持不同的模块组件直接拔插启动; 并能适应在经济生态系统中错综复杂的和种场景;
Hyperledger Fabric提供了一个独特的可伸缩、可扩展的架构,这也是Hyperledger Fabric与其他区块的链解决方案的显著区别;如果正计划部署具备完整审查机制以及开源架构的企业级区块链; Hyperledger Fabric昌一个不错的起点;
区块链
分布式账本
一个区链网络的核心是一个分布式账本,在这个账本中记录了网络发生的所有交易信息;
区块链账本通常被定义为去中心化,这是因为在整个网络中,每个参与者都保存着一个区块链账本的副本,所有参与者通过协作 共同维护着账本; 去中心化与协作 这两个特点在现实世界的商业货物交易和商务服务中展出现的显著优点;
除了去中心化与协作,区链链的另一个显著特点是信息在只能以”附加”的方式记录在区块链中; 同时使用加密码技术保障了交易一旦被添加进账本中,就无法被篡改。区块链的这种不可篡改性使得信息来源的确认变得异常容易,这是由于参与者可以肯定信息一旦被写入区块链中就几乎不可被 篡改。这也是为什么区块链常常也被称为证明的系统的原因;
智能合约
为了持续的进行信息的更新,以及帐本进行管理(写入交易,进行查询等),区块链网络引入了智能合约来实现对账本的访问和控制;
智能合约不仅仅可用于在区块链网络中打包信息,它们也可以被用于自动的执行由参与者定义的特定交易操作;
例如,买卖双方要以定义一个智能合约,以保证当卖方发货的端口运送到达时,买方支付的货款会自二甲双胍转帐给卖方;
共识
保持网络中所有账本交易的同步流程,就是共识。共识保证 了账本只会在交易双方都确认后才进行更新。同时在账本更新时,交易双方能够在在账本中的相同位置 ,更新一个相同的交易信息;
区块链因何可行
当前的记录系统
自从商业数据记录网络系统诞生以来,直到今天的交易网络并不骨发生太大的变化; 在商业网络中的成员进行相互交易时,他们各自维护着自己独立的交易记录。同时,人们交易的物品—无论是16世纪佛兰德的挂毯,还是现代的有价证券—都任然需要在每次卖出交易过程中提供来源信息,以确保卖方拥有所出售端口的所有权;
随着科技的进步,交易流程不断深化发展,经历了从使用用石碑、使用纸质账本、使用硬盘存储器直到使用云计算平台的不同阶段,但流程的底层架构并没有发生任何变化。并不存一个可以统一管理网络参与者身份的系统,确认商品来源十分费劲,常常会耗费数天的时间 明确证券的交易(包含数以万计美元的数量)。人们必需签订合约并手动执行,每一个系统中的数据库都包含着独立 的信息并最终代表一个单点的错误。
在今天的信息和过程共享断裂的方法中,建立一个跨越商业网络的记录系统是不可能的,尽管可见性和信任的需求是明确的;
区块链的不同点
为什么不用”现代”的交易系统来替代这种效率低下的网络?新的商业网络可以具有标准的方法建立身份信息,执行交易,并且存储数据。为什么不建立一个可住的交易链条记录?通过查询这个链条上的所有交易,来确定交易商品来源,并且这个链条上的信息一旦被写入,就无法被再次篡改;
这就是区块链网络。在区块链网络中,每一个参与者都保有一份账本的副本。在区块链网络中,不仅仅是账本信息会被共享,更新账本的流程是共享的。不同于目前的系统—参与者使用私有的程序对私胡的账本进行更新,而区块链系统使用共享的程序对共享的账本进行更新;
通过使用共享账协调整个商业网络,区块链网络能免减少时间、成本以及隐私信息泄露的风险,并且能使用流程更加可信和透明;
Hyperledger Fabric
2015年,Linux基金会启动了Hyperledger项目,hhsfi是发展跨行业的区块链技术。Hyperledger项目并不仅仅是定义一个单一的区块链标准,它更鼓励能过开源社区的力量协作开发区块链技术 ;
Hyperledger Fabric是Hyperledger中的一个区块链项目。与其他区块链技术类似, Hyperledger Fabric包含一个账本,使用智能合约并且是一个通过所有参与者管理 交易的系统;
Hyperledger Fabric 与其他区块链系统最大的不同体现在私有和许可。与开放无需许可的网络系统允许未知身份的参与者加入网络不同(需要能过工作量证明协议来保证交易有效并维护网络的安全),Hyperledger Fabric通过Membership Service Provider(MSP)来登记所有的成员;
Hyperledger Fabric也提供了多个可拔插选项。账本数据可被存储为多种格式,共识机制可被接入或者断开,同时支持多种不同的MSP。
Hyperledger Fabric提供了建立 channel的功能,这允许参与者为交易新建一个单独的账本。当网络中的一些参与者是竞争对手时,这个功能变得尤为重要。因为这些参与者并不希望所有的交易信息—比如提供给部分客户的特定价格信息—都对网络中所有参与者公开。只有在同一个channel中的参与者,才会拥有该channel中的账本,而其他不在此channel中的参与者则看不到这个账本;
共享账本
Hyperledger Fabric包含一个账本子系统,这个子系统包含两个组件:世界状态(world state) 和交易记录。在Hyperledger Fabric网络中的每一个参与者都拥有一个账本的副本;
世界状态组件描述了账本在特定时间点的状态,它是账本的数据库。交易记录组件记录了产生世界状态当前值的所有交易,它是世界状态的更新历史。那么,账本则是世界状态数据库和交易历史记录的集合;
账本的世界状态存储数据库是可更换的。默认配置下,这是一个key-value存储数据库。交易记录模 块不需要被不接入。只需要记录在区块链网络中曲棍球数据库被 使用时之前和之后的值就可以了;
智能合约
Hyperledger Fabric智能合约被称为chaincode,当一个区块链外部的一个应用程序需要访问账本时,就会调用chaincode。大多数情况下,chaincode只会访问账本的数据库组件和世界状态(world sate)(比如查询),但不会查询交易记录;
chaincode可通过多种不同编程语言实现。目前支持chaincode的语言是Go(包含对java的支持)