特別感謝VitalikButerin,Hsiao-WeiWang和CasparSchwarz-Schilling的反饋和評論。
摘要:出于安全性和可活性的考慮,以太坊選擇了多客戶端架構。為了鼓勵質押者(Stakers)客戶端設置的多樣化,以太坊協議針對關聯性故障(correlatedfailures)的懲罰是更高的。因此,對于運行一個市場份額占少數的客戶端的質押者而言,如果該客戶端出現bug,那么該質押者通常只會損失適度的金額,而如果該質押者運行一個市場份額占主導性地位的客戶端,那么在該客戶端遭遇bug時該質押者將可能遭遇損失全部的質押金。因此,負責任的質押者應該審視當下的客戶端分布格局,并選擇運行一個不那么流行的客戶端。
為何我們需要多個客戶端?
有許多論點認為,單一客戶端架構更加可取。開發多個客戶端會帶來巨大的開銷,這就是為什么我們還沒有看到任何其他區塊鏈網絡認真地追求提供多客戶端的原因所在。
那么,為什么以太坊的目標是多客戶端架構呢?客戶端是非常復雜的代碼,可能包含bugs。其中最糟糕的是所謂的“共識bugs”,即區塊鏈核心狀態轉換邏輯bugs。一個經常被引用的例子就是所謂的“無限貨幣供應”bug,出現這種bug的客戶端將接受(認可)一筆鑄造任意數量的ETH的交易。如果某人在某個客戶端中發現了這種bug,而且在此人抵達安全出口(即通過混合器或交易所來使用這筆資金)之前未被阻止,那么這將導致ETH的價值大幅縮水。
如果每個人都運行相同的客戶端,停止這情況將需要人工干預,因為在這種情況下,區塊鏈、所有智能合約和交易所將照常運行。攻擊者甚至可能僅需要幾分鐘時間就能成功地發起一場攻擊,并充分地將資金分散,使得只回滾該攻擊者的交易變得無法實現。根據被鑄造的ETH數量,以太坊社區將很可能協調將以太坊回滾至此次攻擊發生之前的狀態(這需要在確定和修復該bug之后進行)。
現在讓我們看看當我們有多個客戶端時會發生什么。有兩種可能的情況:
包含該bug的客戶端承載著少于50%的網絡總質押金。該客戶端將生產出一個這樣的區塊,該區塊中包含了一筆利用該bug來鑄造ETH的交易。讓我們稱這條鏈為A鏈。
然而,絕大多數運行另一個不存在該bug的客戶端的質押者將忽略該區塊,因為該區塊是無效的(對于該客戶端而言,這筆鑄造ETH的操作就是無效的)。因此,運行該客戶端的質押者(驗證者)將構建另一條鏈,我們稱之為B鏈,這條鏈不包含這個無效的區塊。
由于正確的客戶端占主導地位,B鏈將累積更多的證明(attestations)。因此,即便那個有共識bug的客戶端也會投票給B鏈;其結果是,B鏈將會累積100%的投票,而A鏈將會消亡。區塊鏈將繼續前進,就好像該bug從未發生一樣。
以太坊前核心開發者:未來DAO注定將接管世界:12月7日消息,以太坊前核心開發者之一Lane Rettig認為,加密貨幣可以改變日常生活的方方面面,從工資支付方式到企業組建和管理方式。Lane Rettig認為,加密貨幣離變得更加直觀還有一兩年的時間。它有潛力通過讓創辦一家公司變得更便宜、更容易來激勵新一代的初創企業和企業家。加密貨幣可以讓小企業飛速發展,推動全球經濟增長。
Rettig認為,去中心化自治組織(DAO)是潛在經濟爆發的關鍵。它們是民主化的,由購買和持有代幣的人(而不是首席執行官)管理,并透明運作。“我認為DAO是人類組織進化的下一步,我認為這是一代人的轉變,需要幾十年才能發揮出來。”他承認DAO存在很多問題,但堅信它們注定要接管世界。(Invezz)[2021/12/7 12:57:04]
絕大多數質押者使用了這個有bug的客戶端。在這種情況下,A鏈將累積絕大多數投票。但由于B鏈僅擁有不到50%的證明,因此那個有bug的客戶端永遠也不會有理由從A鏈切換至B鏈。因此,我們將看到區塊鏈分裂。如下圖所示:
上述第一種情況是理想的情況。這種情況很可能會產生一個孤塊(orphanedblock),大多數用戶不會注意到該孤塊。開發者可以調試客戶端,修復該bug,一切都很好。第二種情況顯然并不理想,但相比于總共只有一個客戶端(即單一客戶端架構)而言,這仍然是一個更好的結果,大多數人將很快發現有了一條分叉鏈(你可以通過運行幾個客戶端來自動監測到),交易所將很快暫停存款,DeFi用戶在鏈分裂被解決之前也可以謹慎行事。基本上來說,與單一客戶端架構相比,這仍然給了我們一個大的閃爍的紅燈警告,允許保護我們免受最壞的結果。
上述第二種情況中,如果這個有bug的客戶端是由超過2/3的質押者運行,那么這種情況將更糟糕,因為該客戶端將會敲定那條無效的鏈(即A鏈)。對此我們將在下文更多地闡述。
有些人認為鏈分裂是如此災難性,以至于這本身就是作為支持單一客戶端架構的論據。但是請注意,鏈分裂只是由于客戶端中的一個bug而發生的。就單一客戶端架構而言,如果你想要修復這個bug并將區塊鏈返回至之前的狀態,那么你必須回滾至該bug發生之前的區塊,而這與鏈分裂一樣糟糕!所以,就多客戶端架構而言,盡管鏈分裂聽起來很糟糕,但在客戶端出現嚴重bug的情況下,鏈分裂實際上是一個特性,而不是一個bug。至少你能知道發生了嚴重的問題。
以太坊未確認交易70658筆:據Etherscan數據顯示,當前以太坊未確認交易70658筆。當前挖礦難度2263.17TH,交易處理能力9.9 TPS。截至目前以太坊全球均價為173.62美元,最近24小時下跌12.53%。[2020/3/12]
激勵客戶端多樣性:反相關性懲罰
如果驗證者的質押金被分配到多個客戶端上,這顯然對網絡有利,最好的情況是每個客戶端持有的質押金少于總質押金的1/3。這將使得網絡在面臨任何單個客戶端bug時都具有彈性。但質押者為什么要在意這一點呢?如果網絡對于質押者沒有任何激勵機制,那么他們不太可能愿意承擔切換至另一個少數派客戶端產生的成本。
不幸的是,我們不能直接基于驗證者選擇運行哪個客戶端來對其進行獎勵。沒有一種客觀的方法來衡量這一點。
然而,當你運行的客戶端發生了bug時,你不能幸免。這正是反相關性懲罰(anti-correlationpenalties)起作用的地方:其中的理念是,如果你運行的驗證者進行了惡意行為,那么你將受到的懲罰將會因為有更多其他驗證者在大約同一時間犯了錯誤而變得更高。換句話說,你會因為關聯性故障而受到懲罰。
在以太坊中,你(驗證者)會因為兩種行為而被罰沒(getslashed):
在同一個區塊高度簽名兩個區塊。
創建可被罰沒的證明(環繞投票或雙重投票)。
當你(驗證者)被罰沒時,通常不會損失所有的資金。在撰寫本文時(信標鏈Altair分叉),默認的懲罰實際上是非常小的:你只會損失0.5ETH,也即大約是你質押的32ETH的1.5%(最終這會增加到1ETH,也即3%)。
然而,這里有一個問題:有一個額外的懲罰,取決于你的驗證者被罰沒之前和之后的4096個epochs(大約18天)時間內的所有其他罰沒事件。在此期間,你將受到與這些罰沒總額成比例的罰沒。這可能比最初的懲罰要大得多。目前(信標鏈Altair分叉)是這樣設置的,如果在此期間(你被罰沒之前和之后的18天內)有超過50%的全部質押金額被罰沒了,那么你將損失你的全部資金。最終,這將被設置為如果1/3的質押者被罰沒,那么你將損失你的所有質押金。之所以設置為1/3,是因為這是導致一次共識失敗的最少質押金數額。如下圖所示:
上圖:藍線表示當前(信標鏈Altair升級之后)的懲罰;紅線表示最終將設置的懲罰。
動態 | 以太坊2.0開發周報:v0.6版本主要解決舊版本多個關鍵BUG:本周以太坊發布第28周周報,重點介紹v0.6版本的更新和改進,修復多個舊版本中的問題。 下一步工作計劃: 1. 將運行時間更新至最新版本; 2. 將Simple Serialize(SSZ)更新到最新的v0.6規范。[2019/6/10]
另一個反相關性懲罰:QuadraticInactivityLeak
驗證者失效的另一種方式是離線。驗證者離線也是會受到懲罰,但此機制非常不同。我們不將這種懲罰稱為“罰沒”(slashing),而且這種離線的懲罰通常是很輕微的:在正常操作下,離線的驗證者會受到的懲罰金額,與他們在這段時間通過正確地驗證本來可以獲得的獎勵相當。在撰寫本文時,驗證者的年收益率是4.8%。如果你的驗證者離線了幾小時或幾天(例如由于暫時的互聯網中斷而離線),那么可能沒什么可緊張的。
但是,如果當超過1/3的驗證者離線時,情況將變得完全不同。此時,信標鏈將無法敲定區塊,這威脅到了共識協議的一個基本屬性,即活性(liveness)。在這樣的場景中,要恢復信標鏈的活性,就要使用所謂的“quadraticinactivityleak”機制。如果驗證者在區塊鏈停止敲定的同時還在繼續離線,那么該驗證者將受到的懲罰將隨著時間呈二次方增長。最初這種懲罰是非常低的;在大約4.5天之后,離線的驗證者將損失1%的質押金。然而,在大約10天之后,將損失5%的質押金,大約21天之后將損失20%的質押金(這些是當前信標鏈Altair設置的值,這些值將在未來翻倍)。如下圖所示:
這種機制的設計是為了在發生一場災難性事件導致大量驗證者離線的情況下,使得區塊鏈能夠盡快恢復敲定區塊。當離線的驗證者損失越來越多他們的質押金時,他們將逐漸被踢出網絡,從而在驗證者總數中所占的份額越來越小,當這些離線的驗證者質押金減少至小于網絡總質押金的1/3時,剩余的在線驗證者將重新占據區塊鏈共識所需的2/3多數,從而允許他們敲定區塊鏈。
然而,還有一種情況與此相關:在某些情況下,驗證者無法再對有效鏈進行投票,因為他們不小心將自己鎖在了一條無效鏈中。我們在下文中將對此進一步解釋。
運行一個主導性客戶端有多糟糕?
為了理解其中的危險之處,讓我們來看一下三種類型的故障事件:
大規模罰沒事件:由于某個bug,運行主導性客戶端(即大多數驗證者都選擇使用的客戶端)的驗證者將對可罰沒事件進行簽名。
聲音 | 基于以太坊的令牌交易量遠超蘋果公司:據Trustnodes消息,Tradingview市場數據顯示,基于以太坊平臺的令牌流動性非常強,交易量遠超蘋果公司。截止發文前,蘋果公司過去24小時交易量為1000萬美元;全球第二大公司亞馬遜交易量為170萬美元;谷歌為36萬美元。基于以太坊平臺的OmiseGo交易量是其市值的10%,幾乎是蘋果公司的五倍。[2018/9/28]
大規模離線事件:由于某個bug,運行主導性客戶端的所有驗證者都離線。
無效區塊事件:由于某個bug,運行主導性客戶端的所有驗證者都對一個無效區塊進行證明。
還有其他類型的大規模故障和罰沒可能會發生,但我將自己限制在這些與客戶端bug相關的事件上(這些是你在選擇運行哪個客戶端時應該考慮的問題)。
場景1:雙重簽名
這可能是大多數驗證者運營商最擔心的情況:一個bug導致驗證者客戶端對可罰沒事件進行了簽名。其中一個例子是兩個證明(attestations)對同一個目標epoch進行投票,但使用了不同的有效負載(這就是所謂的“雙重簽名”(DoubleSigning))。由于這是一個客戶端bug,因此不僅僅只有一個質押者需要擔心,所有運行了這個特定客戶端的質押者都需要擔心了。當這種行為被發現時,罰沒將會演變成一場血洗:所有相關的質押者都將損失100%的質押金。這是因為,我們此處考慮的是這些質押者運行的是一個主導性客戶端(即大多數質押者都選擇使用的客戶端);而如果相關的客戶端承載的質押金只占網絡總質押金的10%(即該客戶端并非主導性客戶端),那么“只有“大約20%的相關質押金會被罰沒(這是信標鏈Altair升級以來的罰沒力度;當最終的懲罰參數生效時,這個比例將會增加至30%。)
這種情況所帶來的損失顯然是極端的,但我也認為這是極不可能的。滿足成為可被罰沒的證明的條件很簡單,這就是為什么要構建驗證者客戶端(validatorclients,VCs)來強制執行它們。驗證者客戶端是一個小型的、經過良好審計的軟件,這種規模級別的漏洞是不太可能出現的。
到目前為止,我們已經看到了一些罰沒情況,但據我所知,它們都是由于運營者操作不當造成的——幾乎所有這些都是由于運營者在多個地點運行同一個驗證者造成的。由于這些是非相關行為,罰沒的數額很小。
場景2:大規模離線事件
對于這個場景,我們假設主導性客戶端存在一個bug,當這個bug被觸發時,會導致該客戶端崩潰。一個非法區塊已經被整合到區塊鏈中,每當這個主導性客戶端遇上該區塊時,該客戶端就會離線,使其無法參與任何進一步的共識。由于該主導性客戶端現在離線了,此時InactivityLeaks懲罰機制就啟動了。
V神在日本公開出席官方活動 希望以太坊能解決全球不平等問題:3月29日,以太坊開發者V神在東京大學本鄉校區公開出席官方活動,并進行演講,參與人數高達500余人。以太坊基金會的宮口綾表示:希望可以通過以太坊技術解決全球范圍內的不平等問題,并對日本國內培養以太坊工程師和社區運營等事宜給予期望。[2018/3/30]
客戶端開發者將爭先恐后地讓一切恢復正常。實際上,在幾個小時內,最多幾天內,他們將發布一個bug修復來消除該崩潰。在此期間,質押者也可以選擇簡單地切換至另一個客戶端。只要有足夠的質押者切換至另一個客戶端,使得有超過2/3的驗證者在線,那么這個quadraticinactivityleak懲罰機制就會停止。在修復這個有bug的客戶端之前,這種情況并非不可能發生。
這種場景并非不可能發生(導致客戶端崩潰的bugs是最常見的bug類型),但由此導致被懲罰的總金額可能不到受影響的質押金的1%。
場景3:無效區塊
對于這種場景,我們考慮這樣一種情況,即主導性客戶端存在一個bug,該bug導致客戶端生產了一個無效區塊,并且接受該區塊為有效區塊——也即是說,當使用這個主導性客戶端的驗證者看到了這個無效區塊時,他們將視其為有效區塊,并證明(投票給)該區塊。
我們將這條包含了這個無效區塊的鏈稱為A鏈。一旦這個無效區塊被生產了,會發生兩件事情:
所有其他正常運行的客戶端將會忽視這個無效區塊,并在最近的有效區塊頭之上構建一條單獨的區塊鏈,我們稱之為B鏈。所有正常運行的客戶端將投票給B鏈并繼續構建這條鏈。如下圖所示。
這個有bug的主導性客戶端將會把A鏈和B鏈都視為有效鏈。因此,該客戶端會投票給當下它認為是最“重”的任何一條鏈。
我們需要區分三種情況:
這個有bug的主導性客戶端承載了少于1/2的總質押金。這種情況下,所有其他正常運行的客戶端將會投票給B鏈并繼續構建B鏈,最終使B鏈成為最重的那條鏈。此時,即便是這個有bug的客戶端也將會切換至B鏈。除了會生產一個或幾個孤塊之外,沒有什么糟糕的事情會發生。這是一個令人高興的情況,也是為什么網絡中有著主導性客戶端之外的其他客戶端是非常重要的。
這個有bug的主導性客戶端承載了超過1/2但少于2/3的總質押金。這種情況下,我們將看到有兩條鏈被構建——A鏈由這個有bug的客戶端構建,B鏈由其他客戶端構建。這兩條鏈都不具有2/3驗證者的絕對優勢,因此這兩條鏈都無法敲定區塊。當這種情況發生時,開發者們將爭相理解為什么會有兩條鏈。當他們發現A鏈中有一個無效區塊時,他們可以繼續修復有bug的主導性客戶端。一旦bug修復完成,該客戶端將把A鏈視為無效鏈,并開始構建B鏈,從而運行B鏈能夠實現區塊敲定。對于用戶而言,這種區塊是非常具有破壞性的。雖然弄清楚哪條鏈是有效鏈所需的這個時間預計是短暫的(可能不到1小時),但區塊鏈很可能在幾個小時內(甚至一天時間)都無法敲定區塊。但對于質押者來說,即便是那些在運行這個有bug的主導性客戶端的質押者而言,他們受到的懲罰依然相對較小:他們會因為構建無效的A鏈而不是參與B鏈的共識而受到“inactivityleak”懲罰,但由于這持續的時間很可能不到一天時間,因此相應的懲罰可能不到1%的質押金。
這個有bug的主導性客戶端承載了超過2/3的質押金。在這種情況下,這個有bug的主導性客戶端將不僅僅會構建A鏈,實際上還會有足夠的質押金來“敲定”A鏈。需要注意的是,該客戶端是唯一認為A鏈已被敲定的客戶端,而所有其他正常運行的客戶端則將A鏈視為無效鏈。但是,由于CasperFFG協議的運作方式,當一名驗證者敲定了A鏈時,該驗證者將無法再在不被罰沒的情況下參與到另一條與A鏈相沖突的鏈中,除非這條鏈能夠被敲定。因此,一旦A鏈已經被敲定,那么運行這個有bug的客戶端的驗證者就陷入了一個可怕的困境:他們已經投票給了A鏈,但A鏈是無效鏈;他們也無法構建B鏈,因為B鏈當下還無法實現敲定。甚至是對他們的客戶端進行bug修復也無法幫助他們,因為他們已經發送了違規投票。當前將發生的情況是非常痛苦的:無法敲定區塊的B鏈將啟動InactivityLeak懲罰機制,在接下來幾周內,A鏈上的驗證者將損失他們的質押金,直到有足夠多的質押金被銷毀了,從而使得B鏈恢復敲定。假設A鏈上的質押者們一開始擁有網絡中70%的質押金,那么他們將至少損失79%的質押金,因為這是他們的質押金數量要減少至代表網絡中少于1/3的質押金所必須損失的數量。此時,B鏈將恢復敲定,所有質押金都可以切換至B鏈。區塊鏈將再次恢復健康狀態,但在此之前的這種破壞性將持續數周,數百萬ETH在此過程中被銷毀。
顯然,上述第三種情況就是一場災難。這就是為什么我們非常希望不要讓任何一個客戶端擁有超過2/3總質押金。這樣無效區塊就永遠不會被敲定,這種災難就永遠不會發生。
風險分析
那么我們應如何評估這些情況呢?一個典型的風險分析策略是評估事件發生的可能性(我們使用數字1代表極不可能,數字5代表相當可能)以及影響(數字1代表非常低,數字5代表災難性)。最重要的風險是那些在這兩個指標上得分較高的風險,由影響和可能性的乘積表示。
基于上表,到目前為止風險最高的是場景3。當一個客戶端擁有2/3質押金的絕對多數時,這是相當災難性的情況,這也是一個相對可能出現的情況。為了強調這樣的bug是多么容易發生,最近在Kiln測試網發生了一個類似的bug:在這個案例中,Prysm客戶端確實在提出一個區塊之后才發現它是錯誤的,并且并沒有證明該區塊。假如當時Prysm客戶端將該區塊視為有效區塊,并且假如這是發生在以太坊主網(而不是測試網)上,那么我們將會面臨場景3中的第三種情況——因為Prysm客戶端目前在以太坊主網中擁有2/3的絕對多數。因此,如果目前你正在運行Prysm客戶端,你可能會失去所有的資金,這是一個非常現實的風險,你應該考慮切換客戶端。
雖然上述場景1可能是人們最擔心的情況,但其風險評級相對較低。原因在于,我認為發生場景1這種情況的可能性非常低,因為我認為驗證者客戶端軟件在所有客戶端中都很好地被實現了,不太可能生產出可被罰沒的證明或區塊。
如果目前我在運行主導性客戶端,并且對于切換客戶端顧慮重重,那么我有什么選擇呢?
切換客戶端可能是一項重大的任務。它也伴隨著一些風險。如果罰沒數據庫沒有被正確地遷移至新設置,那會怎樣呢?可能會有被罰沒的風險,而這完全違背了我們切換客戶端的目的。
對于那些擔心這種問題的人,我還建議有另一個選擇:可以讓你的驗證者設置保持原樣(無需取出密鑰等等),僅僅切換信標節點。這是極低的風險,因為只要驗證者客戶端按預期工作,它就不會雙重簽名,因此也就不會被罰沒。尤其是如果你運營著大型驗證者業務,使得更改驗證者客戶端(或遠程簽名者)基礎設施的成本非常昂貴,并且可能需要審計,那么這可能是一個很好的選擇。如果新設置執行起來并沒有像預期中的那樣好,也能夠輕松地切換回原來的客戶端,或者可以嘗試切換至另一個非主導性客戶端。
這樣做的好處是,在切換信標節點時,你幾乎不用擔心:這可能對你造成的最糟糕的事情是暫時離線。這是因為信標節點本身永遠無法自己生成可被罰沒的消息。如果你運行的是非主導性客戶端,你不可能會面臨上述場景3的情況,因為即便你投票給了一個無效區塊,該區塊也無法獲得足夠的投票來被敲定。
那執行客戶端呢?
我在上文中撰寫的內容適用于共識客戶端,包括Prysm、Lighthouse、Nimbus、Lodestar和Teku,截至撰寫本文時,Prysm可能擁有網絡上2/3的絕對多數。
所有這些都以相同的方式應用于執行客戶端。如果Go-ethereum(此客戶端很可能會在合并之后成為占主導性的執行客戶端)生產了一個無效區塊,那么該區塊可能會被敲定,因此將導致出現上文所述場景3的災難性情況。
幸運的是,我們現在已經有其他3個執行客戶端處于生產就緒中:Nethermind、Besu以及Erigon。如果你是一名質押者,我非常建議你運行這其中一個執行客戶端。如果你運行的是一個非主導性客戶端,其中的風險是相當低的!但如果你運行的是主導性客戶端,那么你面臨著損失所有資金的嚴重風險!
編者注:本譯文有所刪減,英文原文參見?
https://dankradfeist.de/ethereum/2022/03/24/run-the-majority-client-at-your-own-peril.html#A2-Why-can%E2%80%99t-the-buggy-client-switch-to-chain-B-once-it-has-finalized-chain-A
撰文:DankradFeist,以太坊基金會
BySaraCampbellMetalabel、Ampled和UnnamedFund的創始人奧斯汀·羅比最近在Crypto,Culture.
1900/1/1 0:00:00DAO與元宇宙 許多個體在社交應用程序和區塊鏈中集體組織起來,以便追求共同目標和利益,這一過程中形成的去中心化自治組織通常被稱為DAO.
1900/1/1 0:00:002022年4月1日愚人節周杰倫在Instagram上發文稱持有的BAYC#3738NFT已被盜了! 納尼??盡然敢盜華語天王的數字藏品?當大家都以為是一場玩笑的時候黑客已經將周杰倫的NFT轉走并.
1900/1/1 0:00:00本周三,《時代》將推出它的首期NFT雜志,封面人物是以太坊的創始人V神。作為預熱,雜志把V神的采訪先發了出來,并收獲了一大波熱度。甚至原本不關心crypto的人,也開始打聽V神是誰.
1900/1/1 0:00:00距離Beeple售出其6930萬美元的天價NFT作品已經過去一年,而NFT從“默默無聞”到“嶄露頭角”,再到現在成為“主流”,也只花費了一年時間.
1900/1/1 0:00:00國際清算銀行(BIS)創新中心與澳大利亞、馬來西亞、新加坡和南非央行合作,完成了一個用于國際結算的實驗性央行數字貨幣平臺的試點.
1900/1/1 0:00:00