Page 285 - 《软件学报》2020年第9期
P. 285
2906 Journal of Software 软件学报 Vol.31, No.9, September 2020
分割为多个独立的片,每个片内包含多个节点.片与片的数据一般存在一定的共有数据,从而可以保证当部分节
点失效时,依然可以恢复全部数据.而在区块链系统中,由于节点的不可信,需要利用共识机制确保节点执行的
事务等的一致性,并能抵御恶意节点的恶意攻击.因此,区块链的分片技术要确保某一分片内的恶意节点不能控
制该分片,使其恶意攻击行为成功.其次,为了将分片机制应用到区块链系统中,要确保分片环境下的共识机制
的开销远小于分片所带来的性能的提升.最后,一般的分布式数据库存在 master 节点,来分配及协调事务的处理.
而在区块链系统中,直接利用 master 节点来分配事务需要考虑到 master 节点可能是恶意节点的情况.
本文将从以上几个不同的数据管理方面问题,分析区块链与现有技术的异同.我们将基于现有的数据管理
技术,尤其是分布式数据库管理技术,来梳理并分析现有的区块链环境下数据管理问题.针对现有区块链的工
作,从安全与可信性 [36,37] 、系统架构 [38] 、智能合约技术 [39,40] 、访问控制 [41] 等方面进行了综述.同时,文献[42]主
要从区块链与数据库外联结合的角度,综述了在区块链中基于数据库的存储与查询的研究工作.与之前工作不
同,本文将从数据管理的角度,聚焦区块链中的数据存储、事务处理、查询处理以及系统性能的方面的研究
工作.
1 区块链的核心构成
在一个区块链网络中,包含互相不信任的多个节点,节点间无法确认某个节点是否为恶意节点.区块链网络
假定某些节点可能产生恶意攻击,但是网络中大多数节点是诚实节点.整个区块链系统的节点一般可分为全节
点、矿工节点和轻节点.全节点同步区块链上的所有数据,包括各个区块的头部哈希值、事务列表等.轻节点一
般是用户的客户端.轻节点不存储区块链上的全部数据,而往往只存储区块头部的哈希值.轻节点有时会提交针
对区块链上数据的查询等,并利用返回的结果以及自身存储的哈希值对结果进行验证.矿工节点是一种特殊的
全节点,该节点不但存储区块链的全部数据,同时参与区块链的共识过程.在一些区块链系统中,矿工节点与全
节点是相同的节点.本节我们将介绍区块链的核心构成,包括区块结构与事务、共识机制、UTXO 与 Account
模型、智能合约以及区块链的类型.
1.1 区块结构与事务
区块链网络节点存储整个区块链系统的数据以及事务的日志,数据以区块的方式进行存储并链接.节点中
一个区块的数据如图 1 所示,后一个区块均包含前一个区块的哈希值(PreBkHash 表示).除此之外,区块内还包含
共识验证字段(ConsProof)、默克尔哈希树根的哈希值(MerkleRoot)以及事务日志所构成的默克尔哈希树.默克
尔哈希树是一种二叉树 [43] ,其叶子节点存储事务,而非叶子节点则存储其子节点内容的哈希值.默克尔哈希树的
一个特点是:对于数据的任何变动,会影响从叶子节点到根节点路径上所有节点的哈希值.因此,所有针对数据
的修改都会从叶子节点向上传递到根节点.因此,利用该性质可验证数据是否被篡改.由于区块链以链式方式存
储数据并执行事务,且区块链只允许在现有区块链的尾部添加新的区块,该性质使得区块链可以记录所有对数
据进行更改的操作,因而其也被称为分布式日志或分布式账本.区块链中的一个事务对应于一次智能合约的完
整执行.区块链的事务也同样要求满足数据库中事务的原子性、一致性、隔离性以及持久性.区块中的共识验
证字段可以在部分共识机制中,验证节点广播的消息是否符合系统设定的条件,其具体细节将在“共识机制”部
分介绍.同时,区块链要求区块只能添加在区块链的尾部且不能删除.虽然有部分工作讨论修改区块链数据的方
法 [44] ,但是该类工作并不修改区块链存储的数据.其方法通过设计视图隐藏需要修改的数据,因而并不改变区块
链对数据的存储和管理.
1.2 共识机制
由于区块链网络中节点不可信并且其要求所有节点均存储数据的相同状态,当对其中一个节点的数据准
备进行更新时,所有节点需要对更新操作达成共识.共识协议往往基于两种思路,分别为基于计算的共识协议和
基于通讯的协议.现有的共识机制大部分采用以上两种之一或者二者之间做一定的平衡 [45] .
基于计算的共识协议代表是比特币所使用的工作量证明(proof-of-work,简称 PoW) [26] ,其原理为:网络中的