超级账本项目-深研未来

0.Hyperledger – 超级账本项目

Uneasy lies the head that wears a crown.

Hyperledger 项目是首个面向企业的开放区块链技术的重要探索。在 Linux 基金会的支持下,吸引了包括 IBM、Intel、摩根等在内的众多科技和金融巨头的参与。

本文将介绍 Hyperledger 项目的历史,并以核心的 fabric 项目为例,讲解如何快速安装部署和应用区块链系统。

1.诞生与发展

历史

区块链已经成为当下最受人关注的开源技术,有人说它将颠覆金融行业的未来。然而对很多人来说,区块链技术难以理解和实现,而且缺乏统一的规范。

2015 年 12 月,开源世界的旗舰——Linux 基金会牵头,联合 30 家初始企业成员(包括 IBM、Accenture、Intel、J.P.Morgan、R3、DAH、DTCC、FUJITSU、HITACHI、SWIFT、Cisco 等),共同 宣告Hyperledger 项目的成立。该项目试图打造一个透明、公开、去中心化的分布式账本项目,作为区块链技术的开源规范和标准,让更多的应用能更容易的建立在区块链技术之上。项目官方信息网站在 hyperledger.org

超级账本项目-深研未来
图 1.11.1.1 – Hyperledger 项目快速成长

目前已经有超过 120 家全球知名企业和机构(大部分均为各自行业的领导者)宣布加入 Hyperledger 项目,其中包括 30 家来自中国本土的企业,包括艾亿新融旗下的艾亿数融科技公司(2016.05.19)、Onchain(2016.06.22)、比邻共赢(Belink)信息技术有限公司(2016.06.22)、BitSE(2016.06.22)、布比(2016.07.27)、三一重工(2016.08.30)、万达金融(2016.09.08)、华为(2016.10.24)等。

如果说以比特币为代表的货币区块链技术为 1.0,以以太坊为代表的合同区块链技术为 2.0,那么实现了完备的权限控制和安全保障的 Hyperledger 项目毫无疑问代表着 3.0 时代的到来。

IBM 贡献了数万行已有的 Open Blockchain 代码,Digital Asset 则贡献了企业和开发者相关资源,R3 贡献了新的金融交易架构,Intel 也刚贡献了跟分布式账本相关的代码。

Hyperledger 社区由技术委员会(Technical Steering Committee,TSC)指导,首任主席由来自 IBM 开源技术部 CTO 的 Chris Ferris 担任,管理组主席则由来自 Digital Asset Holdings 的 CEO Blythe Masters 担任。另外,自 2016 年 5 月起,Apache 基金会创始人 Brian Behlendorf 担任超级账本项目的首位执行董事。2016 年 12 月,中国技术工作组 正式成立,负责本土社区组织和技术引导工作。官方网站也提供了十分详细的 组织结构信息

该项目的出现,实际上宣布区块链技术已经不再是仅面向“社会实验”性质的应用场景,它已经正式被主流机构和企业市场认可;同时,Hyperledger 首次提出和实现的完备权限管理、创新的一致性算法和可拔插、可扩展的框架,对于区块链相关技术和产业的发展都将产生深远的影响。

主要项目

代码托管在 GerritGithub(自动从 gerrit 上同步)上。

超级账本项目-深研未来
图 1.11.1.2 – Hyperledger

目前主要包括三大账本平台项目和若干其它项目。

账本平台项目:

  • Fabric:包括 FabricFabric CA、Fabric SDK(包括 Node.Js、Python 和 Java 等语言)和 fabric-apifabric-sdk-nodefabric-sdk-py 等,目标是区块链的基础核心平台,支持 pbft 等新的 consensus 机制,支持权限管理,最早由 IBM 和 DAH 发起;
  • SawToothLake:包括 arcade、core、dev-tools、validator、mktplace 等。是 Intel 主要发起和贡献的区块链平台,支持全新的基于硬件芯片的共识机制 Proof of Elapsed Time(PoET)。
  • Iroha:账本平台项目,基于 C++ 实现,带有不少面向 Web 和 Mobile 的特性,主要由 Soramitsu 发起和贡献。

其它项目:

  • Blockchain Explorer:提供 Web 操作界面,通过界面快速查看查询绑定区块链的状态(区块个数、交易历史)信息等。
  • Cello:提供”Blockchain as a Service” 功能,使用 Cello,管理员可以轻松获取和管理多条区块链;应用开发者可以无需关心如何搭建和维护区块链。

目前,所有项目均处于孵化(Incubation)状态。

项目原则

项目约定共同遵守的 基本原则 为:

  • 重视模块化设计,包括交易、合同、一致性、身份、存储等技术场景;
  • 代码可读性,保障新功能和模块都可以很容易添加和扩展;
  • 演化路线,随着需求的深入和更多的应用场景,不断增加和演化新的项目。

如果你对 Hyperledger 的源码实现感兴趣,可以参考 Hyperledger 源码分析之 Fabric

2.社区组织

任何一个成功的开源项目,都离不开一个健康繁荣的社区。

超级账本项目-深研未来
图 1.11.2.1 – Hyperledger 社区组织结构

社区目前主要是三驾马车领导的结构:

  • Technical Steering Committee (技术委员会):负责技术相关的工作,下设多个工作组,具体带动各个项目的发展;
  • Governing Board (管理董事会):负责社区组织的整体决策,由 Hyperledger 会员中推选出代表;
  • Linux Foundation(Linux 基金会):协助 Hyperledger 社区在 Linux 基金会的支持下发展。

中国技术工作组

随着开源精神和开源文化在中国的普及,越来越多的企业和组织开始意识到共同构建一个健康的生态系统的重要性,也愿意为开源事业做出一定贡献。

Linux 基金会和 Hyperledger 社区十分重视项目在大中华区的应用和落地情况,并希望能为中国技术人员贡献开源社区提供方便。在此背景下,Hyperledger 执行董事 Brian Behlendorf 于 2016 年 12 月 1 日 提议 成立 中国技术工作组,即 TWG-China,并得到了 TSC 的一致支持通过。

工作组的 主要职责 包括:

  • 带领和引导大中华区的技术相关活动,包括贡献代码、指南文档、项目提案等。
  • 推动技术相关的交流、会员之间的合作和实践案例的落地;
  • 通过邮件列表、rocketchat、论坛等方式提供会员的技术交流;
  • 协助举办社区活动,包括 meetup、黑客松、hackfest、技术分享、培训等。

目前,工作组由来自 IBM、万达、华为等 Hyperledger 成员企业的技术专家领导,并得到了来自社区的众多志愿者的支持。

3.开发和提交代码

安装环境

推荐在 Linux(如 Ubuntu 14.04+)或 MacOS 环境中开发代码,并安装如下工具。

  • git:用来获取代码。
  • golang 1.6+:安装成功后需要配置 $GOPATH 等环境变量。
  • Docker 1.12+:用来支持容器环境,注意 MacOS 下要用 Docker for Mac

获取代码

首先注册 Linux foundation ID,并登陆 https://gerrit.hyperledger.org/,添加个人 ssh pub key。

查看项目列表,找到对应项目,以 fabric 为例,采用 Clone with commit-msg hook 的方式来获取。

典型的,执行如下命令获取代码,放到 $GOPATH/src/github.com/hyperledger/ 路径下,其中 LF_ID 替换为你的 Linux foundation id。

$ mkdir $GOPATH/src/github.com/hyperledger/
$ cd $GOPATH/src/github.com/hyperledger/
$ git clone ssh://LF_ID@gerrit.hyperledger.org:29418/fabric && scp -p -P 29418 LF_ID@gerrit.hyperledger.org:hooks/commit-msg fabric/.git/hooks/

如果没有添加个人 ssh pubkey,则可以通过 https 方式 clone,需要输入用户名和密码信息。

git clone http://LF_ID@gerrit.hyperledger.org/r/fabric && (cd fabric && curl -kLo `git rev-parse --git-dir`/hooks/commit-msg http://LF_ID@gerrit.hyperledger.org/r/tools/hooks/commit-msg; chmod +x `git rev-parse --git-dir`/hooks/commit-msg)

编译和测试

大部分编译和安装过程都可以利用 Makefile 来执行,包括如下常见操作。

安装 go tools

执行

$ make gotools

语法格式检查

执行

$ make linter

编译 peer

执行

$ make peer

会自动编译生成 Docker 镜像,并生成本地 peer 可执行文件。

注意:有时候会因为获取安装包不稳定而报错,需要执行 make clean,然后再次执行。

生成 Docker 镜像

执行

$ make images

执行所有的检查和测试

执行

$ make checks

执行单元测试

执行

$ make unit-test

如果要运行某个特定单元测试,则可以通过类似如下格式。

$ go test -v -run=TestGetFoo

执行 BDD 测试

需先生成本地 Docker 镜像。

执行

$ make behave

提交代码

仍然使用 Linux foundation ID 登录 jira.hyperledger.org,查看有没有未分配的任务,如果对某个任务感兴趣,可以添加自己为 assignee,如对 FAB-XXX 任务。

本地创建新的分支 FAB-XXX。

$ git checkout -b FAB-XXX

实现任务代码,完成后,执行语法格式检查和测试等,确保所有检查和测试都通过。

提交代码到本地仓库。

$ git commit -a -s

会打开一个窗口需要填写 commit 信息,格式一般要求为:

Simple words to describe main change

This fixes #FAB-XXX.

A more detailed description can be here, with several
paragraphs and sentences...

之后使用 git review 命令推送到远端仓库。

$ git review

提交成功后,可以打开 gerrit.hyperledger.org/r/,查看自己最新提交的 patchset 信息,添加几位 reviewer。之后就是等待开发者团队的 review 结果,如果得到通过,则会被项目的 maintainer 们 merge 到主分支。否则还需要针对大家提出的建议进一步的修正。

修正过程跟提交代码过程类似,唯一不同是提交的时候使用

$ git commit -a --amend

表示这个提交是对旧提交的一次修订。

完整流程

总结,完整的流程如下图所示。

超级账本项目-深研未来
图 1.11.4.1 – 代码提交流程

4.小结

Hyperledger 是 Linux 基金会支持的分布式账本平台,这是开源界试图构建一套标准化分布式账本平台的重要尝试。

类似的项目还包括 以太坊平台、R3 CEV 牵头的 Corda 项目、微软的 bletchley 项目 等。