Vitalik:以太坊 Serenity 設計依據綜述區塊鏈

                  火球財經 2019-02-05 18:42
                  分享到:
                  導讀

                  今天我們為大家分享Vitalik撰文闡述以太坊Serenity階段的設計依據,希望讀者們在閱讀本文之后,能夠更進一步了解以太坊Serenity背后的開發者們是如何來設計這個全新的PoS區塊鏈網絡

                  今天我們為大家分享 Vitalik 撰文闡述以太坊 Serenity 階段的設計依據,希望讀者們在閱讀本文之后,能夠更進一步了解以太坊 Serenity 背后的開發者們是如何來設計這個全新的 PoS 區塊鏈網絡。

                   
                  ●  簡單性:由于與加密經濟學相關的權益證明 (PoS) 和二次分片 (quadratic sharding) 本身就很復雜,所以協議本身的決策過程應該盡可能簡化。這一點很重要,因為它不僅能夠(i)最小化開發成本,還能(ii)降低我們無法預見的安全風險,并(iii)使用戶更容易相信協議設計者,認同某種參數選擇是合理的。如果你想要更詳細地了解有關(iii)的哲學背景,請參見 https://radicalxchange.org/blog/posts/2018-11-26-4m9b8b/。當我們在具體的功能實現中不可避免要引入復雜性的時候,這種復雜性的首選順序會是:第2層協議>客戶端實現>協議規范。  長期穩定性:協議的底層部件在構建時應該盡可能地達到理想狀態。如此一來,在相當長的一段時間內我們便無需考慮對底層進行變動,而是把精力集中在更高的層面(比如客戶端實現或者第2層協議)上,去進行任意的創新。  充足性:從本質上而言,我們應該能夠基于協議去構造盡可能多的任意類別的應用。 ●  深度防御性:協議應該能夠在各種潛在的安全假設(比如網絡延遲、故障計數、用戶動機等)下盡可能地持續運作  完全輕客戶端可驗證性:給定某個假設(比如網絡延遲、攻擊者的預算上限,1/N或者M/N的少數參與者是誠實的),驗證O?數據(理想情況下只需驗證信標鏈的數據)的客戶端應該能夠間接保證整個系統中的所有數據都是可用且有效的——即使在發生51%攻擊的情況下也是如此(請注意:這里的51%攻擊案例是“深度防御性”的一個子集)。

                  2. 為什么選擇“最終化 保證金 罰款”模型呢?

                   
                  對于諸如 Tendermint / Casper FFG / Casper CBC 這類具備傳統 BFT (拜占庭容錯) 風格的權益證明共識算法來說,它們與其它共識算法的競爭性及差異在于,這些算法使用的都是基于鏈的算法,比如點點幣 (Peercoin) 和未來幣 (NXT) 中都使用了這些算法。這些算法肯定比工作量證明 (PoW) 更好。除此以外,我們認為傳統的 BFT 風格的系列算法具有更強大的屬性,這同時也是它們擁有強烈需求的原因。 ●  極其高昂的51%攻擊成本我們希望能夠建立一個強硬的機制,即任何對權益證明區塊鏈發起51%攻擊的攻擊者都將要承擔昂貴的費用(比如數億美元),并且遭受攻擊的鏈條能夠從攻擊中快速恢復。這將使得攻擊/防御推演的結果十分不利于攻擊者。事實上,發起攻擊的結果可能適得其反,因為價格上漲給合法的持幣者所帶來的收益遠遠超過了服務中斷所帶來的損失。在BFT系列算法中,最終化回滾攻擊將產生明確的證據,該證據可用于罰沒攻擊者的保證金,從而實現這一目標。此外,我們還可以通過在社區中協調發起一次包含誠實驗證者的少數軟分叉來規避51%審查攻擊。考慮到 Casper FFG 的運作機制,一旦少數派對鏈條發起了軟分叉,多數派將必須要作出分叉選擇:要么切換到正確的分叉鏈,并且因為自身曾經的錯誤選擇損失一部分保證金,或者堅守攻擊鏈,并且為此損失絕大部分的保證金。

                  不具備最終化特性的共識算法無法實現這些屬性。

                   驗證者在線率超過50%

                  Serenity 的分片使用了一種機制,即如果隨機抽樣的驗證者委員會中有2/3的成員對來自某個分片中的區塊進行簽名,那么我們就認為該區塊已被接受。這種機制本身要求平均有大于或等于2/3的驗證者在線以接受任何分片區塊。但如果有超過50%的驗證者在線,那么我們就可以得知:除非網絡中存在顯然會違反協議規則的驗證者,否則我們將得到某種程度的保證,即區塊不會被回滾。因此,我們沒有理由不添加這么一個特性。

                  ● 解決驗證者的困境

                  所有區塊鏈都存在一個共同的問題,即驗證者沒有足夠的動力去實際驗證他們正在構建的區塊。因為在這個均衡中,如果(幾乎)每個人都是誠實的,那么對于驗證者來說,這些交易根本不值得他們浪費計算資源去校驗。

                  而在分片鏈中,這些問題被進一步放大了。我們可以通過(利用保管證明 Proofs of Custody)對簽署無效或不可用數據的行為實施大額罰款來緩解這些問題。但是,在實際執行中,實施罰款不僅需要驗證者繳納安全保證金,還要求鎖定期限足夠長,以允許其他用戶校驗驗證者所聲明的數據,并在數據出現錯誤時對其發起質詢。

                  3. Casper激勵機制中的每個參數的設定標準是什么?

                   
                  ● 基礎獎勵--證明中指明正確的來源,獲得1/4獎勵--證明中指明正確的時期檢查點,獲得1/4獎勵--證明中指明正確的鏈頭,獲得1/4獎勵--證明中指明正確的分片區塊,獲得1/4獎勵

                  在不同的情況中,實際獎勵的計算方式如下:如果 ? 是最大獎勵值,并且 ? 是執行所需操作的驗證者所占的比例,那么任何執行所需操作的驗證者都將獲得獎勵 ?*?。此外,任何未執行所需操作的驗證者將遭受罰款-?。制定這種“集體獎勵(即“如果有人表現得更好,那么每個人都會表現得更好”)”方案的目的是設定破壞因子的界限(想了解破壞因子的定義及重要性,請參閱:

                  https://github.com/ethereum/research/raw/master/papers/discouragement/discouragement.pdf)

                  需要注意的是,我們還要進一步解決兩個難題:

                  1. 如果該證明被包含在區塊鏈內的時間延遲了,那么獎勵將減少。這是為了激勵驗證者及時發布證明。

                  2. 提議者將獲得他們所包含的任意證明的獎勵的1/8。這是為了鼓勵提議者充分監聽消息,并盡可能多地接受這些消息。

                  ● 驗證者靜止漏洞

                  如果鏈條在 ???(time since finality,即達到最終化以后所經歷的時間。其中,??? > 4 個時期內未能保持最終化狀態,那么參與這個過程的驗證者的獎勵將降為零,并且第二個懲罰機制將被載入,該懲罰與 ??? 成比例。這確保了如果超過1/3的驗證者陷入靜止狀態,那么不在線的驗證者將會受到更嚴重的懲罰,并且懲罰隨著時間的推移呈二次方遞增。

                  ? 如果你的離線行為將阻礙區塊的最終化進程的話,那么你將會因為離線這一行為遭受更嚴重的懲罰

                  ? 確保一旦發生超過1/3驗證者離線的情況,由于離線驗證者的保證金在不斷減少,最終驗證者的在線率會回升到2/3。

                  在當前的參數化條件下,如果區塊無法被最終敲定,那么驗證者在2.6天后將損失1%的保證金,在8.4天后損失10%,在21天后損失50%,以此類推。這意味著,如果發生50%驗證者離線的情況,那么區塊將在21天后重啟最終化進程。

                  ● 罰沒和反相關懲罰

                  如果某個驗證者被指證刻意違反 Casper FFG 的罰沒條件,那么該驗證者所承擔的罰款會是在與他們大致相同的時間內受到懲罰的驗證者的三倍。這么做是出于以下幾個理由:

                  ? 單個驗證者作惡只會對網絡造成不良影響,但如果他們選擇與其他驗證者同流合污,那么這些隨波逐流的驗證者有必要接受嚴厲的教訓

                  ?這一機制會對實際的攻擊行為實施嚴厲懲罰,但對那些可能是誠實的單個孤立故障節點只實施非常輕微的懲罰

                  ?這一機制確保較小的驗證者所承擔的風險要比較大的驗證者的風險更少(在正常情況下,大型驗證者發生故障所造成的影響相當于一堆小型驗證者同時宕機的結果)

                  ?這一機制能夠有效阻止驗證者“跟大隊走”

                  ● 罰沒和反相關懲罰

                  如果某個驗證者被指證刻意違反 Casper FFG 的罰沒條件,那么該驗證者所承擔的罰款會是在與他們大致相同的時間內受到懲罰的驗證者的三倍。這么做是出于以下幾個理由:

                  ? 單個驗證者作惡只會對網絡造成不良影響,但如果他們選擇與其他驗證者同流合污,那么這些隨波逐流的驗證者有必要接受嚴厲的教訓

                  ? 這一機制會對實際的攻擊行為實施嚴厲懲罰,但對那些可能是誠實的單個孤立故障節點只實施非常輕微的懲罰

                  ? 這一機制確保較小的驗證者所承擔的風險要比較大的驗證者的風險更少(在正常情況下,大型驗證者發生故障所造成的影響相當于一堆小型驗證者同時宕機的結果)

                  ? 這一機制能夠有效阻止驗證者“跟大隊走”

                  ● 保管證明

                  當驗證者需要對某個數據為?,根為?的分片區塊進行證明時,驗證者需要計算出?'(其中,?'[?] =???(?[?], ????))以及新數據?'的根?'。然后,驗證者將發布一部分?'作為他們所簽署的內容的一部分,并通過發布 ????(????) 的形式來提交種子。在一定時限內,網絡中的其它節點可以對這些信息進行質詢,并要求驗證者提供他們的????參數、完整的?′值以及 ? 和 ?' 的特定分支,以證明這些數據被正確構造。如果驗證者在質詢期開始之前提前發布????參數,那么他們將受到罰沒懲罰。

                  構建這種機制是為了緩解驗證者的雙重困境。在該困境中,驗證者可能會出于懶惰而拒絕驗證數據,并假設所有其他驗證者都是誠實的。如果大多數驗證者都這么想的話,那么很可能會導致公地悲劇,最終導致鏈條接受無效的區塊。而在這一機制中,如果驗證者試圖提交沒有經過他們親自處理的數據的話,那么他們將無法計算出?'(如果他們嘗試外包給別人處理,那么外包方可能會背叛他們,并導致他們遭受罰沒懲罰)。一旦這時有其它節點提出質詢,那么這些驗證節點將無法正確回應質詢。出于效率原因,驗證者首先只提交一部分?'。一旦驗證者發布了他們的????參數,那么任何人都可以重做并檢驗他們的計算結果。如果該?'值不正確,那么檢驗者將會發動一系列質詢來炮轟該數據為?′且計算不正確的區塊。

                  4. 為什么規模是32個ETH驗證者?

                   
                  任何具備可審計容錯特性(即如果有兩個相互沖突的區塊被最終敲定,你可以分辨出是哪1/3節點作惡)的 BFT 共識算法必須讓所有驗證者都參與其中。此外,由于技術原因,你還需要通過兩輪每個驗證者都參與的流程來最終敲定某條消息。這將使我們不得不考慮去中心化/最終化時間/開銷三者的權衡(原文詳見https://medium.com/@VitalikButerin/parametrizing-casper-the-decentralization-finality-time-overhead-tradeoff-3f2011672735):假設?是網絡中驗證者的數量,?是敲定區塊的時間,ω是每秒鐘所產生的消息傳遞開銷,那么我們可以得到:

                  11.webp

                  舉個例子,如果我們能夠容忍每秒鐘發送10條消息的開銷,那么在一個擁有10000個節點的網絡中,其最終化時間至少為2000秒(約為33分鐘)在以太坊中,如果我們假設總 ETH 供應量約為 2^27 個ETH,那么在 32 ETH 保證金規模的條件下,網絡中最多有2^22個驗證者(這是在每個參與者都參與驗證的情況下;一般來說,我們認為參與驗證的 ETH 規模要減少10倍)。如果最終化時間為2個時期(即2 * 64 * 6 = 768秒),那么這意味著每秒鐘所產生的最大消息開銷將為 (2^22)/768 ≈ 5461。但我們可以容忍如此高的開銷。因為借助于BLS聚合方案,我們可以將每個簽名的邊際大小減少到1比特,并將邊際驗證復雜度降低到一個 ECADD 操作。出于另一個原因,64個時隙已經是安全范圍內的最小值:如果攻擊者操縱用于挑選提議者的隨機性,那么這個數字仍然能夠提供足夠的空間以確保每個時期中至少存在一個誠實的提議者,從而充分確保區塊能夠實現最終化。我們的計算表明:目前程度的開銷是可以接受的,但更高的開銷將會增加運行節點的難度。最后,當前的驗證者保證金規模是實現分片交聯的理想選擇(詳見下文)。 

                  5. 隨機抽樣?

                   
                  在每個時期,每個分片都會產生新的交聯。這意味著,在一個由128個驗證者組成的隨機選擇池(即“委員會”)中,有2/3驗證者簽署了一個表示自最新的交聯以來所產生的所有數據都被包含在特定分片的哈希。而之所以選擇128,是因為這個數是有效防御攻擊的最小規模。我們需要防止占比小于總驗證者集合1/3的攻擊者在隨機選擇的過程中占據委員會的2/3(通過二項式定理計算,其概率為5.55?[10^(?15)])。由于網絡中存在1024個分片,這意味著在每個時期獲取一次交聯,我們就需要有131072個驗證者,或者大約440萬ETH押注(實際上,如果ETH的押注規模小于此數,那么交聯發生的概率會降低)。如果我們提高最小保證金規模,比如提高到1024 ETH,那么這將意味著我們無法獲得足夠的驗證者來進行交聯,除非所有的ETH都押注進來。 

                  6. LMD GHOST 分叉選擇規則

                   
                  信標鏈使用的是 LMD GHOST 分叉選擇規則,具體的細節請參閱:https://github.com/ethereum/eth2.0-specs/blob/master/specs/core/0_beacon-chain.md#beacon-chain-fork-choice-ruleLMD GHOST 分叉選擇規則包含來自所有驗證者的信息,這些信息在每個時隙內有成百上千條。這意味著在正常情況下,哪怕回滾一個區塊也幾乎是不可能的。此外,由于分叉選擇取決于所有的驗證者,因此,除非攻擊者控制了接近整個驗證者集合的50%比例,否則區塊根本不可能發生回滾。再者,攻擊者也無法再通過操縱隨機性來獲得領先的優勢。 

                  7. 信標鏈/分片鏈結構

                   
                  分片系統的結構的特點在于其具有一條能夠協調所有活動的中央“信標鏈”,以及分別位于1024個分片內的鏈條。分片通過“交聯”周期性地連接到信標鏈中。(1)將分片內的所有區塊直接放入信標鏈中,并由委員會進行簽署(2)不使用信標鏈,而是采用其它結構將分片鏈相互連接第(1)種方案由于效率原因被否決了:我們希望分片內的出塊時間是6秒鐘,但是在信標鏈中每6秒進行1024個交聯將導致信標鏈內產生不可接受的高負載。第(2)種方案由于過于復雜被否決了:具有分層分叉選擇特性的中心輪輻型信標鏈結構(先找到信標頭,然后基于信標鏈來計算哪些分片區塊是合格的,并由此確定分片鏈的頭部)在具體實現和推理上遠優于任何更復雜的結構。


                  驗證 區塊 分片 最終 選擇
                  分享到:

                  1.TMT觀察網遵循行業規范,任何轉載的稿件都會明確標注作者和來源;
                  2.TMT觀察網的原創文章,請轉載時務必注明文章作者和"來源:TMT觀察網",不尊重原創的行為TMT觀察網或將追究責任;
                  3.作者投稿可能會經TMT觀察網編輯修改或補充。