PoW+PoS混合共識的簡單示例

買賣虛擬貨幣
需要PoW+PoS混合共識的原因採用PoW共識演算法的典型例子有Bitcoin和Ethereum,但兩者又有所不同,Bitcoin的PoW共識通常被稱為Nakamoto演算法,而Ethereum的PoW共識做了一些改變,被稱為GHOST演算法。後來又出現了Conflux專案,在GHOST的基礎上融合了DAG並行出塊技術,將系統的吞吐量提高到網路頻寬極限。這些系統雖有細節差異,但凡屬PoW一類,則必包含PoW的一些普適性特徵,這些特徵通常會展示出兩面性:其優點是透過缺點來體現的,沒有那個缺點,就不能展現出那個優點。比如,缺點:區塊鑄造代價高、能源消耗大;優點:包含了計算曆史軌跡和能源消耗軌跡,歷史慣性強,外部力量很難篡改賬本或摧毀系統。PoW能夠保障系統安全的前提是:攻擊者難以控制超過51%的算力。而礦池的出現實際上已經破壞了這個前提,不同礦池之間可能會簽訂商業協議,形成可一致行動的礦團,具備發動51%攻擊的能力。比如在BCH-ABC與BCH-SV的分叉事件中,外界難以確認是否真的發生了算力攻擊戰,但是在分叉剛開始的一段時期內,BCH的兩條分叉鏈很明顯都處於礦團的控制之下。區塊鏈系統的參與者大致可分三類角色:出塊者(礦池)、持幣者(使用者)、開發者。在PoW系統中,持幣者是最弱勢的群體,區塊鏈系統的理想目的應該是服務使用者,數字資產既不屬於礦工,也不屬於開發者,而屬於使用者,但在大算力攻擊、系統分叉等情況下,使用者並沒有任何選擇權,其權益得不到有效保障,這是不合理的。所以在新系統的設計中,有必要同時引入PoW和PoS,形成混合共識機制,使使用者能夠透過持有的幣權進行投票,以消除大算力攻擊製造出的分叉鏈,使礦池只能作為出塊者提供服務,而不能成為系統的實際控制者,對開發者也形成一定程度上的制衡,而不是讓區塊鏈系統成為開發者的技術試驗田和遊樂場。
採用PoW+PoS混合共識的區塊鏈新專案是比較多的,我在這裡給出一個簡單的設計方案,其核心思想是:礦工只負責出塊,若算力攻擊製造了達到一定長度的臨時分叉鏈,持幣者可投票進行分支選擇與交易合併,分叉鏈區塊可以被包容到整個區塊鏈賬本中(可增加賬本的累積工作量計算軌跡)。若持幣者不關心繫統執行情況,可以選擇棄權,或將投票權委託給權益代理人,由權益代理人進行投票表決。權益代理人系統之間可透過BFT類或其他低能耗的共識演算法對投票結果達成一致意見。在區塊鏈系統的設計中,只要擁有防止某種攻擊的有效方法,實際上發生這種攻擊的概率就變得很小。因此PoS子系統只需要進行少量的干涉,就能確保整個系統正常執行。PoW算力分叉攻擊的過程分析

從普通人視角看,區塊鏈是一個線狀鏈式結構,但從實際角度看,區塊鏈是一個樹狀機構,隨著區塊高度的增長,對於每個區塊,以其是否處於最長鏈為依據,競選出唯一的主幹(如圖1中的黑色區塊),沒有成為主幹的其他區塊分支則被淘汰出局,成為孤枝孤塊(如圖1中的藍色區塊)。而主幹末端的多個分支仍然處於競爭狀態(如圖1中的綠色區塊),某分支能否成為主幹,取決於後續產生的大部分割槽塊是否追隨擴充套件該分支,而處於競爭態的區塊所包含的交易都處於待確認的不穩定狀態。

最長分支上的任何區塊被後續M個區塊所追隨,則可認為基本處於穩定態。但M並不是一個絕對常量值,而取決於誠實算力和惡意算力的佔比。若惡意算力佔比超過51%,就可以選擇「近期的任意某個區塊位置」新起一條鏈進行分叉,並以更快的出塊速度擴充套件分叉鏈,最終超越並推翻原先的主幹,如圖2中的兩條紫色分叉鏈。從101處分叉的難度要比從105處分叉的難度大,假設在105處惡意分叉成功,則原鏈干支106.a、107.c、108.b等區塊包含的任何交易都可能被否認。若攻擊者用大量的算力從較遠期的(比如1個月前)某個區塊點實施分叉攻擊,大概率不會成功,原因1:長分叉鏈的鑄造成本昂貴,而且網路中的大部分節點拒絕接收時間戳偏離當前時間N小時的區塊廣播(或根據當前最長鏈包含的區塊時間戳序列計算出一個參照時間值);原因2:對區塊鏈賬本的共識中,包含一定程度上的「人的共識」,若原先的賬本狀態已經得到大部分參與者的認同,僅透過大算力強力操縱是行不通的。

算力分叉攻擊是一種「讓時間短暫倒流,修改既定交易事實,再回到當前」的暴力攻擊。有人認為這種攻擊需要耗費大量算力資源,攻擊者會得不償失,這種觀點是經不起分析的。由於礦池的出現,礦池之間可能形成礦團,算力租賃市場也在不斷髮展,使得發動這種攻擊的可能性越來越大,給人們對虛擬貨幣的信心帶來較大的負面影響。比如Alice給Bob支付了一筆大額交易,然後Alice可能透過臨時租用的大算力進行惡意分叉並否認掉這筆交易,給Bob造成鉅額損失。透過預測攻擊事件對市場心理的影響力,還可能在虛擬貨幣期貨交易市場中選擇做空或做多,有計劃的操縱市場,獲得攻擊之外的收益,因此把系統安全性完全寄託在算力之上,目前已經不太可靠了。


如上所述我們已經分析了單一的PoW共識存在的分叉攻擊問題,以及引入PoW+PoS混合共識解決分叉攻擊的大體思路。分叉攻擊在現實中已經出現過,比如BTG和ETC被攻擊事件。所以本篇將對PoW+PoS混合共識的過程進行分析。總體上可以將「PoS投票子系統」看成是一個觀察者,這個觀察者在持續監視並確定「PoW記賬子系統」的走勢,以避免大算力分叉攻擊的發生。PoS投票子系統自身可以利用BFT類共識演算法、VRF等機制,對投票結果達成一致。

如下圖所示,黑色和紅色區塊構成PoW鏈,紫色區塊表示惡意攻擊的分叉鏈,PoW鏈負責處理轉賬交易和執行智慧合約。綠色和藍色區塊構成PoS鏈,綠色區塊包含了對PoW區塊的51%以上的幣權投票確認,藍色區塊是PoS投票子系統自身的更新,比如持幣使用者重新選舉投票代理人等等。而無論對於哪條鏈,每追加一個新區塊,賬本資料就遷移到一個新狀態。每個新區塊都是對前一時刻賬本資料的狀態更新。

PoS鏈會每隔4個PoW區塊進行一次確認,30號PoS區塊對60號PoW區塊進行幣權投票確認(分別簡稱S30與W60),其包含51%以上的幣權投票交易;

PoS鏈故意延後於PoW鏈,S30在W63~W64的時間點,才對W60進行投票確認,以提高準確率。

PoW鏈最多隔7個區塊就必須對PoS鏈的投票結果做引用確認,例如W67或之前(比如W65)對S30的引用確認;

S31內包含了PoS系統自身的某些變更(比如使用者Alice更換投票代理人);

S32對W64進行幣權投票確認,其包含51%以上的幣權投票交易;

PoS子系統觀察到紫色區塊廣播明顯晚於黑色區塊廣播(比如接收到A0的時間和接收到W66的時間非常靠近),因此S32將A0認定為分叉區塊,所以W70可以引用接續A3區塊,進行分叉融合:兩條鏈上沒有衝突的交易全部生效,衝突的交易,以黑色鏈為準,紫色鏈礦工不能獲取到任何區塊獎勵和交易手續費。分叉融合不是必選設計,這裡只說明其可行性。

假設S33不能被正常產出,則PoW鏈會在W75或之前的位置懸停,無法繼續前進,必須等待PoS子系統再次穩定執行後,才能繼續前進。若PoW鏈懸停時間較長,會導致傳統的挖礦難度調整演算法不夠精準,因此新演算法可參考PoS鏈所包含的時間戳序列,以扣除懸停時間。

PoW+PoS混合共識解決了PoW區塊的概率確定性問題,可以實現最終確定性,大算力礦工必須同時持有51%以上的幣權,才可對系統發起分叉攻擊,這是極其困難的。這裡所介紹的混合共識本質上是將「算力分叉攻擊的隱患」轉化成「PoS投票子系統不能正常運轉的隱患」。但PoS投票子系統運轉失敗後可以透過社群活動,重新再次啟動執行,不會給使用者帶來賬面上的任何財產損失,而51%算力攻擊帶來的雙花交易及其對真實交易的否認卻無法補救。所以在設計公鏈系統時,PoS+PoW混合共識值得考慮,混合共識也有助於一個公有鏈自舉成功,純PoW鏈在自舉過程中很容易被外部惡意算力殺死。

更多數字貨幣資訊:www.qukuaiwang.com.cn/news

免責聲明:

  1. 本文版權歸原作者所有,僅代表作者本人觀點,不代表鏈報觀點或立場。
  2. 如發現文章、圖片等侵權行爲,侵權責任將由作者本人承擔。
  3. 鏈報僅提供相關項目信息,不構成任何投資建議

推荐阅读

;