摘 要:本文詳細(xì)分析了異步共識架構(gòu)的設(shè)計,特別是底層和上層異步共識組的結(jié)構(gòu)和功能。在底層異步共識組設(shè)計中,本文提出了一種基于超級節(jié)點的選舉模型、有效的超級節(jié)點出塊機制和選舉機制,以優(yōu)化系統(tǒng)性能。在上層異步共識組設(shè)計中,本文聚焦于區(qū)塊驗證機制的實施和如何有效應(yīng)對惡意節(jié)點的挑戰(zhàn)。最后驗證了異步共識設(shè)計在提高系統(tǒng)吞吐量和安全性方面的有效性。采用本文設(shè)計方案能夠顯著提升區(qū)塊鏈分片系統(tǒng)的效率,并有效應(yīng)對不同場景下的共識挑戰(zhàn),從而推動區(qū)塊鏈技術(shù)在實際中廣泛應(yīng)用。
關(guān)鍵詞:區(qū)塊鏈分片;異步共識;超級節(jié)點
中圖分類號:TP 309" " " " 文獻標(biāo)志碼:A
隨著區(qū)塊鏈應(yīng)用范圍拓展,其性能限制和可擴展性問題日益突出。為應(yīng)對這些挑戰(zhàn),區(qū)塊鏈分片技術(shù)應(yīng)運而生,將其網(wǎng)絡(luò)劃分為多個較小、易于管理的片段,各片段可獨立處理交易、運行智能合約。在區(qū)塊鏈分片架構(gòu)中,共識機制的高效實現(xiàn)至關(guān)重要。工作量證明、權(quán)益證明機制等傳統(tǒng)區(qū)塊鏈共識算法存在性能不足、可擴展性低等問題。異步共識機制是一種新興設(shè)計理念,能夠允許不同節(jié)點在時間上以異步方式達成一致,提升了系統(tǒng)處理能力和響應(yīng)速度,同時降低了對同步通信的需求,降低了網(wǎng)絡(luò)延遲。
1 異步共識架構(gòu)設(shè)計
作為一種去中心化、安全性高的分布式賬本技術(shù),區(qū)塊鏈技術(shù)被大量用于解決傳統(tǒng)中心化系統(tǒng)中的信任問題[1]。本文引入異步共識機制,可允許不同節(jié)點在時間上以異步方式達成一致,提高整體系統(tǒng)處理能力和響應(yīng)速度,同時降低同步通信需求,降低網(wǎng)絡(luò)延遲。在具體實踐中,本文將異步共識架構(gòu)設(shè)計為上、下2層結(jié)構(gòu),即上層異步共識組(UACG)和底部異步共識組(BACG)。其中,UACG用于驗證并確認(rèn)來自BACG的分片區(qū)塊,其設(shè)計需要具備高效區(qū)塊驗證機制和惡意節(jié)點處理機制,以保障系統(tǒng)安全。BACG涉及超級節(jié)點選舉模型、超級節(jié)點出塊機制以及選舉機制設(shè)計(如圖1所示)。
2 底層異步共識組設(shè)計
2.1 超級節(jié)點選舉模型
本文引入基于波達計數(shù)法的DPoS算法,投票選舉出少數(shù)超級節(jié)點并產(chǎn)生區(qū)塊。這些超級節(jié)點代表整個網(wǎng)絡(luò)的利益,用于驗證交易并打包區(qū)塊。DPoS的設(shè)計目標(biāo)是減少參與區(qū)塊生產(chǎn)的節(jié)點數(shù)量,提高系統(tǒng)的效率和數(shù)據(jù)吞吐量,同時保持分散的去中心化特性。在該模型框架下,選民按照首選、次選和第三選等順序?qū)蜻x節(jié)點進行排名。每個排名位置給予不同的加權(quán)得分,例如首選給予較高的分?jǐn)?shù),次選給予較低的分?jǐn)?shù),以此類推[2]。在此基礎(chǔ)上,將所有選民的排名進行加權(quán)計算,得到每個候選節(jié)點的總得票數(shù),得票數(shù)最高的候選人將成為超級節(jié)點。完成得票計算后,根據(jù)網(wǎng)絡(luò)中持幣者的投票行為,得票數(shù)會動態(tài)變化,需要周期性地重新計算、調(diào)整超級節(jié)點的選舉結(jié)果,以反映當(dāng)前持幣者的最新偏好和權(quán)益分布,其代碼如下所示。
class Delegate:
def __init__(self, name):
self.name = name
self.votes = 0
def receive_vote(self, amount):
self.votes += amount
def __repr__(self):
return f\"Delegate({self.name}, Votes: {self.votes})\"
def dpos_election(delegates, voting_weights):
# Sort delegates by their voting weights in descending order
sorted_delegates = sorted(delegates, key=lambda delegate: delegate.votes, reverse=True)
# Select top delegates as super nodes based on a fixed number or threshold
super_nodes = sorted_delegates[:21]" # Example: Selecting top 21 delegates
return super_nodes
# Example usage:
delegates = [
Delegate(\"Delegate1\"),
Delegate(\"Delegate2\"),
Delegate(\"Delegate3\"),
# Add more delegates as needed
]
# Simulate voting
delegates[0].receive_vote(100)" # Delegate1 receives 100 votes
delegates[1].receive_vote(150)" # Delegate2 receives 150 votes
delegates[2].receive_vote(75)" "# Delegate3 receives 75 votes
# Perform DPoS election
super_nodes = dpos_election(delegates, [])
print(\"Super Nodes:\")
for node in super_nodes:
print(node)
其中,“init”方法會初始化每個候選節(jié)點的名稱和初始得票數(shù)為0?!皉eceive_vote”方法模擬接收投票,增加候選節(jié)點的得票數(shù)。“dpos_election”函數(shù)實現(xiàn)了基于波達計數(shù)法的選舉算法。“sorted_delegates”可根據(jù)得票數(shù)對候選節(jié)點進行排序,以便選擇得票數(shù)最高的節(jié)點?!皊uper_nodes”根據(jù)排序后的結(jié)果,將前面的節(jié)點作為超級節(jié)點。上述示例將前21個節(jié)點作為超級節(jié)點。
該代碼創(chuàng)建了若干候選節(jié)點delegates,并模擬它們接收不同數(shù)量的投票。調(diào)用“dpos_election”函數(shù)模擬DPoS選舉過程,將得票最高的節(jié)點作為超級節(jié)點。
2.2 超級節(jié)點出塊機制
超級節(jié)點在其所屬分片內(nèi)生成新區(qū)塊,包括分片內(nèi)交易信息和相關(guān)狀態(tài)更新。超級節(jié)點出塊機制涉及多個關(guān)鍵實施要點[3]。一方面,超級節(jié)點需要維護交易池,接收與管理分片節(jié)點提交的交易請求,根據(jù)特定策略(例如交易費用或優(yōu)先級)選擇適宜的交易進行打包。另一方面,超級節(jié)點須驗證各交易的合法性與相關(guān)狀態(tài),執(zhí)行預(yù)設(shè)的共識規(guī)則,以保證區(qū)塊的有效性,并保障其安全。生成的區(qū)塊應(yīng)盡快廣播至整個網(wǎng)絡(luò),同時,超級節(jié)點需要設(shè)計有效的同步策略,保證所有分片節(jié)點和上層異步共識組能及時獲取最新區(qū)塊信息。此外,超級節(jié)點還需要采用嚴(yán)格的錯誤處理與回滾機制,監(jiān)測潛在錯誤情況并迅速響應(yīng),以維護區(qū)塊鏈狀態(tài)的一致性,并保障其安全。
2.3 超級節(jié)點選舉機制
超級節(jié)點是網(wǎng)絡(luò)中具有特殊權(quán)限和責(zé)任的節(jié)點,用于處理關(guān)鍵任務(wù),例如生成區(qū)塊、執(zhí)行共識算法等。選舉超級節(jié)點的過程需要考慮節(jié)點的信任度、性能和參與度等因素,以保障網(wǎng)絡(luò)的安全性。本文進行了節(jié)點資格驗證,通常利用數(shù)字簽名或加密證書進行身份驗證,保證參與選舉的節(jié)點具有合法身份。并在此基礎(chǔ)上評估節(jié)點的計算能力、網(wǎng)絡(luò)帶寬等性能指標(biāo),保證節(jié)點能夠承擔(dān)超級節(jié)點的責(zé)任。在實際的選舉過程中,網(wǎng)絡(luò)中的節(jié)點可以提名自己或其他節(jié)點,將其作為超級節(jié)點候選人,其他節(jié)點對候選節(jié)點進行投票,通常需要達到一定的投票門檻才能成為超級節(jié)點。需要注意的是,在選舉過程中,網(wǎng)絡(luò)需要保證投票結(jié)果的公平性,以防止惡意操縱或攻擊。本文引入波達計數(shù)法,根據(jù)節(jié)點的偏好和投票行為來選擇適合擔(dān)任超級節(jié)點的節(jié)點。假設(shè)有n個候選節(jié)點,每個節(jié)點的排名或偏好列表為Ri=(ri1,ri2,...,rin),rij表示候選節(jié)點j在節(jié)點i的排名位置(1表示第一位,2表示第二位,以此類推)。候選節(jié)點j的總得分Sj可由公式(1)計算得出。
(1)
式中:wij為節(jié)點i對排名j的權(quán)重。
根據(jù)排名位置設(shè)定不同的權(quán)重系數(shù)。一旦選舉成功,超級節(jié)點將被授予生成區(qū)塊、參與共識決策等特殊權(quán)限。本文考慮權(quán)力分散安全性問題,設(shè)計了輪換機制,定期或者基于特定事件對超級節(jié)點進行輪換,即根據(jù)網(wǎng)絡(luò)性能和節(jié)點活動情況,動態(tài)調(diào)整超級節(jié)點的成員,以提高系統(tǒng)的彈性和響應(yīng)能力。例如對于5個候選節(jié)點A、B、C、D和E,每個節(jié)點收到的排名情況如下:節(jié)點A為(3,4,1,5,2),節(jié)點B為(2,5,3,1,4),節(jié)點C為(5,3,2,4,1),節(jié)點D為(1,2,5,3,4),節(jié)點E為(4,1,4,2,5)。
采用等權(quán)重wij=n-rij+1,則計算出的每個節(jié)點的總得分如下所示。1) 對節(jié)點A,SA=(5-3+1)+(5-4+1)+(5-1+1)+(5-5+1)+(5-2+1)=14。2) 對節(jié)點B,SB=(5-2+1)+(5-5+1)+(5-3+1)+(5-1+1)+(5-4+1)=18。3) 對節(jié)點C,SC=(5-5+1)+(5-3+1)+(5-2+1)+(5-4+1)+(5-1+1)=16。4) 對節(jié)點D,SD=(5-1+1)+(5-2+1)+(5-5+1)+(5-3+1)+(5-4+1)=17。5) 對節(jié)點E,SE=(5-4+1)+(5-1+1)+(5-4+1)+(5-2+1)+(5-5+1)=11。
上述5個階段中,節(jié)點B的總得分最高,因此節(jié)點B將成為使用波達計數(shù)法選出的超級節(jié)點之一。
3 上層異步共識組設(shè)計
3.1 區(qū)塊驗證機制
本文引入PBFT算法構(gòu)建上層異步共識框架中的區(qū)塊驗證機制。該算法中的節(jié)點角色分為客戶端、備份節(jié)和主節(jié)點。主節(jié)點提出區(qū)塊并向備份節(jié)點廣播提案,備份節(jié)點對提案進行驗證與決策。具體實踐中,PBFT算法采用一定的選舉機制來確定哪個節(jié)點成為主節(jié)點,主節(jié)點再生成新的區(qū)塊,將含有新交易的區(qū)塊作為提案廣播給備份節(jié)點。備份節(jié)點收到主節(jié)點的提案后對提案進行驗證。從微觀層面來看,該過程分為3個關(guān)鍵階段。1)預(yù)準(zhǔn)備階段。備份節(jié)點執(zhí)行預(yù)準(zhǔn)備階段,檢查提案的數(shù)字簽名是否有效,并確認(rèn)提案中的交易是否符合系統(tǒng)規(guī)則,以此來驗證主節(jié)點的身份和提案的合法性。2)準(zhǔn)備階段。一旦備份節(jié)點認(rèn)可了提案的合法性,隨即向其他備份節(jié)點廣播準(zhǔn)備消息,代表備份節(jié)點已經(jīng)驗證通過并準(zhǔn)備接受該提案。3)準(zhǔn)備接收消息。備份節(jié)點需要等待來自多數(shù)其他備份節(jié)點的準(zhǔn)備消息[4]。一旦收到足夠數(shù)量的準(zhǔn)備消息,備份節(jié)點即進入準(zhǔn)備狀態(tài),準(zhǔn)備接受并執(zhí)行該區(qū)塊。
主節(jié)點收到大多數(shù)備份節(jié)點的準(zhǔn)備消息后,將提交區(qū)塊并廣播提交消息。提交消息通知所有節(jié)點,包括備份節(jié)點,開始執(zhí)行該區(qū)塊中的交易。主節(jié)點廣播提交消息后,所有備份節(jié)點執(zhí)行相同的區(qū)塊操作。最終保證整個系統(tǒng)中所有節(jié)點執(zhí)行的交易是一致的。備份節(jié)點執(zhí)行區(qū)塊中的所有交易,并更新其本地狀態(tài)機。此外,本文還為PBFT算法設(shè)計了視圖更改、超時檢測和重新選舉主節(jié)點等容錯機制,處理節(jié)點故障或遇到的惡意行為,保證系統(tǒng)的可靠性。
3.2 惡意節(jié)點處理
在上層異步共識設(shè)計中,故意廣播錯誤的提案、拒絕執(zhí)行合法的區(qū)塊或者試圖雙重支付等惡意節(jié)點,均會對共識過程造成破壞。針對這一問題,本文設(shè)計了一整套針對惡意節(jié)點的處理方案。當(dāng)節(jié)點發(fā)現(xiàn)當(dāng)前視圖下無法達成共識或者有惡意行為發(fā)生時,以檢測到消息超時或者消息不一致來確定問題存在。一旦檢測到問題,系統(tǒng)會觸發(fā)視圖更改機制,選擇新的主節(jié)點來提出新的提案、引導(dǎo)共識過程,防止惡意節(jié)點長期干擾系統(tǒng)正常運行。如果節(jié)點在預(yù)期時間內(nèi)未收到足夠數(shù)量的準(zhǔn)備消息或提交消息,系統(tǒng)認(rèn)定主節(jié)點或備份節(jié)點可能出現(xiàn)問題,并嘗試重新選舉或更改視圖以恢復(fù)共識過程。對于由網(wǎng)絡(luò)問題或節(jié)點故障導(dǎo)致的消息丟失或延遲,系統(tǒng)可以利用重試機制嘗試重新發(fā)送消息或者重新執(zhí)行區(qū)塊,保證共識過程的連續(xù)性與一致性,其代碼片段為如下所示。
class ConsensusSystem:
def __init__(self):
self.current_view = 0
self.main_node = None
self.backup_nodes = []
self.timeout_threshold = 10" # Timeout threshold in seconds
def handle_malicious_behavior(self):
if self.detect_malicious_behavior():
self.trigger_view_change()
def detect_malicious_behavior(self):
return self.detect_timeout() or self.detect_inconsistency()
def detect_timeout(self):
return self.main_node is None or self.main_node.timeout gt; self.timeout_threshold or any(node.timeout gt; self.timeout_threshold for node in self.backup_nodes)
def detect_inconsistency(self):
return self.main_node is None or not self.main_node.is_consistent() or any(not node.is_consistent() for node in self.backup_nodes)
def trigger_view_change(self):
self.current_view += 1
self.select_new_main_node()
def select_new_main_node(self):
self.main_node = self.backup_nodes.pop(0)
self.backup_nodes.append(self.main_node)
self.recover_consensus()
def recover_consensus(self):
if self.detect_malicious_behavior():
self.trigger_view_change()
else:
self.retry_messages()
def retry_messages(self):
for node in self.backup_nodes:
node.retry()
# Usage example
consensus_system = ConsensusSystem()
consensus_system.handle_malicious_behavior()
該代碼創(chuàng)建了一個“ConsensusSystem”實例,并設(shè)置了主節(jié)點和備份節(jié)點。調(diào)用“handle_malicious_behavior”檢測并處理惡意行為。分別使用“detect_malicious_behavior”檢測是否存在超時或消息不一致;使用“detect_timeout”檢測主節(jié)點或備份節(jié)點是否超時;使用“detect_inconsistency”檢測消息是否不一致。如果檢測到惡意行為,觸發(fā)“trigger_view_change”選擇新的主節(jié)點并嘗試恢復(fù)共識過程。基于“retry_messages”嘗試重新發(fā)送消息或重新執(zhí)行區(qū)塊,以保證共識過程的連續(xù)性。
4 結(jié)論
高水平區(qū)塊鏈分片系統(tǒng)的異步共識設(shè)計能夠保障整個系統(tǒng)在分布式環(huán)境下的安全,并能保證系統(tǒng)高效運行。本次研究得出以下3個結(jié)論。1)在底層異步共識組的設(shè)計中,超級節(jié)點管理各個分片內(nèi)的共識過程,因此選舉算法的設(shè)計必須綜合考慮節(jié)點的信任度、性能指標(biāo)和網(wǎng)絡(luò)條件。在上層異步共識組的設(shè)計中,區(qū)塊驗證機制可保障系統(tǒng)的安全性,并保證數(shù)據(jù)的一致性,避免發(fā)生雙重支付、無效交易。2)針對可能存在的惡意節(jié)點,采用超時檢測、錯誤行為證明和快速視圖更改等策略,對惡意節(jié)點進行有效處理,以便迅速處理惡意行為,將其對系統(tǒng)的潛在損害最小化。3)共識模塊的設(shè)計能夠保證系統(tǒng)能夠在異步環(huán)境下穩(wěn)定運行。有效的共識模塊能夠?qū)崿F(xiàn)系統(tǒng)性能、安全性的有效監(jiān)控,靈活應(yīng)對動態(tài)的網(wǎng)絡(luò)條件和節(jié)點參與情況的變化,從而使整個分片系統(tǒng)能夠高效、安全運行。
參考文獻
[1]浮宇麗,任亞唯.基于可驗證秘密共享的區(qū)塊鏈分片存儲模型[J].計算機工程與設(shè)計,2023,44(12):3536-3544.
[2]王瑞民,吳佳璇,張建輝.基于秘密分割的區(qū)塊鏈安全數(shù)據(jù)共享模型[J].重慶郵電大學(xué)學(xué)報(自然科學(xué)版),2023,35(6):1145-1153.
[3]徐克圣,謝詔馳.星型區(qū)塊鏈架構(gòu)的TKM分片算法[J].計算機應(yīng)用研究,2024,41(3):683-687.
[4]闕琦峰,陳之豪,張召,等.面向分片許可鏈的無協(xié)調(diào)者跨片交易處理[J].計算機研究與發(fā)展,2023,60(11):2469-2488.