深度学习
工欲善其事,必先利其器。开源社区提供了大量易用的开发协作工具。掌握好这些工具,对于高效开发十分重要。下面分别介绍一些工具。8.4.1 LinuxFoundationID超级账本项目受到Linux基金会的支持,采用LinuxFoundationID(LFID)作为社区唯一的ID。个人申请ID是完全免费的。可以到http://identity.linuxfoundation.org/进行注册。用户使用该ID即可访问到包括Jira、Gerrit、RocketChat等社区的开发工具。8.4.2 Jira——任务和进度管理Jira是Atlassian公司开发的一套任务管理和事项跟踪的追踪平台,提供Web操作界面,使用十分方便。社区采用jira.hyperledger.org作为所有项
超级账本的各个子项目都提供了十分丰富的开发和提交代码的指南和文档,一般可以在代码的docs目录下找到。大部分项目贡献代码的流程都是相似的,这里以Fabric项目为例进行讲解。1.安装环境推荐在Linux(如Ubuntu16.04+)或MacOS环境中开发Hyperledger项目代码。不同项目会依赖不同的环境,可以从项目文档中找到。以Fabric项目为例,开发需要安装如下依赖:·Git:用来从Gerrit仓库获取代码并进行版本管理;·Golang1.6+:访问golang.org进行安装,之后需要配置$GOPATH环境变量。注意不同项目可能需要不同语言环境;·Docker1.12+:用来支持容器环境,注意MacOS下推荐使用DockerforMac。2.获取代码首先注册Linux
懒惰和好奇,是创新与进步的源泉。比特币、以太坊等公有区块链平台的实验,充分论证了区块链技术在支持去中心化交易方面的巨大优势。越来越多的企业也开始关注区块链技术,尝试将其引入商业场景中,以提高进行复杂商业交易的效率,降低多方合作的成本。超级账本Fabric项目应运而生。Fabric作为超级账本社区的早期项目之一,集合了来自科技界和金融界的最新成果,首次提供了面向联盟链场景的分布式账本平台实现。本章将带领读者学习如何从源码开始本地编译和安装Fabric环境,以及在多服务器环境下如何部署一个典型的Fabric网络。同时,还将介绍如何使用容器方式在单机环境下快速启动完整的Fabric网络环境。接下来,讲解链码和应用通道的相关操作和SDK支持。最后,本章对在生产环境中部署Fabric网
Fabric从1.0版本开始,在架构上进行了重新设计,解耦了节点的角色,同时在安全性、性能、可扩展性和可插拔性方面都有了不少改进。在将交易发送到网络中之前,需要先向背书节点收集足够多的背书支持,同时采用专门的排序节点来负责整个网络中十分核心的排序环节。目前,网络中存在以下4种不同种类的服务节点,彼此协作完成整个区块链系统的功能。对网络中节点角色进行解耦是Fabric设计中的一大创新,这也是联盟链场景下的特殊需求和环境所决定的:·背书节点(Endorser):负责对交易的提案(proposal)进行检查和背书,计算交易执行结果;·确认节点(Committer):负责在接受交易结果前再次检查合法性,接受合法交易对账本的修改,并写入区块链结构;·排序节点(Orderer):对所有
动手能力较强的读者,建议通过本地编译安装来部署超级账本Fabric网络,以便对相关组件有更深入的理解。超级账本Fabric基于Go语言实现,本地编译推荐配置Golang1.7或更高版本的环境。下面将讲解如何编译生成fabric-peer、fabric-orderer和fabric-ca等组件的二进制文件,以及如何安装一些配置和开发相关的工具。9.2.1 操作系统常见的Linux发行版(包括Ubuntu、Redhat、CentOS等)和MacOS等都可以原生支持Fabric编译和运行。操作系统推荐Linux内核3.10+版本,支持64位环境。另外,作为Fabric节点,物理内存建议至少为2GB,如果有较多的链码则需要更多容器;预留足够硬盘空间(一般建议20GB或更多)以存储区块文件。在生
除了手动进行本地编译外,还可以采用容器(Docker)镜像的方式快速获取和运行Fabric网络,省去本地编译等待的时间。9.3.1 安装Docker服务Docker支持Linux常见的发行版(如Redhat/Centos/Ubuntu)和MacOS等,推荐使用1.12或者更新的版本。Linux操作系统中可以通过如下命令来快速安装Docker:$curl-fsSLhttps://get.docker.com/|sh安装成功后,修改Docker服务配置。Ubuntu16.04中默认采用了systemd管理启动服务,Docker配置文件在/etc/systemd/system/docker.service.d/override.conf下:DOCKER_OPTS="$DOCK
启动Fabric网络是一个比较复杂的过程,主要步骤包括计划拓扑、准备相关配置文件、启动Orderer节点、启动Peer节点和操作网络等。这里以Fabric代码中自带的示例为基础讲解相关的操作步骤。9.4.1 网络拓扑启动的Fabric网络中包括一个Orderer节点和四个Peer节点,以及一个管理节点生成相关启动文件,在网络启动后作为操作客户端执行命令。四个Peer节点分属于同一个管理域(example.com)下的两个组织Org1和Org2,这两个组织都加入同一个应用通道(business-channel)中。每个组织中的第一个节点(peer0节点)作为锚节点与其他组织进行通信,所有节点通过域名都可以相互访问,整体网络拓扑如图9-2所示。图9-2 网络拓扑结构9.4.2 准备相关配
链上代码(chaincode),简称链码,一般是指用户编写的应用代码。链码被部署在Fabric网络节点上,运行在隔离沙盒(目前为Docker容器)中,并通过gRPC协议与相应的Peer节点进行交互,以操作分布式账本中的数据。启动Fabric网络后,可以通过命令行或SDK进行链码操作,验证网络运行是否正常。注意 用户链码有别于系统链码(SystemChaincode)。系统链码指的是FabricPeer中负责系统配置、背书、验证等平台功能的逻辑,运行在Peer进程内,将在后续章节予以介绍。9.5.1 链码操作命令用户可以通过命令行方式操作链码,支持的链码子命令包括install、instantiate、invoke、query、upgrade、package、sign
9.6.1 通道操作命令命令行下peerchannel命令支持包括create、fetch、join、list、update等子命令。各个命令的功能如下所示:·create:创建一个新的应用通道;·join:将本Peer节点加入到某个应用通道中;·list:列出本Peer已经加入的所有的应用通道;·fetch:从Ordering服务获取指定应用通道的配置区块;·update:更新通道的配置信息,如锚节点配置。可以通过peerchannel<subcommand>--help来查看具体的命令使用说明。9.6.2 命令选项peerchannel命令支持的参数见表9-7。表9-7 peerchannel命令支持的参数各子命令的参数支持见表9-8。表9-8 子命令的参数其中,必需
除了基于命令行的客户端之外,超级账本Fabric提供了多种语言的SDK,包括Node.Js、Python、Java、Go等。它们封装了Fabric网络中节点提供的gRPC服务接口,可以实现更方便地调用。这些客户端SDK允许用户和应用跟Fabric网络进行交互,还可以实现更为复杂的操作,实现包括节点的启停、链码的生命周期管理等操作。SDK项目目前仍在开发中,感兴趣的读者可以通过如下途径获取到SDK的源码并进行尝试。1.基于Node.Js实现的SDK作为早期创建的SDK项目之一,Node.Js实现的SDK目前已经支持了对Fabric链码的主要操作,包括安装链码、实例化并进行调用等,以及访问FabricCA服务。内带了不少操作的例子可供参考。源码仓库地址在github.com/hyperledg