符合学术规范的学术服务

基于区块链的应用系统开发方法研究

分类:计算机职称论文 时间:2020-01-16

  摘 要: 从区块链的技术层面及应用层面分析其特征,并给出区块链的分类.挖掘区块链的设计需求,针对区块链的一致性和可扩展性的应用需求进行深入分析.对区块链的应用系统开发方法及区块链建模进行研究,提出了账户区块链(account blockchain,简称 ABC)和交易区块链(trading blockchain,简称 TBC)的双链设计模型.对智能合约进行深入剖析,提出了链上代码并行执行模型应用原则.最后,对区块链应用技术进行总结和展望.

基于区块链的应用系统开发方法研究

  关键词: 区块链;ABC/TBC;链上代码;区块链应用需求

  1 区块链简介

  区块链(blockchain)是由多独立节点参与的分布式数据库系统,也可以理解为分布式账簿(distributed ledger technology,简称 DLT),由这些节点共同维护.它的特点是不易篡改、很难伪造、可追溯.区块链记录所有发生交易的信息,过程高效透明,数据高度安全.凡是需要公正、公平、诚实的应用领域,都可以应用区块链技术.

  区块链把数据分成不同的区块,每个区块通过特定的信息链接到上一区块的后面,前后顺连,呈现一套完整的数据.每个区块的块头(block header)包含前一个区块的哈希值(previous block Hash),该值是对前区块的块头进行哈希函数计算(Hash function)而得到.区块之间都会由这样的哈希值与先前的区块环环相扣形成一个链条, 如图 1 所示.

  从技术层面上看,区块链的核心要素包含以下 3 个方面.

  (1) 块链结构:每一区块有时间戳;都使用前一区块的哈希加密信息;对每个交易进行验证;

  (2) 多独立拷贝存储:每个节点都存储同样信息,享有同样权利;独立作业;互相怀疑,互相监督;

  (3) 拜占庭容错:容忍少于三分之一的节点恶意作弊或被黑客攻击,保证系统仍然能够正常工作. 要素(1)指出,区块链是一个“账簿”;要素(2)指出,区块链是一个“分布式账簿”;而要素(3)指出,区块链是一个 “一致性的同步分布式账簿”.

  区块链可选择不同的加密方法,如 RSA、中国的国密算法[1]、Ed25519[2]等的签名算法.根据区块链自身特有的安全、极难篡改的特性,在金融领域外的很多应用场景中,使用签名、解签能够达到足够高的安全级别.

  各个节点在独立作业的同时存储着同样的信息,并且拥有同样的权利.如果这一点不能保障的话,就不可称为区块链.例如,若链上的某个节点有特殊的权利,甚至可以改变链上数据,这样的链就远离了区块链的真意.与现有的分布式存储方式不同,区块链分布式账本是同步的,而不是在一个账本形成之后,再制成多个备份.

  拜占庭将军模型[3]的共识算法有串行与并行两种. 

  拜占庭将军模型于 1982 年出自 SRI Int’l,实用拜占庭共识协议 PBFT(practical byzantine fault tolerance)[4]是经过多年研究,由 MIT 在 1999 年提出实用协议.交易与投票是串行的,建块过程要经过 3 次投票; 

  并发拜占庭共识协议 CBFT(concurrent byzantine fault tolerance)是由作者的团队于 2015 年提出,此项算法将交易与投票并行进行. 以比特币的区块链为代表的第 1 代区块链并未使用拜占庭将军算法.比特币和以太坊的公有区块链使用 PoW(51%的投票) [5,6].作为第 2 代区块链的代表,以太坊的私有链选用了 PBFT.作为第 3 代区块链的代表,北航链使用的是 CBFT,提高了性能.

  从应用层面,区块链具有以下重要特征.

  (1) 极难篡改性.一旦数据进入了区块链,即使是系统内部的工作人员,在区块链中也无法做任何更改.因此,区块链系统是可以被信赖的.这种极难更改的特点不是来自使用某种操作,而是由于区块链自身的机制;

  (2) 链上代码(chaincode).区块链载入的合同或法律文件为可执行的程序,在条件都满足时,会让法律事务自动生成,这就是所谓的“链上代码”,在以太坊里也称为“智能和约”[7];

  (3) 参与交易的每个人都拥有完整的数据,每个人可以用自己的数据来做决定;

  (4) 每个人都有完整的历史数据,因此很难被其他人欺骗.区块链可以为相互不信任的人建立一种信任网络,每个人可以进行交易而不需要知道对方是什么人,因为每个人都有完整的数据,每个人都信任自己的数据,而且知道自己的数据是有共识的;

  (5) 区块链的架构是分享的、分布式的、重复的,就地取材;

  (6) 区块链与传统的计算架构不一样.最简单的方式是把原来的主-客架构变成多个主人,这在传统上被认为是不明智的方法.由于计算机硬件、通信及存储的成本降低,同时,社会对安全性和防篡改性的需求提高,原来不明智的方式变成了最先进的方式.

  根据不同的应用领域特点,可以选择不同类型的区块链.一般分为公有链和许可链.

  1) 公有链:所有节点中立、开放,都可以投票、记账、建块.因为全网都需要投票,所以交易速度非常慢. 所有节点都可以参与投票,需要一个激励机制,即挖矿机制.许多公有链是基于无政府主义理念而设计的,所以采用点对点或 P2P 网络以躲避监管.两年前,比特币网络交易速度是每秒 7 笔[8],现在降到每秒 1.1 笔[9],而且越来越下降;

  相关知识推荐阅读:软件类的文章发什么期刊好些

  2) 许可链[10]:只有被许可的节点才能参与投票、记账、建块,包含私有链、联盟链、企业链等所有非公有链.交易速度比较快;不需要挖矿,交易成本低;可成为监管利器.北航链、天德链、Hyperledger[11]都是许可链,许可链会成为商业应用领域的主流[12]. 公有链与许可链的技术需求和架构差异巨大,面临的问题也不一样.

  2 区块链应用系统的需求与架构设计

  2.1 区块链应用系统的需求

  2.1.1 一致性需求

  在分布式环境下,数据为保证一致性需要使用一致性协议.公有链主要使用工作证明 PoW(proof of work)[5] 和股权证明 PoS(proof of stake)[6]机制;而许可链中主要使用 PBFT 和 CBFT.一般而言,区块链系统越高速越好, 但是共识的代价昂贵,许多计算力及节点通信都花在共识机制上.例如,PBFT 需要 3 轮投票,每轮都采用广播式通信方式.每次通信都需要签名、解签,再加上每笔交易都要签名和解签,因而,80%的计算力都花在共识处理上. 使用不同的共识算法会产生全然不同的区块链架构和流程,面临的研究问题也不同.PoW(公有链)面临的问题是速度和可扩展性,PBFT(许可链)面临的问题是并发.PoW 依靠节点的计算力来完成共识,PBFT 却不需要.

  2.1.2 软件设计需求

  区块链不同于传统数据库.使用区块链开发应用系统与传统系统比较会有很多差异.例如,应用区块链技术开发银行系统,可以省去很多中间环节,简化流程、节约成本.传统的软件架构也会发生变化.例如,IBM 把传统的 MVC(model,view,control)设计模式(design pattern)变为 MVBC(model,view,blockchain,control)[13].

  设计区块链应用系统还有一个新问题,即,可以把功能放在应用系统上,或是放到区块链上用链上代码执行.很多人都推崇链上代码,可是链上代码执行会消耗大量的计算力.链上代码需要建块,而建块是一项昂贵的运营流程,需要执行共识协议.建议大部分的功能应该是在应用系统里,只有少数功能放在链上代码里.

  2.1.3 可扩展性需求

  可扩展性一直是区块链系统的一个挑战,从第一代比特币区块链到第二代以太坊区块链都面临严峻的问题.虽然有各式各样的解决方案,但是每种方案都有它的缺陷.例如,以太坊提出可无限扩张白皮书里提到的方案,经过了两年仍然不能实现.有些方案放弃区块链的定义来解决可扩展性需求,例如 BigchainDB[14], RSCoin[10,15,16].他们放弃区块链多拷贝的需求来提高交易速度.这些偏离传统区块链定义的系统是否能被接受还有待观察.一般来说,这样的系统因为放弃了多拷贝的需求,所以需要在其他方面补足来增加安全性.

  北航链的可扩展性分为 3 步(参考第 4.1 节及文献[17]):(1) 使用 CBFT 并行的算法做拜占庭将军投票,从而提高建块速度;(2) 提出 ABC,TBC 双链架构[17],保护隐私、并行计算、节省计算力、简化应用架构;(3) 利用 ABC,TBC 双链的特点,使一条链可以在运行时分裂成两条链,有两套不同的硬件分别执行这两条链,以提高速度.有这 3 个机制,既可以使用原始定义的区块链,又可以有高速以及可扩展性.

  2.1.4 数据库需求

  区块链虽然被称为分布式数据库,但是它的作业和传统数据库大不相同.不但与关系(relational)型数据库不一样,也与对象(object)数据库、NoSQL 数据库或时间(temporal)数据库不一样.高速区块链与低速区块链是截然不同的:在低速环境下,交易是用串行的方法来处理,所以低速区块链的一致性问题不大;而高速环境下,交易和建块是并行的,所以一致性是一个新问题.因为传统数据库是以个别交易,而区块链是以建块来维持一致性.

  区块链一致性问题与传统数据库一致性问题不一样,例如在区块链里,每秒可以有上万次交易,而每秒都可以有多块被建立,所以每块也可以有上万次交易.这些交易中,可能有很多交易与同一个数据有关联.例如在央视微电影项目中,几秒钟之内会有上万人点播同一个视频,所以在一块里面,可能就要对同一个视频有上千个点播.如果使用传统数据库,每次点播都是一个写(write),而在同一个交易里面不可有一个以上的 write 在同一个数据上.可是在央视微电影平台上,必须允许同时在一个块中有上千个 write 作用在同一个数据上.

  2.1.5 链上代码需求

  链上代码原被称为求问题与传统(smart contract),给人们的印象是既智能又受法律保护的合约.但事实上两者都不是.传统的智能合约没有匹配的法律框架,不是有效力的法律合同.智能合约的参与者亦没有相关的法律条文及框架来保护.如果加上法律框架的支撑,链上代码可以成为合约.

  链上代码的执行与建块息息相关,所以它的执行模型与建块流程相互影响,以至于链上代码在理论上变成一个很难的问题.问题难处在于:每次建块时,需要寻找必须要启动的链上代码,而且在一些链上代码系统里,那些代码必须完成执行之后才能建块.如果涉及的数据很多,而且链上代码很复杂,这将造成链上代码与建块冲突.虽然理论上链上代码是一个很难的问题,但是在实际系统中仍然可用.第 3.3 节将讨论一些实际解决方案.

  2.2 北航链的体系架构

  北航链是北京航空航天大学与北京大学联合开发的许可链,其设计初衷是为公信和金融服务,北航链摒弃了 P2P 网络[18,19]和挖矿机制[5],以可扩展性为第一目标[20],并且重视速度优化.为了确保系统安全,北航链加入了节点信用制度.这是首次采用信誉机制(reputation system)来识别作弊节点,一旦发现节点的作弊行为,立即将其排除在投票节点之外.

  在北航链的设计中,拜占庭式投票和数据采集可同时进行,加快了信息处理速度,具有独特的建块过程.此外,对每个交易进行投票.为了确保安全,也对块的投票结果投票,判断是否有叛徒节点.由于有 4 轮投票,将产生更多的信息(每轮产生 O(N2 )个消息);北航链采用并发操作,所以速度快.另外,北航链还设计了一整套可扩展的机制,例如 ABC(account blockchain),TBC(trading blockchain)双链架构及区块链云架构.可扩展机制使得区块链具有高吞吐性、低延迟性以及高隐私性.有了这样的机制,当工作量请求增加的时候,只要增加机器就能够处理, 从而实现负载均衡.图 2 是北航链架构图. 

  存储层:存储层包括操作系统和数据库服务; 

  基础区块链层:传输服务将缓存中的交易放入桶中;块服务为每个桶中的交易创建位图;Round Robin 使用循环法选择线索,创建并向所有其他节点发送块,进一步执行信誉计算;同步器广播本地区块链的长度,接收遗漏的块,并存储接收的块;ABC(帐户区块链)同步区块链,以确保不同节点的一致状态,创建帐户索引以加速查询,并提供帐户公私密钥服务;对于链上代码交易,TBC(交易区块链)首先执行链上代码,然后将结果放入桶中,对于非链上代码交易,直接放入桶中,并准备创建块; 

  缓存层:用于缓存内存中的临时信息,包括从用户和链上代码接收的新交易;那些块尚未传输到磁盘;并且支持系统运行的临时数据存储; 

  API 层:提供了外部和内部 API 接口.内部 API 用于节点之间的内部通信,例如投票、广播块;外部 API 用于外部用户,例如接受新交易和查询操作; 

  链上代码层:提供与合同相关的服务.链上代码根据领域特定要求编写,由所有利益相关者进行合法正确性验证,然后部署在区块链系统中执行.该层具有 3 个功能:与用户的交互(编辑)、流程执行引擎和支持帐户管理、状态存储和发送交易的合同服务; 

  应用层:此层有应用程序,例如银行系统、计算法律系统、信用认证系统和供应链系统.在设计区块链时,节点越多,系统越安全,但是共识起来会更慢,所耗的计算力越大.

  2.3 区块链接口设计

  OBCC(open blockchain connector)是一套区块链的统一接口,提供应用方便高效地使用区块链的功能,包括将用户数据存入区块链、查询用户需要的信息,如图 3 所示. 写入区块链的接口定义为 put(action,data),其中, 

  参数 action 表明用户的数据处理意图,可以是 create,insert, update 或 delete.注意:区块链是不能更改已经存入区块链的数据,这里的 update 和 delete 不是像数据库那样对数据执行 update 或 delete,而是在区块链上记录下对数据所发生过的操作,即,作为一笔新交易记录在案; 

  参数 data 是用户的数据,根据不同的应用领域,格式和内容会不同.

  区块链查询接口定义为 get(condition),其中,参数 condition 表明用户的查询条件,可以是块的哈希值或交易的哈希值,也可以与应用有关的关键字等.倒排索引、大数据分析技术的使用,使得用户可以快速高效地获取有价值的查询结果.

  OBCC 提供一个工具包,用户可以把它导入到自己的软件项目工程里,编程开发时,像是调用本地函数或方法一样使用区块链的功能接口.当用户程序需要调用区块链的功能时,由 OBCC 客户端代理将请求广播到各个区块链节点 OBCC 服务器端代理,该代理负责调用区块链的相关功能进行处理,最终存入区块链或查询到信息并返回.如图 4 所示.

  本文实现了 Java 版的区块链连接器——JBCC,已经支持多个区块链的应用系统的开发,包括央视微电影管理平台、高校学籍及档案管理系统、金融跨国支付系统、银行信用卡消费管理系统、跨行业积分跟踪管理系统.基于 OBCC 的区块链的应用系统开发,具有开发周期短、可扩展性高、运行速度快的特点.

获取发表周期短、审稿速度快、容易录用的期刊

* 稍后学术顾问联系您

学术顾问回访> 详细沟通需求> 确定服务项目> 支付服务金> 完成服务内容

SCI期刊

国际英文期刊

核心期刊

国外书号出书

国内纸质出书

2023最新分区查询