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

主要结论

  • 很多人是通过比特币等密码学货币体系首次接触到区块链这一概念的。然而区块链(比特币体系背后所用的分布账技术)已经被越来越多的企业所接受,并用在数字化货币体系之外的不同领域。
  • 企业对区块链的需求与公众有很大不同:参与者的身份必须是已知的,私链(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 FabricHyperledger Sawtooth等区块链框架,以及提供监视、身份、开发和部署等服务的工具。Hyperledger Composer正是其中的一种工具。

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

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

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

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

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

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

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

(点击放大图像)

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

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

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

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

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

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

(点击放大图像)

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

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

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

关于本文作者

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

相关推荐