周雅怡,宋偉杰,黃曉英,凌華明,黃明磊
(廣東電網有限責任公司珠海供電局,廣東省 珠海市 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)該算法具有較高的吞吐量效率,同時隨執行時間增長,吞吐量將穩定增長,更適應電力市場高頻交易,特別是現貨市場的使用要求。