1. 程式人生 > >以太坊未來的 POS 協議:Casper

以太坊未來的 POS 協議:Casper

以太坊未來的 POS 協議

大家好,我是Vlad. 2014年9月份我開始了研究和設計以太坊POS(proof-of-stake, 權益證明)架構的工作。目前Vitalik和我對於Serenity階段的POS協議應該長什麼樣已經有了許多共識,只剩一些細節方面的分歧。我們稱它為友善的小精靈Casper(Casper the friendly ghost),因為它實際上是GHOST(Greedy Heaviest-Observed Sub-Tree), 一種POW協議的POS變種。接下來的文章介紹的一些特性非常可能在Serenity階段成為現實。Casper的形式化驗證和模擬正在進行中,結果會在將來發布。接下來先開始我們的非正式介紹和討論吧!: )

基於保證金的安全和共識鑑別 (Security-deposit based security and authentication)

Casper是一種基於保證金的經濟激勵共識協議(security-deposit based economic consensus protocol)。協議中的節點,作為“鎖定保證金的驗證人(bonded validators)”,必須先繳納保證金(這一步叫做鎖定保證金,"bonding")才可以參與出塊和共識形成。Casper共識協議通過對這些保證金的直接控制來約束驗證人的行為。具體來說就是,如果一個驗證人作出了任何Casper認為“無效”的事情,他的保證金將被罰沒,出塊和參與共識的權利也會被取消。保證金的引入解決了"nothing at stake",也就是經典POS協議中做壞事的代價很低的問題。現在有了代價,而且被客觀證明做錯事的驗證人將會付出這個代價。

我們容易發現,只有在驗證人當前已繳納保證金的情況下他的簽名才有意義(economically meaningful)。這代表客戶端只能依賴他們知道的鎖定保證金的驗證人的簽名。因此當客戶端接收和鑑別共識資料時,共識認可的鏈必須起源於出自當前鎖定保證金的驗證人的塊。在POW協議中共識認可的鏈則是起源於創世塊 - 只要你知道創世塊的資料你就可以鑑別出共識認可的鏈。這裡,只要你知道當前鎖定保證金的驗證人,你就可以鑑別出共識認可的鏈。不知道當前鎖定保證金的驗證人列表的客戶端必須先通過另外的通道獲取這個列表。這個限制通過要求所有人用當前資訊鑑別共識解決了“遠端攻擊(long range attack)”問題。

驗證人列表隨著驗證人保證金不斷的鎖定,罰沒,解鎖而變動。如果客戶端離線過長時間,它的驗證人列表就會由於過時而不能用來鑑別共識。如果客戶端經常線上,則能夠與最新的驗證人列表保持同步,但問題是在第一次同步之前,客戶端還是需要從其他通道獲取最新鎖定保證金的驗證人列表。

這個“需要從其他通道鑑別共識至少一次”的性質,正是Vitalik所說的“弱主觀性(weak subjectivity)”。在我們的上下文中,如果資訊可以在協議之內被驗證,則可稱之為“客觀的”;如果資訊必須依賴協議外的手段才可驗證,則稱為“主觀的”。在弱主觀性共識協議中,分叉選擇規則是有狀態的,因此客戶端必須初始化(有些時候是更新)這個狀態才能鑑別共識。在這裡,這個狀態被用來辨認當前鎖定保證金的驗證人(更精確的說法可能是當前驗證人列表的密碼學雜湊)。

下注共識 (Gambling on Consensus)

Casper要求驗證人將保證金中的大部分對共識結果進行下注。而共識結果又通過驗證人的下注情況形成:驗證人必須猜測其他人會賭哪個塊勝出,同時也下注這個塊。如果賭對了,他們就可以拿回保證金外加交易費用,也許還會有一些新發的貨幣;如果下注沒有迅速達成一致,他們只能拿回部分保證金。因此數個回合之後驗證人的下注分佈就會收斂。

此外如果驗證人過於顯著的改變下注,例如先是賭某個塊有很高概率勝出,然後又改賭另外一個塊有高概率勝出,他將被嚴懲。這條規則確保了驗證人只有在非常確信其他人也認為某個塊有高概率勝出時才以高概率下注。我們通過這個機制來確保不會出現下注先收斂於一個結果然後又收斂到另外一個結果的情況,只要驗證人足夠多。

POW共識同樣可以理解為是一個下注機制:礦工選擇一個塊基於它進行挖礦,也就是賭這個塊會成為主鏈的一部分;如果賭對了,他可以收到獎勵,而如果賭錯了,他會損失電費。只要所有的礦工都將他們的算力下注到同一條鏈上,使這條鏈擁有最多的工作量(即時算力下注的預測,也是算力下注的結果),共識就是安全的。POW中算力賭注的經濟價值隨著確認數的增加線性增長,而在Casper中驗證人可以通過協調使下注比例指數增長,從而使共識快速達到最大安全。

高度級共識

驗證人對每一個高度上的每一個候選塊獨立下注,給每個塊指定一個勝出概率並公佈。通過反覆下注,對於每個高度驗證人會選出唯一一個勝出塊,這個過程也決定了交易(transaction)執行的順序。如果一個驗證人在某個高度公佈的概率分佈總和大於100%,或者公佈了小於0%的概率,或者對一個無效塊指定了大於0%的概率,Casper將罰沒他的保證金。

交易最終確認(Transaction Finality)

當鎖定保證金的驗證人中的絕大多數(滿足協議定義閾值的一群驗證人:保證金比例達到67%到90%之間某個百分比)以非常高的概率(例如,> 99.9%)下注某個塊時,任何不包含這個塊的分叉都不可能勝出,此時我們說這個塊已最終確認(final)。此外,如果客戶端發現所有小於高度H的塊都已最終確認,那麼此客戶端永遠不能接受一個在高度H - 1的狀態和順序執行這些完全塊得到的狀態不一樣的分叉。這種情況下我們說這個狀態(H - 1高度的狀態)已最終確認。

因此這裡有相關的兩種交易的最終確認:交易在特定高度被執行的最終確認(也就是對應塊的最終確認,早於所有此高度之後的交易執行),以及交易執行後狀態的最終確認(需要對應塊和所有低於此高度的塊被最終確認)。

防審查(Censorship Resistance)

共識協議最大的威脅之一是礦工形成以損害非成員利益為代價最大化成員獲利的聯盟。如果Casper中驗證人的收入主要由手續費構成,一個多數聯盟就能夠通過過濾其它節點的出塊來獲取更大利益。不僅如此,攻擊者還可以賄賂節點來剔除特定地址發出的交易,只要多數節點是理性的,他們就能夠聯合起來過濾掉沒有剔除指定交易的塊。

為了抵禦多數派聯盟攻擊,Casper將共識過程看作一個合作博弈,確保每一個節點只有在由所有節點組成的聯盟中才能獲得最大利益(至少在當利益主要由協議內獎勵構成的情況下如此)。如果p%的驗證人蔘與了共識博弈,那麼他們將得到f(p) ≤ p%的收益;如果有100%的驗證人蔘與則能獲得更多回報。

更具體的說,Casper會懲罰那些不按照協議規定順序出塊的驗證人。協議會注意到出塊順序的偏離,並且扣下對應驗證人的保證金和手續費。此外,通過下注贏得的收益與參與共識博弈的驗證人數量成線性(或者超線性)關係。

吞吐量(每秒可處理的交易數)會增加嗎?

答案很可能是確定的,而原因與其說是Casper的區塊鏈架構不如說是Casper上的經濟學。不過Casper的區塊鏈設計確實支援了比POW共識更快的出塊間隔。

驗證人的收入很可能只有交易費用,因此他們有增加Gas上限的直接動機,只要他們的伺服器負荷的了。但是如果因此造成其它處理能力比較弱的驗證人跟不上節奏,他們的收入會變少。所以驗證人只會接受大家都能承受的Gas上限上漲。礦工(Miners)投資硬體的方式是購買更多的礦機(算力),而驗證人的投資硬體的方式則會是升級伺服器以獲取更高的吞吐量。礦工也有購買能獲得更高吞吐量的硬體的動力,但是這比購買算力的動力弱得多。

相對於POW, 在基於保證金的POS上實現輕客戶端更加方便。具體來說,輕客戶端無需下載區塊頭來獲得共識鑑別的安全性,或是交易執行有效性的經濟性保證。大部分的共識開銷只會影響驗證人,不會影響輕客戶端。輕客戶端也可以在保留鑑別共識能力的前提下實現低延遲。

網路分割槽的恢復

由於未最終確認的區塊中的交易可以被撤銷,Casper具有在網路分割槽後恢復的能力。在分割槽重新連上後,Casper會執行具有更高驗證人蔘與度的分割槽上獲得下注的區塊中的交易。這樣在重連之後驗證人重新下注前,分割槽雙方就對共識狀態達成了一致。驗證人的下注會收斂並以高概率最終確認具有更高驗證人蔘與度的分割槽上的某個塊。Casper很可能會在產生勝出塊之後再處理淘汰塊中的交易,不過我們還沒有決定到底是由驗證人把這些交易納入新塊,還是由Casper按照原來的順序處理。

大規模崩潰的恢復

即使在全網只剩一個節點沒有崩潰的極端情況下Casper也有能力恢復。鎖定保證金的驗證人總是獨立的對候選塊下注,雖然下注和多數驗證人一致的話回報會更高。在任何時候,驗證人從出塊獲得的回報總是比不出塊要高。如果鎖定保證金的驗證人過長時間沒有上線,他的保證金會被解鎖,新的驗證人會接替他的位置。因此Casper的安全程度可以恢復到和大規模崩潰之前一樣。

拋開經濟學術語的解釋

Casper是一個基於區塊鏈的最終一致性共識協議。想對於一致性(C)它更傾向於可用性(A)(見CAP理論)。它總是可用,並且儘可能迅速的達成一致。它健壯到足以容忍不可預計的訊息傳輸延遲,因為節點可以在收到延遲的訊息之後通過重新組織交易達成共識。由大於50%的正常節點建立的分叉總是比剩下的有潛在問題的節點建立的分叉權重更高,因此它對不超過50%的網路失效有最終容錯性(eventual fault tolernace)。需要注意的是客戶端無法知道一個有51%的驗證人蔘與的分支會不會被放棄,因為此時不知道這些驗證人中是否有惡意節點。一個塊只有在絕大多數(supermajority)驗證人(或者說保證金)參與共識的情形下才能被認為是最終確認(final)的。

驗證人有什麼責任?

作為一個鎖定保證金的驗證人,你需要對塊進行簽名以及在共識過程中下注。如果你繳納了一大筆保證金,你也許應該部署一個由多臺伺服器組成的多重簽名環境來做驗證工作,以減少伺服器異常或是被黑導致的風險。這種方案需要反覆實驗和技術專家的幫助。

為了最大化收益,驗證人需要儘可能的保持線上和服務穩定。DDoS防護服務是非常必要的。你的收益率還取決於其他驗證人的處理效能和可用性,也就是說這裡存在一個你無法直接化解的風險。如果其他節點表現不行你也會遭受損失!但是此時如果你決定完全不參與共識你會損失更多。然而額外的風險通常意味著更高的回報,尤其是當風險已經被認識到而永遠不會發生的時候。

應用和普通使用者有什麼好處?

應用和它們的使用者可以從POW轉向Casper的變化中獲得許多好處。低延遲確認可以極大的改善使用者體驗。一般情況下交易很快就能最終確認。如果有網路分割槽發生,交易依然會被執行,而交易有被撤銷的可能性這一情況會被清楚的報告給應用和其使用者。應用的開發者依然需要處理分叉的情況,和使用POW協議時一樣,但這裡共識協議會給出一個對交易撤銷可能性的清楚估量。

什麼時候有更多訊息?

請保持關注!隨著協議細節的確定,接下來的幾個月我們肯定會發布關於Casper的更多資訊。大家可以期待下模擬測試,非正式的和形式化的標準,形式化的驗證,以及Casper的實現!謝謝大家的耐心,研發需要的時間總是難以預測!: )

Origin Post by Vlad Zamfir on August 1st, 2015.

譯者: @jan
http://ethfans.org/posts/introducing-casper-friendly-ghost