Page 286 - 《软件学报》2020年第9期
P. 286
张志威 等:区块链的数据管理技术综述 2907
节点通过工作量证明,确定下一个有权利将生成的区块添加到链中的节点.参与工作量证明的节点称为挖矿节
点.例如:当一个区块的结构如图 1 所示,包括前一区块的哈希值、共识的验证字段以及区块内事务的哈希值时,
挖矿节点利用这些哈希值计算出该区块的共识的验证字段,使得验证字段满足以下条件:
hash(PrevBKhash|ConsProof|MerkleRoot)≤Z (1)
其中,Z 这一参数控制工作量的大小.最先计算出相应验证字段的挖矿节点将其结果全网广播,其他的挖矿节点
验证其收到的验证字段是否满足方程(1)的条件:若结果满足,则将区块添加到已有区块链的尾部,而最先计算出
结果的节点则获得相应的奖励.工作量证明的共识协议可以很好地应用于公有链网络中,并且可以抵御女巫攻
击 [46] .当恶意的算力达到全网算力的 10%时,在 6 个区块后确认的交易可以保证超过 99.9%的真实性 [47] .同时,
在工作量证明方程的结果广播的过程中,PoW 共识可利用中继节点,通过多轮传递方式来减少工作量证明共识
机制的冗余网络开销 [48] .
另一类型的共识协议则是基于通讯的共识协议,基于通讯的协议将投票权分配给网络中的节点,并利用多
轮通讯达成共识.该协议的代表为实用拜占庭容错协议(PBFT) [27] .PBFT 共识协议需经过 3 个过程:pre-prepare
阶段、prepare 阶段以及 commit 阶段.当用户提交请求时,一个主节点会在 pre-prepare 阶段广播其请求.在 prepare
阶段,所有的节点收到请求后判断是否执行该操作:如同意执行,则将自己的签名添加在消息中,并广播给其他
节点;若不同意执行,则不发送消息.当节点接收到其他节点发送的执行操作的消息达到一定数量时,则说明执
行操作达成了共识.在 commit 阶段,节点执行相应的请求,并将执行结果回报给主节点.由于所有的节点都将全
2
网发送并接受来自所有其他节点的消息,因而在网络中有 N 个节点的情况下,其网络开销复杂度为 O(N ).
以上两种共识分别基于计算和通讯.同时,有其他共识协议改进 PoW 共识协议中的条件方程,或在两种共
识协议中做一定的取舍.例如,Elastico [49] ,RapidChain [50] ,Byzcoin [51] ,Tendermint [52] 等均利用采样的方式选取领导
者节点,并在领导者节点中利用 PBFT、工作量证明或其他基于投票的算法达成共识,从而减少其共识阶段的开
销.需要注意的是,基于计算的工作量证明共识并不能确定保证网络中的事务均合法.当恶意节点控制全网 33%
的算力时,则恶意节点已有可能控制整个网络 [53,54] .与之不同,PBFT 共识则是确定性的.但是由于其网络开销为
2
O(N ),当增加网络节点个数时,网络产生的额外开销会超过增加算力所节省的时间,使得系统的性能随着算力
增加而降低.因此,直接使用 PBFT 共识将会降低整个网络的可扩展性 [55] ,并成为部分区块链系统的性能瓶颈 [22] .
关于其他共识机制的综述可见文献[56,57].
1.3 UTXO与Account模型
在区块链系统中,典型的数据模式是比特币所基于的 Unspent Transactions Outputs(UTXO)结构.以比特币
为例,在 UTXO 模型中,不存在一个账户记录一个用户所持有的所有比特币.每个交易均是通过已有的 UTXO 生
成新的 UTXO.换言之,交易只是代表 UTXO 集合的变更,而一个用户所拥有的全部比特币是其所拥有的 UTXO
总和.例如,假定用户 A 分别在事务 1 和事务 2 中转账 2 个比特币到 B 用户.此时,B 用户有两个 UTXO:UTXO 1
与 UTXO 2 ,且分别包含 2 个比特币.当用户 B 计划生成事务 3,并在事务 3 中转账 3 个比特币到用户 C 的账户时,
事务 3 的输入需要包含的是 B 用户的 UTXO.本例中,事务 3 的输入可以为 UTXO 1 以及 UTXO 2 .之后,在事务执
行过程中,事务将输入的 UTXO 标记为已花费的状态,并生成一个新的包含 3 个比特币的 UTXO,并将其转移到
C 用户.同时,事务生成一个 UTXO 包含剩下的一个 1 个比特币,并将其转移到 B 用户.通过 UTXO 这一模型,所
有交易均在已有的 UTXO 之上进行,大多数交易只需要判定是否存在双花(一个 UTXO 被多次交易)即可.因而,
交易是否被执行可以很快地验证,并且具有很高的隐私性.但是由于其不存在账户的概念且交易需要基于
UTXO,其编程复杂度较高.
另一种数据模型是 Ethereum 所采用的 Account 模型,该模型下一个账户包含用户所有可用的电子货币.当
一个交易被提交时,相应的事务首先判断账户内的电子货币是否足以完成该交易:如果可以,则该交易被执行;
否则,交易被取消.与 UTXO 相比,Account 模型更容易理解,并节省了大量的存储空间.而 UTXO 则可以更好地保
护用户隐私.