江云超,何小卫,崔一举
浙江师范大学数学与计算机科学学院,浙江金华321004
随着区块链技术的不断发展,以比特币[1]和以太坊[2]为首的数字加密货币逐渐得到越来越多的关注.截至2019年7月,比特币网络中共有584 638 块区块,区块总量约213.56 GB.对于比特币节点而言,存储完整区块数据是其未来面临的巨大挑战.为了避免存储大量区块数据,如今许多区块链节点选择以轻量级方式运行.该类节点只要存储区块头内容而不必存储完整的区块数据,因而减少了节点的区块存储.然而,增加轻量级节点的后果是:只有少数节点存储完整区块,这就使区块链逐渐趋于中心化,与区块链的去中心化理念相违背,因此有必要进一步研究区块链节点的存储优化问题.
为了解决区块链节点存储量不断增大的问题,比特币节点优化方案提出了简单支付验证(simplified payment verification, SPV)方式.该方式只需保存区块头内容,减少了节点的区块体存储.为了减少节点账户的中间交易量,文献[4]提出了闪电网络.该网络具有如下特点:比特币节点把节点账户的大量中间交易数据转移到链下通道,而只将交易的开始与结束提交给比特币主链,减少了节点的区块交易存储.针对节点存储区块优化问题,文献[5]提出了一种Fast 同步算法.该算法只保存最近区块的状态数据而忽略较旧区块的状态数据,不仅减少了同步区块的状态数据,还提高了新节点加入区块链的效率.文献[6]提出了关于区块状态数据的剪枝方案,通过修剪每个区块的状态数据达到减少节点对于区块存储的目的.文献[7]提出的迷你区块链取消了彼此链接的交易,减少了对完整区块链的需求.文献[8]提出的以太坊雷电网络和文献[9]提出的类似于比特币的闪电网络都将部分交易转移到链下,减少了区块链节点的数据存储量.文献[10]提出了IPFS 方法,在此基础上文献[11]提出将以太坊智能合约代码存储于IPFS 的方法,以哈希值替换区块链中原有数据,减少了节点的区块数据存储.文献[12]提出了擦除已存在于区块中的数据交易的方法,减少了节点区块存储量.
相比于其他区块链节点存储优化方案,文献[13]提出的分片方案在减少区块存储和提高新节点加入区块链效率方面都有明显的优势.该方案根据恶意节点概率计算分片区块数量,利用区块链中节点总数计算得到分片保存的副本数量.然而,这种方法存在以下2 个问题:1)将每个分片中编号最小区块被恶意节点攻击的概率设置为分片概率,使得分片中较新区块存在安全问题,因为相比于同一个分片中编号最小的区块,分片中编号较大的区块只有存储更多的分片副本才能保证安全;2)将最少副本数量设定为某个定值也存在安全问题,因为少数分片副本可能被恶意节点存储.为了解决上述问题,本文提出以下改进措施:1)以每个分片中编号最大概率值作为该分片的概率值,提高了分片的安全性;2)当诚实节点保存分片副本数量大于恶意节点时,可以保证最少分片副本的安全.
分片是指将部分连续的区块连接在一起形成一个分片,采用分片方案是为了提高分片中区块的安全性.如果将区块链中的单个区块分别存储在不同节点,就会提高恶意节点创建区块的概率.因为恶意节点创建单个区块的概率远远大于创建整个分片中所有区块的概率,所以通过分片方式可以提高区块存储的安全性.
采用分片方案需要预先计算出分片中区块的数量,而文献[1]提出的双重支付攻击场景恰好提供了分片的设计思路.在双重支付攻击场景中,假设p为诚实节点创建下一个区块的概率,q为恶意节点创建下一个区块的概率,qz表示恶意节点在诚实节点创建z个区块之后追上的概率,其计算公式为
当p≤q且恶意节点创建下一个区块的概率超过诚实节点创建下一个区块的概率时,恶意节点创建下一个区块的概率为1.00;当p>q时,恶意节点创建下一个区块的概率随着诚实节点创建区块数量的增加而逐渐下降.其中,恶意节点创建区块的概率值满足泊松分布,其期望值为
恶意节点追上诚实节点概率的计算公式为
将式(3)转换为对无限数列求和
由式(4)可以看出:随着诚实节点创建区块数量z的增加,恶意节点创建虚假交易区块的概率逐渐减小.因此,可以设定一个最小概率值qmin,当恶意节点创建区块的概率值小于qmin时,恶意节点不能篡改此区块.为了计算分片中区块的数量,本文利用C 语言编写程序,分析恶意节点在不同概率时计算得到的分片区块数量.当恶意节点追上诚实节点的概率P <0.000 1%时,恶意节点不能篡改当前区块.实验分析结果如表1所示.
表1 分片区块数量Table 1 Number of blocks in sharding
由表1可以看出:随着恶意节点概率的逐渐增大,区块链分片的区块数量也在逐渐增加.此时恶意节点概率值的大小决定了分片中区块的数量,并且当q≥0.50 时,恶意节点创建下一个区块的概率为1.00,分片中的区块数量接近于无限.
第1 节已经分析了在不同恶意节点概率下得到的每个分片中的区块数量,而分片需要存储的副本数量可以根据区块链中的节点数量以及区块被恶意节点创建的概率计算得到.首先由式(4)算得区块链中第i个区块被恶意节点创建的概率为
分片需要存储的副本数mi的计算公式为[13]
式中,M为区块链中的节点总数,i为区块的编号,n为区块链中区块总数.文献[13]将分片中编号最小区块的概率作为分片概率,但分片中编号最小区块被恶意节点创建的概率很小,此时分片存储的副本数量较少;而分片中编号较大区块的安全性较低,只有存储更多的分片副本才能保证其安全性,所以把分片中编号最小区块的概率作为分片概率将会降低分片中编号较大区块的安全性.为了提高分片中区块的安全性,本文以分片中编号最大区块概率作为分片概率.因为编号最大区块被恶意节点创建的概率较大,所以需要保存更多的分片副本数量,可见本文方法提高了分片中区块的安全性.例如,第j个分片概率值的计算公式为
式中,Pn−j×z表示第j个分片中编号最大区块的概率值,qm−j表示第j个分片的概率,m为区块链中分片的副本数量,且
为了比较同一个分片中不同编号区块被恶意节点攻击的概率,设置恶意节点概率为0.10,分片中区块数量为10.分片中区块被恶意节点攻击的概率如表2所示.
表2 分片区块被恶意节点攻击的概率Table 2 Probability of block being attacked by malicious node
由表2可以看出:在同一个分片中,编号最大的区块被恶意节点创建的概率至少是编号小的区块被恶意节点创建的概率的2×105倍.如果把分片中编号最小的区块被恶意节点创建的概率作为分片被恶意节点创建的概率,将会降低分片区块的安全性.为了提高分片区块的安全性,本文以分片中编号最大的区块概率作为分片概率能提高分片的安全性,但是将最少分片副本数设定为某个定值也存在安全问题.如果少数几个分片副本均被恶意节点存储,那么恶意节点就可能从当前分片中的区块开始创建虚假区块信息.为了提高最少分片副本存储的安全性,本文提出诚实节点存储的分片副本数量大于恶意节点时可以保证分片的安全性.在以工作量证明的区块链中,当超过50%的节点相信区块真实性时,该区块会被区块链其他节点信任.假设区块链中每个节点的算力相同,则最少分片副本数量mi的计算公式为
式中,qM值为恶意节点数量.由式(8)可以看出:当诚实节点存储分片副本数量大于恶意节点存储的分片副本数量时,可以保证分片区块的安全.为了比较在不同恶意节点概率和不同节点数量情况下需要存储的最少副本数量,假设恶意节点区块的概率q分别为0.10、0.20、0.30,节点数目分别为4、8、16,分片需要保存的最少副本数量如表3所示:
表3 分片保存的最少副本数量Table 3 Minimum copy number being saved by sharding
由表3可以看出:当保存分片的恶意节点数小于1 时,最少分片副本数只需要保存2 份;当分片保存的恶意节点数目大于1 时,只有诚实节点保存的分片副本数量大于恶意节点保存的分片副本数量才可以保证分片区块的安全.例如:当恶意节点概率为0.20、节点数目为8时,保存分片的恶意节点和诚实节点数量分别为2 和3,即最少5 个分片副本数目可以保证分片区块安全.
实验机器配置为Inter Core i7-2600 3.4 GHz CPU 和8G 内存,利用Oracle VirtualBox搭建Ubuntu 系统,使用文献[14]的简易比特币开源代码,搭建比特币节点存储优化后的区块链网络,并且在区块链网络中设置16 个节点供节点存储优化实验使用.
实验环境中分别有4、8、16 个比特币节点,设定每个区块大小为10 笔交易,区块大小为5 kB,实验结果如图1和表4所示.当恶意节点概率为0.10,区块总数分别为100、500、1 000、5 000 时,比较比特币节点优化前后的存储情况.
图1 比特币节点存储总量Figure 1 Bitcoin node total storage
表4 比特币节点存储总量Table 4 Bitcoin node total storage
由表4可以看出:当恶意节点概率相同时,随着区块链中节点数目的增加,优化后的节点相比于未优化的节点将减少更多的区块存储量.例如当节点数目分别为4、8、16 时,节点存储总量约减少50%、75%、81%.由图1可以看出,当恶意节点概率相同时,随着区块数量的增加,优化后的节点相比于未优化的节点也将减少更多的区块存储.例如当节点数目为16、区块数量为5 000 时,优化后的存储总量减少约82%.
上面分析了恶意节点概率相同时,优化后的节点存储与区块数和节点数之间的关系.为了比较恶意节点概率不同时优化后的存储情况,实验设置区块链中节点数目为16 个,恶意节点概率分别为0.10、0.20、0.30,得到如图2和表5所示的结果.
图2 不同恶意节点概率的比特币节点存储总量Figure 2 Total bitcoin node storage for various malicious node probabilities
表5 在不同恶意节点概率情况下的比特币节点存储总量Table 5 Total bitcoin node storage for various malicious node probabilities
由表5可以看出:当比特币区块数量和节点数目相同时,随着恶意节点概率的减小,优化后的节点存储的区块数量更少.由图2可以看出:随着区块数的增加,优化后的节点将减少更多的存储量.例如区块数量为5 000、恶意节点概率为0.10 时,优化后节点减少约75%的区块存储量.
当新节点加入区块链时,需要与其他节点通信以获取完整区块,但是优化后的新节点刚加入区块链,其自身安全性还没有得到区块链中其他节点的认可,因此新节点只需要同步最近分片区块而不必存储编号较小的区块,从而提高新节点加入区块链的效率.
为了比较优化后新节点同步时间与恶意节点概率之间的关系,实验设置节点数目为16,恶意节点概率分别为0.10、0.20、0.30 以及区块数量分别为100、500、1 000、5 000,比较优化后新节点的区块同步时间,并将实验结果以表6和图3所示.
由表6可以看出:当比特币区块数相同时,随着比特币恶意节点概率的减少,优化后新节点将花费更少时间来同步区块.由图3可以看出:在恶意节点概率相同的情况下,随着区块数量的增加,优化后的新节点将需要更短的时间同步区块,因此该优化更适用于大数据.
表6 比特币节点优化后的区块同步时间Table 6 Optimized bitcoin node synchronization time
图3 比特币节点优化后区块的同步时间Figure 3 Optimized bitcoin node synchronization time
在区块链网络中,所有节点需要同步全部区块才能参与到区块链中.随着区块数量的增加,许多节点因受存储限制而无法参与区块链.本文提出了一种区块链节点存储优化方案,该方案改进了区块分片,提高了分片安全性,减少了区块链节点的存储量.实验表明,该区块链节点存储优化方案不仅减少区块链节点的区块存储量,而且提高了新节点加入区块链的效率.未来在实验中可以增加区块链中节点数目和区块数量以达到模拟真实区块链中的节点存储优化目的.