基于fabric的行业联盟链技术研究/司帅帅

本文选自《交易技术前沿》第二十九期 (2017年12月)

  区块链被誉为第二代互联网技术,使我们能够从信息互联网时代进入到价值互联网时代,价值能像信息一样在网络节点之间自由流动,不需要信任机构背书。证券行业为了保证价值转移的正常运行,催生了登记机构、托管机构、交易机构、中央对手方等信用机构,从而导致交易中间环节多、交易周期长、风险高等特点,如日中天的区块链技术,正好可以解决这些问题。

  一、区块链介绍

  近些年来,比特币底层实现技术-区块链得到全世界各大证券交易所的重视,各大交易所投入人力物力加入到区块链项目的研发。NASDAQ 通过区块链项目 Linq 提供私募股权登记服务,SEC 批准 Overstock 通过区块链技术发行股票,全球最大的 42 家银行启动了名为 R3 DEV 的区块链项目1。上海证券交易所也积极的加入到区块链技术在证券行业的应用的探索队伍。

  区块链是以去中心化的方式集体维护的、不可篡改的共识总账。区块由选举的记账节点产生,所有的节点均可验证区块中交易的准确性,将记账权和验证权分离并结合非对称加密算法,保证了交易信息的不可篡改性和不可抵赖性,共识机制保证了所有节点账本数据的一致性,每个区块都指向上一个区块,保证了区块中交易的可追溯性。区块链的特点保证了在没有信任机构参与的情况下完成价值的转移,该技术对高度依赖信任的证券交易提供了无限遐想的空间。

  二、区块链性能和技术瓶颈分析

  今年,技术公司和国内一家区块链创业公司开展高性能联盟链合作,探索高性能联盟链。比特币区块链只能实现每秒 7 笔交易的吞吐量并且成本较高,其原因有以下几点,第一,比特币区块链采用公有链的设计模式,任意节点均可加入(没有对恶意节点过滤机制),节点数量庞大,共识达成在 p2p 网络上延迟较大;第二,比特币采用工作量证明机制,为了提供工作量证明,矿工需要做大量的无用的工作,浪费资源并且效率低;第三,比特币区块链中区块大小为 1M,最近扩容方案在争议中虽然获得通过,但也只有 2M,容量较小,导致每个区块中保存的交易记录有限,平均每十分钟产生一个区块的设计使得交易确认延迟较大,导致比特币性能较低。针对比特币区块链的问题,有以下解决办法提高性能,第一,采用联盟链的设计模式,对加入节点质量进行控制,阻止恶意节点加入;第二,采用其他的共识机制,比如权益证明机制(POS)、DPOS 或 PBFT 共识机制等;第三,可以根据网络带宽限制,适当提高区块大小,从而提高吞吐量。根据联合课题的研究总结,可知,目前联盟链性能限制主要是数字签名技术和网络带宽,数字签名技术是区块链实现交易不可篡改、不可抵赖以及数字身份验证的关键技术,进行校验签名需要较长的时间完成,尤其是采用国密算法的情况下,延迟会更大,这大大的降低了区块链的性能。针对数字签名导致的效能下降可以通过对多次交易进行打包签名,减少验签次数,从而提高性能,相应的研究还在进行中。

  三、智能合约

  3.1 智能合约介绍

  智能合约也叫智能合同,由多产的跨领域法律学者尼克萨博(Nick Szabo)提出来,他对智能合约的定义是一个智能合约是一套以数字形式定义的承诺(promises),包括合约参与方可以在上面执行这些承诺的协议。承诺是指合约参与方同意的(经常是相互的)权利和义务,其定义了合约的本质和目的。从程序员的角度来看智能合约,它就是一段可以用任何语言编写的代码,并且是运行在区块链系统上,当满足一定的条件时可以自动执行。

  3.2 智能合约的特点

  与传统的程序相比,智能合约程序有以下特点,第一,智能合约处理的数据是透明的,因为区块链上所有的数据都是公开透明的,并且所有节点都保存一份完整交易记录;第二,智能合约执行的痕迹不可篡改、不可伪造、不可抵赖,该特点依赖于区块链采用的密码学算法保证,所以运行智能合约的节点不必担心其他节点恶意修改代码与数据;第三,永久运行,支撑区块链网络的节点往往成千上万,部分节点的失效并不会导致智能合约的停止,只要有一个节点在运行,智能合约就可以运行下去,这样就保证了智能合约能像纸质合同一样每时每刻都有效;第四,由于区块链会对每一笔交易都要进行全网所有节点验证交易准确性的特点,智能合约也是所有节点同时运行同一段代码并对结果进行校验,只有大部分节点输出结果一致时,才将输出写入区块链中作为正式数据,因此恶意修改部分节点并不会影响全网最终的运行结果,有效实现了数据的一致性。

  四、各类区块链开源技术的比较

  目前,比较流行的区块链开源实现主要有比特币区块链、以太坊、fabric、CITA、BCOS、小蚁区块链等。以太坊是由以太坊基金会领导与开发,fabric 最初是由 IBM 开发,后来贡献给 Linux 基金会,CITA 由秘猿科技开发的企业级区块链产品,其特点是首次采用了微服务架构,最近发布了开源版本,BCOS 是由万向区块链联合微众银行和矩阵元科技联合开发的区块链实现技术,目前已开源。下面将会详细比较分析比较流行的区块链开源技术比特币区块链、以太坊、hyperledger2。

  表1区块链开源框架对比分析

  比特币区块链开启了区块链研究的热潮。比特币区块链是专门为货币的发行而设计,采用了挖矿、非图灵完备的脚本语言等特征,该设计很难应用到复杂的业务场景。以太坊则参考了比特币区块链的挖矿机制,但是采用了幽灵协议提高效率,新的共识算法也在开发的过程中。 Fabric 定位是企业级区块链解决方案,适用于定制各种特定业务的联盟链,包括金融领域的应用场景,并且 fabric 是以智能合约为导向,可以利用智能合约开发复杂的业务流程,并且具有较强的扩展性。

  五、fabric应用行业联盟链设计流程

  5.1 项目架构设计

  Fabric 是区块链的底层实现3,也是智能合约的运行环境,fabric 账本中数据的修改必须通过链码(chaincode);fabric-sdk-node 是封装好的 nodeSDK,可以通过它调用部署在 fabric 上的智能合约,实现设定的业务逻辑,在这里主要有四个 js 文件,一个是 install.js,用来把智能合约安装到 fabric 上,一个是 instantiate.js,用来实例化智能合约,一个 invoke.js 用来调用智能合约中的方法,一个是 query.js 用来查询链上数据,这四个 js 文件都是按照 nodejs 语法设计,通过 exports 方式进行导出;为了实现比较好的用户体验,我们设计单独的应用服务器,它一方面通过 fabric-node-sdk 调用智能合约,另一方面把运行结果反馈到前端界面,前端界面采用比较流行的设计框架,有 jQuery.js、booststrap 等。架构图设计如下图 1。

基于fabric的行业联盟链技术研究/司帅帅_第1张图片

  图 1 项目架构设计图

  5.2 fabric运行时架构

  Fabric 运行时架构主要由一下模块组成4,membership 是 fabric-ca 节点,用来提供用户身份管理服务,peer 节点提供 endorser 和 committer 服务,更新 Ledger 账本,存储和运行合约代码,o-service 代表 order 节点提供排序服务。

基于fabric的行业联盟链技术研究/司帅帅_第2张图片

  图 2 fabric运行时流程图

  5.3 fabric网络服务端设置

  行业联盟链的设计思想是,多个机构组成一个联盟链,每个机构运行其拥有的节点。Fabric 实现行业联盟链中,有提供共识服务的 order 节点、代表机构或者组织的 peer 节点和提供认证服务的 fabric-ca 节点组成。下面详细介绍每个节点的配置信息。

  Order节点配置信息如图 3 所示,Orderer 节点可以组成集群来在 Fabric 网络中提供排序服务。主要配置了容器名,镜像名,以及容器中环境变量配置信息。

基于fabric的行业联盟链技术研究/司帅帅_第3张图片

  图 3 服务端 order 节点配置信息

  peer 节点配置如图 4,在此次 POC 中,我们配置了 5 个节点,代表 5 个机构,有央行节点、交易所节点和券商节点,券商节点有三个。其中一个 peer 节点配置详细信息如图 4 所示,其他 peer 节点配置信息类似。

基于fabric的行业联盟链技术研究/司帅帅_第4张图片

  图 4 服务端 peer 节点配置信息

  ca 节点配置如下,ca 节点提供节点认证服务。

  图 5 服务端 ca 节点配置信息

  5.4 测试网络客户端配置

  Order 节点配置信息,设置了端口号,服务器主机名,tls 证书位置信息。

  图 7 客户端 order 节点配置信息

  Peer 节点配置信息,配置了五个机构信息,为每个机构配置了 admin、strader 和 btrader 角色,admin 代表管理员账户,strader 代表自营账户,btrader 代表经纪账户,配置详细信息如图 8 所示,这里要注意,配置的端口号要和服务端配置的端口号要一一对应。strader 和 btrader 用户的秘钥需要通过 fabric-ca 单独注册。

基于fabric的行业联盟链技术研究/司帅帅_第5张图片

  图 8 客户端 peer 节点配置信息

  5.5 智能合约开发

  在 fabric 中,智能合约程序也叫链码(chaincode),可以用 Nodejs、java和 go 语言进行开发,fabric 上的链码分为系统链码和用户链码。系统链码用于实现系统层级的功能,包括系统的配置,用户链码的部署、升级,用户交易的签名和验证策略等。用户链码用于实现用户的应用功能,即具体的业务逻辑。开发者将链码部署到 fabric 网络上,终端用户通过与网络节点交互的客户端应用程序调用链码。链码被编译成一个独立的应用程序,运行于隔离的 Docker 容器中,在链码部署的时候会自动生成合约的 Docker 镜像。

  链码必须实现两个接口,一个是 init(stub shim.ChaincodeStubInterface),用于合约初始化及升级初始化动作,另一个是 Invoke(stub shim.ChaincodeStubInterface),是 peer 调用链码的入口函数。这两个接口的实现代码如下图。ChaincodeStub 里面包含丰富的账本操作,常用的有 getCallerCertificate()用来获得调用者证书信息,可以用来判断该调用者是否是合法的调用者,getState(k)用来获得 k 对应的值,也就是当前的世界状态(wordstate),putState(k,v)用来更新 k 对应的值,该操作会修改链上数据,invokeChaincode(…)用来调用其他合约代码,使用该方法的时候需要注意,调用者和被调用者必须属于同一个 channel 的不同 chaincode,也就是 chaincodeId 不可以相同,rangeQueryState(k1,k2)该操作用来做范围查询,获取 k1 到 k2 之间的所有值,getTxId()用来获得交易的Id(transactionId)等。链码开发的过程中,常用的操作可以总结为一个基类,两个查询,一个写入。两个查询是指 getState(k)和 rangeQueryState(k1,k2),前一个查询操作是根据 k 获得 value,后一个查询操作是指获取从 k1 开始到 k2 结束的所有 k-v 对象,返回的是 Map对象,其中 k1,k2 按字典序排序。一个写入是指 putState(k,v),写入数据,但是,该操作并不会立马落到账本上,要等到第二段交易提交共识达成后,数据才会落地。

基于fabric的行业联盟链技术研究/司帅帅_第6张图片

  图 9Init接口实现代码

基于fabric的行业联盟链技术研究/司帅帅_第7张图片

  图 10Invoke接口实现代码

  链码开发经验总结,第一,用 json 方式存储业务实体并在 key 上建立索引,fabric 账本是 key-value 型数据库,couchdb 只是额外备份数据,方便复查询操作,value为 json 格式方便数据的快速解析。Fabric 的 k-v 库用的是 leveldb,插入的 key 值用的字典序,所以索引字段值必须固定长度;第二,在 fabric 上,通过 petState 写入的数据,不会立即更新账本数据,需要等到第二阶段交易所有 peer 节点共识达成后,数据才会落地,因此不可以立即获取之前写入的数据;第三,链码里面的方法不需要加锁,peer 节点在执行相应方法的时候,已经实现了消息队列,发给链码的消息都是顺序执行的,并不是并行执行;第四,合约中 type 结构体里面子段首字母要大写,否则无法用 json 格式将该子段保存到账本上5,如图 11 所示。

基于fabric的行业联盟链技术研究/司帅帅_第8张图片

  图 11 type字段设计

  六、区块链技术实现证券交易系统的特点

  第一,实现DVP结算

  目前市场上债券交易结算方式包括见券付款、见款付券、纯券过户等,均不能实现资金和债券的同步交割,使交易双方处于不平等地位,且容易造成汇划速度慢、资金清算不及时等问题。智能合约使得券款对付成为可能。债券数字化后上链,不需要托管机构的参与,债券的上链过程就是现在债券的登记过程。区块链上的交易直接完成钱和券在不同账户之间的划转,实现交易即结算,从而实现券款对付6。

  第二,7*24不间断运行

  区块链系统运行在所有节点上,这个节点数量成千上万,任意一个或多个节点的关闭或者故障都不会影响到区块链系统的正常运行。所有节点都保存一份完整的交易记录,共识机制保证了每个节点上账本数据的一致性,从而实现业务连续性。

  第三,不需要中央对手方

  中央对手方作为一种清算机制,清算机构自身介入已经达成的交易,成为卖方的买方和买方的卖方,确保已达成交易正常履约,是防范金融市场系统性风险的重要手段。区块链系统上,数字货币和金融资产的锚定,使得交易的过程就是资产转移的过程,所以就不需要中央对手方来保证交易是否能正常履约。对于具有较长生命周期的衍生品交易,情况会略有不同,衍生品本质上就是金融合约,在其生命周期内可以涉及多次现金流的交换,可以利用智能合约锁定相关资产,保证交易的对手方能够执行约定的权利和义务。

  总结

  从比特币区块链的角度来看,虽然没有任何机构为比特币的交易背书,但是其却安全的运行那么多年。在没有第三方权威机构做担保的情况下,比特币区块链却能登记、存储和转移数字资产,这种创新是史无前例的。

  区块链技术能够很好地解决证券交易中信任的问题,从而可以降低证券交易系统中为了建立信任所耗费的巨大成本。虽然,世上还没有出现一个颠覆式的区块链应用解决方案,但是交易所应积极投入到区块链技术的研究当中,本着服务证券交易节约交易成本的目的,找到合适的业务场景,推广区块链应用。

  参考文献

  1.巴比特资讯

  2.http://www.wanbizu.com/baike/201702099039.html

  3.https://github.com/hyperledger/fabric

  4.http://hyperledger-fabric.readthedocs.io/en/latest/

  5.http://rdc.hundsun.com/portal/article/694.html?from=MJ

  6.区块链技术对境内证券业影响分析,牛壮

  --------------------------上海证券交易所为证券公司、基金管理公司等市场参与者及相关行业机构提供交易技术支持与服务,包括日常交易技术支持、技术交流研讨、市场调查反馈、证券信息技术知识库、测试等服务。

THE END

 

学习fabric时候看到这篇文章觉得写得很好,转载一下

https://new.qq.com/omn/20180313/20180313B0X6UE.html

你可能感兴趣的:(基于fabric的行业联盟链技术研究/司帅帅)