什麼是權益委託證明 Delegated Proof-Of-Stake, DPOS?
權益委託證明 (Delegated Proof-Of-Stake, DPOS,中文也有翻譯作"委託股權證明"、"受托人機制"、"股份授權證明機制"等等)。有很多中文翻譯版本,但意思萬變不離其中,總可以歸納為每個持有(權益、股權、股份)的帳戶人將投票(授權、委託)予某位代表,在系統中獲得最多票數的前101位代表就可以按分配到的時間段輪流產生區塊(出塊),而這些代表成功出塊後將可以收到產生這些區塊平均交易費作為出塊的報酬,如果這些代表出塊不成功,將可能會被淘汰,由投票產生的新代表所取代。
聽起來,有沒有覺得像現時的議會制度?我們來類比一下:
議會制度 -每位市民都投票給予某位議員代表,而獲得最多票數的指定數目議員就能晉身議會,為市民們爭取權益,市民最終得到的權益亦會從於他所投的那位議員的工作上體現出來,如果這位議員無法為這群選他出來的市民們爭取權益,將有機會被淘汰,並再由下一屆任期內投票產生的新議員所取代。
每位市民 -持有(權益、股權、股份)的帳戶人
代表-議員
爭取權益-出塊
這是對 DPOS 具體的比喻,相信不難理解,接下來看看背後的原理及實際運作:
首先,在 DPOS 中,任何時候,都是以最長鏈勝出,即當一個誠實的節點看到一個更長的有效鏈,它都會從當前分叉切換到這條更長的有效鏈。
DPOS 共識機制最主要是包括 選擇區塊產生者、調度區塊產生及為確定性生產者洗牌
選擇區塊產生者
在DPOS 共識機制中,每次循環,每個帳戶人都擁有一票選舉代表(稱為批準投票,代表可視為超級節點或礦池)或成為代表參選,獲票前 N 名的代表被會被選擇(一般數量為奇數個),而代表的個數 N 則由要由至少 50 %的投票人認為足夠做到「無關鍵中心化」,於設置完代表的個數 N 後,同時亦必須投票給至少這個數目的代表,且不能投票數量超過這個上限。
調度區塊產生
選出代表後,這些代表將會被隨機排序,並按這個固定順序每隔 2 秒就獲得一個出塊的機會,並且需在塊周期內完成出塊(如果其中某位代表在這段時間間隔內並未出塊或試圖利用手中的權力作惡,將會被跳過,且有機會被淘汰,由下一輪投票產生的新代表取代),然後輪到下一位出塊,直至完成整個循環周期,每個周期結束後,這些代表都要被"洗牌"一次;
塊周期(Slot):亦稱為時段周期,每個塊為 10 秒,即一個時間;
循環周期(Round):有N位代表,每位代表出塊一次,即每出 N 個區塊為一個循環。完成一次完整的循環周期需要 N * Slot (秒);
獎勵周期:根據區塊鏈高度,設置里程碑時間(Milestone),在某個時間點調整區塊獎勵。
確定性生產者洗牌
為確保區塊產生時,不會總是忽略某位區塊產生者,共且每當形式多個擁有相同數量產生者的分叉時,要打破平局。所以每完成一個循環周期(即出N個區塊)後,區塊生產者都會被隨機排序,亦稱之為"洗牌"。
以下是在各種情況下簡化的 DPOS 模型 :
首先假設有3個區塊,生產者A、B、C。因為達成共識要求2/3+1多數來裁決所有情況,在這個簡化的模型中假設生產者C是打破僵局的角色。
正常操作
正常操作下,每三秒鐘區塊生產者輪流生產一個區塊。假設每個人都按部就班輪流生產,那麼這將生產出最長的鏈。需要指出的是,塊生產者在自己輪次之外的任何時間段生產出來的塊都是無效的。
少數分叉
會有高達三分之一的惡意或故障節點可能創建少數分叉。此時,少數分叉每9秒才能產生一個塊,而多數分叉每9秒可以產生兩個塊。如此,另外誠實的2/3多數將永遠比少數的鏈長。
離線雙重生產的少數分叉
離線的少數節點可以試圖產生無限量的分叉,但是他們產生的所有分叉都將比多數人的那條鏈短,因為少數分叉在出塊速度上肯定比多數人的鏈慢。
網絡碎片化
網絡完全有可能碎片化,這種情況下沒有任何分叉擁有多數區塊生產者。這種情況下,最大規模少數派的分叉生產的鏈會最長。當網絡恢復通訊後,較小的少數群體會自然轉到最長的那條鏈,由此恢復明確的共識。
有可能存在這樣三個分叉,其中兩個最長的分叉長度相同。在這種情況下,第3個最小的分叉的區塊生產者重新加入網絡時會打破平衡。區塊生產者總數為奇數,所以不可能長期保持平局。
在線少數的雙重生產
在這種情況下,少數節點B在其產生區塊時間段內產生了兩個或更多的區塊。下一個輪到產生區塊的生產者(C)可以選B產生的任何一種區塊繼續構建鏈條。如此,C的選擇就成為最長的鏈,而所有選擇B1的節點都將切換分叉。無論少數不良生產者會生產多少分叉區塊也無關緊要,它們被納入最長鏈的時間永遠不會超過一輪。
最後不可逆塊
當網絡碎片化時,多個分叉有可能長時間持續增長。長遠看最長的鏈將勝出,但觀察者需要一種方法來確認一個區塊是否確實在增長最快的那條鏈上。這可以通過觀察來自2/3+1多數塊生產者的確認來決定。
下圖中,塊B已被C和A確認,這代表了2/3+1多數確認。如果假設2/3的生產者是誠實的,就可以斷定沒有其它鏈會比這個鏈長。
注意,這個“規則”類似於比特幣的6個模塊確認“規則”。有些聰明人也許可以設計一系列事件讓兩個節點最終出現在不同的兩個最後不可逆區塊上。這種案例要求攻擊者能完全控制通信延遲,並且在幾分鐘內兩次,而不只是一次,使用該控制。即便這真的發生了,最長鏈勝出的規則仍然適用。這種攻擊勝出的可能性近於0,且經濟影響微不足道,因此不足為患。
生產者法定人數不足
如果出現生產者法定人數不足的這種不太可能的情況,少數人還是可以繼續出塊。利益持有方可以把更改投票的交易也包括在區塊裡。這些投票可以選出一組新的生產者,將生產參與率恢復到100%。這樣一來,少數鏈將最終超過其他參與率不足100%的鏈。
在此過程中,所有觀察者都知道,在參與率超過67%的鏈形成之前,網絡狀態是不穩定的。選擇在此條件下進行交易的人所承擔的風險不亞於那些選擇接受不到6個確認的比特幣人。他們這樣做的前提是他們認識到存在這樣的小可能性,即共識也許最終在一個不同的分叉上建立起來。實際上,這種情況比接受少於3個確認的比特幣交易要安全多了。
多數生產者舞弊
如果多數生產者變得腐敗,那麼他們可以產生無限數量的分叉,每個分叉都似乎有2/3多數確認向前演進。這種情況下,最後不可逆區塊算法將回歸到最長鏈算法。最長鏈就是為最大多數所批准的那條鏈,而最大多數將由少數剩下的誠實節點決定。這種行為不會持續長時間,因為利益持有方最終會投票換掉生產者。
交易作為權益證明(TaPoS)
當用戶為一個交易簽名時,他們會對區塊鏈的狀態做出一個假設。該假設基於他們對最近幾個塊的看法。最長鏈的共識發生的改變有可能使簽名者之前的假設失效。
TaPoS所有交易都包含最近一個塊的散列,如果該區塊在鏈歷史中不存在了,則這些交易就是無效的。任何在孤兒分叉上給交易簽名的人,都會發現該交易無效且無法遷移到主分叉。
該過程的一個副作用是可以抵禦試圖產生替代鏈的長期攻擊。每個利益持有方在交易時都直接對區塊鏈做出確認。隨著時間推移,所有的區塊都是由所有利益持有方確認過的,而偽造鏈是無法複製這點的。
從以上各種情況看來,採用 DPOS 共識機制的系統非常穩健且很難被破壞。
優缺點
優點
- 大大減少記帳及驗證節點的數量,達到秒級驗證;
- 出塊效率高;
- 極少機會出現分叉;
- 系統魯棒性、容錯性強;
與POW 根據擁有的算力隨機出塊、POS 根據擁有財產隨機出塊,DPOS 不一樣的是根據擁有(權益、股權、股份)來投票,選出的代表將按已分配的順序輪流出塊。
而且 POW、POS 每次出塊,都需要被整個網絡所有節點驗證確認,所以大家可以發現這兩種共識機制的設計將會嚴重拖慢整個系統出塊的速度。
DPOS則是透過不同所有帳戶人所投票選出的一小群節點,由這一小群節點進行出塊、驗證、簽名及互相監督,可大大減低(例如:POW 需要挖礦出塊)而產生的算力成本,而且 DPOS 每輪選出的代表們的出塊順序是已確定的,故此,每個出塊的代表可以直接與前後區塊的代表直接建立連接,從而保證能迅速出塊,大大提升出塊效率,從而做到秒級驗證。
缺點
- 在網絡節點較少的情況,選出的代表自然較少,從而導致代表性不強,且有機會出現無法完全「無關鍵中心化」;
- 不適合不存在代幣的商業應用;
總結
DPOS 作為 POW 和 POS 的進化版本,雖不能說是完全「無關鍵中心化」,但從本質上解決了 POW 的算力嚴重浪費、礦工中心化;POS 富者越富;兩者出塊效率均非常慢、硬分叉、安全等問題,換來性能和安全性幾何級數的提升,同時帶來更平等的共識機制。
選擇一個合適的共識機制作為系統的核心,這將毫無疑問地影響整體系統的運作、發展、瓶頸,越來越多的虛擬貨幣開始採用 DPOS 或其變種作為它們的共識機制,例如:BTS、Steem、EOS、Lisk、Lightning Bitcoin、Shift、ARK......等等,BTS已成功運行三年多,交易速度更是極快,每秒能處理過千筆的交易,出塊時間更能達至秒級驗證,而且 Steem 更已進行了19次無縫硬分叉,DPOS 的共識機制成效有目共睹,雖優點較多,但亦有其缺點。相比於 POW、POS、PBFT 等等的共識機制,並卻不能說 DPOS 為最優的共識機制,因為選擇共識機制的關鍵是與應用場景高度相關的,並按實際情況選擇的才是最優的共識機制。
參考文章
DPOS Consensus Algorithm - The Missing White Paper