區塊DAG真正的終結性
前言
前言
一級標題
前言
前言
終結性(Finality)的重要性
一級標題
如今大多數區塊鏈拓撲的終結性(Finality)都是基於概率的,也就是說你永遠無法百分百確定一筆交易真的徹底完成了。舉個例子,在比特幣網絡中,隨著時間推移(或者用比特幣世界的語言來說,是隨著區塊數的增加),攻擊者追上網絡剩餘部分並重組區塊的概率會呈指數級下降。這種指數級的風險下降催生了“6個區塊”的經驗論。也就是說,如果在包含你那筆交易的區塊上又新增了5個區塊,那麼你的交易就有了“6個區塊的深度”,從統計上來看,這個交易就不太可能遭到重排攻擊。
在很多場合,概率性的終結沒什麼問題。但是,如果你正在執行大量交易,且每筆交易都依賴於上一筆交易的輸出,或者你正在執行一筆巨額交易,你需要確定這筆交易絕不會被撤銷,那麼終結性就相當重要了。
一級標題
一級標題
DAG終結性意味著什麼?
我們是如何做到的呢?網絡會定期舉行投票,與區塊DAG的建設同步,以此來為DAG邊界附近的特定區塊施加無限權重(infinite weight)。
一級標題
當一個區塊被賦予無限權重的時候,就意味著其通過幽靈指針(ghost pointer)直接或間接指向的所有區塊都具有了無限權重,也就是說現在不可能再通過攻擊推翻這個排序了。
在上圖,我們選擇了橙色區塊賦予無限權重,並且可以看到這種無限性已經通過反向指向區塊DAG賦予了錨鏈上所有區塊無限權重(圖中標為深灰色)。現在,我們已經有效地在其所屬時期(epoch)確定了這個錨鍊及所有區塊的排序。
通過類似PBFT的算法選擇週期區塊
二級標題
為了選擇DAG內的一個區塊來完成最終確定,我們採用了一個類似PBFT(實用拜占庭容錯)算法的過程。考慮到PBFT是一個研發完備且廣泛部署的算法,關於本文會涉及到的細節和潛在錯誤(fault)這裡就一筆帶過不再贅述了。
PBFT的周期區塊終結(period block finalization)過程大致分為四步,如下面這張高度簡化的圖表所示。
二級標題
二級標題
1.提議新的區塊
通過VRF (SK, previous_PBFT_block_hash, current_vote_type, current_round_number, current_step_number) = (e, π)來計算其資格,這裡e就是資格值,π是VRF正確計算的證明
決定“如果e <閾值,那麼其就有資格在本輪提議一個PBFT區塊”
創建一個並發調度CS
二級標題
創建一個包含(Pt, CS)以及其他信息(如時間戳、簽名、受益人)的PBFT區塊候選人(Pc)
計算Pc的哈希(hash)
二級標題
二級標題
決定“如果e <閾值,那麼其就有資格參與此輪”
二級標題
等待2個λ的時間,其中λ是網絡直徑——也就是網絡中兩個最遠節點之間的最短距離(時間上)
計算在π也正確的情況下觀察到的e的最小值,創建者即為最小值e為“領頭人”(leader)的時候,它就是創建者——這個節點就是提議下一PBFT區塊的候選人
二級標題
二級標題
3. 針對區塊的投票
通過VRF再次計算其資格(帶入current_round_number加一以及當前投票類型)生成另一個(e, π)
計算在給定的e_min時間內其是否收到2T+1的投票(這裡T是上一輪合格投票節點的1/3)
二級標題
如果其尚不具備PBFT區塊,就針對e_min對應的Pc以及相關hash(Pc)進行對等節點輪詢
驗證Pc是否正確創建
二級標題
二級標題
4. 投票進入下一步
通過VRF再次計算其資格(帶入current_round_number加一以及當前投票類型)生成另一個(e, π)
計算對於任意給定的Pc,其是否收到2T+1的投票
一級標題
驗證獲勝的Pc是否正確創建
一級標題
正文
關於我們PBFT的更多介紹
上面寫的就是一個極其簡單的描述
正文
注意,每當節點要發聲時,它都會計算一個VRF資格值來確保在這一輪它有資格發言。資格的閾值已設置好且會動態調整來確保以下兩件事:
一級標題
參與每一輪的節點是隨機的且有可能是不同的,這意味著一旦攻擊者觀察到某個節點是參與者並以其為目標發起攻擊,那麼可能在下一輪它就失去了資格。這和許多其他算法不同,其他算法會在較長時間裡保留參與者(或委員會成員)的資格,使他們成為攻擊的首要目標。
在任何給定的回合中,只有一部分合格節點參與其中,使這個PBFT流程高度可擴展。這意味著就算網絡容量擴大,合格參與者數量增加,這些PBFT輪次的實際參與者(委員會規模)相對網絡容量可以輕鬆通過設置實現次線性擴展。參與人數越少投票過程就越快。
一級標題
Taraxa的PBFT流程在現有的區塊DAG旁邊創造了一條PBFT區塊線性鏈。
一級標題
每個PBFT區塊都有兩個主要目標,
完成一個DAG區塊在周期區塊中的最終確定
完成DAG區塊的最終確定
一級標題
這個PBFT流程會確認區塊DAG內的一個單一區塊。因此,與其他大多數利用PBFT流程的網絡不同,它並不作為主要共識算法來對整個區塊鏈流程把關。這也是為什麼Taraxa的PBFT流程與區塊DAG的創建流程是並行的且基本上異步的。
每當一個新的DAG區塊完成最終確定,我們就創建一個已終結的錨鏈以及錨鏈上一組相關區塊(沿著每個錨定區塊的時期(epoch)來實現)。整個區塊的集合稱為週期(Period),也可以看作是一個最終確定了排序的區塊集群的快照。
一級標題
一級標題
並發調度
並發調度通過以下幾種方式來確定排序:
區塊的排序,這個由排序機制定義,因為一個週期裡有很多區塊。
過濾出區塊間的冗餘交易。因為我們採用的是一個DAG數據結構,所以很有可能發生多個區塊提議者將同一組交易打包到不同DAG區塊的情況,導致一定程度的交易重疊。 Taraxa設計了一個交易仲裁機制(之後的文章會具體介紹)來幫助調整這種重疊——我們希望將這種情況降到最低但又不能為零,否則會出現交易孤立過度的情況。
將交易分為並發集與順序集。


