写点什么

使用 Hyperledger Composer 十分钟搭建区块链概念验证环境

2017 年 7 月 09 日

主要结论

  • 很多人是通过比特币等密码学货币体系首次接触到区块链这一概念的。然而区块链(比特币体系背后所用的分布账技术)已经被越来越多的企业所接受,并用在数字化货币体系之外的不同领域。
  • 企业对区块链的需求与公众有很大不同:参与者的身份必须是已知的,私链(Permissioned blockchain)无需“工作证明”,同时私链的适用范围也有所不同。
  • 企业区块链应用可通过业务网络内共享的资产、参与者,以及事务来定义。通过将这些组件结合在一起,即可打造一种分布式处理系统,也叫做设施(Fabric),借此对区块链应用的运行进行管控。
  • 智能合约(用于实现事务的业务规则汇编后的产物)实际上是一种存储的过程调用(Procedure call),可在网络中多个节点上运行,运行后输出的结果通过合意(Consensus)过程被所有网络成员认可。
  • 目前最大的挑战在于,如何将区块链解决方案中的资产、参与者以及事务与此类区块链处理系统的现有技术进行映射。Linux 基金会托管的 Hyperledger 项目提供的 Hyperledger Composer 致力于解决这样的问题。
  • 为了展示 Hyperledger Composer 的使用,我们会用它创建一个基于区块链的汽车拍卖解决方案。

很多人是通过比特币等密码学货币体系首次接触到区块链这一概念的,这种点对点支付体系很大程度上不受法规约束,抵制单点控制机制。然而近年来,区块链(比特币体系背后所用的分布账技术)已经被越来越多的企业所接受,并用在数字化货币体系之外的不同领域。本文将介绍企业在业务中使用区块链技术的目的,以及 Linux 基金会 Hyperledger Composer 如何帮助应用开发者轻松打造适用于企业的区块链解决方案。

区块链技术在企业领域的飞速增长

比特币是区块链技术的第一个主流应用方式,最早在 2008 年由中本聪(Satoshi Nakamoto)提出。随后区块链技术的应用快速增长,而“区块链”这个词甚至被用于称呼所有分布账应用程序,那么本文也就沿用相同的称呼了。

区块链应用大受欢迎,公众(通常为匿名)网络和私有(企业)网络均有广泛应用。虽然这两种模式均可提供很大的价值,但企业区块链技术的需求与公众用途有很大不同,原因主要有三点:

1) 企业通常需要在受管控的环境中运营,而诸如反洗钱(AML)以及了解客户(KYC)等制度要求企业必须对与自己进行交易的参与者身份有着充分了解。比特币是全匿名(确切来说,是基于假名 [Pseudonymity])的,虽然可以看到事务的具体情况,但几乎不可能确定对方身份。而企业需求通常与之截然相反:需要隐私,用户需要知道网络中参与者的身份并且可以信任对方,但并非必须了解所完成的具体事务。

2) 在假名区块链中,必须防止不可信任的参与者破坏网络。目前,比特币以及其他主流的公用区块链体系通常会使用一种名为“工作证明(Proof of Work)”的概念大幅增加进行欺诈行为的难度,但这会增加事务的处理成本,最明显的体现就是电力的消耗。事务验证程序(Transaction validator)会通过计算非常困难的密码学运算,并将计算后的答案告知整个网络,借此证明自己是真实可信的,这种方式很好地解决了信任问题,但会导致处理能力的使用效率大幅降低。私链并不需要这样做,因为参与者都是已知并且可信的。如果事务最终被证明无效,业务网络中的参与者会声誉受损甚至面临经济损失。

3) 私链的应用范围也有所不同。诸如比特币等公链最初的设计主要围绕点对点支付,但企业的“账本”需要能用于描述任何有价值的东西。通常业务网络的规模也更小,是一种封闭的系统(例如可以类比供应链网络)。这一点与非企业用途的区块链大为不同,非企业用途的区块链通常可被任何有计算机的人所访问。

仔细看看目前业务网络的运转方式就可以了解这些需求。通过商品和服务创造的财富在业务网络内流动,这些商品和服务的转移会以一系列事务(交易)的方式记录在账本中。账本是一种极为有用的记录系统,其中描述了业务的所有投入和产出,以及因此产生的财务状况。自从 15 世纪甚至更早以前,就已经出现了各种形式的账本。

企业区块链技术意在为业务中的这些基本原则建立模型。目前,账本由企业自己所拥有,业务规则决定了商品和服务在网络中的流动。在企业区块链技术的帮助下,账本和业务规则都可以在业务网络内共享,借此可降低开展业务过程中遇到的摩擦(以及相应的成本)。

资产、参与者,以及事务

企业区块链应用可以通过在业务网络内共享的资产、参与者,以及事务来描述:

  • 资产代表任何有价值,可以共享或交易的东西:从汽车、房屋、钻石等有形资产,到有价证券、知识产权,甚至参考数据等无形资产,均可代表。现金本身也是一种资产。
  • 参与者则是指需要在业务网络内共享事务信息的人员。参与者通常是指企业,但也可以包括普通人、监管人员,或其他利益相关者。
  • 事务可用于描述在业务网络内传递的过程中,可针对资产执行的具体操作。

通过将这些组件结合在一起,即可打造一种分布式处理系统,也叫做设施(Fabric),借此对区块链应用的运行进行管控。智能合约(用于实现事务的业务规则汇编后的产物)实际上是一种存储的过程调用,可在网络中多个节点上运行,运行后输出的结果通过合意过程被所有网络成员认可。

目前最大的挑战在于,如何将区块链解决方案中的资产、参与者以及事务与此类区块链处理系统的现实技术进行映射。区块链应用的实现需要极高成本,因为需要通过大量工作实现用于定义业务目标的逻辑,同时需要让智能合约能够顺利使用区块链所提供的服务。

Hyperledger Composer

Linux 基金会托管的 Hyperledger 项目所提供的 Hyperledger Composer 致力于解决这样的问题,借此区块链开发者可以轻松地对业务资产、参与者以及事务建模,将这些模型变成可行的区块链应用。Hyperledger 项目始于 2015 年 12 月,包含了一系列适用于企业,先进的跨行业开源区块链技术。这是 Linux 基金会有史以来发展速度最快的项目,而 Hyperledger“联盟”目前已包含多种技术,如 Hyperledger Fabric Hyperledger Sawtooth 等区块链框架,以及提供监视、身份、开发和部署等服务的工具。 Hyperledger Composer 正是其中的一种工具。

与所有 Hyperledger 产品类似,Hyperledger Composer 完全开源,并使用了一种开放的治理模式,任何人都可以为其做贡献或决定未来的发展方向。

Hyperledger Composer 为资产、参与者,以及事务的建模提供了一种面向特定领域,非常简单的建模语言,开发者可以通过 JavaScript 编写实现事务逻辑的方法。开发者可以在自己惯用的任何开发环境中编写这些文件(针对大部分编辑器提供了必要的插件),并可在一种基于 Web 的“试验场(Playground)”帮助下开发、打包、部署并测试这些项目,同时还为脚本环境提供了所需的命令行工具。应用程序可部署至 Hyperledger Fabric 实例,或在 Web 浏览器中进行本地模拟。

Hyperledger Composer 还可针对不同资产生成骨架(Skeleton)命令行或 Angular2 应用,对 Loopback 的支持使得我们可以通过 RESTful 与应用交互,这样区块链即可连接至现有记录系统,例如可使用集成中间件,如 Node.RED IBM Integration Bus 进行连接。

设计基于区块链的汽车拍卖解决方案

为了展示 Hyperledger Composer 的运用,我们将使用该技术创建一个基于区块链的汽车拍卖解决方案。这是一种很棒的区块链应用,因为已经具备妥善定义的业务网络,适用于高价值资产,因此对信任的要求更高,必须明确知道 (a) 不同时间里车的所有者是谁,以及 (b) 不同参与者的现金收支情况。从中也可以清楚地知道这样的应用如何能轻松扩展并运用在其他高价值资产领域。

首先考虑组成这个业务网络的资产、参与者,以及事务:

  • 资产:需要考虑两类资产:机动车,对实体车辆的数字化呈现,可对其所有权进行追踪;以及机动车清单,描述了某辆车正在(或已经)销售,以及这一过程中的不同出价。
  • 参与者:包括代表机动车所有者或购买者,并且有足够货币结余的人或组织成员。此外可能会有一个可以关闭任何商品竞拍的拍卖商。整个网络还可进一步扩展,将保险公司或监管机构包含在内。
  • 事务:两种最重要的事务类型:为机动车出价的事务,以及关闭竞拍的事务。

(点击放大图像)

图1 – 汽车拍卖应用中的资产、参与者和事务

上述内容定义了组成该区块链解决方案不同组件所需的类型(Type)。为了测试我们的区块链解决方案,我们会创建这些类型的实例,并将其存储在注册机构(Registry)内,注册机构是Hyperledger Composer 中另一个重要概念。我们将向机动车、机动车清单、成员,以及拍卖商等注册机构中填入数据,并可提交上文提到的两类事务。所有实例和事务数据均将通过区块链存储和访问,这样便可被网络中的参与者共享和信任。解决方案的开发者可以通过访问控制列表决定哪些参与者可以看到哪些资产。

为区块链汽车拍卖解决方案建模

Hyperledger Composer 的所有组件均可下载并本地运行,此外还有一个在线版本的“试验场”,无需安装任何软件即可使用。如果希望从本地副本着手尝试,可参阅 Hyperledger Composer 文档页提供的快速上手指导;如果希望使用在线试验场,可直接访问 Hyperledger Composer Playground 页面

首次启动试验场并关掉欢迎界面后,会看到类似下图所示的界面(与其他正在活跃开发的项目一样,这个界面后续可能有所改动)。

(点击放大图像)

页面左侧显示了组成区块链项目的所有文件:

  • 一个 About 文件 – Markdown 格式的说明文件,试验场默认将显示该文件的内容。
  • 一个 Model 文件 – 定义了项目中涉及的资产、参与者,以及事务。
  • 一个 Script 文件 – 以 JavaScript 实现的事务逻辑。
  • 一个 Access Control List – 决定了哪些参与者可以看到哪些资产。
  • 一个 Add 按钮 – 必要时可向项目中添加额外的文件。
  • 一个 Deploy 按钮 – 可将对项目文件的改动应用给当前已连接的区块链实例或模拟器。
  • Import 功能可将试验场的内容替换为指定的其他内容。
  • Export 功能可将整个解决方案打包为一个文件,并转移到其他环境中使用。

界面右侧的主区域显示了所选文件的编辑器或查看器。此外页面顶部的 Define/Test 选项卡可供我们在开发或测试模式之间切换。最后,页面右上角可供我们(在本地版本中)模拟另一个区块链用户的身份,连接至自己的线上区块链实例,或开始在 Web 浏览器中模拟。在线版试验场目前仅支持模拟器模式。

首先我们需要将试验场窗口中的文件替换为汽车拍卖应用所需的文件。此处打算使用预创建的范例。如果要开发自己的网络,通常最好导入范例模板,以此为基础着手进行。

点击“Import/Replace”按钮。首先需要通过 GitHub 进行身份验证,随后将直接通过在线代码库下载可用的范例。如果愿意,也欢迎大家贡献自己设计的网络。随后选择“carauction-network”并点击 Deploy,这样即可用 Car Auction 项目的文件替换试验场中的默认文件。

选中 Model 文件(model/org.acme.vehicle.auction.cto)可查看有关资产、参与者,以及事务的定义。同理,Script 文件(lib/logic.js)包含了两个事务类型的 JavaScript 实现。

重要的是,只需要 50 行简单的特定领域语言代码以及 100 行 JavaScript,我们就可以定义实现区块链解决方案所需的全部元素。

测试区块链汽车拍卖解决方案

单击试验场顶部的“Test”选项卡,即可与参与者和资产注册机构交互,并能将事务提交至区块链。该选项卡下显示的一切内容都是从 Model 文件动态推导的。

首先在 Member 注册机构创建几个参与者:为他们分配一定的初始金额(这里是通过最简单的整数实现的),以及用于进行唯一性区分的邮件地址,当然还有姓名。

随后在 Vehicle 注册机构创建一辆机动车:VIN(机动车识别号)是一种具备唯一性的标识字符串,初始所有者可以是已创建完成的某个所有者的邮件地址(因为模型已将邮件地址定义为唯一标识符)。

最后创建一个 Vehicle Listing:为其分配一个唯一的清单 ID,填入底价和描述信息。此时的状态应该是“FOR_SALE”,建议清空报价数组(“offers” : [])。Vehicle 字段应包含所创建机动车的 VIN 字符串,因为模型已将 VIN 字段定义为唯一标识符。

注册机构设置完毕后,即可通过提交事务的方式为该机动车添加报价。单击“Submit Transaction”,选择事务类型为“Offer”并填写竞标价格、列表(上文输入的唯一列表 ID)以及成员(出价的参与者对应的邮件地址)。这会导致 Offer 事务相关联的 JavaScript 开始运行,将新的报价添加到相关清单的报价数组中。

添加了几个报价后,可以试着关闭竞标。再次提交一个事务,这次选择事务类型为“CloseBidding”,此时只需要指定唯一的清单 ID。提交该事务会运行 CloseBidding 事务所关联的 JavaScript。这些代码会查找超出底价最高的竞拍价格,为卖家的余额增加这一金额,并从买家的余额中减去同样金额,随后转移机动车的所有权。随后如果重新切换回相应的 Vehicle 和 Member 注册机构就可以看到,这些操作会显示为均已完成。

下一步

通过上述操作可以看到,只需花费少量时间以及几行代码,就可以开发出一个完备的区块链原型。如果想要将本文讨论的概念应用在自己的区块链项目中,也可以通过类似的方式着手。首先确定区块链可以解决的现实业务挑战:业务网络是必备的,当然还需要参与者之间有很强的信任关系。随后可以考虑问题所涉及的资产、参与者以及事务。可以试着通过 Hyperledger Composer 建模,随后进行测试并迭代完善。

当然,这种方法真正的价值在于,最终用户的应用程序可以提交并查询真实的业务事务。在着手编写这样的事务之前,建议阅读 Hyperledger Composer 的应用程序生成器上手指南。借此可通过业务网络存档生成Angular2 或命令行应用程序范例。这种方式无法实现任何完备的应用程序,但可以帮助你更专注于开发最终用户应用程序逻辑,而非与区块链的交互。

Hyperledger Composer 的优势不仅在于可以快速开发区块链解决方案,而且在于可以帮助我们通过快速迭代满足额外的需求,并能提供必要的技术,帮助我们尽可能简单地向他人描述所发生的事情。

Hyperledger Composer 是一个社区项目,该项目的成功离不开开发者社区的活跃贡献。如果对于该项目你有喜欢的或不喜欢的地方,欢迎反馈给开发团队。如果愿意,你也可以参与进来, Hyperledger 网站介绍了参与方法。

总结:区块链的潜力

区块链有着无穷的潜力。IBM 认为区块链对交易和事务的促进,完全比得上互联网对交流和信息流动的促进,因此我们也期待着这个技术能为商业带来巨大的积极影响。作为区块链技术的践行者,我们完全可以让这一切变为现实!

关于本文作者

Matt Lucas是 IBM 全球区块链促进团队成员,他主要帮助客户理解并运用区块链技术,因此会与各种新兴的区块链框架,例如 Hyperledger Fabric、Ethereum,以及 Hyperledger Composer 等区块链工具的开发团队进行密切的合作。他在 IBM 赫斯利(Hursley)开发实验室工作,过去 20 年来一直从事 IBM 各类集成中间件技术的相关工作。最近多年,他一直在从事有关 IBM Integration Bus 在产品架构中的应用以及相关的管理工作。你可以通过 Twitter 联系 Matt: @mqmatt ,或给他发邮件:lucas@uk.ibm.com。

作者 Matt Lucas 阅读英文原文 Building a Blockchain PoC in Ten Minutes Using Hyperledger Composer

2017 年 7 月 09 日 17:516150
用户头像

发布了 283 篇内容, 共 86.1 次阅读, 收获喜欢 36 次。

关注

评论

发布
暂无评论
发现更多内容

智慧警务合成作战平台建设,重点人员管控系统开发方案

WX13823153201

嵌入式软件架构设计之分层设计

cdhqyj

架构 软件 嵌入式 分层

从开源的历史与今天,聊聊为什么要期待HDC.Cloud 2021

脑极体

金三银四想进阿里的,这个对标阿里P9的学习路线+面试真题整理一定不要错过!

程序员小毕

Java 程序员 架构 面试 阿里

腾讯三面落马+拒网易、CVTE后,字节四面成功拿下offer

周老师

Java 编程 程序员 架构 面试

统一日志管理方案:Spring项目logback日志与logstash和Elasticsearch整合

朱季谦

ELK

又一巅峰!“JVM深度笔记”,腾讯高工全新演绎

周老师

Java 编程 程序员 架构 面试

压抑了五个月的我终于可以放声呐喊了!阿里是真的难进,Java四面面经+面试题

Java架构追梦

Java 阿里巴巴 架构 面试 金三银四

微信扫码登录技术实现的简单思考

朱季谦

redis

新思科技解析导致汽车无钥匙进入系统易受攻击的漏洞及缺陷

InfoQ_434670063458

什么?都1202年了还不懂k8s和容器的关系?!这份k8s指南快拿走不谢!

驻云DataFlux

云计算 k8s 云服务 知识星球

Activiti工作流自动生成28张数据库表的底层原理分析

朱季谦

Activity 工作流引擎

区块链数字版权保护--为数字版权保护赋能

13530558032

阿里P7大牛整理!对Android开发的现状和未来发展的思考,吊打面试官系列!

欢喜学安卓

android 程序员 面试 移动开发

程序员自我提升不得不知道的一些宝藏网址,收藏起来吧

北游学Java

Java 后端开发 资源分享

2021最新分享Java面试全套合集!

比伯

Java 编程 架构 面试 计算机

android开发经典实战!我的移动开发春季历程,大厂直通车!

欢喜学安卓

android 程序员 面试 移动开发

策略枚举:消除在项目里大批量使用if-else的正确姿势

朱季谦

枚举 策略模式

模仿Activiti工作流自动建表机制,实现Springboot项目启动后自动创建多表关联的数据库与表的方案

朱季谦

建表

区块链如何应用到食品?区块链食品安全溯源

13530558032

GitHub获百万下载的阿里P5-P9必刷知识体系图核心手册

Crud的程序员

Java 编程 程序员 架构

visualvm工具远程对linux服务器上的JVM虚拟机进行监控与调优

朱季谦

JVM GC 调优

web前端面试题详细解析

小啵

面试

不愧是Alibaba技术官:程序员必会的架构知识清单,如何让你技术上的提升面试时的丰收

Java成神之路

Java 程序员 架构 面试 编程语言

近万字原创长文,以追忆2020年:《请回答,2020》

朱季谦

随笔杂谈

智慧党建平台建设--开拓新时期党建系统

13530558032

vue项目中使用tinymce富文本编辑器实现图片上传/粘贴格式

小啵

tinymce

Kylin安装部署

五分钟学大数据

kylin 3月日更

深入理解Spring Security授权机制原理

朱季谦

security

Rust从0到1-基础概念-函数

rust 函数

spark性能调优之JVN调优

大数据技术指南

spark 3月日更

演讲经验交流会|ArchSummit 上海站

演讲经验交流会|ArchSummit 上海站

使用Hyperledger Composer十分钟搭建区块链概念验证环境-InfoQ