倪雪莉,馬卓,王群
(1.江蘇警官學院計算機信息與網絡安全系,江蘇南京 210031;2.江蘇省電子數據取證分析工程研究中心,江蘇南京 210031;3.南京信息工程大學計算機學院、網絡空間安全學院,江蘇 南京 210044)
區塊鏈技術因比特幣(BTC)在全球的持續升溫而引起廣泛關注,因其具有的去中心化、自治性、開放性、匿名性、防篡改等特征[1],不但成為構建各類加密數字貨幣的基石,而且應用已向著金融、物聯網、數字版權保護、醫療、政務等眾多領域快速拓展,并正在對傳統行業產生沖擊和變革。
比特幣創造了去中心化加密數字貨幣的神話,區塊鏈技術確保了比特幣在發行、應用、管理等各個環節的安全性。共識機制[2-3]保證了區塊鏈系統中數據的一致性和不可篡改性,比特幣系統利用基于哈希函數求解問題的工作量證明(PoW)[4]共識算法實現了交易的安全性。在基于PoW 共識的區塊鏈系統中,礦工(挖礦節點)以消耗算力解決特定哈希函數的求解問題來生成新區塊,此過程稱為挖礦。當某一礦工挖到一個新區塊時,為了獲取系統的獎勵(當前為6.25 BTC)和手續費(打包進該區塊的所有交易交納的手續費),需要將該區塊盡快廣播給其他礦工,當其他正在挖礦的礦工接收到一個新區塊時,立即對其合法性進行驗證,驗證通過后將其鏈接到正在挖礦的區塊后面,并在該區塊基礎上繼續挖下一個區塊。采用PoW 共識算法的挖礦機制,其挖礦難度隨網絡中算力的增加不斷上升,獨立礦工受算力限制挖礦成功的概率急劇下降[5]。在此情況下,為了獲得穩定的挖礦收益,原來獨立的礦工在相應協議的支持下有機組織起來,形成了共同參與挖礦的礦池。
礦池的出現打破了區塊鏈已有的完全去中心化機制,出現了物理上的局部中心化網絡或邏輯上的中心化擴展網絡。雖然代表礦池的中心化網絡對外仍然以單一節點(礦池節點)呈現,但礦池網絡內部不同節點之間需要在礦池網絡協議的協調下有序工作。遠遠超出單一礦工節點算力的礦池的出現破壞了傳統PoW 算法的公平性,進而影響了區塊鏈的安全性[6],攻擊者借助于區塊鏈固有運行機制對礦池環境的不適應性以及區塊鏈網絡存在的安全風險,攻擊礦池網絡甚至威脅整個區塊鏈系統的安全。
近年來,隨著區塊鏈技術的發展和應用領域的不斷拓展,學術界和工業界加快了區塊鏈關鍵技術的研究步伐和應用創新進程,但系統分析區塊鏈網絡尤其是礦池網絡的研究成果較少且不聚焦。在國外研究方面:文獻[7]提出一個用于分析礦池中獎勵共享的概念框架,該框架以礦池中報告的有效工作量證明(share)為中心,通過提出的絕對再分配和相對再分配兩個新的標準優化了礦池礦工的獎勵共享機制;文獻[8]針對PoW 礦池挖礦可能存在的運營成本超出挖礦回報的風險,利用破產理論和保險風險分擔方法對礦池風險進行研究,并提出幾個明確的風險計算公式;文獻[9]針對礦池對區塊鏈去中心化機制產生的負面影響,提出一個優化分析模型和可降低風險的計算工具。在國內研究方面:文獻[10]在對礦池結構進行分析的基礎上,提出一種衡量礦工計算效率的數值模型(MENM)以及基于該模型實現對礦池中單個礦工難度的性能優化機制(DDCT),以提高礦池效率;文獻[11]針對礦池算力和獎勵機制對礦工的影響,提出一個基于風險決策準則的礦池選擇算法;文獻[12]通過對基于PoW 共識機制礦池挖礦困境的博弈均衡分析,提出利用零行列式(ZD)來優化挖礦策略的具體算法,并通過仿真方法驗證了算法的有效性。通過對以上成果的梳理分析可以看出,隨著加密數字貨幣的迅猛發展,針對礦池挖礦的研究成為當前及未來的研究熱點和重點。現有研究主要基于礦池的經濟激勵機制,就挖礦中的收益分配提出更加優化的算法和策略,而系統分析礦池網絡體系結構和協議的成果較少。
礦池網絡是在區塊鏈對等(P2P)網絡基礎上通過礦池協議構建的一個實現眾多礦工聯合挖礦的分布式網絡,礦池網絡同時面臨傳統P2P 網絡和專門針對礦池網絡的安全威脅。本文的工作主要集中在:1)對區塊鏈P2P 網絡進行系統分析,這是區塊鏈網絡的核心;2)詳細討論了礦池網絡的組成及主要協議,這是分析礦池挖礦的關鍵;3)對礦池網絡中存在的典型安全攻擊方式進行探討,這是有效保障和系統掌握礦池挖礦技術的基礎。在此基礎上,對礦池網絡的未來發展進行展望。
圖1 給出了礦池網絡的研究架構,本節重點對區塊鏈P2P 網絡進行分析。在區塊鏈系統中,P2P網絡是實現不同節點之間通信的基礎設施,也是構建礦池網絡的基礎平臺。P2P 網絡是構建在TCP/IP 體系之上的覆蓋網絡[13],而礦池網絡是構建在P2P 網絡之上的擴展網絡,P2P 網絡是礦池網絡的基礎。

圖1 礦池網絡的研究架構Fig.1 Research architecture of mining pool network
在P2P 網絡中,根據通信需要每一個節點的身份可在客戶端與服務器之間進行動態轉換。結合P2P 網絡技術和應用發展,考慮到P2P 網絡中節點頻繁加入和退出這一特征,本節重點從網絡服務過程中的路由選擇策略設計出發,主要針對新節點加入后鄰居節點的發現機制,將P2P 網絡模型分為集中式、分布式、混合式、結構化4 種類型進行比較研究。
集中式模型是為了適應互聯網多媒體應用而較早出現的P2P 網絡模型,是一種中心化的網絡服務模型。集中式P2P 網絡模型如圖2(a)所示,信息索引服務器中保存著資源節點的索引信息(主要包括節點IP 地址、資源訪問端口、資源名稱等),用戶通過信息索引服務器查詢到所要訪問的資源地址后,再點對點傳輸資源內容。如圖2(b)所示,分布式模型是一種節點之間按需動態連接的隨機P2P 網絡模型,新節點加入后的鄰居發現是分布式模型需要重點解決的問題,以比特幣系統為例,新節點的發現主要采取3 種方式:1)采用DNS 查詢(由比特幣社區成員維護DNS 種子,如dnsseed.bluematt.me、seed.bitcoinstats.com 等;2)采用硬編碼方式將一些穩定節點作為種子提供給新節點;3)采用消息泛洪方式將要查詢的內容發送到整個網絡,直至找到所需要的內容為止,其中可采用生存時間(TTL)來限制消息在網絡中的傳播范圍。如圖2(c)所示,混合式模型是集中式和分布式模型的混合體,網絡中的節點由超級節點(SN)和普通節點組成,其中超級節點為新節點加入提供服務,新節點選擇一個能夠提供優質服務的超級節點作為其父節點。結構化模型也是一種分布式模型,但如圖2(b)所示的分布式模型中的節點組織具有隨機性,代表的是一種隨機網絡,而結構化模型中的所有節點是按照特定結構(如樹狀結構、環狀結構等)進行有序管理。分布式哈希表(DHT)[14]是分布式計算系統中的一種類型,主要用于創建各種點對點通信服務。DHT 作為一種分布式數據庫,用Key/Value 對來存儲數據,例如用Key 存放文件名,用Value 存放保存該文件的節點IP 地址,節點可以利用Key 在數據庫中查找對應的Value 值。DHT 的具體實現有多種方式,如圖2(d)所示的是基于環形DHT 的結構化模型,其中每個節點只知道與其相連的前后節點的信息。

圖2 P2P 網絡的4 類典型模型Fig.2 Four typical models of P2P networks
為了便于對比分析,表1 對4 類模型分別從中心化程度、優缺點、典型應用等方面進行比較。需要說明的是:表1 中的中心化程度主要針對節點之間的路由發現過程,而P2P 網絡中的數據傳輸仍然使用分布式環境中的去中心化機制。

表1 不同P2P 網絡模型的主要性能比較Table 1 Comparison of the main performance of different P2P network models
目前,區塊鏈的主流應用主要集中在公有鏈中的比特幣和以太坊以及聯盟鏈中的超級賬本,本節主要針對以上3 種典型應用場景,重點從節點發現、節點功能、信息交互等方面分析P2P 網絡的特征。
1.2.1 比特幣系統中的P2P 網絡
比特幣系統中的P2P 網絡構建在TCP 協議上,信息在節點之間采用明文方式傳輸。在新節點加入后,主要通過DNS 種子、硬編碼種子節點和消息泛洪3 種方式發現鄰居節點,一個全新的節點可以通過啟用DNS 種子查詢機制從DNS 服務器處獲得特定節點的信息,也可以在節點啟動時自動加載硬編碼種子節點信息。當節點接入后會將發現的鄰居節點地址信息以LevelDB 格式保存在本地peers.dat 數據庫中,當節點啟動時由address manager 命令載入。另外,當新節點加入網絡后,可以通過Net.AdvertiseLocal()命令以“推”的方式將自己的地址信息推送給其他節點,也可以通過Net.GetAddresses()命令以“拉”的方式從鄰居節點獲取地址以擴充自己的地址庫。
目前,出于IP 地址匱乏和安全需要,大部分機構的內部網絡使用私有IP 地址,在網絡出口處通過網絡地址轉換(NAT)服務實現私有IP 地址與公用IP地址之間的映射。比特幣系統使用了通用即插即用(UPnP)協議實現內外網節點之間的通信。
在區塊鏈系統中,每個P2P 網絡節點分別是承擔不同功能的一類特殊計算機,是實現區塊鏈分布式賬本技術、去中心化機制和保證區塊鏈系統安全性與可靠性的基礎。比特幣系統中的節點提供了錢包、礦工、完整區塊鏈、網絡路由4 類典型功能,其中所有P2P 網絡節點都具有網絡路由功能,另外,將同時擁有4 類功能的節點稱為比特幣核心。全節點擁有完整的區塊鏈賬本數據,能夠獨立校驗區塊鏈上的所有交易并實時更新數據。輕量級節點或簡易支付驗證(SPV)[25]節點只存儲了區塊鏈頭數據。比特幣核心錢包是全節點,其他大部分錢包都是輕量級節點。獨立礦工是存儲了完整區塊鏈數據的礦工。
1.2.2 以太坊系統中的P2P 網絡
以太坊的許多開發思想和實現思路來源于比特幣,其中以太坊系統中的P2P 網絡也是在借鑒了比特幣網絡基礎上的進一步優化和改進。出于安全考慮,以太坊系統中的P2P 網絡采用了安全加密方式。
以太坊是基于DHT 技術的結構化P2P 網絡,通過Kademlia(簡稱為Kad)協議來維護每個節點列表。具體而言,Kad 網絡使用DHT 來定位資源,通過共同維護的路由表實現在分布式環境中快速準確地定位目標節點。當使用UDP 協議定位到目標節點后,再通過TCP 協議傳輸數據,而且數據在傳輸過程中經過了加密處理。新節點使用類似于比特幣系統中的硬編碼種子方式接入P2P 網絡,在節點接入網絡后,會將發現的節點以LevelDB 格式保存在本地的地址數據庫中[26],在節點啟動時使用LoadSeedNodes()方式連同種子節點一并載入,形成較為完整的路由信息表[27]。但是,與比特幣系統不同的是,Kad 網絡的每個節點都擁有全網唯一的節點ID,所以以太坊中不存在節點之間用于廣播地址信息的泛洪機制。
根據2023 年7 月Ethernodes 網站統計,國內以太坊節點數僅有8 個,僅占全球的0.1%,如此少的節點增加了國內以太坊用戶區塊同步的時間。為了有效解決這一問題,以太坊中文技術社區EthFans 曾發起“星火節點計劃”,希望國內對以太坊項目感興趣的組織和個人能夠運行超級節點。EthFans 會將所有加入該計劃的超級節點列表信息生成一個staticnodes.json 格式的靜態節點文件,用戶節點只需要將該靜態節點文件加入個人錢包就可以連接到超級節點,加快區塊的同步速度。
與比特幣系統一樣,以太坊節點主要負責交易和區塊的接收與驗證、交易處理、挖礦、共識、路由等功能,主要分為全節點、輕節點和歸檔節點3 種類型。全節點擁有完整的區塊鏈賬本信息,具備對交易的有效性進行獨立驗證的能力。礦工必須是全節點。輕節點只需要存儲區塊頭數據,以最少的狀態信息來發送和傳遞交易數據。歸檔節點在全節點的基礎上,還存儲了每個區塊的高度值等狀態信息,以便于快速定位到某個指定的區塊。
1.2.3 超級賬本中的P2P 網絡
比特幣和以太坊是加密數字貨幣的典型代表,超級賬本的出現使區塊鏈技術開始應用于更廣泛的領域,尤其為各類企業級應用提供了新的解決方案。本節以Hyperledger Fabric 為例進行分析。Fabric 是一個支持準入機制的分布式賬本方案開發平臺,通過基于模塊化架構的共識算法、加密機制、智能合約、身份認證等可擴展組件,為不同復雜場景中的企業級應用提供了一個通用的底層基礎服務框架。
Fabric 使用Gossip 協議[28-29]實現P2P 網絡節點之間的通信,該P2P 網絡構建在HTTP/2 之上。Gossip 協議的設計靈感來自傳染病感染和社會謠言傳播機制,即在復雜的環境中通過消息的隨機傳播實現最終的一致性。Gossip 協議的主要特征為:在一個網絡域內,其中一個節點在接收到一條信息后,會將該信息發送給隨機選擇的k個節點,持續此過程,直至所有節點中的信息達成最終一致。此過程雖然顯得混亂,而且會產生大量冗余信息,但可以確保網絡域內各節點對某一時間點之前的信息在一定時間內達成最終的一致。在Fabric 中,Gossip 協議負責發現新節點、更新節點列表、去除離線節點等操作。由于Fabric 主要提供企業級服務,而企業級網絡中一般擁有一套較為規范的用戶管理系統,因此Gossip 協議為每個節點提供了一個配置文件來配置節點啟動后可聯系的其他節點信息,而沒有使用比特幣和以太坊中的種子節點和泛洪機制。
在Fabric 1.0 中,根據實現功能的不同,可以將節點主要分為排序(Orderer)、背書(Endorser)和記賬(Committer)節點,不同節點之間的操作流程示意圖如圖3所示(彩色效果見《計算機工程》官網HTML 版,下同),為描述方便,同類節點在圖中僅標出1個。

圖3 Fabric 中節點之間的信息交互流程Fig.3 Procedure of information interaction between nodes in a Fabric
1)背書請求。客戶端(Client)產生交易,并用自己的私鑰對交易進行簽名,然后將交易和對應的簽名信息按規定格式打包后發送給背書節點。
2)背書驗證。背書節點對交易信息的身份合法性和交易內容的正確性進行驗證,通過驗證后,背書節點用自己的私鑰對背書結果進行背書簽名,然后按照規定格式打包后返還給客戶端。
3)交易提交。客戶端在收到背書結果后驗證其正確性,驗證通過后對交易和背書結果進行簽名,然后打包發送給排序節點。
4)交易打包。排序節點驗證客戶端簽名的合法性,驗證通過后對交易進行排序(在交易量較大的Fabric 系統中,可采用Kafka[30]集群對交易進行排序),當滿足出塊策略(如達到出塊時間、交易數量達到了出塊要求等)時,則將交易打包進區塊,并對區塊進行簽名后發送給記賬節點。
5)節點記賬。記賬節點在接收到區塊數據后,對區塊以及區塊中的交易進行驗證,其中交易驗證主要驗證交易是否滿足背書策略以及交易的讀寫集版本是否正確等。在驗證通過后,執行交易內容,然后將區塊鏈接到本地區塊鏈。
在以上操作過程中,Gossip 協議負責除客戶端之外的其他節點之間的通信,實現從單一源節點到多個目標節點之間數據的高效分發,同時在后臺實現不同節點之間的數據同步,而且可以處理網絡中的拜占庭問題和網絡分區,并能夠適應節點頻繁加入和退出網絡的需要。
在P2P 網絡中,衡量網絡性能的主要指標體現在通信協議(TCP 或UDP)、是否采用加密機制、節點發現機制、節點之間的組網方式以及節點加入系統時的準入機制(是否需要進行身份驗證)等方面。為便于系統掌握P2P 網絡的運行機理及特點,表2 對3 種典型應用場景中P2P 網絡的主要性能進行綜合比較。

表2 3 種典型應用場景中的P2P 網絡主要性能比較Table 2 Comparison of the main P2P network performance in three typical application scenarios
礦池是一個由多個獨立礦工(或礦機)組成的專用網絡,目的是通過聯合單個礦工的算力共同參與挖礦過程[31-32]。為了進一步降低挖礦成本,提高挖礦效率,可以將一定數量的礦機集中在一起(如一個設備機房)進行管理,從而形成礦場。礦池是一個邏輯上的集合,組成礦池的礦機可以分布在不同的地理位置甚至是不同地區或國家,礦工只需要經申請注冊后就可以加入礦池,并在礦池網絡協議的協調下進行挖礦。礦場是一個物理上的集合,組成礦場的礦機需要集中在一個相對固定的地方進行統一管理。
隨著BTC、以太坊(ETH)、萊特幣(LTC)、泰達幣(USDT)等加密數字貨幣的全球影響力不斷增強,全網的算力也在快速提升,單一礦工在算法競爭中勝出的可能性逐漸減小。在此情況下,獨立礦工傾向于加入礦池,將眾多節點的算力進行合并運行,從而形成礦工聯盟,以抱團挖礦的形式減少收入差距并獲得相對穩定的挖礦收益。在此機制中,不論單個節點的算力大小,只要能夠加入礦池參與共同挖礦,都可以根據對礦池資源的整體貢獻度來獲得收益。以比特幣系統為例,目前主要的礦池有BTC.com、Poolin、AntPool、F2Pool 等。
區塊鏈系統中的挖礦是指節點根據共識算法生成區塊的過程,凡是參與挖礦的節點都稱為礦工。在基于算力競爭的區塊鏈系統中,超強的全網算力競爭有限的區塊記賬權,致使單個設備或有限的算力在競爭中獲得記賬獎勵的機會微乎其微。以比特幣系統為例,系統每10 min 生成1 個區塊,成功挖出該區塊的礦工將獲得一定數額的比特幣(當前為6.25 BTC)獎勵,礦工獲得獎勵的概率與設備算力的大小成正比。在此情況下,當算力相差不大的眾多礦工競爭數量極其有限的區塊記賬權時,成功概率幾乎接近于0。在眾多礦工聯合形成礦池后,會在礦池中確定一位礦池管理員(礦池管理員會收取一定比例的手續費),在挖到區塊后,首先將出塊獎勵保存于代表礦池擁有者的比特幣錢包,然后由該礦池管理員負責對所獲得的獎勵根據貢獻度進行再次分配。在此過程中,每個礦工無論是否挖出了有效區塊,都會得到相應的獎勵,實現挖礦過程的利益均沾。在礦池挖礦過程中,礦池管理員會向每個參與挖礦的礦池礦工下發一個難度值低于全網難度值的工作量,礦工在求得該share 后提交給礦池管理員,再由礦池管理員驗證該share 是否滿足全網難度值證明,因為滿足低難度值的share 有可能滿足全網難度值證明。在此過程中,當礦工提交的低難度值證明share 不符合全網難度值證明要求時,其結果對礦池挖礦是沒有意義的,只能作為礦池管理員評估其工作量的依據。
礦池網絡是利用相關協議和管理方式構建在區塊鏈上的分布式系統,基于功能實現,礦池網絡主要由位于中心節點的礦池服務器和分布在礦池服務器周邊的眾多礦池礦工組成。礦池服務器是整個礦池網絡的核心,一方面負責與礦池礦工聯系進行聯合挖礦,另一方面負責與礦池網絡之外的其他區塊鏈節點進行通信,共享挖礦信息,參與挖礦競爭。例如,當礦池挖出一個區塊后,需要通過礦池服務器盡快向礦池網絡之外的全網其他節點進行廣播,以便獲得區塊的記賬權進而獲得系統的獎勵。在礦池網絡中,礦池礦工和礦池服務器之間的通信并沒有使用區塊鏈系統(如比特幣、以太坊等)中的P2P 網絡協議,而是使用專門開發的礦池網絡協議。但是,作為全節點的礦池服務器在與區塊鏈系統中的其他節點(如獨立礦工、其他礦池服務器等)進行通信時使用通用的區塊鏈P2P 網絡協議或專門用于加快區塊在不同礦工或礦池服務器之間傳播的比特幣中繼網絡[33]。礦池網絡示意圖如圖4 所示。

圖4 區塊鏈礦池網絡示意圖Fig.4 Schematic diagram of blockchain mining pool network
礦池通過專有的礦池網絡協議來協調礦工之間的操作,動態調用并分配各礦工提供的資源,礦工在建立礦池賬號后將利用該賬號將礦機連接到礦池服務器。當礦機在線運行挖礦程序時,需要實時保持與礦池服務器之間的連接以及與其他礦工之間操作上的同步。常用的礦池協議包括GetWork(簡稱為GWK)協議、GetBlockTemplate(簡稱為GBT)協議和Stratum(簡稱為STM)協議。
2.2.1 GetWork 協議
挖礦是一個算法運算過程,對于PoW 共識算法來說是反復執行哈希函數并檢測執行結果的過程。區塊鏈系統中的每一個區塊由區塊頭和區塊體兩部分組成,其中區塊體中打包著一筆筆交易,再將由按序排列的交易最后生成的哈希MerkleRoot 保存到區塊頭指定的字段,比特幣系統的區塊頭除MerleRoot 外,還包括Version、PrevBlock、Time、Bits、Nonce 共6 個字段,每個字段的具體定義如表3 所示。

表3 比特幣系統的區塊頭組成Table 3 Block header composition of the Bitcoin system
在比特幣區塊頭的6 個字段中,Version、PrevBlcok 和Bits 字段相對固定,礦工可以自由調整的3 個字段分別是MerkleRoot、Time 和Nonce,每一次挖礦的實質就是對區塊頭的80 Byte 連接進行2 次Hash 256 運算,其值如果小于難度對應的目標值,將挖出新區塊。
CPU 挖礦利用客戶端遠程過程調用(RPC)接口Setgenerate 控制挖礦。礦工首先初始化區塊頭的各字段值,然后計算Hash 值并驗證結果,如不符合條件則Nonce 自增,接著再計算和驗證,如此重復。在進行CPU 挖礦時,Nonce 提供的4 Byte 搜索空間完全能夠滿足遍歷要求。在GPU 運算SHA 256 雙哈希時,僅調整Nonce 值無法滿足PoW 算法的出塊時間要求,因此需要對Time 和Nonce 值進行交替調整。
GPU 挖礦使用GetWork 協議[34],通過該協議實現了挖礦程序與客戶端的分離,即數據與計算之間相互分開。GetWork 協議的核心思想是:由節點構造區塊,然后將區塊頭數據交給挖礦程序,由挖礦程序遍歷Nonce 進行挖礦,在找到符合難度要求的Nonce 值后交給節點進行驗證,節點提取Nonce 和Time 值對區塊進行驗證,驗證通過后立即向全網廣播,盡快獲得該區塊的記賬權,進而獲得系統獎勵。在一次遍歷結束后,調用GetWork 協議,節點重新構造新區塊,并重復上述過程。可以看出,在使用GetWork 協議組成的礦池中,礦工只擁有新構造區塊的80 Byte 的頭信息,而沒有完整的區塊鏈賬本數據和待確認的交易數據,所以Version、PrevBlock、Bits、MerkleRoot 這4 個字段必須由客戶端節點提供,挖礦程序主要是遞增遍歷Nonce,需要時再調整Time值。
由于礦機需要頻繁調整RPC 接口,與當前礦機快速提升的挖礦速度之間產生較大反差,因此比特幣、萊特幣等系統節點已經用更高效的GetBlockTemplate 協議來替代GetWork 協議。
2.2.2 GetBlockTemplate 協議
GetBlockTemplate[35]是由比特幣社區于2012 年開發的用于取代GetWork 協議的去中心化挖礦協議。最大特點是讓礦工自己構造區塊,因為在將交易打包進區塊時,礦工可以構建Coinbase 交易(礦工的挖礦收入,包括系統獎勵和區塊中所有交易支付的交易費,都存放在該交易中),2~100 Byte 的Coinbase 字段提供了充足的隨機數擴展空間,克服了4 Byte Nonce 空間在隨機數遍歷時存在的空間限制。
與GetWork 協議相比,GBT 協議主要從以下4 個方面進行了優化:1)將區塊構造操作轉移給了礦工,同時礦工可以調整Coinbase 交易來修改打包進區塊的交易,這使得區塊生成實現了去中心化,從而提高了比特幣網絡的安全性;2)礦池可以根據需要制定挖礦規則,提高了系統的可擴展性;3)極大減少了區塊創建過程中產生的網絡流量負載,同時也減輕了礦池服務器的工作壓力;4)掌握著區塊鏈上與挖礦有關的所有信息,礦工可以獨立選擇需要打包進區塊的交易,提高了整個系統運行過程的透明性。GBT 協議雖然提供了能夠滿足算法需求的搜索空間,但正常的一次協議調用需要把已打包進區塊的所有交易數據都交給礦工,在每一次操作過程中節點都會返回約1.5 MB 的數據,因此帶來了過大的數據負載。
2.2.3 Stratum 協議
為了解決GBT 協議在應用中暴露出的礦工與礦池之間信息交互過于頻繁且數據量大、礦機內存消耗過大、礦工無法獲取到區塊鏈系統最新的區塊變化等問題,提出了Stratum 協議[36]。
Stratum 協議綜合了區塊鏈技術的發展和礦池網絡的優勢,形成了目前基于區塊鏈的加密數字貨幣系統使用的事實上的挖礦協議,使礦工能夠可靠、高效地從礦池服務器獲取任務[37]。利用Stratum 協議可以實現礦工與礦池之間任務的動態分配,對于礦池來說,可以將新任務以強制方式分配給礦工并使礦工無條件執行,礦工也可以主動向礦池申請新任務。提供可按需擴展的充足搜索空間是礦池挖礦需要解決的核心問題。GetWork 協議利用8 Byte 的Nonce 和Time 字段提供搜索空間,但該空間早已不能滿足新型礦池挖礦的要求。GBT 協議為礦工自由構造Coinbase 交易提供了巨大的搜索空間,但需要將形成區塊的所有交易數據全部交給礦工,在增加了礦工節點存儲空間的同時,也對礦池網絡帶寬提出了更高要求。Stratum 協議通過改進Coinbase 交易的構造策略,在給礦工提供足夠搜索空間的同時,還能大幅度減少礦工與礦池之間交互時所需要傳輸的信息量,解決了GetWork 和GBT 協議存在的不足。
不同的Coinbase 交易形成不同的MerkleRoot 哈希值,進而提供更大的算法遍歷空間。在Stratum 協議中,礦工在構造Coinbase 交易時,其中ScriptSig 字段中的一些信息可以讓礦工自己填充,而且由Coinbase 交易生成MerkleRoot 時無需提供全部交易數據。如圖5 所示,假設區塊中包含15 筆用戶交易以及相應的Coinbase 交易,礦池首先根據區塊構建機制對每一筆交易進行處理,然后只需要將其中的4 個運算得到的Hash 值(圖中虛線框中的4 個節點)以及構造Coinbase 交易需要的信息交給礦工。在此基礎上,礦工就可以根據Merkle 樹的生成規則自行生成MerkleRoot 值[38]。基于此方法,當區塊中包含N筆交易時,礦池只需要將lbN個Hash 值發送給礦工,大幅降低了礦工與礦池之間的數據交互量。

圖5 Merkle 樹及MerkleRoot 的生成過程Fig.5 Generation process of Merkle tree and MerkleRoot
Stratum 協議嚴格定義了礦工與礦池之間通信的接口規范、數據結構和交互邏輯,在以太坊礦池網絡中,有時礦池軟件與錢包安裝在一起合稱為礦池,礦工與礦池軟件之間的通信也采用Stratum 協議。Stratum 協議采用輕量級的JSON 數據格式,以提高數據處理效率。以太坊礦池挖礦的基本操作流程(如圖6 所示)具體如下:

圖6 以太坊礦池挖礦的基本操作流程Fig.6 Basic operation process of Ethereum mining pool mining
1)身份注冊。啟動挖礦程序,使用mining.subscribe 方法連接到礦池;礦池使用mining.notify 消息返回訂閱號ID、指定的初始難度、Extranonce(用于增加搜索空間)等信息,礦工將這些信息保存在本地,在整個挖礦過程中都要用到這些數據。需要說明的是:礦池允許利用同一個注冊賬號添加多個不同名字的礦工進行同時挖礦。
2)身份認證與授權。礦工使用mining.authorize方法向礦池進行身份認證和授權,只有通過認證的合法礦工,礦池才會對其指配挖礦任務。
3)任務指配。礦池通過mining.notify 方法向礦工指配任務,其中主要包括任務號ID(每一次任務都擁有唯一的標識符)、交易列表的壓縮表示方式(圖5中虛線框中4 個節點代表的Hash 值)、Version、Time和Bits 等。
4)挖礦。礦工在接收到礦池下發的挖礦任務后,開始構造Coinbase 交易、生成MerkleRoot 和構建區塊頭,開始挖礦過程。
5)提交和確認結果。礦工在尋找到小于目標值(由礦池下發的難度值產生)的share 時,以mining.submit 方法將其上交給礦池,其中主要包括礦工名字、任務號ID、Extranonce、Time 和Nonce。當礦池接收到以上5 個字段的信息后,首先根據任務號ID 找到之前指配的任務,然后重構區塊,再驗證share 難度,之后進一步檢測該share 是否符合全網難度。當檢測通過后,礦池通過server.result 方法返回true,說明share 提交成功。
6)調整難度。礦池會記錄每個礦工提交的share,并根據每次成功提交的share 重新調整下一次挖礦時使用的難度,并隨時通過mining.set_difficulty方法通知給礦工。
除前文介紹的3 種典型礦池網絡協議外,隨著近年來全球礦池挖礦方式的不斷升溫,還出現了一些新的協議、技術和模式,如混合挖礦[38]。域名幣[39]較早使用混合挖礦形式,通過掛靠方式將比特幣作為父鏈,域名幣作為輔鏈,使用AuxPoW[38]協議進行挖礦。礦工在挖得比特幣的同時可以挖到域名幣。
表4 針對協議的算法實現及功能特點,分別從所涉及的字段、遍歷空間大小、區塊生成過程的特點、協議的主要功能特征、協議的主要應用場景、協議的網絡安全性、協議實現過程的網絡負載大小等方面對3 類典型礦池協議進行對比分析。

表4 3 種典型礦池協議的性能比較Table 4 Performance comparison of three typical mining pool protocols
目前,礦池已經成為PoW 共識挖礦算力的主要來源,如果礦池網絡自身存在安全風險或攻擊者利用礦池作惡,將會對區塊鏈系統的安全產生嚴重威脅[40-41]。本節重點對礦池網絡中的典型攻擊方式進行分析,并提出必要的防范方法。
分叉技術是軟件開發過程中從已有項目的基礎上快速產生另一項目的常見方法,在區塊鏈系統中指主鏈從某一區塊開始產生了2 條或2 條以上支鏈的過程。以比特幣系統為例,將分叉分為自然分叉和人為分叉兩種類型[42]。自然分叉是臨時產生的分叉,系統最終只會保留算力最大的一條鏈作為主鏈。人為分叉是在已有區塊鏈的基礎上產生另一條同源區塊鏈的過程,兩條分叉鏈之間即可以相互兼容(稱為“軟分叉”),也可以互不兼容(稱為“硬分叉”)。
自私挖礦攻擊[6,43-44]是指在不影響區塊鏈網絡正常運行的前提下,利用區塊鏈分叉原理,攻擊者通過蓄意制造分叉并惡意設置挖礦策略,從而在區塊鏈網絡中發起不公平競爭的一種挖礦行為。在比特幣系統中,誠實礦工在挖到一個區塊后會盡快將其廣播出去以得到網絡中其他礦工的確認。同時,所有礦工堅持最長鏈原則,即在區塊鏈出現分叉時會將最長的一條鏈作為主鏈,而且存在相同高度的分叉鏈時,誠實礦工會將最先形成的一條鏈作為主鏈。基于以上挖礦規則,自私挖礦中的攻擊者在成功挖到一個區塊后并不一定會立即廣播出去,而是有策略地選擇后續的操作,以獲得高出正常挖礦的收益。自私挖礦存在多種策略,其中典型的策略是當攻擊者挖出一個區塊時并不立即廣播,而是繼續在該區塊的基礎上挖下一個區塊,當攻擊者監測到本地區塊高度大于誠實礦工的區塊高度時,立即將自己的多個連續區塊廣播出去,從而在誠實礦工節點上產生分叉,根據最長鏈原則,攻擊者在挖礦競爭中搶先獲得記賬權,從而獲得系統獎勵。從長遠來看,隨著PoW 挖礦難度的不斷增大,礦池會借助算力上的絕對優勢實施自私挖礦攻擊,以破壞挖礦的公平性,同時迫使一些原本誠實的礦工在利益驅動下轉向惡意礦池[45],對區塊鏈網絡安全帶來威脅。
自私挖礦策略是自私挖礦攻擊的核心。在自私挖礦策略[6]的基礎上,SAPIRSHTEIN 等[46]拓展了自私挖礦的底層模型,并優化了攻擊者策略,但部分策略的安全性較弱。NAYAK 等[44]通過有效擴展挖掘策略空間為礦工賺取更多的收益,同時還將自私挖礦攻擊與網絡層的日食攻擊[47]相結合來進一步擴大收益,該方法雖然實現較為靈活,但難度較大、效率較低。阮娜等[48]在對單一攻擊者的自私挖礦策略進一步優化的基礎上,提出包含單一攻擊者與多攻擊者的兩階段自私挖礦攻擊模型,該方法主要集中于對內部攻擊者的研究。LEE 等[49]在分析了礦池網絡運行機制的基礎上,提出通過在礦池與礦工之間共享挖礦信息來應對自私挖礦的策略,該方法在單一礦池中的應用效果較好,但在多礦池聯合挖礦環境中不太理想。
針對區塊鏈自私挖礦攻擊,最有效的防范方法是通過改變PoW 機制的挖礦策略來增大礦池自私挖礦的成本,降低自私挖礦的收益。一種方法是當誠實礦工收到一個具有相同高度的分叉鏈時,不是像PoW 機制中默認的那樣將最先生成的鏈作為主鏈,而是隨機選取其中一條鏈作為主鏈,并繼續在該主鏈上挖礦;另一種方法是誠實礦工(尤其是長期在線的誠實礦工)每次只接收單一區塊,而拒絕同時接收分叉鏈中的多個區塊。另外,近年來快速發展的人工智能技術也開始被應用到防御自私挖礦中[50]。
在礦池挖礦中,礦池的功能是通過礦池管理員給礦池礦工分配一定難度的計算任務,并根據礦工提交的符合計算要求的解來統計每個礦工的工作量并分配獎勵。在此過程中,如何有效設置經濟激勵機制對吸引礦工加入礦池挖礦非常重要,與此同時,也為作惡者借助策略對存在的漏洞發起攻擊提供了條件。跳池攻擊[51]是指攻擊者為了追求高額收益,不是一直留在一個礦池中進行挖礦,而是根據不同礦池的當前收益切換到具有更高收益的礦池進行挖礦的一種攻擊現象。跳池攻擊直接利用了礦池挖礦激勵機制存在的漏洞,尤其是借助不同礦池獎勵分配模式的特點,追求最大的收益,而忽視礦池運行的穩定性。對于任何一個礦池,出于安全性要求,需要加入礦池的礦工是忠誠的,即希望該礦工一直留在礦池中挖礦,而跳池攻擊損害了忠誠礦工的利益,破壞了礦池運行的穩定性。
目前,主要的礦池挖礦獎勵分配模式包括Proportional、PPS、PPLNS、Slush、Geometric、Triple mining、P2Pool、Luke-Jr 等類型[52],表5 描述了不同獎勵分配模式的特點和主要特征。以Proportional模式為例,如果礦池長時間沒有挖到區塊,那么礦池中礦工提交的share 將逐漸貶值,即算力越來越不值錢。這時,一些礦工將會暫時離開當前礦池,選擇加入一個剛剛挖出區塊的礦池進行挖礦,如果一段時間后沒有拿到獎勵,礦工則可能會返回原有礦池繼續挖礦。攻擊者會給每個礦池的挖礦時間設置一個閾值,當礦工在一個礦池中的挖礦時間達到閾值時將跳到另一個剛剛挖出區塊而且挖礦周期短的礦池進行挖礦[53]。可以看出,攻擊者為了追求更高的收益,特別會選擇在Proportional 和Slush 模式下實施跳池攻擊。

表5 主要礦池挖礦獎勵分配模式比較Table 5 Comparison of the main distribution modes of mining pool mining rewards
跳池攻擊不僅出現在礦池挖礦中,而且出現在跨鏈操作中。同一礦工在不同的時間和不同的區塊鏈上挖礦會存在不同的收益,因此為了獲得更大的收益,部分礦工會選擇暫時離開原有的礦池,而加入收益率高的分叉鏈上的礦池進行挖礦。例如,當比特幣系統分叉為比特幣和比特幣現金(BCC)后,形成了兩個獎勵分配模式和代幣發行機制不同的同源區塊鏈,曾經一段時間部分礦工開始從BTC 遷移到BCC 挖礦,后來由于BCC 中算力的大量涌入,導致在下一個難度調整時會提高難度值,因此礦工又紛紛遷回BTC 礦池。
針對跳池攻擊,目前有效的防范方法主要有:1)選擇更優的獎勵分配模式,例如,可選擇PPLNS、Geometric、Luke-Jr 等模式,防止攻擊者為了追求收益的最大化實施跳池攻擊;2)優化礦池獎勵分配模式,例如,文獻[54]針對PPS 和PPLNS 模式對礦池帶來的安全風險,設計一種新的基于零行列式(ZD)理論的礦池挖礦策略,該策略具有免費、適用性廣和公平等特性,需要結合礦池挖礦技術的發展,對相關算法進行有針對性的研究;3)選擇符合礦工預期的礦池,為了使礦工在加入礦池時能夠對預期收益進行評估,防止出現類似跳池攻擊的現象,目前已出現了類似Multipool[55-56]的礦池,該類型礦池會將礦工推薦到當前收益最大的礦池進行挖礦。
在礦池挖礦過程中的扣塊(BWH)攻擊[57-58]是指攻擊者在挖到share 時,如果該share 符合出塊要求則將其保留,否則提交給礦池管理員,以此降低礦池和礦池中誠實礦工的收益,但當礦池中的誠實礦工挖到區塊時,攻擊者仍會根據自己提交的share(無價值的share)來分得獎勵。由此可以看出,扣塊攻擊在未做出任何貢獻的情況下分攤了誠實礦工應獲得的收益,并使得礦池利益嚴重受損。
另外,扣塊攻擊經常被惡意攻擊者用于實現不同礦池之間的惡意競爭。作惡礦池將自身的部分算力(礦工)注入被攻擊對手礦池進行扣塊攻擊,以降低對手算力的價值,并從對手礦池中分得本應屬于礦池和礦工的一定數量的收益。不過,礦池之間的扣塊攻擊也為攻擊者所在的礦池帶來了一定的損失和風險,被注入到對手礦池的算力削弱了本礦池的算力,也損失了由這部分算力帶來的直接收益。因此,攻擊者會科學計算被注入對手礦池的算力比例,在盡可能維護自身利益的前提下,有效降低對手的收益,并迫使對手礦池中的礦工轉入其他礦池進行挖礦。
防范扣塊攻擊的方法主要是改變收益的分配模式(如采用PPLNS 模式)。另外,針對扣塊攻擊,文獻[59]在研究了比特幣中扣塊攻擊的基礎上,分析了比特幣中防范針對主要獎勵分配模式的扣塊攻擊方法,但該方法僅適用于比特幣系統。文獻[60]認為檢測扣塊攻擊具有挑戰性,只有通過與誠實礦工尋求利益的一致性才是最佳選擇,并證明了雙重收益方案的可行性,但該方法的有效性尚待在不同類型的礦池網絡中進行驗證。文獻[61]在分析扣塊攻擊收益特點的基礎上,提出一種稱為“特殊獎勵”的機制,旨在給予實際挖出區塊的礦工額外的獎勵,而對于從未向礦池提供有效區塊的礦工降低獎勵分配,以此來防御扣塊攻擊行為。該方法需要結合具體的礦池獎勵分配模式,在具體實現過程中進行有針對性的策略設計。
區塊是由合法交易打包生成的數據單位,一筆交易只有打包進區塊后才能被最后確認。在區塊中的第一筆交易(Coinbase 交易)用于存放挖出該區塊后系統給予的獎勵以及打包進區塊的其他有效交易交納的所有手續費。空塊攻擊[62]是指攻擊者通過構造只包含Coinbase 交易的空區塊,拒絕對有效交易打包,導致大量交易由于未能打包進區塊而無法得到確認的攻擊方式。區塊鏈系統的設計目標是實現對交易的打包確認,交易是區塊鏈系統的最小數據單位,也是實現價值生成與轉移以及信息交換的核心,然而如果一個區塊鏈系統中的礦工只挖空塊而不打包用戶交易,區塊鏈系統也將失去其應用價值。當區塊鏈系統中存在大量空塊時,相當于對系統實施DDoS 攻擊。
由于挖空塊相對容易,因此在礦池中作惡者很容易實施空塊攻擊。首先,從區塊生成算法來看,空塊屬于合法區塊;其次,空塊具有快速傳播優勢。一個區塊一般由80 Byte 的區塊頭和以MB 為單位的區塊體組成,由于空塊大小主要由區塊頭決定,在空塊確認時不存在對用戶交易進行驗證的過程,因此空塊的傳輸速度很快,在傳播時間上具有競爭優勢;最后,空塊避免了因存在重復交易而被作為非法區塊的現象發生。正常的區塊只有經礦工驗證通過后才能鏈接到主鏈上,區塊合法的前提是該區塊中包含的交易合法,而且本區塊中的交易不能出現在前面的區塊中,否則存在重復交易的區塊為非法區塊。由于空塊中不存在用戶交易,因此不存在交易重復問題。
針對空塊攻擊的主要防范方法是限制空塊的生成,對于頻繁生成空塊的節點限制其挖礦或進行必要的經濟懲罰。另外,建立礦工收益與打包進區塊的交易數量之間的關聯關系,單個區塊包含的交易越多,礦工獲得的收益也越大。從礦工的角度來看,避免挖空塊的前提是盡快或提前得到當前區塊中包含的交易。目前,在BTC 和BCH 礦池中,多采用緊湊型區塊[63]或瘦區塊[64]技術,在礦池中提前保存有需要進行驗證的區塊中的交易,避免在需要對交易進行驗證時從其他節點下載完整的區塊數據,提高了交易驗證效率。然而,該方法的實現對礦機中用戶交易的存儲和管理也提出了更高的要求,在一定程度上影響了礦池的效率。
為了便于理解,表6 從攻擊的實現原理、主要攻擊目標、攻擊難度等方面對4 類典型的針對礦池網絡的攻擊方式進行對比分析。

表6 典型的礦池網絡攻擊方式對比分析Table 6 Comparative analysis of typical mining pool network attack modes
區塊鏈在繼承了傳統P2P 網絡的基礎上,結合自身要求進行了功能擴寬,其中礦池網絡就是區塊鏈挖礦發展的產物。
1)區塊鏈P2P 網絡研究是基礎。P2P 網絡是建立在TCP/IP 基礎上的一種具有特定應用功能的覆蓋網絡,礦池網絡是基于區塊鏈P2P 網絡的擴展網絡,區塊鏈P2P 網絡是研究礦池網絡的基礎。對于區塊鏈P2P 網絡的研究主要集中于2 個方面:
(1)P2P 網絡自身技術,重點對網絡信任模型、覆蓋網絡的拓撲一致性與效率、資源定位與搜索、網絡抖動、網絡容錯性等方面進行研究。
(2)P2P 網絡與區塊鏈技術的結合,重點從比特幣、以太坊、超級賬本等典型的區塊鏈應用場景出發,對涉及的核心技術進行針對性的研究,例如:針對比特幣網絡中的交易模式分析,可充分利用圖神經網絡、圖論等理論加強對比特幣系統交易網絡的可視化模型研究;針對以太坊中的結構化網絡特點,重點加強DHT 及相關技術在地址管理和路由算法中的應用研究;針對超級賬本技術,重點對超級節點選擇策略、用戶身份認證技術(尤其是可控匿名認證)、隱私保護等方面進行深入研究。
2)礦池網絡技術研究是關鍵。礦池網絡是在區塊鏈技術挖礦過程中礦工為了追求更大收益而形成的一個邏輯上的網絡,有關礦池網絡的研究重點集中在以下3 個方面:
(1)礦池網絡協議。網絡功能的實現依賴于協議,協議的研究仍然是礦池網絡研究的重點,一方面需要結合礦池挖礦技術和管理的需要,對應用中的礦池網絡協議進行進一步優化,同時加強對協議漏洞,尤其是安全漏洞的挖掘、分析和修復,防止攻擊者利用漏洞實施對礦池網絡的攻擊,另一方面根據新的挖礦模式的出現開發新的礦池網絡協議。
(2)對礦池網絡與區塊鏈P2P 網絡之間的運行機制進行進一步優化,礦池網絡具有相對的獨立性,從整個挖礦過程來看每一個礦池相當于一個挖礦節點,需要與外界頻繁交換挖礦信息,這就涉及礦池網絡與區塊鏈P2P 網絡之間的協調,需要進一步優化網絡邊界性能,提升信息交換效率。
(3)優化礦池利益分配方式,開發符合新型挖礦要求的礦池利益分配策略,礦池挖礦是一種典型的趨利行為,礦池礦工為了追求更大的收益,礦池管理員力求收取更多的挖礦手續費。為此,礦池中不同利益方如何建立有效的利益分配關系不僅關系到礦工參與礦池挖礦的積極性,更關系到礦池的發展,主要涉及礦池挖礦獎勵分配策略的設計與優化,需要針對具體礦池,在Proportional、PPS、PPLNS 等分配模式的基礎上,綜合礦池發展定位、對應虛擬幣幣種的影響力、共識機制等方面的因素,科學開發和運用礦池挖礦收益分配策略。
3)礦池網絡安全研究是保障。目前,大部分礦池都屬于開放礦池,用戶只需要接入互聯網就可以通過注冊加入礦池,并通過貢獻有效工作量證明來獲得相應的收益。礦池網絡的開放性不僅容易遭受傳統網絡中的DDoS、協議分析、端口掃描等攻擊,而且還會受到自私挖礦、扣塊、跳池、空塊等專門針對礦池網絡的安全威脅,針對礦池網絡的安全研究變得更加復雜。為此,針對礦池網絡安全的研究,仍然需要在借鑒互聯網安全技術的基礎上,結合區塊鏈技術特點和礦池網絡運行機制進行創新。例如,針對扣塊攻擊難以定位具體攻擊者這一問題,可以采用博弈理論來分析和設定挖礦規則,使攻擊者難以獲得預期的作惡收益。
從技術實現角度看,基于區塊鏈技術的各類虛擬幣之間的交易實質是通過技術手段(如不同虛擬幣之間的跨鏈交易)來改變虛擬幣的控制權。由于虛擬幣繼承了區塊鏈技術的去中心化、匿名性等特征,為其流通與應用監管帶來了挑戰,已成為犯罪分子逃避監管及實施各類犯罪活動的工具。另外,虛擬幣挖礦行為占用了大量網絡帶寬,浪費了大量社會資源,亟待對其進行有效監管。例如,通過監測發現,2021 年僅江蘇省進行虛擬幣挖礦的礦池出口流量就達到1.377 Gb/s,參與挖礦的互聯網主機IP 地址數量達到了4 502 個,消耗算力超過10 PH/s,每天耗能達到2.6×105kWh。在此情況下,加強對礦池挖礦行為的監管和整治勢在必行,除出臺相關的法律法規外,加強技術監管仍然是根本。下一步需要立足礦池網絡實現原理,通過流量監測和協議分析等技術,識別互聯網中的礦池流量,進而實現對挖礦流量及礦工主機的溯源與監管,如何將目前發展中的零信任網絡、深度學習等技術應用到礦池網絡監管是一個重要的研究方向。
綜上,針對礦池網絡技術的演進和安全防范的研究,主要集中于以下4 個方面:1)礦池性能的優化以及礦池運行的穩定性;2)礦場的科學部署和礦池網絡的科學設計;3)隨著礦機技術和工藝的不斷提升,如何更加有效地提升和管理礦池的算力并降低功耗;4)重點從安全漏洞研究入手,加強礦池網絡協議和運行機制的安全研究等。
隨著因虛擬幣興起所帶來的礦池挖礦產業的快速發展,無論是從技術發展還是應用監管角度,都有必要對礦池網絡進行較系統的研究。本文在介紹傳統P2P 網絡工作原理和組網特點的基礎上,結合具體應用場景分析區塊鏈P2P 的運行特點,在此基礎上,重點從協議實現出發討論礦池網絡的工作機制,并對典型的針對礦池網絡的攻擊行為和防范方法進行闡述。礦池網絡及其安全仍然是未來區塊鏈技術研究的重點和熱點,下一步將從礦池網絡協議實現、礦池收益分配策略、針對礦池挖礦的安全性等方面進行針對性的深入研究。