针对区块链可扩展性的双子链模型设计

2019-03-29 11:54肖尧闫帅蒋遂平
物联网技术 2019年2期
关键词:可扩展性数据结构区块链

肖尧 闫帅 蒋遂平

摘 要:区块链技术在物联网等大交易量场景中的应用面临的突出问题之一是可扩展性。文中分析了区块链可扩展性问题的来源、影响与主要解决方案。针对区块链的可扩展性,引入区块指针和状态更新池的概念,提出了区块数据的双子链模型,并对双子链模型解决可扩展性问题的可能性和安全性进行了讨论。

关键词:区块链;可扩展性;数据结构;数据库

中图分类号:TP39文献标识码:A文章编号:2095-1302(2019)02-00-04

0 引 言

近年来,区块链作为从比特币[1]中提炼出来的技术,引起了科技企业、资本市场、金融机构及政府部门的巨大关

注[2]。作为最成功的区块链应用,比特币在资本领域获得了巨大成功,截至2018年8月,比特币市场已达千亿美元。目前,区块链已经从单纯的数字货币应用扩展到物联网、金融、医疗、保险等领域。

作为一种去中心化的分布式存储技术,区块链拥有巨大的发展前景,但仍面临着众多挑战[3-4]。其中一个突出问题是可扩展性,尤其是在物联网背景下,存在海量存储和计算资源受限的小型节点,当把感知数据作为一种资产进行交易时,这些节点需要处理巨大的交易量,以区块链规模为中心的可扩展性问题尤其严峻。

本文首先分析了可扩展性问题的原因及影响,介绍现有的相关工作,然后提出了新的解决方案模型,最后就模型的相关问题进行讨论。

1 可扩展性问题分析

1.1 存在原因

可扩展性问题的关键在于区块链规模的不断增长,区块链规模不断增长的根本原因在于区块数据结构和组链的方式。

区块链中的数据以一个个区块的形式存在,每个区块包含区块头和区块体两部分。区块头封装了前块Hash、时间戳、随机数、Merkle树根值等信息,区块体中则主要包含交易事务的完整信息。前块Hash字段为前一区块的摘要信息,可以防止前一区块被任意篡改,并唯一指向了前一个区块。通过前块Hash字段,一个个独立的区块从逻辑上串联成一条链,任何中间区块的缺失或被篡改都会使后续区块失效。

取得记账权的节点需要利用所有历史区块的信息确认收到的交易信息,以构建新区块,并通过前块Hash字段链接到时间上最近的区块,其他节点通过本地保有的完整区块链对新区块加以验证,如果验证成功就将其加入本地区块链,形成新的区块主链。从创世区块(区块链的第一个区块)到当前区块形成的一条最长主链记录了区块链的完整历史。作为一种分布式数据库,区块链网络中的每个节点都保留一份完整的区块链,并以此作为新区块的接收依据。

由此,区块链的规模不断增长,越来越庞大。对区块链网络中的节点而言,如果丢失中间任意区块,就难以进行工作。由于节点需要保存完整的不断增长的区块链,因此导致了可扩展性问题的出现。

1.2 可扩展性问题影响

区块链规模的增长速度与交易量密切相关,在比特币每秒只记录7笔交易的小交易量条件下,目前完整的比特币区块链占用存储空间已达到180 GB,并且还在不断增长。在物联网、证券、发电权管理、智慧城市等大交易量场景下,单个节点的区块数据存储量将很快达到TB级。

区块链规模的不断增长使得节点初始化下载数据耗时较长,新节点的加入极为困难。此外,节点在挖矿和执行共识算法时也需要较多的算力与存储能力,挖矿节点资源越来越多,导致算力分布愈加集中,威胁到系统的安全。对于大部分节点来说,保存业务上不需要的交易记录会造成大量资源浪费[5]。物联网区块链网络中大部分节点的存储、算力及能源受到较大限制,即使作为轻型节点,只处理传统区块链的一小部分工作都难以完成。

由于可扩展性问题极大地影响了区块链技术的应用与发展,因此迫切需要一种切实可行的解决方案。

2 相关工作

目前针对可扩展性问题,主要采用区块链存储优化和重新设计区块链等方法。

2.1 区块链存储优化

2.1.1 全网节点放弃对全部历史信息的保留

鉴于节点执行完整账本相关功能的难度不断加大,Bruce提出一个小型链(mini-blockchain)加密货币体系[6],结点可以不断移除或遗忘旧的交易记录,并通过一个名为“账户树”的本地数据库保存所有非空账户的余额。这样,交易无需永远存储在区块链中,只需要存储最近的交易事务和账户树即可。这种方法大大减少了区块链网络的存储规模,大幅提高了可扩展性,并在氪石币中得到应用。但是账户树的更新较为复杂,节点间账户树的同步同样需要耗费资源。

2.1.2 通过轻量级节点减轻部分节点的存储、计算压力

中本聪在比特币白皮书中指出:轻型节点可以只保留区块头,通过简单支付验证(SPV)的方式工作。每个比特币区块头部固定为80 B,一年总增长为4.2 MB,需要时再向完整节点获取相应的数据,極大地降低了节点存储要求。

Hooff等人提出一种名为VerSUM的轻量级客户端[7]。VerSUM允许轻量级客户端将过大的计算量外包给其他服务器,通过比较多个服务器返回的结果以保证计算结果的正确性。

这类方法的本质是通过存储或算力的外包,把负载转移至其他节点。在这种模式下,拥有更多资源的节点会拥有更多话语权,强化了区块链网络的中心化程度,背离了去中心化的初衷,增加了系统风险。

2.1.3 通过链下离线交易来减轻网络压力

Lombrozo,Lau和Wuille提出见证隔离技术[8],将签名数据从交易中分离出来,组成新的结构另行存储。Poon和Dryja提出闪电网络方案[9],通过离链进行频繁的小额支付,以避免区块链容量被大量小额交易占用。在此基础上,文献[10]提出双向小额支付的通道协议,在保证安全的前提下,节点可以利用自建的离线通道实现无延迟实时支付。

以上利用链下离线交易来扩容的主要思路是尽可能把更多的信息放到链下存储,缓解单个区块数据量不够、数据冗余以及链上数据过多的问题。

2.2 重新设计区块链

文献[11]提出下一代比特币(比特币NG)的思想。比特币NG将传统区块分解为两部分:领导者选举的关键区块和存储交易的微区块。该协议将时间划分为不同时段。 在每个时段,节点必须散列以生成关键区块。一旦生成关键区块,该节点就成为负责生成微区块的领导者。比特币NG还扩展了最长链条策略,在这个策略中微区块没有权值。通过这种方式重新设计区块链,并且已经解决了块大小和网络安全性之间的权衡问题。

对于大交易量的场景,以上多数方案并不能很好地解决区块链规模不断增大的问题,没有从根本上解决可扩展性问题。文献[6]把传统的区块链分为三个部分,但在更新账户树时操作较为复杂,不易整体实现。

本文从数据层着手,改进区块数据结构,引入状态更新池的概念,提出新的区块链数据模型,提供一种能使区块链系统保持特定规模的解决方案。

3 双子链模型

3.1 区块指针

区块链规模不断增长的根本原因在于数据层的区块数据结构和组链方式。仅有的前块Hash字段使得区块的组链方式较单一,只能抽象地组成一条拓扑结构简单的区块链,无法对区块链本身进行操作,区块链系统只能不断增大规模,最多以链下存储和只保留区块头的方式缓解这一问题。

为解决这一问题,本文将前块Hash字段改进为区块指针,如图1所示。区块指针包括指向区块高度和指向区块摘要两个字段,分别表示区块指针指向区块的高度序号和哈希摘要。与传统区块链中的前块Hash字段不同,区块指针并不固定指向前一区块,而是可以根据需要指向任意已存在的区块。通过一个或多个区块指针,区块可组成更复杂的拓扑结构,使得区块链的结构更加丰富、灵活。

3.2 状态更新池

除了引入区块指针外,还需要在区块体中引入状态更新池的概念,以便在业务逻辑上支持对新的区块链结构进行相关操作,满足新功能。

目前大部分区块链系统的核心为交易数据,每个区块中包含了以地址账户为主体的交易信息,节点依靠所有历史信息判断每笔新的交易是否合法,是否存在双花等问题。这种检查实质上是对输出地址账户所持有通证(token)状态的判定,即在时刻t相关账户的余额状态,在区块链中,就是截至前一区块该账户的余额状态。只要能安全得到这一条件,该账户的历史交易信息便可丢弃,达到减少区块链数据量的目的。

为此,本文引入状态更新池的相关概念,如图2所示。区块体内加入区块状态更新子池,区块头部增加子池摘要,每份子池内包含一定数量的账户状态信息,一份完整的状态更新池由若干个存在于連续不间断区块中的状态更新子池组成。

如在区块Bm至区块Bn这一串连续有限区块中,包含一份状态更新池,每个区块内的子池均包含部分账户截至区块Bm之前的状态信息,整个状态更新池中包含截至区块Bm之前所有余额不为空的账户信息。这样,区块Bn之后节点验证账户的余额只需要该状态更新池和Bm到当前的区块即可,Bm之前的区块可以丢弃。

3.3 双子链模型工作原理

利用区块指针和状态更新池的概念,本文提出一种双子链模型。

双子链模型的区块结构如图3(a)所示,区块头中加入两个区块指针和子池摘要,区块体中加入状态更新子池。简单表示如图3(b)所示。

双子链模型的链结构如图4所示。

图4中,每个区块的区块指针1同传统区块链中的前块Hash字段一致,唯一标定节点承认的前一个区块,通过指针1各区块在逻辑上依然构成一条传统的不断增长的链,如图5所示。

通过区块指针2,组成并维持双子链结构。每条子链第一个区块的区块指针2固定指向创世区块,后面的区块同指针1依次指向前一区块,形成一条子链。当子链达到约定长度后,则停止生长,新的区块作为新子链第一个区块连接向创世区块,同时,丢弃最旧的子链,如图6(a)所示。然后新的区块在新子链上生长,如图6(b)所示,直到新的子链到达最大高度,开始生成下一条子链。

这样,区块链网络共同维护的数据规模不会超过创世区块加两条子链,从区块拓扑结构上达到了控制总长度以及数据规模的目的。

为保证区块链网络的正常运行,丢弃部分区块前需要把必需的历史信息留下来。在双子链模型中,通过每条子链包含的状态更新池来完成。状态更新池中记录所在子链之前所有非空账户的状态结果。其生成过程如下:

假定当前所在子链为C链,前一条子链为B链。遍历B链中更新池信息交易信息,得到截至B链结束时存在的所有n个非空账户,即C链状态更新池待记录账户。约定C链长度为m,已存在t个有效区块,其中已记录更新s个非空账户的状态。

节点生成新区块,即C链上第t+1个、倒数第m-t个,B链中有n-s个账户需要被记录。节点只需遍历B链,从中找出未被记录的前[(t-s)/(m-t)]个账户,计算得出B链结束时的状态,记录在区块子池中并计算子池摘要即可。

这样,每条子链的状态更新池可包括上一条子链所有账户的结果状态,子链上的交易信息则是本子链生成时间内产生的新的交易。每笔交易在验证时无需对历史上所有区块遍历,只需遍历上一条子链的状态更新池和交易信息,以及当前子链已产生的交易即可判断账户的当前状态。另外,若当前子链的状态更新池中已更新账户状态,又可省去遍历上一子链的过程。

4 讨 论

4.1 双子链模型的数据规模

双子链模型为可扩展性问题提供了一种解决方案,通过对数据结构的改进使得链上冗余信息被安全丢弃,将超过一定时间的历史交易信息转化为账户余额状态,最终达到最大限度控制数据规模的目的。

以比特币为例,当前的数据规模已达180 GB,共有3亿多笔交易,而独立地址账户只有40万。因此,特定地址的所有历史交易信息量远大于只记录地址和余额。丢弃历史信息可极大地降低节点的存储负载,进而解决区块链的可扩展性问题。

4.2 分叉、安全性

对双子链结构的组织和旧链的丢弃是节点基于区块指针2视角的操作。从区块指针1视角看,依然是传统的单链结构,因此继承了传统区块链结构的相关特性。分叉时主链的选择方法、安全性分析等可以继续使用现有方法[12]。现行区块链应用中区块确认长度[1]通常不超过100,只要双子链模型中子链的长度超過该确认长度,即可认为本模型拥有不低于普通区块链的安全性。

5 结 语

本文从区块链的数据层着手,引入区块指针和状态更新池的概念,提出区块数据的双子链模型,形成新的区块数据结构和组链形式,支持新的区块间拓扑结构,使得区块链系统对区块链的操作变得可行。由于双子链模型限制了区块链的规模,并允许安全丢弃历史区块,可以有效缓解区块链的可扩展性问题。

当然,本文提出的模型也有其适用范围,要求使用场景对历史数据不全部保存,只需明确相关账户当前状态,对于严格要求完整历史信息的业务场景还需进一步寻找可扩展性问题的解决方案。

参 考 文 献

[1] NAKAMOTO S. Bitcoin: A peer-to-peer electronic cash system[Z].Consulted,2008.

[2]何蒲,于戈,张岩峰,等.区块链技术与应用前瞻综述[J].计算机科学,2017,44(4):1-7.

[3] ZHENG Z,XIE S,DAI H,et al. An overview of blockchain technology: architecture,consensus,and future trends[C]// IEEE International Congress on Big Data.IEEE,2017.

[4]邵奇峰,金澈清,张召,等.区块链技术:架构及进展[J].计算机学报,2018,41(5):969-988.

[5] FERN?NDEZ-CARAM?S T M,FRAGA-LAMAS P. A review on the use of blockchain for the internet of things[J].IEEE access,2018(99):1.

[6] BRUCE J.The mini-blockchain scheme[EB/OL]. http://cryptonite.info/files/mbc-scheme-rev3.pdf.

[7] VAN DEN HOOFF J,KAASHOEK M F,ZELDOVICH N. Versum:verifiable computations over large public logs[C]// In Proceedings of the 2014 ACM SIGSAC Conference on Computer and Communications Security New York,NY,USA,2014:1304-1316.

[8] LOMBROZO E,LAU J,WUILLE P. BIP141:segregated witness(Consensus layer)[OL]. [2016-11-15]. https://github.com/bitcoin/bips/blob/master/bip-0141.mediawiki.

[9] POON J,DRYJA T. The bitcoin lightning network:scalable off-chain instant payments[OL].[2016-12-17]. https://lightning.network/lightning-network-paper.pdf.

[10] DECKER C,WATTENHOFER R. A fast and scalable payment network with bitcoin duplex micropayment channels[M].Stabilization,safety,and security of distributed systems. springer international publishing,2015:3-18.

[11] EYAL I,GENCER A E,SIRER E G,et al. Bitcoinng:a scalable block chain protocol[C]// In Proceedings of 13th USENIX Symposium on Networked Systems Design and Implementation (NSDI 16),Santa Clara,CA,USA,2016:45–59.

[12] GERVAIS A,KARAME G O,GLYKANTZIS V,et al. On the security and performance of proof of work blockchains[C]// ACM Sigsac Conference on Computer and Communications Security.ACM,2016:3-16.

猜你喜欢
可扩展性数据结构区块链
恩智浦推出全新i.MX 8X 处理器,为工业应用带来更高的安全性、可靠性和可扩展性
电力监控软件的可扩展性设计
区块链技术的应用价值分析
“区块链”的苟且、诗和远方
“翻转课堂”教学模式的探讨——以《数据结构》课程教学为例
构建高可扩展性的物流装备管理系统
用“区块链”助推中企走出去
TRIZ理论在“数据结构”多媒体教学中的应用
《数据结构》教学方法创新探讨