区块链入门 第九部分 超级账本

超级账本

超级账本(hyperledger)是Linux基金会于2015年发起的推进区块链数字技术和交易验证的开源项目,加入成员包括:荷兰银行(ABN AMRO)、埃森哲(Accenture)等十几个不同利益体,目标是让成员共同合作,共建开放平台,满足来自多个不同行业各种用户案例,并简化业务流程。由于点对点网络的特性,分布式账本技术是完全共享、透明和去中心化的,故非常适合于在金融行业的应用,以及其他的例如制造、银行、保险、物联网等无数个其他行业。通过创建分布式账本的公开标准,实现虚拟和数字形式的价值交换,例如资产合约、能源交易、结婚证书、能够安全和高效低成本的进行追踪和交易。

相关官网及网络资料

  • 超级账本官网:
  • 超级账本官方文档 :
  • 超级账本中文文档 :
  • 巴比特专栏 :
  • 区块链技术指南:
  • Hyperledger Fabric 从零开始:
  • Hyperledger详解:
  • 趣链科技技术团队:
  • 孔壹学院:
  • 区块链兄弟:
  • IBM Fabric系列微讲堂 :
  • 超级账本白皮书:
  • github源码 :
  • Fabric源码分析 :

相关词汇概念

  • Anchor(锚点):一般指作为刚启动时候的初始联络元素或与其它结构的沟通元素。如刚加入一个 channel 的节点,需要通过某个锚点节点来快速获取 channel 内的情况(如其它节点的存在信息)。
  • Auditability(审计性):在一定权限和许可下,可以对链上的交易进行审计和检查。
  • Block(区块):代表一批得到确认的交易信息的整体,准备被共识加入到区块链中。
  • Blockchain(区块链):由多个区块链接而成的链表结构,除了初始区块,每个区块头部都包括前继区块内容的 hash 值。
  • Chaincode(链码):区块链上的应用代码,扩展自“智能合约”概念,支持 golang、nodejs 等语言,多为图灵完备。
  • Channel(通道):Fabric 网络上的私有隔离。通道中的 chaincode 和交易只有加入该通道的节点可见。同一个节点可以加入多个通道,并为每个通道内容维护一个账本。
  • Committer(提交节点):1.0 架构中一种 peer 节点角色,负责对 orderer 排序后的交易进行检查,选择合法的交易执行并写入存储。
  • Commitment(提交):提交节点完成对排序后交易的验证,将交易内容写到区块,并更新世界观的过程。
  • Confidentiality(保密):只有交易相关方可以看到交易内容,其它人未经授权则无法看到。
  • Endorser(推荐节点或背书节点):1.0 架构中一种 peer 节点角色,负责检验某个交易是否合法,是否愿意为之背书、签名。
  • Endorsement:背书过程。按照 chaincode 部署时候的 endorsement 策略,相关 peer 对交易提案进行模拟和检查,决策是否为之背书。如果交易提案获得了足够多的背书,则可以构造正式交易进行进一步的共识。
  • Invoke(调用):一种交易类型,对 chaincode 中的某个方法进行调用,一般需要包括调用方法和调用参数。
  • Ledger(账本):包括区块链结构(带有所有的交易信息)和当前的世界观(world state)。
  • Member(成员):代表某个具体的实体身份,在网络中有用自己的根证书。节点和应用都必须属于某个成员身份。同一个成员可以在同一个通道中拥有多个 peer 节点,其中一个为 leader 节点,代表成员与排序节点进行交互,并分发排序后的区块给属于同一成员的其它节点。
  • MSP(Member Service Provider,成员服务提供者):抽象的实现成员服务(身份验证,证书管理等)的组件,实现对不同类型的成员服务的可拔插支持。
  • Non-validating Peer(非验证节点):不参与账本维护,仅作为交易代理响应客户端的 REST 请求,并对交易进行一些基本的有效性检查,之后转发给验证节点。
  • Orderer(排序节点):1.0 架构中的共识服务角色,负责排序看到的交易,提供全局确认的顺序。
  • Permissioned Ledger(带权限的账本):网络中所有节点必须是经过许可的,非许可过的节点则无法加入网络。
  • Privacy(隐私保护):交易员可以隐藏交易的身份,其它成员在无特殊权限的情况下,只能对交易进行验证,而无法获知身份信息。
  • System Chain(系统链):由对网络中配置进行变更的配置区块组成,一般可以用来作为组成网络成员们形成的联盟约定。
  • Transaction(交易):执行账本上的某个函数调用或者部署 chaincode。调用的具体函数在 chaincode 中实现。
  • Transactor(交易者):发起交易调用的客户端。
  • Validating Peer(验证节点):维护账本的核心节点,参与一致性维护、对交易的验证和执行。
  • World State(世界状态):即最新的全局账本状态。Fabric 用它来存储历史交易发生后产生的最新的状态,可以用键值或文档数据库实现。 
    (链接:https://www.jianshu.com/p/12020c87c946)

超级账本白皮书

原文链接:http://www.8btc.com/hyperledger-whitepaper

译者序 
任何技术的发展、普及应用需要不同的人做出不同的贡献。作为国家从事电子信息技术领域标准化的基础性、公益性、综合性研究机构,更应结合自身的定位,努力为区块链这种具有广泛前景的技术和应用模式做出应有的贡献。因此,我们从基础研究开始,翻译了开源项目Hyperledger社区发布的白皮书1.0.1版。 
万事开头难!在翻译这份白皮书的过程中,对我们来说就是一个学习区块链、理解区块链和找准定位的过程。翻译不是目的,我们的初衷是通过这样的基础性学习研究,找到未来我们服务于区块链在全国乃至全球发展的路径——标准化的方向和内容,最终通过标准化手段,构建良好的发展生态。 
作为初学者,难免翻译的内容有不到之处。如果您在阅读中有任何意见或建议,欢迎联系我们:[email protected] 
中国电子技术标准化研究院 
软件工程与评估中心 
周平 单旭


摘要

本白皮书描述了区块链的行业应用案例,以推动形成新的区块链结构原理。另外,本白皮书根据这些应用案例,列出了针对区块链的基本需求和高级体系结构。本白皮书中所呈现的超级账本(Hyperledger)描述了区块链结构的演进,并作为商对商(B2B)、商对客(B2C)交易的一种协议。当在相同的网络中发生业务竞争时,Hyperledger允许在符合规则的前提下支持各种需求。本白皮书后面所描述的内容包括智能合约、数字资产、记录存储库、去中心化的一致网络和密码安全。最后,本白皮书还描述了区块链的主要产品、各行业对性能的要求、身份验证、隐私和机密交易和可插拔的共识模型。

一、背景 
区块链是一种新兴技术模式。这种技术模式能够快速改进银行、供应链以及其他的交易网络,在降低与业务运营相关的成本和风险的同时,能创造新的创新和增长机会。自2009年比特币在交易领域迅速崛起以来,许多商业组织和行业机构投入了大量资源来研究比特币的底层技术,从而传播这种广受欢迎但又颇具争议的加密币。 
区块链是一种点对点(P2P)分布式账本技术。由于能够有效、安全地支持资产的发行、交易、管理和服务,区块链首先在金融行业得到了支持。在不要求中心控制点的情况下,区块链技术能够容易地建立成本合适的商业网络,这与记录系统(SoR)的生态中需要每一个成员维护自己的账本系统、审核与其他成员的交易进展形成了鲜明的对比,因为后者即低效、又昂贵,而且经常是非标准化的内部操作流程。 
由于共享账本概念得到了商业世界的支持,区块链智能合约也引起了更多行业的关注。智能合约是商业规则的集合,是部署在区块链上,并由一组利益相关方共享和共同验证。在自动化商业流程中,智能合约是非常有用的,而且诚信可靠,允许所有利益相关方共同处理和验证合约规则。 
比特币及其他加密货币的设计是完全开放、去中心化和非授权的:任何人在没有确定身份的情况下都能参与,而且只需要贡献一点时间完成计算周期就行。在区块链的比特币模型中,没有中心机构来发放许可,因为网络是非授权的。由于需要无数的工作量计算来证明,比特币的运行是昂贵的。 
Hyperledger是对传统区块链模型的革新。即使希望授权的区块链作为起点,但Hyperledger通过提供一个模型,在某种程度上是允许创建授权的和非授权的区块链。另外,Hyperledger通过一个提供针对身份识别、可审计和隐私的安全和健壮模型,使得缩短计算周期、提高规模效率和响应各个行业的应用需求成为可能。

二、为什么是一个新的架构

作为一种新兴技术,现有的区块链实现不能满足商业交易中各种复杂的应用需求。可扩展性挑战、机密和隐私交易支持的缺失以及其他限制,使得很多关键业务应用不能投入使用。为了及时部署弹性平台、支持跨行业的应用需求,需要轻量级、模块化和通过配置插入各种组件(交易验证器、阻止协商一致等)支持可扩展的平台。为了满足今天市场的各种需求,Hyperledger的设计以行业应用为重点,解决了现有技术的缺点,并拓展了业内先行者原来的工作。

三、我们的愿景

通过Hyperledger,我们规划了针对区块链技术的未来愿景。我们相信区块链技术将会对现实生活的很多方面产生根本性影响,包括从商业到数据存储和其他事情。基于这一点,我们认为针对区块链/分布式账本技术制定健壮的和开放的标准是必要的,因为,这能推动这样的技术在主流商业化领域得到应用。我们相信未来世界将建立许多内部互联的分布式数据库和区块链,每一个分布式数据库和区块链都将满足特定用户的需求,但也要求与其他的账本进行通信。

因此,我们认为任何针对区块链技术的开放标准都必须尽量模块化。未来让开发人员能够按照自己的意愿来回替换不同版本的各种区块链组件,必须建立这样的标准。例如,一些区块链应用案例在要求快速一致算法的同时要求更多的可信,而某些应用案例可能不要求速度但要求更加可信。密码算法、智能合约和数据库存储是需要实现“即插即用”的其他特征。

模块化的另一个重要方面是使外部开发更容易。如果某个公司能够改进Hyperledger的某些模块,这个公司就可能做到并按自己的意愿发布这些改进的模块。实际上,公司或个人都应该能构建全部的模块(能够按要求一起使用,或者与其他Hyperledger组件实现“即插即用”),以容纳或与Hyperledger实现互动。本质上,不使用Hyperledger框架中的任何核心组件也能够构建区块链。

我们对Hyperledger的长期愿景就是它包含丰富的、易用的API和数量庞大的核心模块,这样就能容易实现开发和互操作。虽然我们希望核心的Hyperledger模块能够满足尽量多的应用案例,但我们也知道Hyperledger的核心内容是不可能覆盖每个行业的应用案例。然而,我们的API应该足够灵活,使得不使用Hyperledger核心组件构建的应用案例能很容易地与核心的Hyperledger组件和区块链实现互动。

我们不可能考虑到Hyperledger和通用区块链技术将来所有的使用方式,因此,为了能够容纳将来未知的开发,Hyperledger的设计是尽量模块化和可扩展。除此之外,Hyperledger的模块化应该能让更多的人围绕Hyperledger工作。我们希望这种模块化的方式允许发明或开发新的区块链技术的人们发现:使用或与Hyperledger合作是很容易的。

than the stakeholders for the contract or the asset being transferred.

我们相信,针对任何区块链结构根本需求的一个方面就是网络中任何一方行为的识别和模式必须不能被未授权方通过检查账本就能查明。我们也期望某个需求允许区块链用户确认业务逻辑和/或交易机密的其他参数、使他们对任何人都是不可访问的,而不是合同的利益相关方或资产被转移。

Hyperledger应该为核心协议之上轻松实现的各类丰富应用提供支持。这必将要求支持各种交易语义、密码算法、协商机制和数据库存储协议。例如,加密的Hyperledger应该包括所有的加密、签名和更高级的功能密码,从简单的、快速的对称加密到复杂的功能加密和基于属性的签名。这些基本的技术原理应通过配置来支持重要的商业交易,例如不同程度的授权交易的不可改变性和可审计性。

总的来说,我们希望Hyperledger是一个易用、十分有用和健壮的平台,任何对构建区块链软件的机构和个人都可以把它作为核心代码。尽管由于实际考虑不足,Hyperledger针对每个潜在用户和应用案例可能缺乏这种理想的功能,但我们的目标就是使Hyperledger尽可能接近这种理想的状态。

四、行业应用案例

我们已经编制了一套本质上支持下述抽象应用案例的区块链初始需求。这些应用案例并不代表Hyperledger的所有应用案例,而是一组展示Hyperledger某些能力和特征的典型样本。

(注:这些应用案例为体系结构设计和测试驱动的开发提供指南。虽然还是一项推进中的工作,这些应用案例应该是所有贡献者一致认同的,无论是内容还是堆栈中排名的优先次序。如果您觉得这些内容有欠缺,可以提出改变建议。理想的情况是不超过四个抽象应用案例中有三个是首选。)

4.1金融资产处置

诸如证券这样的金融资产必须能在区块链网络上实现去中心化,这样所有同种资产的利益相关方就能直接访问这一资产,进而发起交易,获取相关信息而不需要通过层层中间环节来进行了。交易可以在利益相关者之间商定的时间期限内解决, 交易可以实现实时结算,利益相关者都可以实时掌握资产情况。对于任何种类的资产,利益相关方应该有权增加商务规则,这样也能通过自动化逻辑的应用来降低成本。创建资产的人必须像用例保证的那样,实现资产和相关交易规则保密或者公开。例如,资产创建者应该能够创建资产,而这一资产的交易记录以及交易模式对于利益相关者之外的群体是不可见的,甚至创建人本身也不能访问。

4.2协作

公司A发起一个协作的事件请求,无论这个过程中涉及多少中间环节(如代理接收/支付,CSD,ICSD,本地/全球保管银行,资产管理公司等)公司A需要将邀请的完整细节信息实时发送给利益相关方。一旦利益相关者作出交易决策,这个决策也需要被实时处理完成(包括作为协作事件一部分的新增份额)。如果需要,投资者的响应会被保密,这样他们就可以基于价值作出决策,而不用担心自己的操作行为带来的负面影响。

4.3供应链

区块链的框架必须满足供应链中每一位参与者的如下需求:录入并追踪原材料的来源;记录部件生产的遥测数据;追踪航运商品的出处;保证包括成品生产、储存、销售及后续事宜在内的所有数据都不被篡改。除了之前描述的商务合约和资产存管模式的特征,供应链这一用例更多强调的是其深度可搜索性,保证能够在过去的层层交易中追溯所需记录。其核心是为每一个基于其它部件构成的商品创建出处(可追溯的源)。 
4.4主数据管理

主数据通常并不是交易信息数据,而是行业信息的关键和基础组成部分,如:customer(客户)、employee(员工)、supplier(供应商)、product(产品)、location(地址)和contract(合同)等。授权认证机构发起变更并对变更进行校验,维护核心数据的唯一性和真实性可以解决许多数据质量和一致性问题。

4.5共享经济和物联网

共享经济将在许多传统行业领域产生可带来营收的新型产业,如:智慧城市、互联家园、自动化、运输、医疗、分销、建筑、教育、健身等领域。 
交易中的个体、组织以及监管机构并不总是相互信任。善加利用基于分布式账本的区块链技术有助于解决交易各方相互间的信任问题。区块链技术同时也有助于交易的实时处理和资产状态的实时访问。灵活的部署模型,可插拔的共识机制,私下交易以及保密合约对于超级账本的部署都很重要。 
了解更多关于用例和需求的细节,以及如何将这些用例嵌入到基于区块链技术的系统中,请访问:https://www.google.com/url?q=https://github.com/hyperledger/hyperledger/wiki&sa=D&ust=1466139262975000&usg=AFQjCNEbquySu8Mky1D8rZnWvxF3rswKlQ

五、典型需求

我们接下来描述超级账本的典型需求。这里描述的典型需求满足了多种用例和商务情境,我们希望产记账本将来能够发展出更多的特性。

首先,超级账本最关键的需求是架构。正像我们反复强调的,不同的应用会对机密算法、一致性算法和数据库存储方式有着不同的需求。然而,我们基于架构细化一些更具体的需求,可以广泛应用于更多领域。

私下交易和保密合约

超级账本最终应该支持多种加密工具和方法,确保满足相应的加密和隐私管理需求。这些工具用于确保诸如身份识别、交易属性、智能合约状态等信息的真实性,同时不会侵犯信息的私密性。

与那些金融领域的用例不同,某些用例(如物联网)需要性能优化的基本保密功能,其加密和共识算法需要兼顾基本的加密功能和复杂的定制需求。

身份识别和审计

不考虑私下交易和保密交易,超级账本使用基于PKI(公钥基础设施)的加密算法实现了交易中的身份识别和审计功能。

超级账本对用户和交易相关者除了单纯提供基于PKI的身份识别功能还应该支持对这些访问和识别操作的归档功能,包括交易相关者之间的加密请求,以便实现对涉及所有权变更的相关用例进行基于文档的审计追踪。

除了主动进行身份识别,超级账本也允许用户在特定情况下隐藏身份识别操作,仅当需要的时候才提供证明。当然,这已经超出了传统的身份识别概念。此外,PKI非常灵活,允许用户根据特定的需求选择不同强度的加密措施。

互操作能力

在松耦合的网络中,独立的网络相互间不需要了解彼此的运行细节。然而,这样的独立网络也需要具备一定的共性,以实现彼此间正确的信息交换。尤其是对着区块链技术的普及,应该考虑各种不同的区块链系统相互间的信息交换操作。各类区块链网络实现上的差异以及其演进和不断变化的特性会导致实现的高度专业化。制定专业的通信分类标准,创建在多种网络间通信的通用语言将是一项漫长而艰巨的工作。

区块链技术在设计和实现上存在差异,当不同服务彼此间交互操作,互操作就产生了。

超级账本定义可在两个或多个系统(组件)间进行信息交换,并使用交换的信息。为实现跨行业和跨用例的广泛应用,超级账本支持两个或多个区块链间进行信息交换的协议功能。

可移植性

超级账本项目通过从其核心组件接口中提取的增值系统实现移植操作。例如,智能合约就可以不做任何变更地移植部署。可移植性的增值系统,诸如:API(应用程序编程接口)库,GUIs(图形用户接口)开发应用,扩展库等,保证了超级账本的增值系统可以跨版本使用、实现和部署,同时也保证了超级账本项目的功能在异构环境下的大型区块链网络中得以实现。

六、体系结构

区块链入门 第九部分 超级账本_第1张图片

身份识别服务负责管理诸如资产、智能合约这样的实体、参与者和分类帐对象的身份识别。(参与者通过注册获取身份,之后通过授权机构发放的密钥进行交易。)

策略服务负责管理访问控制、隐私、联盟规则、共识规则等。

区块链服务负责通过点对点通信协议管理分布式账本。经过优化的数据结构可以有效维护在众参与者间复制的整体状态信息。不同的共识算法或将嵌入到每一个配置中,以保证高度一致性(通过BTF算法处理错误,通过崩溃容忍机制处理延迟和中断,或借助工作量证明方案应对审查。) 
展示了Hyperledger所参考的架构,包括四个大类:身份识别服务,策略服务,区块链和智能合约。这些分类都是逻辑结构,而不是将组件划分成独立的进程、地址空间或(虚拟)机的物理描述。

智能合约服务负责提供安全又轻便的方式供智能合约在验证节点上运行。

6.1身份识别服务

区块链入门 第九部分 超级账本_第2张图片

6.2策略管理服务

区块链入门 第九部分 超级账本_第3张图片

6.3 区块链服务

区块链入门 第九部分 超级账本_第4张图片

分布式账本使用数据存储维护数据集,同时建立内部的数据结构区别不同的状态,以此满足上述三个属性。大文件使用链外存储,不记录在账本中。它们的哈希函数值作为交易的一部分被存储在数据链中,以此维护文件的完整性。共识管理器是共识算法和其它超级账本组件间接口的抽象定义。共识管理器接收交易请求,借助相关算法判断如何组织以及何时执行交易。交易的成功执行将导致超级账本状态发生改变。

通过模块化的可插拔共识功能,超级账本支持为评估和记录特定系统风险而设计的各种共识模块。

超级账本提供pub/sub(消息的发布/订阅)模式的事件管理框架,这样外部应用就可以监控和收到超级账本的事件告警。

6.4智能合约服务

区块链入门 第九部分 超级账本_第5张图片

七、应用编程接口

区块链入门 第九部分 超级账本_第6张图片

超级账本的特色之一是提供了一套易用、可灵活扩展的API接口。 超级账本的每个模块都清晰完整地定义了相应的API接口,因此这些模块可以实现“即插即用”。例如共识算法的API支持用户无需修改算法代码就可以在各类用例中使用这一算法。完善的API接口为超级账本支持各类用例提供了有力保障。

此外,非模块对模块通信的外部API接口设计更便于普通开发人员在超级账本顶层编写代码。

一整套完全独立的API接口、智能合约模块以及共识协议模块是保障参与者能够在整个生态系统中提供贡献的基础。这一特性保障了整个生态系统的快速成长。

八、网络拓补

理论上讲Hyperledger的的网络拓扑应该是完全不同的:特别是参与者可以通过云服务操控各种类型的对等节点,包括验证节点,或者参与者本身就是验证节点。Hyperledger运行在不可知的底层网络结构中,我们无法得知究竟谁在使用这些节点设备。

假如云节点是主服务节点,那么就必须考虑使用更加有效的加密解决方案避免云服务器中的信息被恶意泄露。

有些部署的Hyperledger可能会面临较大的系统变化,导致节点间通信延迟。网络失效,节点失效,因此网络的冗余性和可恢复性在部署之初就应加以考虑。

九、结论

Hyperledger的任务是将区块链技术引入主流产业市场。回顾了可行的区块链解决方案,也了解了业界领先者及技术推广者给出的相关用例后,我们相信区块链将会成为至关重要的技术模型,推动众多工业和企业进行革新。

我们注意到,业内急需一套为企业打造的区块链架构,做到既高效又可扩展,并且能够支持企业级的加密和隐私保护。此外,我们还发现针对众多的区块链用例目录需求需要不同的底层实现。为挖掘区块链技术的潜力和创建适应不同用例的标准,我们设计 Hyperledger 框架时兼顾了灵活性和可扩展性。

参考资料 
[CL02] Miguel Castro and Barbara Liskov, Practical Byzantine Fault Tolerance 
[N09] Satoshi Nakamoto, Bitcoin: A Peer-to- Peer Electronic Cash System 
[Eth] Ethereum Whitepaper


超级账本Fabric1.0环境搭建

环境准备:

下载v-box和ubuntu16.04镜像。安装操作系统,这里一步步下去没什么特殊地方需要配置,系统资源是4G内存。这个根据自己电脑性能,基本fabric对硬件要求不高,有人在树莓派上也有过部署。

安装前准备:(由于排版问题,命令有分行,以“#”区别)

ubuntu16.04安装完成后,建议进行更新。#apt-get update

如出现problem executing scripts APT...错误,请按照如下步骤:

 
    
  1. #sudo pkill -KILL appstreamcli
  2. #wget -P /tmp https://launchpad.net/ubuntu/+archive/primary/
  3. +files/appstream_0.9.4-1ubuntu1_amd64.deb https://launchpad.net/ubuntu/
  4. +archive/primary/+files/libappstream3_0.9.4-1ubuntu1_amd64.deb
  5. #sudo dpkg -i /tmp/appstream_0.9.4-1ubuntu1_amd64.deb
  6. /tmp/libappstream3_0.9.4-1ubuntu1_amd64.deb

区块链入门 第九部分 超级账本_第7张图片

安装go语言环境:

 
    
  1. #curl -O https://storage.googleapis.com/golang/go1.8.linux-amd64.tar.gz

建议拉取直接在/usr/local目录下

解压

 
    
  1. #tar -xvf go1.8.linux-amd64.tar.gz

这时候在当前目录会出现go文件夹,配置环境变量:(笔者这里使用的是root)

先新建一个gopath的目录,这里直接在当前目录建了gopath目录,进入该目录新建三个目录:bin、pkg、src

 
    
  1. #vi /etc/profile

最后加入:

 
    
  1. export GOPATH=/usr/local/gopath
  2. export PATH=$PATH:$GOPATH:$GOBIN:$GOPATH

添加完成后 执行#. /etc/profile生效。

通过#go env查看配置后环境:

区块链入门 第九部分 超级账本_第8张图片

安装必要依赖包:

 
    
  1. #sudo apt-get install -y libsnappy-dev
  2. #sudo apt-get install -y zlib1g-dev
  3. #sudo apt-get install -y libbz2-dev
  4. #sudo apt-get install -y libltdl-dev
  5. #sudo apt-get install -y libtool

安装docker:

 
    
  1. #curl -fsSL https://get.docker.com/ | sh 或者#apt-get install -y docker.io

安装完成后需要配置

首先:最好把用户添加到docker组中

 
    
  1. #sudo username -aG docker 用户名

其次:修改docker服务配置

 
    
  1. #vi /etc/default/docker

添加如下内容:

 
    
  1. DOCKER_OPTS="$DOCKER_OPTS -H tcp://0.0.0.0:2375 -H
  2. unix:///var/run/docker.sock --api-cors-header='*'"

完成后docker重启

 
    
  1. #service docker restart

设置docker自启动,这个看个人习惯了,就不多做说明了。

安装docker-compose:

 
    
  1. #apt-get install -y docker-compose 或者#curl -L
  2. https://get.daocloud.io/docker/compose/releases/download/1.10.1/docker-compose-`uname -s`-`uname -m` > ~/docker-compose

安装完成后检查:#docker -v # docker-compose -v

区块链入门 第九部分 超级账本_第9张图片

拉取源码:

这个过程和后面拉取镜像取决于你的网络,希望网络状态良好,不然等待有点长。

在$GOPATH/src目录下新建三层目录:

 
    
  1. #mkdir -p $GOPATH/src/github.com/hyperledger/

进入该目录拉取源码:

 
    
  1. #git clone https://github.com/hyperledger/fabric.git

屏幕快照 2018-07-04 下午6.52.26.png-111.1kB

生成第一个fabric目录,我这里多拉了几个。

拉取镜像:(可以自己手动编译各个节点,但是较复杂,这里说明简单的方式)

一般的做法就是直接到fabric目录下面#make docker,这里会报错,缺少protoc-gen-go包,可以考虑先手动安装好,如果你的网络够开放:

 
    
  1. #go get github.com/golang/protobuf/protoc-gen-go如果不行的话可以git方式,目录是一样的。

把protoc-gen-go拷贝到

 
    
  1. $GOPATH/src/github.com/hyperledger/fabric/build/docker/gotools/bin目录。

设置完成后在拉取一次,如果还是有问题,那么先pull两个下来:

 
    
  1. #docker pull hyperledger/fabric-baseimage:x86_64-0.3.1
  2. #docker pull hyperledger/fabric-baseos:x86_64-0.3.1

执行完成后,进入/examples/e2e_cli目录。

 
    
  1. #sh download-dockerimages.sh,这里拉取的都是1.0.0版本的,可以vi该文件,找到相应版本修改。

拉取完成后: 
区块链入门 第九部分 超级账本_第10张图片

这里最好对拉取的镜像打个标签:

 
    
  1. #docker tag -g images-name 序列号:latest

网络启动和环境测试:

还是之前的目录下面 #./network_setup.sh up 后面加通道名,不加默认就是mychannel

启动后稍等一会,如果整个环境正常,输入如下:

区块链入门 第九部分 超级账本_第11张图片

你可能感兴趣的:(区块链)