区块链技术
转载于 《中国计算机学会通讯》2017年第5期《专题》 作者:郁莲 邓恩艳
区块链(BlockChain, BC)是分布式数据库系统,也可理解为由多个节点共同维护的分布式账簿技术(Distributed Ledger Technology, DLT) ,其特点是不易篡改、很难伪造、可追溯。区块链记录发生交易的所有信息,一旦数据进入了区块链,即使是内部工作人员在区块链中也无法做任何更改。这种不可更改的特点不是来自使用某种操作,而是由于区块链系统和机制本身。这使得运用区块链技术较之其他安全技术而言更为简便和有效。凡是需要公正、公平、诚实的地方,都可以使用区块链技术。
区块链模式
区块链把数据分成不同的区块,每个区块通过特定的信息链接到上一区块的后面,前后顺连,呈现一套完整的数据。每个区块的块头(block header)包含一个前块哈希(previous block hash)值,即将前一个区块的块头进行哈希函数(hash function)计算而得到的值;每个区块之间都会由这样的哈希值与先前的区块环环相扣,形成一个链条。区块链的交易信息被随机散列构建成一种称为默克尔树(Merkle tree)的散列二叉树形态,其根(root)被纳入了区块的随机散列值。
从技术层面上讲,区块链的核心特征包含以下三个方面:
(1)块链结构:每一块有时间戳,每一块都含有前面一块的哈希加密信息,对每个交易进行验证。
(2)多独立拷贝存储:区块链系统的每个节点都存储同样信息。
(3)拜占庭容错:容忍少于1/3节点恶意作弊或被黑客攻击,系统仍然能够正常工作。
特征(1)指出区块链是一个“账簿”;特征(2)指出区块链是一个“分布式账簿”;特征(3)指出区块链是一个“一致性的分布式账簿”。依据这三个特征,派生出以下不同形式的区块链的落地模式。
模式1:
(1)、(2)、(3) + P2P + 挖矿
比特币(https://bitcoin.org/zh_CN/)代表第一代区块链的数字货币应用。比特币是数字货币应用而不是平台,属于公有链(全网记账)。虽然有加密,但是账簿是全公开的。因为只记录历史信息,不记载账户余额,所以账簿不完整。账户只能用一次,用P2P网络逃避监管,速度极慢,而且扩展性弱。
模式2:
(1)、(2)、(3) + P2P + 挖矿 + 默克尔-帕特里夏树(Merkel Patricia tree)
以太坊(https://www.ethereum.org/)代表第二代区块链的数字货币应用和平台。以太坊创始人维塔里克·布特林(Vitalik Buterin)发现比特币有很多问题,作出了3个重要贡献:把以太坊转型为一个平台,而不只是一个数字货币应用;以太坊有完整的账簿,这是区块链技术一个很大的进步;在以太坊平台上加上“链上代码(chaincode)”,俗称“智能合约”。然而,现在布特林自己也承认,所谓“智能合约”第一不智能,第二不是合约。 “智能合约”这个名词容易造成误导,IBM称之为“链上代码”(https://github.com/IBM-Blockchain/learn-chaincode)。“链上代码”能把数字货币应用变成功能强大的平台。相对于比特币,以太坊有非常大的进步,但是局限于首次公开币发行(Initial Coin Offering, ICO)。以太坊区块链是一种公有链,作为公开账簿,维护交易历史和账户信息,是完整账簿。以太坊平台支持二次开发,支持链上代码,但速度慢且难以扩展。
模式3:
(1)、(2)、(3) + 拜占庭共识协议
北航链代表第三代区块链的底层系统平台而非应用,拥有完全国内自主知识产权,是一种许可链(只有被许可的节点可以记账),有一个隐私的、完整的、不公开的账簿;平台支持链上代码,是一种采用系统工程方法研发的区块链技术,支持二次开发多样应用,包括数字货币;速度快,扩展性好,增加机器则增加速度。
一般而言,区块链分为公有链和许可链两类。
1.公有链(public blockchains):所有节点都可以投票、记账、建块。任何个体或者团体都可以发送交易,且交易能够获得该区块链的有效确认,任何人都可以参与其共识过程,数据公开。其特点是:中立、开放、交易速度慢、需要挖矿或类似挖矿技术,常用P2P网络,抗审查性高。
2.许可链(permissioned blockchains):只有被许可的节点才能参与投票、记账、建块,包含私有链、联盟链、企业链等所有非公有链。数据可以公开或不公开。其特点是:交易速度快、不需要挖矿、交易成本低(交易只需几个许可节点验证即可);可审查,会占据商业应用领域的主流。
不具备上述模式1~3的其他区块链相关技术称作区块链的变形(variant),有两种典型类型。第一种是链下系统(off-chain)。链下系统是一种系统,或者是寄居在区块链上,但是大部分的活动在区块链外面,比如在比特币上的闪电网络 (Lightning Network, https://lightning.network/)和雷霆网络(Thunder Network, https://www.blockchain.com/thunder/index.html)。链下设计的原因是公有链速度太慢,以链下活动来补链上活动,用加密方法来保证链下活动的安全。这样的链下系统,因为部分活动不在链上,所以安全性比区块链差。
第二种是类似区块链的系统,例如RSCoin、BigchainDB、Corda和VaultOS。每一个类似区块链系统都不一样,需要单独评估。例如,RSCoin和BigchainDB都是类似区块链系统,但设计大不相同。类似区块链改变了传统区块链的架构,一般来说安全性比较差,但速度比较快。
区块链的重要特征
一致性
在分布式环境下,数据要保证一致性,需要使用一致性协议。公有链主要使用工作量证明(Proof of Work, POW)和权益证明(Proof of Stake, POS)机制。而许可链中主要使用拜占庭共识协议(Practical Byzantine General Fault Tolerance, PBFT)和并发的拜占庭共识协议 (Concurrent Byzantine Fault Tolerance, CBFT)。共识的代价昂贵,许多计算力及节点通信都用在共识机制上。例如,PBFT需要三轮广播投票,每次通信以及每笔交易都需要签名和解签,80%的计算都用在签名和解签上。
区块链虽然被称为分布式数据库,但是它的作业和传统数据库大不相同,包括关系(relational)型数据库、对象(object)数据库、非关系型(NoSql)数据库及时序(temporal)数据库。区块链是以建块来维持一致性,而传统数据库以各个交易来解决一致性问题。
高速区块链与低速区块链是截然不同的。低速链环境下,交易和共识是用串行的方法来处理的,一致性问题容易解决;而在高速环境下,交易和建块是并行的,一致性问题是一个新的研究难题。例如,在区块链里,每秒可以有上万次交易,每秒可以建立多块,每块也可以有上万次交易,这些交易可能都与某个数据有关联。例如,在央视微电影平台项目中,几秒钟之内会有上万人点播同一个视频,因而在一个块里面可能就要对同一个视频有上千个点播。如果使用传统数据库,每次点播都是一个写操作,而在同一个交易里面,在同一个数据上不允许有一个以上的写操作。可是,在央视微电影平台上,必须容许同时在一个块中对于同一个数据进行上千个写操作。
可扩展性
从第一代比特币到第二代以太坊,都面临严峻的可扩展性问题。虽然有多种解决方案,但是每个方案都有缺陷。例如,在《以太坊白皮书》中提到的可无限扩张的方案,经过了两年仍然无法实现。所以,有些方案干脆放弃区块链的定义来解决可扩展性问题,例如BigchainDB、VaultOS、RSCoin。它们或者放弃区块链多拷贝的需求来提高交易速度。这些系统已经偏离传统区块链的定义,它们是否能被市场接受还有待观察。一般来说,这样的系统因为放弃了多拷贝的需求,所以必须在其他方面补足来增加安全性。
基于并发拜占庭共识协议的区块链,其可扩展性分为三步:(1)用并行算法来做拜占庭将军投票,从而大大提高建块的速度;(2)提出交易区块链(Trading Blockchain, TBC)、账户区块链(Account Blockchain, ABC)双链架构,简化应用架构以及计算;(3)利用交易区块链、账户区块链双链的特点,使一条链可以在运行时分裂成两条链,有两套不同的硬件分别执行这两条链,以提高速度。这三个机制不仅具备原始区块链的本质特征,还具有高速和可扩展性。
链上代码
链上代码原先被称为“智能合约”,给人们的印象是既智能又是法律上的合约。但事实上不是这样。智能合约没有匹配的法律框架的技术,“智能合约”非法律所界定的有效力的合同,没有相关的法律条文及框架来保护参与者。而链上代码与建块息息相关,所以它的执行模型与建块流程相互影响,以至于链上代码在理论上是一个很难的问题。问题的难处在于,每次建块时需要寻找必须要启动的链上代码,而且在一些链上代码系统里,那些代码必须完成执行之后才能建块。如果涉及的数据很多,而且链上代码很复杂,将造成链上代码与建块冲突。虽然理论上链上代码是一个很难的问题,但是在实际系统中仍然可行。
账户区块链与交易区块链技术及应用
账户区块链与交易区块链双链机制
账户区块链与交易区块链的设计思想是将执行交易和维护账簿分离,账户区块链负责维护账户信息,交易区块链负责执行交易和维护交易历史。
账户区块链存储账户信息。例如,某个小银行可以维护一个账户区块链,而一个较大的银行可以维护两个或者多个账户区块链来防止某个账户区块链负载过大。账户区块链采用多节点设计,节点之间采用拜占庭容错协议来维护一致性,通过这种方式,内部员工将很难篡改账户信息。账户区块链主要有以下操作:
创建账户:该过程包括信息录入、产生公私钥、将信息加入区块链等,以防止关键信息被非法篡改。
上传账户:需要锁定账户使用的金额,并在账户区块链节点使用拜占庭算法来保证一致性,防止产生双花问题。为了避免加锁导致同一时间一个账户只能使用一次的问题,可以在每次上传时,对账户产生一个子账户,子账户包含需要的金额,只对子账户进行加锁,保证账户可以继续使用。
更新账户:当交易区块链执行完成交易后,会给账户区块链返回信息。若交易执行成功,则账户区块链修改账户余额,同时解锁。这些修改必须保存在区块链上,同时使用拜占庭算法来保证一致性,以防止篡改。若交易执行失败,则对子账户进行解锁,并返还未使用的金额。
交易区块链是用来交易和结算的通道(或场所),由多个节点共同组成。交易区块链不保存交易双方账户信息,只是在需要的时候从账户区块链获取账户信息。当交易完成后,交易区块链删除账户信息,同时,将交易打包成区块链加入分布式账簿中。交易区块链可以分为两类:内部交易区块链和跨账户区块链的交易区块链。内部交易区块链由内部维护,可以较快地与账户区块链通信,使得账户区块链内部的交易可以快速完成。当需要进行跨账户区块链交易时,则使用外部的交易区块链。由于通信等因素的限制,跨账户区块链的交易在执行速度上会低于内部交易。
为了保护用户和银行的隐私,存储在交易区块链的数据必须加密,使得只有参与银行或央行可以看到数据;而底层客户端的数据只有相关银行和监管机构才可以看到。这样的设计需要配置会员网络权限,限制访问区块链数据库。
交易区块链和账户区块链系统扩展性分析
账户区块链自身扩展性:账户区块链提供一个对账户进行分割的方法,当账户数量过多导致账户区块链不能及时维护时,一个账户区块链可以分割为两个,这两个账户区块链都保存旧账簿,以保持历史账户的完整性,同时两个账户区块链之间使用负载均衡的策略,共同维护账簿,来满足可扩展性的需求。
交易区块链扩展性:如果银行之间的交易量增多,则可以通过增加交易区块链来解决性能不足的问题。因为所有的交易区块链都可以并行运行,所以系统的处理速度随着交易区块链的增多而变快。
系统扩展性:对于整个系统,如果新开设了一家银行,则该银行需要建立一个账户区块链和内部交易区块链,同时可以选择加入到已有的跨行交易区块链中。此外,如果某些银行之间存在大量的交易,为了提高整个系统的效率,可以设置一个专用的交易区块链来处理交易。
熊猫网络模型
熊猫网络模型是基于双链技术账户区块链和交易区块链提出的一种新架构,主要分为两个部分:
1.账户信息:由账户区块链来维护所负责的账户信息,包括户主信息及余额等。所有对账户的修改都会被区块链记录,防止被篡改。
2.交易区块链:由许多交易区块链构成,负责处理所有交易。用户需要进行交易时,把交易发送给交易区块链,交易区块链根据交易的输入和输出方分别向涉及到的账户区块链发送账户上传请求,收到账户信息后进行交易,并把账户信息返回给两个账户区块链完成清算。
熊猫网络模型可以用在大型应用上,例如央行数字货币。央行有两个功能,其一是发行货币,通过控制货币的发行来调控国家的经济,维护货币的稳定;其二是监控经济活动。货币发行由央行定,而熊猫模型可以对货币流通进行追踪,发现交易中的违法行为,追踪违法者的账户信息。每一家金融机构至少有一条账户区块链和一条交易区块链,交易经过交易区块链,但账户信息存在账户区块链。央行可以在每条链上放一个节点,所有账户和交易信息都会保存在央行节点之上,节点之间运行拜占庭协议来保持数据的一致性。央行可用链上数据来进行监管和大数据分析,这是新型的监管科技(RegTech)。熊猫网络模型也可以用在其他大型应用上,例如医疗。每家医院可以有自己的账户区块链来保护病人隐私,可以和其他医院或是其他机构用交易区块链来交换医疗信息,熊猫网络上可有医院、监管单位、保险公司和其他服务公司来完成整个医疗供应链。
大数据区块链技术及应用
天德科技公司于2017年3月24日推出基于大数据的区块链(BigData-Based Blockchain, B3)基础平台。该平台使得大数据区块链从概念与研究进入到实践与应用阶段。B3架构不同于传统的“区块链+大数据”架构,是把大数据的平台集成在区块链里面,简化了金融系统的运行及监管。
传统上,区块链被视为一个慢而且耗费计算力的系统。B3采用账户区块链/交易区块链的双链式架构、并发的拜占庭共识协议及大数据技术,大幅度提高了平台的运行速度及可扩展性。B3将大数据平台完全集成在区块链架构里面。一旦数据放进区块链,可以立刻在区块链里面做数据分析,不需要将数据送出区块链。用来分析的数据百分之百来自区块链,不存在链下数据传输及存储,因而数据正确性得到保障,实时监管成为可能。
B3具有大数据分析能力的区块链底层平台,可以存储所有交易主体的全部历史交易信息和余额信息。监管单位只要在B3部署一个节点,便可以拥有所有交易信息。不合规的交易活动可以从B3的链上大数据分析中被及时发现。
B3的出现是区块链底层技术发展的一个里程碑。区块链系统可以处理海量数据,表明区块链正在从边缘化的应用逐步进入企业的核心业务。
区块链互联网
当有无数的区块链包括公有以及联盟链出现的时候,链的交互变成一个问题。一般情形下,一条链上的资产很难被移到另外一条链上。区块链互联网(Internet of blockchains)技术正用于解决这个问题。
由以太坊创始人之一盖文·伍德(Gavin Wood)提出来的波尔卡圆点(polkadot)区块链网,Tendermint区块链创始人提出来的宇宙互联网(cosmos.network),还有Blocknet (blocknet.co),这三个都属于“异构网络”(heterogeneous networks),表示区块链互联网上面的区块链是不同种类,例如比特币链、以太坊链、天德链或是其他链。因为是异构网络,所以每一种链和其他链之间通讯都需要特殊的接口。异构网络用多链来解决扩展性问题,但是由于需要许多链和链之间的接口,代价较高。
在亚洲出现的两个区块链互联网概念,却是“同质网络”(homogeneous networks),因为参与的链是同一属性,所以链与链之间的接口一致,不需要特殊接口。第一个是日本电气股份有限公司(NEC)的卫星链,每一条链都是6个节点,链与链之间连接类似蜂窝,每条链的节点少而且数量一致,所以效率高。每条链架构也一样,所以可以高速地复制,从而节省大量工程成本。另外一个是前文提及的熊猫网络模型 。因为不需要链和链之间的特殊接口,同质网络解决扩展性问题的代价比异构网络低。
区块链互联网可以像传统的互联网一样散布在全世界,用户可以通过手机或个人电脑进入,让各行各业都使用区块链做公证、交易、清算、结算、版权保护及维权。以后不是通用一条大链把所有的机构都放在一起,而是用许许多多条链,互相连接,互相流通,来解决扩展性问题。并且异构以及同质区块链互联网都会同时存在。
区块链标准接口
我们设计了一种开放的区块链应用接口(Open Blockchain Connector, OBCC),为用户提供方便高效地使用区块链的功能,包括将用户数据存入区块链、查询用户需要的信息。写入区块链的接口定义为put(action, data),其中参数action表明用户的数据处理意图,可以是创建(create)、插入(insert)、更新(update)或删除(delete)。区块链不能更改已经存入的数据,这里的“update”和“delete”不像数据库那样对数据执行“update”或“delete”,而是在区块链上记录对数据所进行过的操作,即作为一笔交易记录在案。参数data是用户的数据,根据不同的应用领域,格式和内容会不同。区块链查询接口定义为get(condition),其中参数condition表明用户的查询条件,可以是块的哈希值或交易的哈希值,也可以是用户应用有关的关键字等。倒排索引、大数据分析技术的使用,使得用户可以快速高效地获取有价值的查询结果。
OBCC提供一个工具包,用户可以把它导入到自己的软件项目工程里,编程开发时像调用本地函数或方法一样使用区块链的功能接口。当用户程序需要调用区块链的功能时,由OBCC客户端代理将请求广播到各个区块链许可节点OBCC服务器端代理,该代理负责调用区块链的相关功能进行处理,最终存入区块链或查询到信息并返回。
制定区块链标准接口,有以下益处:
1.区块链应用开发人员只需要了解区块链的功能、OBCC使用,并不需要了解、掌握区块链底层的实现细节,包括共识算法、可扩展性机理、链上代码模式等。
2.区块链底层技术的升级、更新,不影响区块链应用系统。
3.提供区块链测试的标准化规程。测试面向OBCC,无论其内部有什么样的共识算法实现,或是使用何种可扩展架构,功能测试和性能测试的测试用例都可复用。
4.基于OBCC,还可以开发面向特殊业务领域的OBCC(Domain Specific OBCC, DS-OBCC),提高应用领域开发效率。
OBCC已经支持多个区块链应用系统的开发,包括央视微电影管理平台、高校学籍及档案管理系统、金融跨国支付系统、银行信用卡消费管理系统、游戏积分跟踪管理系统等。基于高速区块链应用接口(JBCC)的区块链应用系统开发,具有开发周期短、可扩展性高、运行速度快的特点。
展望
目前,链上代码基本是固定的合约模板,未来智能合约由谁来编写、检验、测试、认证、修改,以及合约双方怎样认可等,都是需要探索的问题。另外,随着区块链技术的成熟,未来各行各业都可以使用区块链,包括食品、金融服务、能源、制药、航空航天、IT等多个行业和领域。今后,还需要进一步研究区块链技术完备的标准和完善的监督监管机制。