周雅怡,宋伟杰,黄晓英,凌华明,黄明磊
(广东电网有限责任公司珠海供电局,广东省 珠海市 519000)
自2015年我国启动本轮电力体制改革以来,电力市场交易的规模不断扩大,市场交易中信息安全问题一直是市场成员关注的重点。与传统集中式交易系统架构相比,区块链为市场交易提供了一种新的技术解决方案,具有更高的安全性和透明度,得到众多市场交易相关方的关注[1-2]。面向电力交易的区块链配套技术与解决方案也因此成为当前该领域研究的重点。
当前,区块链技术应用于电力交易领域,主要作为分布式账本实现对交易信息的安全存储,提升市场成员的信任程度[3]。文献[4-5]研究了电动汽车充放电交易中区块链技术应用问题,构建了面向点对点交易的电动汽车充电区块链架构。文献[6-7]研究了基于区块链的虚拟电厂交易管理模式,探讨了需求侧响应、电动汽车等参与虚拟电厂交易的可行性问题。文献[8-9]探讨了面向分布式发电交易的分散式市场交易体系问题,提出了基于区块链的解决方案。此外,在碳交易、绿证交易、现货交易等领域,也能够利用区块链技术实现分布式存储[10-12]。上述研究表明随着市场体系日趋完善,交易规模不断增大,市场交易复杂性问题更加突出,对区块链处理效率、安全性等要求也不断提升,迫切要求基于电力市场交易自身特点,研究适合电力市场不同交易场景的区块链技术。为此,目前也有部分研究将电力交易与区块链技术相结合,研究了电力交易校核[13]、优化出清[14]等领域适用的区块链解决方案。但整体来看,该方面的研究还处于起步阶段,缺乏从区块链底层出发,面向电力市场交易自身需要的针对性改进研究成果。
为此,本文将研究面向电力交易分布式账本的改进共识算法问题。首先,将介绍区块链基本概念,并系统研究当前典型共识机制算法的自身特点。接着,从电力市场交易的需求着手,研究面向电力交易的共识机制改进方案,提出一种基于拜占庭容错算法(byzantine fault tolerance,BFT)的改进共识机制。最后,基于测试系统从吞吐量和通信开销两个维度对所提出的改进算法效率进行测试验证。
从数据的角度来看,区块链本质上是一种分布式共享账本。区块链基础架构模型可分为数据层、网络层、共识层、激励层、合约层和应用层[15-16]。共识层用于封装不同类型的共识算法,决定区块链以怎么样的机制来形成新的区块。
共识机制的根本目的在于解决区块链网络的节点信任问题。区块链设计中认为每个节点均存在数据被篡改的可能性,对各节点提出的区块数据申请,必须建立一套所有节点均能认可的判定机制,以决定该数据是否可靠。因此,某种程度来说,共识机制是区块链信息安全的核心。当前区块链共识机制设计一般遵循“少数服从多数”和“人人平等”的原则。“少数服从多数”并不完全指节点个数,也可以是计算能力、股权数或者其他的计算机可以比较的特征量。“人人平等”是当节点满足条件时,所有节点都有权优先提出共识结果、直接被其他节点认同后并最后有可能成为最终共识结果。
目前,典型的共识机制算法包括工作量证明算法(Proof of Work,PoW)、权益证明算法(Proof of Stake,PoS)、BFT算法[17]。下面将介绍其主要特点。
以比特币为代表的第一代数字货币大多采用PoW共识机制构建其共识层。本质上来说,PoW共识机制是一种自证机制,即需要各节点自我证明数据合法性,所使用的数学运算为哈希函数。其实施流程要点如下[18]:
(1)构造默克尔树。由各节点收集交易信息,并从中选择合法交易,构造默克尔树;
(2)确定出块者。PoW共识机制下,最先提出满足要求哈希值的节点获得出块权,成为出块者,该判定公式可表示为:
式中,Hash()为哈希函数,Version为版本号,prev_hash为前一区块的哈希值,Merkle_root为该区块的默克尔根,ntime为区块生成时间,nonce为各节点为争取获得出块权所确定的随机数,target为目标值。
(3)验证区块并更新。获得出块权的节点发布其哈希值和交易信息,若哈希值小于给定难度系数,同时所提供的交易信息符合合法性校核条件,则所发布的交易信息写入区块链末端并更新区块链;否则舍弃丢弃该信息,转入下一轮共识判定。
PoW共识机制作为最早采用的共识算法,具有较高的安全性,能够抵抗小于51%算力的双花攻击。但由于所有节点均参与出块权确定及验证,导致其耗电量较高,受限于出块时间等因素,其吞吐量较低。
为解决PoW共识机制耗电量高的问题,PoS共识算法被提出,并应用于黑币、Ethereum等区块链项目。该共识机制的核心思路在于在出块权确定环节,以币龄代替计算符合规定要求的nonce值,从而降低每个节点大量无实际意义的哈希函数计算[18]。基于以上思路,PoS共识机制中确定出块者所需要满足的条件可表示为:
式中,proofhash为由当前时间、权值修改器等共同确定的哈希值,target为给定目标值,coin_age为币龄。根据式(2)可以发现币龄值越大的节点,获得出块权概率越高。早期的PoS共识机制下,币龄为该节点已有货币数和所拥有的时间的乘积之和,可表示为:
式中,coinc、agec分别为节点所拥有的第c个货币和对应持有时间。
然而由于以上币值确定方式容易造成货币持有量越大的节点获得新货币概率越高,客观上阻碍了区块链的拓展。后期PoS共识机制往往从币龄指标方面进行改进,例如文献[19-20]提出以实际在线节点货币量代替币龄,以克服以上区块链拓展问题,同时有利于解决无危险攻击和长距离攻击等问题。
整体来说,由于改进了出块权确定方式,PoS共识机制耗电量显著下降,能够抵抗小于51%权益攻击,安全性较高,通过进一步改进计算流程,吞吐量指标也能得到显著提升,具有更强的使用性。
BFT共识机制是以拜占庭容错算法为核心构造而成的共识机制。当前应用较多的BFT共识机制包括实用拜占庭容错算法(practical byzantine fault tolerance,PBFT)、投机拜占庭容错(speculative byzantine fault tolerance,SBFT)和联邦拜占庭容错(federal byzantine fault tolerance,FBFT)等[21-22]。拜占庭容错算法的本质是一种投票制度,当大部分参与方认可一项提案时,该提案才能确认达成一致。在上述实现思路的基础上,以上共识算法的区别主要在投票组织方式上。
以PBFT为例,每一轮形成共识的过程被称为一个视图,每个视图中将确定一个主节点,其他节点称为备份节点,共计节点2f+1个[23-24]。如图2所示,交易行为产生后,共识过程如下:
(1)发布请求。由客户端项所有节点发布交易请求;
(2)计算区块。主节点负责对客户端提出的交易行为格式检查,并将符合要求的交易形成区块向所有备份节点发布;
(3)验证区块。各节点独立验证区块合法性,并将判定结果向其他所有节点发布;
(4)更新区块链。若某个节点收到其他2f个节点且反馈正确的信息,则据此更新区块链,并向客户端返回答复信息;
(5)答复。客户端接到符合判定条件数的答复信息后,认定该交易执行完毕。
与PBFT相比,SBFT共识算法应用Collector技术,设计了收集器,负责统计所有节点发布的验证结果,从而降低数据通信负担;FBFT共识算法则设计了信任节点列表和多轮验证机制,各备份节点独立验证过程中,直接忽略非信任节点列表的节点验证结果,并采用多轮判定方式,逐步提升判定限值,从而进一步提升吞吐量[25]。
以上三类BFT共识算法的差别主要体现在时间复杂度上,PBFT、SBFT、FBFT三个算法的时间复杂度依次为O(n2)、O(n)、O(n2),其中SBFT算法由于增加了收集器,降低了通信复杂性。
图1 PBFT执行过程Fig.1 Implementation process of PFBT
共识机制是区块链的核心,要求共识机制具有较高的执行效率和安全性,同时具有较低的能耗水平。表1中从能耗、安全性、成块时间、吞吐量四个方面对比了以上三类共识机制算法。整体来看,PoW、PoS共识算法能耗水平和计算效率均弱于BFT算法[26-27]。因此,拜占庭容错算法已成为当前应用最为广泛的共识算法。具体来看,能耗方面,拜占庭容错算法及其改进算法能耗水平最低,PoW共识算法能耗水平最高,PoS共识算法相对较低。安全性方面,PoW共识算法和PoS共识算法均需要51%以上的算例或币龄才能达成一致,但是若系统中存在某节点算力或币龄占据较大优势时,依然存在操纵共识结果的可能性,因此两种算法安全性优势并不显著。成块时间和吞吐量两项计算性能指标来看,拜占庭容错算法具有明显的优势,均由于PoW共识算法和PoS共识算法。
BFT共识算法均具有较高的执行效率和较低的能耗水平,适用于高频交易场景。更进一步比较,PBFT共识算法是SBFT、FBFT算法的基础,SBFT共识算法引入了收集器,大幅降低了通信复杂性,但对收集器节点的可靠性提出了较高要求,若收集器节点异常,可能影响整个区块链正常运行存储;FBFT共识算法则通过引入信任节点列表和多轮判定方式,实现了区块判定的并行,进一步提升了吞吐能力,但会造成大量日志存储于各节点,产生较重的存储负担[28]。
表1 共识机制对比分析Tab.1 Comparison of consensus mechanisms
电力交易是典型的高频交易,特别是电力现货市场环境中将开展不间断的连续交易,对共识机制的执行效率具有较高要求。同时,电力交易涉及大量市场主体及多类型交易模式,交易本身复杂度较高。以上特点决定了当利用区块链技术解决电力交易中数据存储问题时,共识算法既需要具备较高的执行效率,同时复杂度不宜过高。
根据上述需求分析,本文拟以PBFT共识算法为基础,充分吸收SBFT、FBFT共识算法在降低复杂度、提升处理效率方面的优点,构建一种改进PFBT共识算法,以满足电力交易分布式账本的实际需要。基于以上改进思路,本文拟从两个方面着手对PBFT共识算法进行改造:
(1)借鉴FBFT共识算法,制定备份节点信用分级机制,根据节点历史表现,确定其信用等级,进一步提升算法安全性。节点信用本质上是对各节点历史共识过程中贡献度的评价结果。历史共识过程中参与生成有效区块的次数越高,则其信用度越高。信用等级越高的节点在后续共识过程中判定权重越高,对共识结果的影响力越大。
(2)借鉴SBFT共识算法,将信用等级最高的备份节点作为主节点和收集器,降低算法复杂度。由于引入节点信用等级机制,将提升共识机制复杂度,可能造成吞吐量、成块时间等计算效率指标。通过将信用等级最高的备份节点作为主节点和收集器,能最大限度发挥不同节点的效用,充分利用闲置计算资源,从而降低复杂性,提高计算效率,实现安全性与计算效率的统一。
节点信用分级是改进共识机制的核心。根据节点生成有效区块的历史表现,由高到低将其划分为A、B、C、D四个级别,其转换关系如图2所示。整体来看,节点在共识过程中信用等级将随其生成有效区块的表现发生变化,原则上不会出现节点信用越级的问题,从而最大限度保证整个共识算法的稳定性。
具体来看,实施过程可简述如下:规定新加入节点的初始信用值为creNO,每参与生成一次有效区块,信用值增加1,反之若参与生成一次无效区块,则信用值减少3,以加重对无效区块的惩罚。根据人工经验,确定四个信用级别的限值,依次为creAD、creBD、creCD,即若某节点信用值cren高于creAD,则为A级节点;处于creAD、creBD之间,为B级节点;处于creBD、creCD之间,为C级节点;低于creCD,为D级节点。
为提升新加入节点参与共识的机会,建议规定初始信用值应对应B级信用等级,即满足:
图2 节点信用等级转换关系Fig.2 Conversion relationship of node credit rating
类似PBFT共识算法,改进算法也包括发布请求、计算区块、验证区块、更新区块链、答复等五个流程。与传统PBFT相比,主要区别在于:
(1)发布请求环节,客户端发布交易信息后,由上一轮共识的主节点、收集节点向A级信用节点发布随机数,确定本轮的主节点、收集节点;
(2)验证区块环节,收集节点在判断区块是否合法时,将统筹考虑各信用级别节点的反馈合法性。不同信用级别的节点反馈结果具有不同权重,以其综合评价结果判断结果合法性,该综合评价可表示为:
式中,Ju为综合评价结果,NN为备份节点数量,Cn为备份节点n的信用级别权重,规定A、B、C、D四类信用级别权重系数依次为4、3、2、1,Jun为该节点评价结果,若为有效区块则为1,否则取值为0。
(3)更新区块链环节,除了将有效区块更新上链外,还需要根据本轮判定结果对照本文所提出的节点信用分级方法,更新各节点信用值及信用等级。
将以上算法实施流程,与传统拜占庭容错算法实施流程相比,实际上仅增加了更新区块环节中节点信用分级的相关步骤,由于各节点能够并行更新其信用等级,从而保证整体计算效率最大化,降低计算耗时,提升共识算法效率。
类似SBFT公式算法,改进算法能够立即确认,不会产生分叉。仅在初始阶段增加了通信任务,增加量为O(2n),因此整体来看改进算法的复杂度与SBFT共识算法相当,均为O(n)级。而与PBFT公式算法相比,由于增加了收集器,避免了验证区块环节所有节点不加区分的统一发布广播,其通信复杂度大幅低于PBFT共识算法。
在Hyperledger Fabric V1.1的环境下建立仿真平台,验证所提出改进共识机制的有效性。所使用的测试系统软硬件配置情况如下:Inter Core i5-7300 CPU,8GB内存,Linux Ubuntu 16.04操作系统。
吞吐量是指单位时间内系统有效处理事务数量,是反映共识机制执行效率的关键指标。区块链应用中,一般采用每秒交易数(Transaction Persecond,TPS)来衡量吞吐量高低,可表示为:
式中,transcations为出块时间内系统处理交易数,Δt为出块时间。
系统设置100个节点,错误节点随机产生无效区块,但总错误节点数不超过20个。如图3所示的吞吐量测试结果中,PBFT、SBFT、FBFT三种传统共识算法吞吐量均较为稳定,整体来看PBFT与SBFT吞吐量水平基本相当,FBFT共识算法由于实现了并行处理,其吞吐量高于PBFT和SBFT两种算法。而本文提出的改进算法则具有随时间逐步提升的吞吐量特性,其初始吞吐量与PBFT、SBFT基本相同,原因在于初始条件下各节点均为B级信用节点,因此该改进算法在初始阶段基本等价于SBFT共识算法。随着时间延长,改进算法中信用分级机制的作用发挥日趋显著,信用级别长期稳定的节点将维持较高信用等级,对生效区块的贡献度更为显著,而错误节点信用级别逐步降低,对生效区块贡献率下降。最后,改进算法的吞吐量能够超过FBFT共识算法。
以上结果表明,本文所提出的改进共识机制能够有助于提升共识算法对电力市场高频交易的适应性,同时随着市场交易的执行,吞吐能力将持续增强,具有较强的场景适应性,有力支撑电力市场下复杂的交易环境变化。
图3 吞吐量测试结果Fig.3 Throughput test results
通信开销是指每一轮共识机制执行期间所必需的节点通信量,不仅影响共识机制执行复杂度,同时也能影响区块链的能耗水平。
如图4所示,通信开销指标四类共识算法差异显著。整体来看,通信开销与算法通信复杂度相关,改进算法和SBFT算法与系统节点数整体呈一次线性关系,而PBFT、FBFT算法则呈二次关系。当系统节点数增加时,PBFT、FBFT算法的通信开销将显著增加,不仅导致其通信复杂度上升,通信失败可能性增大,而且还将造成较高的能耗,导致区块链整体效率下降。
以上结果表明,本文所提出的共识算法具有通信开销增长稳定的特征,随节点数呈一次线性增长关系。以上特性对于电力交易具有显著的促进作用,体现在更适应市场主体快速增加,复杂交易场景下的多节点分布式账本需要,同时能够降低整体能耗,提升效益。
图4 通信开销测试结果Fig.4 Test results of communication overhead
根据电力交易实际特点,充分借鉴当前三类BFT共识算法优势特征,提出了一种面向电力交易分布式账本的改进共识算法。与传统BFT算法相比,该算法具有显著的优势。
(1)该算法具有较低的通信复杂度,其通信开销与系统节点呈一次线性关系,有效避免系统规模增大,节点增加对通信造成的负担;
(2)该算法具有较高的吞吐量效率,同时随执行时间增长,吞吐量将稳定增长,更适应电力市场高频交易,特别是现货市场的使用要求。