Page 297 - 《软件学报》2020年第9期
P. 297
2918 Journal of Software 软件学报 Vol.31, No.9, September 2020
突:如果没有冲突,则该事务在该分片内可执行;否则,返回取消命令.一个事务只有在它的痕迹在所有分片均可
执行时,方可执行.当有任意分片返回取消命令时,则该事务会被终止.利用 S-BAC 共识,Chainspace 解决了不同
片之间的数据一致性问题,但是代价是一个事务需执行多轮共识.
文献[107]提出了 Monoxide 区块链系统,该系统采用分片架构来对公有链系统进行优化.Monoxide 可以有
效地解决分片结构中算力分散的问题.由于系统中存在多个片,且每个片独立地进行共识计算,当攻击者可以聚
集算力攻击特定片时,极有可能攻击者具有该片超过 51%的算力,从而使得共识协议失效.为了处理这种攻击,作
者提出了“连弩挖矿”这一协议.在该种协议下,Monoxide 允许一次成功地解决哈希问题可以确认多个片中的块.
连弩挖矿允许矿工同时参与多个编号连续的片.一般的工作证明方程如方程(1)所示,其中,默克尔哈希树根包含
区块内事务的哈希值.而在连弩挖矿中,方程(1)的默克尔哈希树根替换为由多个区块块头部分的哈希值组成的
新哈希值.这样,在确认块时,哈希函数将覆盖多个块的块头,同时,这些块头将共用一个验证字段.这个结构允许
连弩挖矿包含算力难度不同的共识组.一旦一个节点计算出验证字段,则该节点将所有其涵盖的区块索引以及
相应的默克尔树的根节点的哈希值均记录到区块链中.其他节点也可根据此记录,验证其数据的真实性.最后,
当区块链出现分叉时,为了保证正确性,所有区块链分支上的事务的后续原子操作均不会被执行,直到一个分叉
被舍弃.
在文献[108]中,作者研究在 PBFT 共识协议下,通过分片的方式提高区块链系统的吞吐量.为了提高系统的
可扩展性同时保证安全性,该文献将可信执行环境(trusted execution environment)融入到区块链节点中.在可信
执行环境中,数据的可认证性以及完整性均受保护,不被恶意程序所篡改.在共识协议达成阶段,可利用可信执
行环境的节点计算结果,减少共识达成所需要的开销.在事务处理方面,作者将分布式数据库中二阶段确认与二
阶段锁引入到区块链中.具体而言,当节点需要处理跨片的多个事务时,首先向事务输入所在的片发送确认请
求,确认事务处理输入是否合法.在收到所有确认之后,节点进行事务的执行并将执行的结果(commit 或者 abort)
回传给所在的片.在事务执行阶段,利用二阶段锁机制,将多个事务并发处理,进而提高整个系统的吞吐量.
针对共识算法,Algorand [109] 提出了基于委员会节点的共识算法,以提高区块链网络的吞吐量.在 Algorand
中,共识算法会通过可验证随机函数,随机地选择一组节点作为委员会.委员会节点会根据其所持有的区块链网
络中的货币份额来分配权重,并利用权重证明来实现共识.由于委员会的选择采用随机函数生成,因而攻击者并
不能确定哪一部分节点将会属于委员会.同时,Algorand 会定期替换属于委员会的节点,从而保证网络的安全性.
5.2 区块链的链下事务处理
为了提高系统的吞吐量,部分事务可从链上处理迁移到链下,即部分交易不在区块链所记录且不需要节点
间达成共识.但是,由于存在不需要达成共识的事务存在,链下事务处理往往解决节点之间的可信问题 [104,110] .现
有的工作多应用在链下的转账交易等(例如比特币).通过建立链下的信任网络 [111−113] ,区块链允许在链下执行特
定用户之间的事务,并最终合并成一个事务存储在链上.通过这样的方式,大量的信任节点之间的交易不需要通
过区块链的共识验证,从而提高整个网络的吞吐量.
文献[113,114]分别基于比特币和以太坊,提出了支持比特币的 Lighting 网络和支持以太币的 Raiden 链下支
付网络,来作为比特币和以太坊交易的补充.在链下支付网络中,当用户与用户确认彼此可信时,可以在他们之
间建立支付通道.支付通道内的交易所产生的事务可以不需要经过链上的共识确认,而可以直接确认.在链下的
支付网络中,参与的用户需提前存入一定量的比特币或以太币.当一个支付产生时,付款方需将存入的一部分金
额转入收款方.因而,链下支付需保证支付的金额小于用户在网络中所剩的金额.与此同时,链下交易网络满足
传递性.当用户 A 与 B、B 与 C 之间分别存在支付通道,即使 A 与 C 之间没有建立支付通道,A 依然可以通过路
径 A,B,C,将一定金额通过链下交易网络转入 C 的账户中.因此,在链下支付网络中,部分工作旨在减少支付事务
的时间开销.文献[115]通过设计多个查找支付路线的算法,降低查找支付路线的平均时间开销.
而与 Lightning,Raiden 等网络直接对账户内的金额进行交易不同,文献[116]提出了 Sprites,这一利用智能合
约确保事务执行的网络.通过智能合约,当多个事务存在线性关系时,Sprites 可以部分地并行执行多个事务,从而
提高链下交易的执行效率.