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