Hyperledger Fabric: A Distributed Operating System for Permissioned Blockchains学习总结
Posted 金帝巧克力
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Hyperledger Fabric: A Distributed Operating System for Permissioned Blockchains学习总结相关的知识,希望对你有一定的参考价值。
学习背景
Fabric作为一个不同于之前区块链的一种面向企业开发的区块链框架,虽然是在2018年发布的这篇文章,而且其官方文档内容也已经在不断更新,但是初学区块链,尤其是联盟链相关知识时,这篇文章可以起到一定的引导作用。其官方文档链接如下:A Blockchain Platform for the Enterprise — hyperledger-fabricdocs main documentationhttps://hyperledger-fabric.readthedocs.io/en/latest/
文章主要贡献
我总结了这篇文章的几个主要贡献点:
·Fabric是第一个在排序阶段即共识阶段提供一个可插拔的接口给共识协议,在此之前不管是公链还是联盟链都是提供已经提前规定的共识协议。
·智能合约在Fabric之前只能由非标准、特定领域的语言进行编写,但在fabric里智能合约(链码)可以由c++、go、Java语言进行编写。
·Fabric提供了一个新的区块链架构,即execute-order-validate,之前的区块链都是Order-Execute架构
·不需要所有peer节点执行智能合约,只需要有满足背书策略的节点执行,之后把状态更新gossip给其他节点
注意:在这篇论文中没有联盟链的概念,只是许可链,当然这两者是等价关系的
Order-Execute架构
在fabric之前所有的区块链都是order-execute架构,这也就是交易来临时,先进行排序共识,然后peer进行顺序执行交易。这种架构虽然由于简单因而应用广泛,但是存在着一些限制缺陷。
本篇论文中从三个方面介绍了其限制:
·顺序执行
因为在这个架构中所有peer节点会顺序执行交易,而且智能合约是所有人都可以编写的,不管你是否有恶意,这个时候如果有一个恶意的需要很长时间执行的智能合约被引入执行,就会极大的降低区块链的性能,这种恶意行为也就是DOS(denial of service)攻击。
当然,公链对此并不是说毫无对策。公链为了解决可能出现的这种问题,提出并实施了一个执行交易的花费。比如说在以太坊上,提出了一个gas费用的概念,并面向交易的提出者进行收费。这是主要面向有本地加密货币的公链的解决方案,也就是说没法解决没有本地加密货币的区块链。
·非确定性编码
对于order-execute架构来说达成共识或者说排序后的执行的操作必须是确定性的,在之前区块链是通过使用特定领域语言编写区块链以此解决问题,但是因为特定领域语言学习需要开发人员的额外学习,不如通用的编程语言如go,c++,Java方便,但是如果使用通用编程语言就无法确保操作的确定性。
·机密执行
在过去,执行智能合约需要在所有的peer节点上进行,但是这样就无法保证有些时候一些交易的数据的机密性。
除此之外,之前的区块链的共识协议都是一刀切似的,无法根据具体情形需求来更换适合的共识协议,比较死板。例如,BFT协议在部署在潜在对抗环境时,性能差异很大。具有“链”通信模式的协议在具有对称和同构链路的局域网集群上显示出可证明的最优吞吐量,但在广域异构网络上性能严重下降。
Execute-order-validate架构
在本文中Fabric提出的execute-order-validate架构如其名字一样分为三个阶段,分别是执行阶段,排序阶段以及验证阶段。
其执行交易的流程大致是这样的:
·客户端从CA获取合法的身份证书来加入到网络中
·客户端把交易的提案发送给配置文件中指定的背书节点,背书节点会检验请求签名,是否满足ACL,然后模拟执行后对结果进行签名
·背书节点会响应请求给客户端,客户端会验证响应签名,然后对比多个背书节点的回复结果,最后检查是否收集足够的endorsement
·客户端、背书节点会把交易提交给排序节点,排序节点会对交易进行排序,之后构造区块,发送给验证提交节点
·验证节点会检查区块中交易完整性,签名是否重复,交易是否满足endorsement策略,检查读写集中版本与账本是否一致,最后会执行区块中合法交易,更新账本状态
节点类型
在fabric中节点主要有两种,分别是Peer与Orderer
·Orderer节点主要是提供共识服务的节点,对所有的合法交易进行排序,再对排序后的交易按批次组合为区块结构
·Peer节点在网络中有两种角色,即Committer和Endorser。Committer角色的peer节点负责维护区块链和账本。该节点定期从Orderer节点中获取排序好的交易区块结构,对这些交易景兴最后的检查确认。Endorser角色的节点主要是为交易背书,检查其是否合法。通过则模拟运行交易,对交易执行导致的状态变化作背书,并返回给客户端。
注意:同一个Peer节点可以仅为Committer角色运行,也可同时担任Endorser与Committer角色
论文链接Hyperledger fabric | Proceedings of the Thirteenth EuroSys Conference
Hyperledger Fabric 智能合约实战 安装fabric
step1. 安装fabirc
下载并执行一个 bash 脚本,该脚本将下载并提取设置网络所需的所有特定于平台的二进制文件,并将它们放入克隆仓库中。
curl -sSL https://bit.ly/2ysbOFE | bash -s
它检索以下特定平台的二进制文件,并将它们放在当前工作目录的子目录 bin 中
- configtxgen
- configtxlator
- cryptogen
- discover
- idemixgen orderer
- peer
- fabric-ca-client
- fabric-ca-server
step2. 将fabric路径添加到 PATH 环境变量中,以便在不需要指定每个二进制文件的绝对路径的情况下获取这些命令
export PATH=
step3. 测试各个模块
peer version
orderer version
cryptogen version
configtxlator version
configtxgen -version
以上是关于Hyperledger Fabric: A Distributed Operating System for Permissioned Blockchains学习总结的主要内容,如果未能解决你的问题,请参考以下文章
Hyperledger Fabric 执行 assetTransfer.go 时出现 UNKNOWN: access denied: channel [mychannel] creator org [
区块链与密码学第3-6讲:一课读懂Hyperledger Fabric