区块链开创性地利用密码学元素和共识机制构建了一个安全的去中心化系统。区块链是比特币的核心,它利用点对点网络通信,让区块链中的每一个参与的节点,对每个区块提案进行确认共识,将最后的共识区块信息存储在区块链的各个节点的本地数据库中,这样就能够保证数据的防篡改,公开透明性,同时能够保证交易的正常进行,但是由于区块链的技术升级,会导致每个节点的升级出现异步问题,对一致性产生威胁,导致区块链出现分叉的问题,最终导致区块链的安全,可信受到威胁,本文对区块链分叉问题进行研究,给出了一个解决区块链分叉问题的方案。
概述
理想情况下的比特币区块链是一个同步的网络环境,假设各个副本节点在区块链中的信息交换和区块的添加没有任何的延时,那么在这种情况下,如果不发生区块链的系统升级,那么每个副本节点上的数据块会是相同的,但是现实的区块链场景中,由于区块链的副本节点在挖矿的过程中,存在着同时的情况,而且节点与节点的信息广播也存在网络时延,那么在这样一个场景下,区块的信息验证就会出现错误的情况,如果这种情况发生,区块链分叉问题就出现了,下面我们对区块链分叉问题进行详细的分析。
单纯的分析比特币挖矿的模型,出现链的分叉是一个必然结果,早期的区块链挖矿的设计,是矿工与矿工之间独立地进行,下面我们进行实验分析,实验条件是,已存在区块长度为10的区块链,比特币矿工只有10人,区块链的尾块暂且定为a,实验假定,10个比特币的矿工,其中有两个矿工同时达到了获取比特币的条件,即同时产生了新的比特币区块信息节点,分别为i和j。而此时由于双方都不知道对方是否挖矿成功,两个矿工都默认地向全网广播了i和j,此时区块链网络中出现了两个区块,两个区块的指向的尾块都是a,于是区块链网络会出现以i和j为尾块的两条链,而且两条链都是合法的链,于是区块链就出现了分叉的问题。
这个问题是单纯的挖矿模型必然产生的问题,该区块链分叉的问题会导致两条分叉链,最终比特币的消费会出现重复消费的风险,如果一直持续下去,整个区块链的分叉网络链将会越来越多,使得区块链中的节点网络的通讯开销呈指数级的增长,系统运行效率急剧下降,最终会将网络的性能拖垮,区块链比特币技术为了解决这个问题,引入了区块链高度的变量,为共识检测点,每隔一段时间,区块链网络会同步一下区块链的高度,将高度异常的区块链定义为非法区块链,这样,非法区块链上的区块信息即为无意义区块,对整个区块链将不会产生任何影响,同步区块链的高度过程,成为共识过程,比特币区块链实用共识技术,解决了挖矿模型的分叉问题。
由于使用了共识的检测节点作为处理分叉的方案,区块的分叉并不是实时的同步,在某一时间节点下,每个区块链的尾部部分的区块可能是分叉区块,在共识同步之前,还会有新的区块信息追加在分叉的链后,但是因为同步共识检测点的存在,分叉链的无限增长的概率会指数下降,在这样一个实际情况下,比特币组织在处理比特币交易的时候,采用的是延时交易确认,即发起比特币交易到交易成功中间需要有时间间隔,时间间隔的长短正好是区块链共识检测点时间间隔。
区块链的分叉类型
比特币区块链不仅仅是自身运行会产生分叉,同时比特币区块链会在技术升级时人为的产生区块链分叉问题,因为比特币区块链的组成是很多个共识节点,当技术升级时,每个共识节点会出现升级的分歧意见,导致每个共识节点在升级之后的验证行为发生了不同,在之后的运行过程中将会产生多个区块链,这样就出现了人为的区块链分叉,这种分叉是允许的,同时该分叉的類型分为硬分叉和软分叉两种。
硬分叉指的是升级前的旧区块共识节点和升级后的新区块共识节点的链的分叉,在比特币区块链进行技术升级之前,会将方案提交,尽量地征求大部分的比特币区块链共识节点的省级统一,这是硬分叉的前提条件,当大部分共识节点同意升级请求后,会进行升级,升级过后,新的区块链的区块验证机制将会有别于就的区块验证机制,比特币区块链此时会存在两条区块链,但是两条链的区块共识节点是不成比例的,在系统之后的运行过程中,旧的区块链节点会越来越少,挖矿的矿工会逐步的升级到新的区块链中,硬分叉在最终将会被共识统一,前提是升级方案得到大多数节点的同意,硬分叉地出现在2017年,当时力推了SegWit2x的升级,产生硬分叉,此次的升级时为了提高区块链的区块信息大小。但是目前各方的反应都不同,其中BTCC交易所的联合创始人兼首席执行官鲍比·李,从最初的赞同升级,到现在反对和担忧本次的硬分叉升级。
软分叉的实质相对硬分叉来说,没有实际产生多条分叉区块链,是一种在区块信息验证机制上的分歧,但是新的区块验证机制会去向下兼容就的区块验证机制,这样虽然在整个区块链中,同时有两种区块验证方式,但是实际上不会产生新的区块链分叉,软分叉的产生比硬分叉要早,在2012年产生过一次,是比特币的BIP升级项目,当时使用的就是软分叉方案。软分叉的不足之处是在于区块验证协议的兼容性和验证协议的安全性之间的矛盾,很难在两者之间取一个合适的平衡点,所以实际过程中,软分叉不太好设计。
基于随机公证节点机制算法
为了解决区块链硬分叉的问题,作者提出了一种算法机制,随机公证节点机制来解决区块链分叉问题,该算法的具体定义流程如下,分为两个部分,一个是随机公证节点的选取,一个是新区块的产生。
选取随机公证节点的步骤如图1所示。
首先需要选取一个节点作为算法的开始,由该节点进行随机挑选,产生一个公证节点a,同时将选取结果和节点a的信息一并广播到区块链网络中,当区块链节点接收到广播信息时,未被选中的节点验证广播信息,如果验证不通过,则丢弃信息,算法结束,如果验证通过,则将信息更新至本地日志,记录公证节点编号,被选中的节点验证广播信息,如果验证不通过,则丢弃信息,算法结束,如果验证通过,则标记自身为公证节点,更新本地日志信息,同时会停止产生新区块的功能。
新区块的产生步骤如图2所示。
新区块产生机制其实有两条分支在运行,当非公证节点产生新区块之后,会广播新区块信息提案到区块链,由区块链网络进行公示提案,同时还会将新区块信息发送给公证节点进行公证。
当公证节点收到新区块信息,会对区块信息进行验证,如果验证不通过,会将新区块丢弃,同时会将该丢弃的记录广播给全网,使新区块不可信,新区块信息的共识过程就会被终止。如果验证通过,会将新区块更新添加记录在公证节点本地的区块链尾部,同时会将该验证消息广播给全网,使新区块可信,新区块信息的共识过程正常进行。当公证节点在同一个共识过程中,收到了多个新区块的验证请求,当都通过验证后,公证节点会发起全网投票,通过投票结果,决定新区块是否可信,重复上述的动作。当新区块全部产生,共识结束后,算法正常退出。
结论
论文论述了区块链分叉的背景,区块链分叉中的硬分叉和软分叉,在此基础上提出了一种基于随机公证节点机制的算法,该算法能够有效地避免区块链的硬分叉链的不断增长,当区块链出现硬分叉时,同一共识视图过程中,出现多个可信的新区块的情况,能够通过公证节点的裁决和投票,让新区块的尽量地转移到大多数节点的主区块链中,当区块链运行一段时间过后,硬分叉的情况会逐步地减少,最终消除。该算法的公证裁决建立在本身的区块链节点,能够消除区块链分叉的同时,保证了区块链的去中心化特性,对区块链中的区块信息的安全性得到了保证,本文对于区块链的分叉问题的分析研究,是为了给其他相关的研究人员一个借鉴思路,为以后提出更加成熟的解决方案奠定基础,这是本文研究的目的所在。
参考文献
[1]张龑,刘德.区块链中的安全问题研究[J].数字技术与应用,2017(8):199-200.
[2]韩璇,刘亚敏.区块链技术中的共识机制研究[J].信息网络安全,2017(9).
[3]馬昂,潘晓,吴雷,et al.区块链技术基础及应用研究综述[J].信息安全研究,2017, 3(11).
[4]贾引狮.基于区块链技术的网络版权交易问题研究[J].科技与出版,2018(7).
[5]刘肖飞.基于动态授权的拜占庭容错共识算法的区块链性能改进研究[D]. 2017.
[6]王健,陈恭亮.比特币区块链分叉研究[J].通信技术,2018.
[7]海沫,朱建明.区块链网络最优传播路径和激励相结合的传播机制[J].计算机研究与发展,2019,56(6):1205-1218.
[8]卿苏德,姜莹,王秋野.区块链的技术原理和意义[J].电信网技术,2016(12):14-20.
[9]袁超.区块链中硬分叉期间的防御方案[J].现代计算机(专业版),2019(09):5-9+15.
[10]刘晓蕾.区块链社区:一种新型的组织模式[J].人民论坛·学术前沿,2018,No.148(12):13-19.