作者|VitalikButerin
編譯|Jhonny
Eth1.0鏈的設計原理文檔見:
https://github.com/ethereum/wiki/wiki/Design-Rationale
Serenity設計原則
▲簡潔性:特別是由于加密經濟PoS和二次分片(quadraticsharding)在本質上很復雜,因此協議應該在其決策中盡可能地追求最大的簡潔性。這是非常重要的,因為這將能夠:
(i)最大限度地減少開發成本,
(ii)減少發生意外安全問題的風險,且
(iii)使得協議設計人員更容易讓用戶確信參數選擇的合法性。
通過此鏈接了解相關的背景信息。當我們為了實現特定級別的功能時,是無法避免一定的復雜性的。復雜性的優先級別是:Layer2協議的復雜性>客戶端實現的復雜性>協議規范的復雜性。
▲長期穩定性:理想情況下,應該構建較低級別的協議,這樣就不需要在10年或更長時間內更改協議,并且任何需要的創新都可以在更高的級別(客戶端實現或Layer2協議)上進行。
▲充裕性:在協議之上應能夠構建盡可能多的應用程序類別。
▲深度防御性:協議應能夠在各種可能的安全性假設(例如有關網絡延遲、故障數量、用戶動機的假設)的情況下繼續運行。
▲輕客戶端的可驗證性:鑒于一些安全性假設(例如網絡延遲,攻擊者預算界限,只存在1/n或少數誠實的驗證者),驗證O?數據(理想情況是只驗證信標鏈)的客戶端應該能夠獲得間接的保證,即整個系統的所有數據是可用且有效的,即使在受到51%攻擊的情況下(備注:這是“深度防御性”方面的其中一個目標)。
Layer1與Layer2的折衷
讀者可以先閱讀我之前的兩篇文章:Layer1ShouldBeInnovativeintheShortTermbutLessintheLongTerm和SidechainsvsPlasmavsSharding。
在任何區塊鏈協議設計中,在Layer1(即共識層)引入更多的特性,與構建一個更為簡潔的Layer1協議并在Layer2(即應用層)上允許構建這些特性,這兩者之間各有折衷之處:
支持Layer2的論據:
減少共識層的復雜性(參見上方提到的“簡潔性”);
減少修改協議層的必要性(參見上方提到的“長期穩定性”):
--降低無法達成共識的風險;
--減少協議治理和風險方面的工作量
隨著時間的推移,擁有更多的靈活性和實現新想法的能力
支持Layer1的論據:
減少由于缺乏強制每個人升級到新協議(即硬分叉)的機制而導致進展停滯的風險;
可能會降低整個系統的復雜度;
如果Layer1不夠強大,那么就不可能在Layer1上搭建具有所需性能的Layer2系統(參見上方提到的“充裕性”)
以太坊2.0的設計在很大程度上都是要致力于謹慎地在Layer1和Layer2之間保持平衡。這包括(i)類似圖靈完備的、包含豐富狀態的代碼執行,(ii)在數據有效性和計算方面的擴展性,以及(iii)更快的區塊確認時間,這對于協議實現都是非常必要的,因為:
如果不實現(i),那就無法具有穩健的信任模型來搭建Layer2應用程序。
如果不實現(ii),那擴展性將僅限于借助狀態通道或者Plasma等技術實現,而這些技術在推廣以及資金鎖定和/或大規模退出方面存在挑戰。
如果不實現(iii),那就無法在不使用通道技術的情況下進行快速交易,而通道技術在推廣以及資金鎖定和/或大規模退出方面存在挑戰。
但以太坊2.0也將一些其他的特性有意地留給了Layer2來實現:(i)隱私性,(ii)高級編程語言,(iii)可擴展的狀態存儲,以及(iv)簽名方案。這些特性留給Layer2來實現,是因為這些方面都是快速創新的領域,現有的許多方案具有不同的特性,并且不可避免地要進行權衡,以獲得更好、更新的方案。比如:
隱私性:環簽名(RingSignature)機密性值(confidentialvalues)vs.ZK-SNARKs和ZK-STARKs,Rollupvs.ZEXE等等。
高級編程語言:聲明式編程vs.命令式編程,語法,形式化驗證特性,類型系統,保護性特征(比如禁止在算術表達式中使用非純函數),本地支持的隱私特征等等;
V神:NFT需要經歷多個寒冬才能理解它的長期價值:金色現場報道,10月26日消息,由萬向區塊鏈實驗室主辦的第七屆區塊鏈全球峰會在上海舉行,以太坊創始人、萬向區塊鏈實驗室首席科學家Vitalik Buterin分享稱,DeFi和NFT發展的都非常不錯,但他認為當前存在一個現象,人們很努力以至于使得DeFi很復雜,比如收益耕作使得智能合約出現合約風險,風險可能會大于收益。他認為最有用協議還是最簡單的那種。他還認為,NFT非常具有價值,他給了創作者一個全新的商業模式,但他提醒公眾,人們不應該假設說NFT按當前的形式在經濟上是具有可持續性的,NFT需要經歷多個寒冬。“我們看到這個領域的項目在6個月到1年里表現很不錯,但1-2年時間里卻會變得無名,我覺的必須要耐心等待,必須理解長期可持續的NFT會是怎么樣的。[2021/10/26 20:58:19]
可擴展的狀態存儲:賬戶模型vs.UTXO(未使用交易輸出)模型、不同的租金方案、原始默克爾分支見證(rawMerklebranchwitnesses)vs.SNARK/STARK壓縮vs.RSA累加器,稀疏的默克爾樹vs.AVL樹vs.基于使用情況的不平衡數等等(除此之外,還有針對驗證狀態轉換的不同方案)。
簽名方案:Schnorr簽名、BLS簽名、Lamport簽名等等
為何使用權益證明?
參見:
https://github.com/ethereum/wiki/wiki/Proof-of-Stake-FAQ
https://medium.com/@VitalikButerin/a-proof-of-stake-design-philosophy-506585978d51
為何使用Casper?
當前權益證明(PoS)共識算法主要要三個陣營:
受到中本聰啟發的權益證明算法(比如Peercoin(點點幣)、NXT(未來幣)、Ouroboros(Cardano的共識算法)等實用的算法)
受到PBFT(實用拜占庭容錯)啟發的權益證明算法(比如Tendermint、CasperFFG、Hotstuff等算法)
CBCCasper(解釋詳見和)
在后兩個陣營存在一個問題,即是否使用以及如何使用保證金存款(質押金)和Slashing(質押金罰沒)。這三種權益證明機制都優于工作量證明(PoW),但我們想在本文捍衛一下以太坊2.0使用的方法。
質押金罰沒(Slashing)
以太坊2.0使用一種Slashing(質押金罰沒)機制,即被檢測到行為不端的驗證者將會被懲罰,最輕微的懲罰是銷毀~1%的質押金,最嚴重的懲罰是銷毀驗證者的所有質押金。
我們通過以下幾個方面來為Slashing機制的使用進行辯護:
增加攻擊成本:我們想要確保的是,任何對PoS鏈發起的51%攻擊都將導致攻擊者消耗一筆非常大的費用(比如價值數億美元的加密貨幣),且系統能夠快速地從任何攻擊中恢復。這使得攻擊/防御演算對于攻擊者來說非常不利,并實際上可能使攻擊適得其反。
克服驗證者帶來的困境:節點開始偏離“誠實”行為的最現實直接的方法就是疏忽職守(比如驗證者本該參與驗證,但卻不參與驗證;或者在不該簽名時進行簽名等等)。驗證者帶來的困境詳見,比特幣SPV挖礦就是這種情況發生的例子,這將導致非常嚴重的后果。對非誠實的驗證者進行驗證懲罰有助于緩解這些困境。
上方第2點的一個更為微妙的例子就是,在2019年7月Cosmos鏈上的一名驗證者因對兩個相互矛盾的區塊進行簽名而被罰沒了。對此事件的調查結果顯示,該驗證者同時運行了一個主節點(primarynode)和一個備份節點(backupnode),該驗證者的目的是為了確保當其中一個節點下線時,該驗證者依舊能夠獲得獎勵,而這兩個節點恰好同時啟動了,導致這兩個節點對兩個相互矛盾的區塊進行了簽名。
如果同時擁有一個主節點和備份節點成為常態,那么攻擊者就可以對區塊鏈網絡進行分區,并使所有驗證者的主節點和備份節點提交不同的區塊,從而導致兩個相互矛盾的區塊被敲定。slashing懲罰有助于在很大程度上抑制這種操作,降低發生這種情況的風險。
共識算法的選擇
在上文提及的PoS共識算法的三個陣營中,只有后兩個陣營(即受PBFT啟發的共識算法和CBCCasper)這兩種算法中存在finality(確定性)的概念,即某個區塊是通過這種方式得以確認的:只有當很大一部分驗證者(受PBFT啟發的算法要求至少有1/3的驗證者,CBCCasper算法要求至少有1/4的驗證者)行為不當并因此被罰沒時,該區塊才會被逆轉;
V神:以太坊2.0需要很長時間 各方批評激發了改善工作:8月12日消息,推特網友Sabin P提問稱,可擴展性非常重要,這就是人們在ETH中等待多年的原因。今天的技術最終將成為絕對的未來,但是你不認為2.0會花費很多時間嗎?V神回復稱,是的,2.0需要很長時間。這就是為什么我很高興我們終于有了測試網,并且同時擁有其他擴展技術如rollups。此外他還稱,對以太坊肯定有批評,但我敢肯定,以太坊的人也知道其中絕大部分,這些批評激發了大家為改善局面所做的工作。[2020/8/12]
而第一個陣營--受中本聰啟發的(最長鏈規則)共識算法無法實現這種意義上的確定性(finality)。
需要注意的是,確定性要求大多數驗證者在線,而這已經是Sharding(分片)機制中已經存在的要求,即Sharding機制要求每個由隨機驗證者組成的委員會中的2/3驗證者對交聯(crosslink)進行簽名,只有這樣,該交聯才將被信標鏈接受。
我們選擇CasperFFG只是因為它是協議在實現確定性時可用的最簡單的算法。當前我們正在積極探索在以太坊2.0的階段3將之切換為CBCCasper。
Sharding,或者說我們為何討厭超級節點?
對于Layer1擴展而言,sharding(分片)方式的一個主要替代方法就是使用超級節點(supernodes),超級節點要求每個共識節點都擁有一個強大的服務器,這樣該節點就能單獨地處理每一筆交易。
基于超級節點的擴展方式很方便,因為很容易實現:這與當前很多區塊鏈采取的方式一樣,除了需要進行更多的軟件設計工作來以一種更加并行化的方式進行構建。
我們不選擇這種使用超級節點的方式,主要理由如下:
驗證池中心化風險:在一個基于超級節點的系統中,運行一個節點將需要消耗一筆高昂的固定成本,這使得能夠參與進來的用戶數量受到限制。雖然有些人會反駁道“在大多數PoW和PoS加密貨幣中,共識是由5-20個池子(礦池或驗證池)控制的,而這些池子可以很好地運行節點。”但這種觀點的問題在于忽視了其中存在的中心化壓力風險,即便是財力雄厚的池子之間也存在這種風險。如果運行驗證者的固定成本相對于回報來說是非常高的,那更大的驗證池就能夠提供比小型驗證池更低廉的手續費,這將可能導致那些小型的驗證池被排擠并感受到進行合并的壓力。而在分片系統中,質押更多ETH的驗證者將需要驗證更多的交易,因此成本并不是固定的。
云端中心化風險:在一個基于超級節點的系統中,用戶在家里進行staking就變得不可行了,因此大多數staking更有可能發生在云計算環境中。這將創建一個單點故障。
抗審查性降低:如果沒有達到高計算帶寬要求,用戶就不可能參與共識,這使得檢測和審查驗證者變得更加容易。
擴展性:在一個基于超級節點的系統中,隨著交易吞吐量的增加,上文提及的風險也會相應地增加,而分片系統能夠更加輕松地處理交易量的增長。
上述這些中心化風險也是我們為何不會試圖實現以太坊的超低延遲性(低于1秒)的原因,而是選擇(相對)保守的延遲時間。在以太坊2.0系統中,使用盡可能少或盡可能多的ETH以及使用盡可能少或盡可能多的計算能力來參與是可能的(盡管你需要在ETH和計算能力方面相一致,即你無法在僅擁有很少計算能力的情況下質押大量的ETH,反之亦然),且固定成本是最小化的,盡管這種成本會隨著你質押的ETH的數量的增長而增加(一旦你質押的ETH數量超過了32,768ETH,那么大部分時間你將在驗證所有的分片鏈(備注:共計1024條分片鏈,每個驗證者身份需要質押32ETH,因此1024*32=32,768))。
安全模型
人們通常認為區塊鏈的安全性依賴于“大多數參與者是誠實的”這一假設,即≥50%的參與者將會誠實地遵循既定的協議,會為了個人的利益放棄叛變的機會。
事實上,(i)“大多數參與者是誠實的”這種假設并不切實際,因為參與者可能會“懶惰(lazy)”,在不驗證區塊的情況下簽署區塊(參見驗證者帶來的困境和比特幣SPV挖礦導致的分叉),這都是非常普遍的叛變情況;但幸運的是,(ii)區塊鏈通常會通過一些安全模型(而非假定大多數參與者將保持誠實)來維護自身的安全特性。
一種常見的較為嚴苛的安全模型就是非協同的理性多數模式(uncoordinatedrationalmajority),即參與者會按照自己的利益行事,但相互協同的參與者數量不會超過一定的比重(在簡單的PoW鏈中,這一比重為23.2%)。
另一個更為嚴苛的安全模式是應對最糟情況的模式,即當單個參與者控制了超過50%的算力或質押金時,此時的問題就變成了:
V神:礦工很難在以太坊占據主導地位:8月11日,有推特網友提問稱“以太坊不是從由一個單一職業,即礦工統治的系統,轉移到由另一個單一職業Stakers(質押者)統治的系統嗎?”對此,V神回應稱,在我看來,礦工很難在以太坊占據主導地位。[2020/8/11]
(1)在這種情況下,我們能保證驗證者在試圖破壞整條鏈時將付出非常高昂的成本嗎?
(2)我們可以無條件地保持哪些保證?
在PoS鏈中,slashing(對質押金的罰沒)可以提供上方第一個問題的保證,即當攻擊者試圖破壞整條鏈時,將需要成大非常高昂的成本。在不存在分片的區塊鏈(比如當前的以太坊1.0鏈)中,每個驗證所有區塊的節點都會通過提供以下兩個保證來完成上方第二個問題的要求:(i)最長的鏈是有效的,且(ii)最長的鏈也是可用的(通過此鏈接查看“數據可用性”的重要性的理論依據)。
在以太坊2.0中,我們通過sharding(分片)的方式來實現深度防御,即通過將隨機選擇的驗證者委員會組合起來,基于大多數驗證者將保持誠實的安全模式,以實現有效性和可用性保證,且通過托管證明(proofofcustody)來防止懶惰的驗證者(即如果驗證者“懶惰”不參與驗證將會面臨懲罰),通過欺詐證明(fraudproofs)和數據可用性證明(dataavailabilityproofs)在無需下載和驗證所有數據的情況下檢測無效和不可用的鏈。這將允許客戶端拒絕無效和不可用的鏈,即便當這條鏈是由大多數PoS驗證者支持的鏈。
客戶端可以通過某種保留共識的方式來檢測交易的審查性(詳見),但這方面的研究還沒有整合到以太坊路線圖之中。
下表中展示了預計的安全特征:
Casper設置的激勵機制
基本獎勵(Basicrewards)
在每個epoch期間(在以太坊2.0中,每生成64個區塊(大約6.4分鐘)稱為一個epoch),每個驗證者都要進行“證明(attestation)”,也即對鏈頭(head)進行投票簽名(鏈頭也就是頂端區塊)。如果驗證者的“證明”被包含在了鏈頭中,那該驗證者將獲得獎勵,這個獎勵由五個部分組成:
因“證明”被包含在頂端區塊中而獲得的獎勵;
因“證明”明確了正確的epoch檢查點而獲得的獎勵(備注:每個epoch期間的最后一個slot被稱為checkpoint(檢查點),slot為協議設定的生成一個區塊所需的時間(6秒));
因“證明”明確了正確的鏈頭(頂端區塊)而獲得的獎勵;
因“證明”被迅速地包含在鏈上而獲得的獎勵(如果“證明”是在1個slot之后就被包含在鏈上,那驗證者將獲得全部獎勵;如果在n個slot之后才被包含在鏈上,那獲得的獎勵將是全部獎勵的1/n);
因“證明”明確了正確的分片區塊而獲得的獎勵。
在每種情況下,實際獎勵的計算如下。如果B是基本的獎勵,P是執行所需“證明”操作的一部分驗證者,那么任何執行了所需操作的驗證者所獲得的獎勵將是B*P,而任何本該執行相關操作但卻未進行該操作的驗證者將受到-B的懲罰。這種“集體獎勵”機制的目標是“如果有人表現得更好,那每個人都表現得更好”,從而限制惡意破壞因素。(參見本文查看有關惡意破壞因素的描述以及為何限制這些因素非常重要)
需要注意的是,上方第4點是一個例外;這種獎勵取決于“證明”被采納的延遲性,而不是取決于驗證者的行為,而且沒有懲罰的風險。
基本獎勵B本身的計算方式是
,其中D1...Dn是驗證者質押金的規模,k是一個常量。這是兩種常見模式的折中方案,這兩種常見的模式是(i)設置固定的獎勵率,也即k*Di,(ii)設置固定的總獎勵,也即
。
反對(i)的主要論據是,這種模式給網絡帶來了兩個方面的不確定性:幣的發行總量不確定,以及參與質押的總數不確定(因為如果固定的獎勵率太低,那基本沒人會參與進來,這威脅了整個網絡;而如果固定的獎勵率太高,那將有太多的人參與進來,使得幣的發行量出乎意料的高)。
反對(ii)的的主要論據是,這種模式將會使網絡更容易遭受“discouragementattacks”攻擊,詳見。
采取基本獎勵的方式折衷了這兩種方法,并避免了每種方法的最壞結果。
區塊提議者將“證明”包含在區塊中之后獲得的獎勵是基本獎勵的1/8,這樣的目的是鼓勵區塊提議者盡可能地監聽信息并接受盡可能多的信息。
達到收支平衡的在線時間
假設存在兩種驗證者:(i)發揮作用的在線驗證者,和(ii)離線的驗證者,如果前一類驗證者部分是P,基本的獎勵是B,那么在線驗證者預計將獲得的獎勵是:上方第1、2、3、5種情況下的獎勵B*4P上方第4種情況的獎勵7/8*B*(P(P*(1-P))/2(P*(1-P)^2)/3...)(因為“證明”有可能會因為驗證者缺席而延遲被包含在鏈頭中)區塊提議者獎勵1/8*B*P。驗證者缺席(即本該參與驗證而實際上并未進行驗證)將受到的懲罰是B*4。因此,如果所有其他驗證者都在線,那驗證者在線時將會獲得B*5的獎勵,而離線時將會受到B*4的懲罰,因此如果驗證者在線的時長為≥4/(45)≈44.44%,那驗證者將能夠處于不賠不賺(收支平衡)的狀態。如果P=2/3(即在線的驗證者占所有驗證者總數的2/3),那驗證者將會因為在線而獲得的獎勵是
BB六問V神討論完全分權 并稱完全分權是關于誰投票的問題:4月8日,V神發推文稱,那些說“完全的權力下放是多余的,你只需要非監護”的人并沒有抓住重點。V神解釋稱,一個完全去中心化(或“無服務器”)的應用程序是有價值的,因為它給用戶信心,即它將永遠在那里,所以用戶可以安全地在它的基礎上構建。而對此,Block.One首席執行官Brendan Blumer于推特評論向V神發問稱:1.如何定義完全分權?2.完全分權存在于哪里?3.完全去中心化的事物會改變嗎?4.如果會,由誰來決定呢?5.它必須是民主的嗎?有錢有勢的嗎?6.通過礦池或超級節點進行的委托如何影響這種狀態?與此同時,BB還表示,在許多人使用“權力下放”一詞的方式中,唯一可行的定義是,任何一個政黨或政黨集團都無法改變或審查的分布式數據庫;但這在任何主要的區塊鏈中都不存在。這是關于誰投票的問題:礦工、代幣持有者還是其他人。[2020/4/8]
≈B*(2/3*4.1257/8*0.81)≈B*3.46,或者將為因為在線時長≥53.6%而達到收支平衡的狀態。
但是,如果P低于2/3(即在線驗證者的數量低于總數的2/3),那針對離線的驗證者將會受到稱為“inactivityleak”的懲罰。
Inacivityleak
如果以太坊2.0鏈在超過4個epoch的期間都未能實現確定性(finality),那將會增加額外的懲罰,使得最大可能的獎勵是零(未能正確執行操作的驗證者受到懲罰),且還會增加第二個懲罰,此懲罰將會根據在多少個epoch期間未能實現finality而成比例地增長。這是為了確保如果超過1/3的驗證者下線,那這些離線的驗證者將會受到更為嚴重的懲罰,且這種懲罰會隨著時間的推移而成倍地增長。
這將帶來三個影響:
離線驗證者將會受到更嚴重的懲罰,因為此時驗證者的離線實際上會阻止區塊被敲定;
服務于“反相關性懲罰”的目標(下文將進一步解釋)
確保如果超過1/3的驗證者同時離線時,最終上線的驗證者數量將恢復至總數的2/3,因為離線驗證者不斷減少的質押金將會導致他們被驅逐出驗證者行列。
基于當前這種參數化,如果區塊停止了被finalize(敲定)的進程,那驗證者將會在2.6天之后損失1%的質押金,在8.4天后損失10%的質押金,在21天后損失50%的質押金。
這意味著,如果50%的驗證者離線了,那區塊會在21天之后重新開始被finalize,因為21天之后,所有離線的驗證者已經損失了50%的質押金(16ETH),而如果驗證者的質押金低于16ETH將被驅逐出驗證者行列。
Slashing&反相關性懲罰
如果驗證者被發現違反了CasperFFG的slashing(罰沒)條件,那該驗證者將受到懲罰(損失一部分質押金);如果大約在同一時間還有其他驗證者受到slashing懲罰(具體來說,就是從該驗證者被懲罰的前18天到該驗證者退出驗證者行列的這段時間),那這種懲罰將是之前的三倍。這樣做有幾個目的:
只有當某個驗證者同時與很多其他驗證者一起行為不當時,該驗證者的行為才會對網絡造成真正的損害,因此這種情況下的懲罰會更加嚴重;
這會對實際的攻擊行為進行嚴重地懲罰,但對可能并非惡意的單個獨立失誤采取非常輕微的懲罰;
這確保了小型驗證者將比大型驗證者承擔更少的風險(因為在正常情況下,只有大型驗證者才會在同一時間失效);
這抑制了所有人都加入最大的驗證池中。
BLS簽名
我們將使用BLS簽名,因為BLS簽名是聚合友好型的:由密鑰k1和k2(對應的公鑰K1=G*k1,K2=G*k2,其中G是橢圓曲線的基點)對消息M進行的任意兩個簽名S1和S2都可以簡單地通過橢圓曲線點加法聚合起來:S1S2。這允許生成數千個簽名,每個簽名的邊際成本就是一個數據位(用于表示在該聚合簽名中存在一個特定的公鑰)和一個用于計算的橢圓曲線加法。
需要注意的是,這種形式的BLS簽名易遭受流氓密鑰攻擊(roguekeyattackes):如果你看到其他驗證者已經公布了公鑰K1...Kn,那你可以生成私鑰r并公布一個公鑰G*r-K1-...-Kn。聚合的公鑰將是G*r,這樣將能夠自己對聚合的公鑰進行簽名驗證。解決這個問題的標準方法是需要一個所有權證明(proofofpossession):基本上就是某條針對私鑰k和公鑰k對公鑰進行驗證的簽名。這確保了你控制了與你公布的公鑰相連接的私鑰。
我們使用驗證者抵押消息的簽名作為所有權證明,該簽名明確了簽名的密鑰以及其他重要的信息,比如取款密鑰。
BM發推特感謝V神幫助提升DPOS終版共識機制:EOS的創始人BM剛剛在推特上感謝V神幫助EOS開發團隊改善DPOS BFT終版共識機制,并附上其在5月16日早上于Medium發布的一篇名為《DPOS BFT——流水線結構拜占庭容錯機制》的文章,說明EOS.io的最終版共識機制原理。昨天晚上,以太坊的創始人Vitalik Buterin在EOS.io的Github專區評論,指出EOS.io最近更新的DPOS兼拜占庭容錯機制無法保證區塊的安全,并建議使用以太坊團隊提出的Casper FFG中的算法。[2018/5/16]
隨機選擇驗證者
用于實現隨機性的種子(seed)會通過對區塊提議者必須揭露的一個值進行“mixingin”(即seed<-hash(seed,new_data))從而在每個區塊中進行更新。就像托管證明子密鑰(subkey)一樣,驗證者的值(values)是在驗證者進行質押之后就立即確定好的,第三方無法計算出子密鑰,但是當子密鑰被資源揭露時對其進行驗證(這種機制有時叫做RANDAO)。
這確保了每個區塊提議者都對隨機性種子有“位操作”:提議者可以提議區塊,也可以不提議。如果提議者不提議區塊,那將錯過很多的獎勵。此外,由于長期委員會(persistentcommittee)和交聯委員會(crosslinkcommittee)的規模很大,因此對隨機性的操控幾乎肯定是無法讓少數攻擊者控制任何一個委員會中的2/3的驗證者。
未來我們計劃使用VDF(可驗證延遲函數)來進一步增加隨機性種子抵御操控的魯棒性。
打亂驗證者(Shuffle)
在每個epoch期間,我們使用swap-or-notshuffle的方式來打亂驗證者并分配職責。這種算法確保了:
由于打亂驗證者(shuffle)就是一種置換,在每個epoch期間,每個驗證者都會被指定為一個交聯委員會的成員(從而使驗證者的工作量穩定,并減少隨機性操控帶來盈利的可能性);
由于打亂驗證者(shuffle)就是一種置換,在每個epoch期間,每個驗證者都會被指定為一個長期委員會的成員;
交聯委員會
在每個epoch期間,每個分片都會進行一次交聯(crosslink),即從分片委員會中隨機選擇2/3的驗證者(每個分片委員會的驗證者數量約為128名)對自上一次交聯以來在該分片中包含的所有數據的哈希進行簽名(由于分片中的交聯可能失敗,因此該哈希最多可以代表前64個epoch的數據;如果分片中連續好多次的交聯失敗,那可能需要實現多次成功的交聯才能趕上)。
每個分片委員會的驗證者數量被設定為128名,因為這是一個抵御攻擊者在控制少于1/3的所有驗證者的情況下偶然地控制2/3的委員會成員的最低數量,通過二項式定理,攻擊者控制2/3的委員會成員的幾率是5.55*10^(-15)
由于以太坊2.0系統中將有1024條分片鏈,這意味著要想每個分片鏈在每個epoch期間進行一次交聯,那我們將需要131072名驗證者(備注:1024*128=131072),或者說,以太坊2.0系統中需要質押大約440萬ETH(實際上,如果質押的ETH少于這個數,那分片鏈的交聯發生的次數就會更少)。而如果將最低的質押限制提高(比如提高至1024ETH,當前確定的是32ETH),那意味著我們將無法獲得足夠多的驗證者數量來實現在每個epoch期間在每個分片鏈上進行交聯,除非所有的ETH都質押了進來。
每個epoch(64個區塊,約6.4分鐘)之后,信標鏈都會重新為每個分片鏈重組一個分片委員會(也即打亂驗證者)。對驗證者進行快速打亂,是為了確保如果攻擊者想要攻擊某條分片鏈,那該攻擊者將需要快速地破壞(控制)該分片委員會。
長期委員會
在每個27小時左右的時間段內,系統將會為每條分片鏈選擇一個長期委員會(persistentcommittee)。在任何時間,以太坊2.0系統中的每個驗證者都是其中某個長期委員會的成員。長期委員會負責提議分片區塊、為用戶提供某種程度的有關分片區塊的保證(直到分片區塊包含在了某次交聯中),且輕客戶端可以借助長期委員會。為了保持P2P網絡的穩定性和輕客戶端的效率,長期委員會的變更相對較少(而分片委員會每隔約6分鐘就更換一次)。
每個長期委員會的驗證者數量上限是128,因此如果系統中的驗證者數量超過了131072,那任何時候都會有驗證者不被選中進入任何一個長期委員會中;這減少了不必要的驗證浪費。
為了進一步維護網絡的穩定性,并不是所有的驗證者都會同時從n時間段的長期委員會中輪換為n1時間段的長期委員會;而是每個驗證者的輪換都會有所延遲,直到下個時間段的某個隨機時間點再進行輪換。
LMDGHOST分叉選擇規則
信標鏈使用LMDGHOST分叉選擇規則,相關描述參見。
LMDGHOST分叉選擇規則會合并來自所有驗證者的信息,確保在正常情況下任何一個區塊都不可能會被逆轉。由于該分叉選擇規則依賴于所有的驗證者,這也確保了除非攻擊者控制了50%以上的驗證者,否則無法逆轉區塊,因為這種情況下攻擊者無法通過操控隨機性來獲得很大的優勢。
信標鏈/分片鏈結構
以太坊2.0分片系統的結構包含一個協調所有活動的中心“信標鏈”,以及1024條分片鏈。每條分片鏈都會定期地通過交聯(crosslink)的方式與信標鏈相連接。
這種分片結構的替代方案:
(1)通過委員會對分片區塊進行簽名,將所有分片區塊都直接地放入信標鏈中;
(2)不存在信標鏈,而是通過某種結構將所有的分片鏈連接起來。
上述第(1)種結構被舍棄的原因是:對分片鏈區塊設置一個6秒的時間(slot)是可取的,但是每6秒在信標鏈上進行1024次交聯將會導致信標鏈承受非常高的負荷。
上訴第(2)中結構被舍棄的原因是:中心輻射型的信標鏈結構比任何復雜的構造都更容易實現和理解。
分片鏈的設計
每個分片都是一條半獨立的鏈,它可以比交聯聚合區塊更快遞處理區塊(目標是3-6秒)。這使得交易在被信標鏈(通過交聯的方式)確認之前,能夠通過分片長期委員會快速地獲得一定程度的確認。
分片鏈結構是這樣的,每個區塊都由分片委員會的每個驗證者進行證明(attest),這保證了驗證的簡單性,并確保分片區塊獲得了程度相當高的確認;大多數處理較低價值的應用應該都可以依賴于單次確認。
在每個epoch開啟時,每個分片區塊都包含了一個指向其父塊的pointer和一個指向信標區塊的pointer。信標鏈和分片鏈之間的這種半緊密耦合是為了(i)確保分片鏈知道有關其長期委員會的信息(因為此信息是由信標鏈生成的),同時(ii)使驗證分片鏈區塊稱為一個決定哪條鏈才是規范信標鏈的可行方式。
分片鏈狀態(獎勵、懲罰、歷史累加器)被故意設計成小于區塊大小,目的是確保如果欺詐證明有需要,分片鏈狀態可以完全被放入信標鏈之中(雖然這可能只會在階段2放寬限制,在階段2,每個單獨的執行環境的狀態將受到此大小的限制,但所有狀態合并起來將非常大,因此欺詐證明將需要默克爾證明)。
交聯數據
交聯包含了data_root,即自上次交聯以來,包含了某條分片中所有分片區塊的數據結構的默克爾根(Merkleroot)。這種交聯數據結構根有多重目標:
使信標鏈知道哪些才是規范的分片鏈區塊;
創建一個簡單的字節數組,可以通過不同的方法(托管證明、數據可用性證明)來驗證其可用性,并保證可以通多交聯來對分片區塊進行完全恢復。
創建一個簡單的字節數組,可以對欺詐證明進行評估。
驗證者生命周期
質押
驗證者通過發送一筆交易來進行ETH質押(這筆交易會調用部署在Eth1.0鏈上的抵押合約(depositcontract)的一個函數),最終我們會在Eth2.0鏈上加入進行質押的方式。驗證者的這一操作明確了:
與用于對消息簽名的私鑰相對應的公鑰;
取款憑證(即公鑰哈希,當驗證者在完成驗證之后,公鑰哈希將用于提取資金)
質押金額
這些值都是由簽名密鑰進行簽名的。將簽名密鑰(signingkey)和取款密鑰(withdrawalkey)分開,目的是讓更具安全風險的取款密鑰得更加安全(取款密鑰處于離線狀態,不會與任何質押池進行共享等等),而簽名密鑰則用于在每個epoch期間對消息進行簽名。
抵押合約(depositcontract)中保留著所有質押的默克爾根(Merkleroot)。一旦驗證者質押的默克爾根被包含在了Eth2.0鏈中(通過Eth1.0數據投票機制),Eth2.0區塊提議者就可以提交一個該質押的默克爾證明,并啟動質押過程。
激活
當某個驗證者往抵押合約中發送了一筆交易之后,就立即加入了驗證者登記表中,但該驗證者一開始處于未激活狀態。只有當至少4個epoch之后,該驗證者才會被激活;驗證者之所以需要等待至少4個epoch(每個epoch大約6.4分鐘),是為了確保RANDAO沒有被操縱,且如果很多驗證者同時加入進來,那N可能會超過4。
如果Eth2.0中已經存在的驗證者總數是|V|,那每個epoch期間能夠新加入的最大驗證者數量將是max(4,|V|/65536);如果更多的驗證者想要加入進來,那他們將需要排隊,系統將盡可能快地進行處理。
退出
當某個驗證者從Eth2.0系統中退出時(無論是通過發布一個自愿退出消息,還是由于被罰沒而退出),那該驗證者也將需要進行排隊才能從系統中退出,每個epoch期間能夠退出的最大驗證者數量與上文所述的能夠新加入的最大驗證者數量一樣。
之所以設置這種新加入/退出排隊的限制,是為了確保系統中的驗證者總數不會在任何兩個時間點之間變化太快,這確保了只要驗證者足夠頻繁地登入(如果驗證者總數≥262144,那驗證者保證能夠每1-2個月登入一次),那就能保證以太坊新舊兩條鏈之間依舊存在確定性。相關原理參考和。
取款
一旦驗證者成功地通過排隊退出了,還需要等待大約27小時的時間才能進行取款。這一等待時間有幾個作用:
這確保了如果該驗證者有不當行為,將有時間抓獲該不當行為,并對該驗證者進行罰沒(slashing);
這給予系統時間將最后一段時間的分片獎勵發放給該驗證者;
這為對托管證明發起挑戰提供了時間。
如果驗證者被罰沒了,那取款時間還將進一步延遲約36天。這是對驗證者的進一步懲罰(并強迫他們持有ETH;相比于那些想要支持以太坊但只是不小心犯錯的驗證者受到的懲罰,這使得那些想要破壞以太坊區塊鏈的惡意驗證者受到的懲罰將要更嚴重),同時也給系統預留了時間,用于計算在此期間也被罰沒的其他驗證者的數量。
在階段0期間,想要“取款”的驗證者實際上是還不能進行取款的;在之后的階段,將能夠把驗證者取出的資金轉移至某個執行環境中。
有效余額
大多數基于驗證者余額的計算都使用驗證者的“有效余額(effectivebalance,EB)”;唯一的例外就是有關增加或減少驗證者余額的計算。只有當驗證者的余額B低于EB或者高于EB1.5時,EB才會調整為等于floor(B)。這是為了確保有效余額不會經常改變,減少每個epoch期間重新計算狀態所需的hashing量;平均而言,只需要更新余額,而每個驗證者只需相對更少地對有效余額進行更新。
分叉機制
Fork數據結構包含了(i)當前的“forkID”,(ii)前一個“forkID”和(iii)切換這兩個分叉的slot。當前區塊高度的forkID影響著所有消息的有效簽名;因此,使用一個forkID簽名的消息對于使用任何其他forkID的驗證函數無效。
通過在某個“forkslot”增加一個狀態轉換就可以進行分叉。簽名驗證函數將使用消息所在的slot的forkID來驗證該消息,這個forkID有可能是前一個forkID,也有可能是當前的forkID。
如果任何用戶不想要加入某個分叉,只需繼續留在那條沒有在forkslot改變forkID的鏈上。這兩條鏈都可以繼續存在,驗證者可以自由地對這兩條鏈進行驗證,且不會受到罰沒懲罰。
備注:譯文有所刪減
原文鏈接:
https://notes.ethereum.org/s/rkhCgQteN
正文中涉及的鏈接:
:https://radicalxchange.org/blog/posts/2018-11-26-4m9b8b/
:https://vitalik.ca/general/2018/08/26/layer_1.html
:https://vitalik.ca/general/2019/06/12/plasma_vs_sharding.html
:https://vitalik.ca/general/2018/12/05/cbc_casper.html
:https://medium.com/@aditya.asgaonkar/casper-cbc-simplified-2370922f9aa6
:https://eprint.iacr.org/2015/702.pdf
:https://bitcoin.stackexchange.com/questions/38437/what-is-spv-mining-and-how-did-it-inadvertently-cause-the-fork-after-bip66-wa
:https://twitter.com/VitalikButerin/status/1145576103089602560
:https://eprint.iacr.org/2015/702.pdf
:https://bitcoin.stackexchange.com/questions/38437/what-is-spv-mining-and-how-did-it-inadvertently-cause-the-fork-after-bip66-wa
:https://arxiv.org/abs/1507.06183
:https://github.com/ethereum/research/wiki/A-note-on-data-availability-and-erasure-coding
:https://ethresear.ch/t/censorship-detectors-via-99-fault-tolerant-consensus/2878
:https://github.com/ethereum/research/raw/master/papers/discouragement/discouragement.pdf
:https://link.springer.com/content/pdf/10.1007/978-3-642-32009-5_1.pdf
:https://github.com/ethereum/eth2.0-specs/blob/master/specs/core/0_fork-choice.md
:https://ethresear.ch/t/rate-limiting-entry-exits-not-withdrawals/4942
:https://ethresear.ch/t/weak-subjectivity-under-the-exit-queue-model/5187
8月16日,美國加密貨幣巨頭Coinbase宣布以5500萬美元收購早期加密貨幣公司Xapo的加密貨幣機構托管業務.
1900/1/1 0:00:00據外媒報道,挪威航空公司正推出自己的加密貨幣交易所——挪威航空區塊鏈交易所。挪威航空公司是歐洲第三大航空公司,此前挪威航空公司曾宣布,將推出比特幣兌換服務,挪威航空公司的客戶還可以使用比特幣購買.
1900/1/1 0:00:00Overview概述 優勢一:Bermi已經落地運營,真實用戶數量大,項目運營風險低。Bermi是一個短視頻社交App主要用戶群體在南美地區。從該App上線到現在已經擁有大量用戶.
1900/1/1 0:00:00比特幣這一輪牛市,讓山寨幣望塵莫及。2017年的“瘋狂歷史”并沒有重演,在比特幣破萬以后,大量山寨幣反倒開啟了爆跌模式.
1900/1/1 0:00:00Bitget全球用戶: Bitget即將上線FDT(FundToken),并于9月初開通FDT/USDT交易市場.
1900/1/1 0:00:00第一部分丨凌晨四點了,看看“中本聰”說了什么 編輯:幣加索 據CCN消息,自稱為“真正的”中本聰的人將在Holdings的區塊鏈公司承諾,在十年匿名之后.
1900/1/1 0:00:00