時(shí)間:2022-02-18|瀏覽:484
以太坊擁有多個(gè)可互操作的客戶端,由獨(dú)立團(tuán)隊(duì)用不同的語言開發(fā)和維護(hù)。這是一項(xiàng)重大成就,可以通過限制漏洞或攻擊在受影響客戶端的網(wǎng)絡(luò)部分的運(yùn)行,為網(wǎng)絡(luò)提供靈活性。然而,只有當(dāng)所有用戶大致均勻地分布在每個(gè)可用的客戶端的客戶端時(shí)才能實(shí)現(xiàn)。目前,絕大多數(shù)以太坊節(jié)點(diǎn)運(yùn)行單個(gè)客戶端,給網(wǎng)絡(luò)帶來不必要的風(fēng)險(xiǎn)。
以太坊以來,以太坊將很快經(jīng)歷其結(jié)構(gòu)最重要的升級(jí)——工作量證明 (PoW) 到權(quán)益證明 (PoS) 的合并。這將從根本上改變網(wǎng)絡(luò)對(duì)區(qū)塊鏈真實(shí)狀態(tài)達(dá)成共識(shí)的方式,并保持網(wǎng)絡(luò)安全。這種新的結(jié)構(gòu)將帶來安全、可擴(kuò)展性和可持續(xù)性的好處,但也擴(kuò)大了單個(gè)客戶的風(fēng)險(xiǎn)。本文將討論原因...
信標(biāo)鏈
信標(biāo)鏈?zhǔn)?PoS 區(qū)塊鏈。目前與以太坊主網(wǎng)并行運(yùn)行,但兩者很快就會(huì)出現(xiàn)「合并」在一起。合并后,以太坊主網(wǎng)現(xiàn)有客戶端 (「執(zhí)行客戶端」) 將繼續(xù)托管以太坊虛擬機(jī) (EVM),并驗(yàn)證和廣播交易,但將停止工作量證明 (PoW) 開采,放棄對(duì)區(qū)塊鏈頭 (頂塊) 達(dá)成共識(shí)的責(zé)任。
相反,這種共識(shí)將成為「共識(shí)客戶端」的責(zé)任,「共識(shí)客戶端」負(fù)責(zé)把來自「執(zhí)行客戶端」交易與共識(shí)所需的信息一起打包「信標(biāo)區(qū)塊」這些信標(biāo)塊構(gòu)成了信標(biāo)鏈。「礦工」將被「驗(yàn)證者」(validators)這些驗(yàn)證者需要取代 ETH 存儲(chǔ)在以太坊智能合同中 (這個(gè)過程稱為「質(zhì)押」(staking))。
驗(yàn)證者質(zhì)押ETH 將作為激勵(lì)他們正確完成驗(yàn)證工作的抵押品。不履行驗(yàn)證工作的 (如因離線) 或惡意行為的驗(yàn)證將導(dǎo)致其質(zhì)押 ETH 的一部分被銷毀了。另一方面,如果驗(yàn)證人行為得當(dāng), 將獲得ETH 獎(jiǎng)勵(lì)。
1. 驗(yàn)證人的職責(zé)
對(duì)于驗(yàn)證人來說,良好的行為意味著參與驗(yàn)證從其他驗(yàn)證人那里收到的信標(biāo)塊,并投票給區(qū)塊鏈頭。如果驗(yàn)證人收到的塊有效,驗(yàn)證人將對(duì)塊進(jìn)行驗(yàn)證「證明」(attest),實(shí)際上,投票支持在區(qū)塊鏈中添加區(qū)塊。
一個(gè)節(jié)點(diǎn)將不時(shí)被要求提出一個(gè)新區(qū)塊,其他驗(yàn)證人將「證明」區(qū)塊。當(dāng)區(qū)塊鏈有多個(gè)分叉時(shí),只有那個(gè)在歷史上積累了最多「證明」(attestations) 鏈?zhǔn)钦_的區(qū)塊鏈。
驗(yàn)證人還將不時(shí)參加同步委員會(huì) (sync committee) 中,同步委員會(huì)是一個(gè)由隨機(jī)選擇的 512 驗(yàn)證者組成的小組。這些隨機(jī)選擇的驗(yàn)證者將是塊頭 (block headers) 進(jìn)行簽名,這樣輕客戶端就可以檢索這些被驗(yàn)證過的區(qū)塊,而無需訪問整條歷史鏈或整個(gè)驗(yàn)證者集。
2. 合理化 & 被敲定
信標(biāo)鏈為網(wǎng)絡(luò)設(shè)定節(jié)奏。這種節(jié)奏被組織成兩個(gè)時(shí)間單位:slot 和 epoch。slot 是將區(qū)塊添加到信標(biāo)鏈的機(jī)會(huì),每 12 秒出現(xiàn)一次。某個(gè) slot 可能沒有區(qū)塊,但當(dāng)系統(tǒng)以最佳方式運(yùn)行時(shí),區(qū)塊會(huì)添加到每個(gè)可用的 slot 中。epoch 是以 32 個(gè) slot (約 6.4 分鐘) 為單位的。slot 和 epoch 設(shè)定了以太坊區(qū)塊鏈的節(jié)奏。
在每個(gè) epoch 期間,第一個(gè) slot 中的區(qū)塊是一個(gè)檢查點(diǎn) (checkpoint)。檢查點(diǎn)是非常重要的,因?yàn)闄z查點(diǎn)被用于使區(qū)塊鏈賬本上的記錄變得永久和不可逆轉(zhuǎn)——這是一個(gè)分為兩個(gè)階段的過程:首先,如果所有活躍驗(yàn)證者質(zhì)押的 ETH 余額中至少有 2/3 (即「絕對(duì)多數(shù)」) 證明了最近的兩個(gè)檢查點(diǎn) (當(dāng)前的被稱為「目標(biāo)檢查點(diǎn)」,前一個(gè)被稱為「源檢查點(diǎn)」),那么這兩個(gè)檢查點(diǎn)之間的這段區(qū)塊就被「合理化」(justified) 了。
「合理化」是邁向成為以太坊權(quán)威鏈上永久記錄的第一步。一旦某個(gè)被「合理化」的檢查點(diǎn)之后新出現(xiàn)了另一個(gè)被「合理化」的檢查點(diǎn),那么前一個(gè)檢查點(diǎn)就是「被敲定」(finalized) 了,也即使其具有了永久性和不可逆轉(zhuǎn) (即這個(gè)檢查點(diǎn)之前的所有記錄都成為了區(qū)塊鏈上永久不可篡改的記錄)。
這個(gè)「合理化」和「敲定」的過程要求驗(yàn)證者進(jìn)行的「證明」(attestations) 實(shí)際上要比上文闡述的要更復(fù)雜一些。有兩種類型的證明:一種是 LMD GHOST 投票,用于證明區(qū)塊鏈的鏈頭 (LMD GHOST 是分叉選擇算法);第二種是用于對(duì)兩個(gè)檢查點(diǎn)進(jìn)行證明的 FFG 投票 (FFG 是「最終性小工具」(finality gadget),對(duì)區(qū)塊鏈進(jìn)行合理化和最終敲定)。
所有驗(yàn)證者都會(huì)對(duì)每個(gè)檢查點(diǎn)進(jìn)行 FFG 投票,而只有一個(gè)隨機(jī)選中的驗(yàn)證者子集在每個(gè) slot 進(jìn)行 LMD GHOST 投票。
3. 驗(yàn)證者的質(zhì)押獎(jiǎng)勵(lì)、懲罰和罰沒
獎(jiǎng)勵(lì)
如前所述,驗(yàn)證者質(zhì)押的 ETH 用于作為「抵押品」,以激勵(lì)驗(yàn)證者的誠實(shí)行為。隨著驗(yàn)證者因?yàn)閰⑴c到保護(hù)網(wǎng)絡(luò)中而獲得獎(jiǎng)勵(lì),這些被質(zhì)押的 ETH 將隨著時(shí)間的推移而增加。當(dāng)驗(yàn)證者進(jìn)行的 LMD-GHOST 投票和 FFG 投票與大多數(shù)其他驗(yàn)證者一致時(shí),那么驗(yàn)證者就會(huì)獲得證明獎(jiǎng)勵(lì)。
當(dāng)驗(yàn)證者被選中作為「區(qū)塊提議者」(block proposer) 時(shí),如果其提議的區(qū)塊被「敲定」,那么該驗(yàn)證者也將獲得獎(jiǎng)勵(lì)。區(qū)塊提議者也可以通過將有關(guān)其他驗(yàn)證者行為不當(dāng)?shù)淖C明打包進(jìn)自己提議的區(qū)塊中,從而增加自己獲得的獎(jiǎng)勵(lì)。這些獎(jiǎng)勵(lì)是鼓勵(lì)驗(yàn)證者誠實(shí)行事的「報(bào)酬」。
懲罰
驗(yàn)證者可能受到的「懲罰」是以各種機(jī)制的形式來銷毀一部分驗(yàn)證者質(zhì)押的 ETH。當(dāng)驗(yàn)證者未能提交一個(gè) FFG 投票、提交延遲了或者提交了錯(cuò)誤的 FFG 投票時(shí),都會(huì)受到證明懲罰 (attestation penalties)。
但如果驗(yàn)證者錯(cuò)過了進(jìn)行 LMD-GHOST 投票,則不會(huì)受到懲罰,只是錯(cuò)過了本可以通過對(duì)鏈頭進(jìn)行投票而獲得的獎(jiǎng)勵(lì)。驗(yàn)證者余額被削減的數(shù)額,等同于如果他們提交正確的證明而本可以獲得的獎(jiǎng)勵(lì)數(shù)額。
這意味著,一個(gè)誠實(shí)但「懶惰」的驗(yàn)證者,他因?yàn)殄e(cuò)過了證明而遭受到的最大懲罰,就是損失他如果以完美的方式進(jìn)行證明時(shí)本可以獲得的獎(jiǎng)勵(lì)金額的 3/4。
此外,當(dāng)驗(yàn)證者被分配至「同步委員會(huì)」(sync committee) 時(shí),如果該驗(yàn)證者未能簽名區(qū)塊,那么其受到的懲罰將等同于如果他成功地簽名區(qū)塊時(shí)本可以獲得的 ETH 價(jià)值。
總的來說,這些懲罰是溫和的,驗(yàn)證者持續(xù)的怠惰 (inactivity) 僅會(huì)使其質(zhì)押的 ETH 受到一個(gè)相當(dāng)緩慢的削減。
罰沒
罰沒 (slashing) 是一種更嚴(yán)重的行為,這會(huì)導(dǎo)致驗(yàn)證者被強(qiáng)制從網(wǎng)絡(luò)中移除,并導(dǎo)致相關(guān)的 ETH 質(zhì)押金損失。有三種方式會(huì)導(dǎo)致驗(yàn)證者被罰沒,所有這些都相當(dāng)于驗(yàn)證者進(jìn)行了不誠實(shí)的區(qū)塊提議或區(qū)塊證明:
在同一個(gè) slot 提議和簽名兩個(gè)不同的區(qū)塊;
對(duì)「環(huán)繞」某個(gè)區(qū)塊的另一個(gè)區(qū)塊進(jìn)行證明 (實(shí)際上就是更改區(qū)塊鏈歷史);
通過對(duì)同一個(gè)區(qū)塊的兩個(gè)候選區(qū)塊進(jìn)行「雙重投票」(double voting)。
如果檢測到上述這些操作,驗(yàn)證者就會(huì)罰沒。這意味著相當(dāng)于其質(zhì)押的 ETH 的 1/64 (最高可達(dá) 0.5 ETH) 將立即被銷毀。
然后一個(gè)為期 36 天的移除期開始了:在此期間,驗(yàn)證者的質(zhì)押金將逐漸被削減;且在這段期間的中間點(diǎn) (第 18 天),該驗(yàn)證者還將受到額外的懲罰,懲罰大小將與此次罰沒事件發(fā)生之前的 36 天內(nèi)所有被罰沒的驗(yàn)證者的 ETH 質(zhì)押總額成比例。
這意味著,當(dāng)更多的驗(yàn)證者被罰沒時(shí),此次罰沒的量級(jí)將會(huì)增加。最大的罰沒是所有被罰沒的驗(yàn)證者的全部有效余額 (也即,如果有大量驗(yàn)證者被罰沒,那么他們可能損失全部的質(zhì)押金)。
另一方面,一個(gè)單獨(dú)的、獨(dú)立的罰沒事件只會(huì)銷毀驗(yàn)證者一小部分的質(zhì)押金。這種隨著被罰沒驗(yàn)證者的數(shù)量而變化的中間懲罰被稱為「串謀懲罰」(correlation penalty)。
Inactivity Leak 機(jī)制
如果信標(biāo)鏈已經(jīng)有超過 4 個(gè) epoch 都沒有被敲定,那么一個(gè)稱為「inactivity leak」的經(jīng)濟(jì)機(jī)制將被激活。Inactivity leak 的最終目的是創(chuàng)造條件使區(qū)塊鏈重新恢復(fù)敲定。如上文所解釋的,「敲定」(finality) 需要 2/3 的 ETH 總質(zhì)押金對(duì)「源檢查點(diǎn)」和「目標(biāo)檢查點(diǎn)」達(dá)成共識(shí)。
如果超過 1/3 的驗(yàn)證者離線或未能提交證明的證明,那么就不可能有 2/3 的絕對(duì)多數(shù)驗(yàn)證者來敲定檢查點(diǎn)。
此時(shí),Inactivity leak 機(jī)制會(huì)讓屬于這些不活躍的驗(yàn)證者的 ETH 質(zhì)押金逐漸被削減,直到這些驗(yàn)證者控制的質(zhì)押金少于網(wǎng)絡(luò)中總質(zhì)押金的 1/3,從而允許剩余的活躍驗(yàn)證者對(duì)區(qū)塊鏈進(jìn)行敲定。
無論這些不活躍的驗(yàn)證者數(shù)量有多大,剩余的驗(yàn)證者最終都將控制 >2/3 的總質(zhì)押金。這種質(zhì)押金的削減將是一個(gè)強(qiáng)烈的刺激因素,激勵(lì)不活躍的驗(yàn)證者盡快重新激活!
信標(biāo)鏈設(shè)計(jì)中的獎(jiǎng)勵(lì)、懲罰和罰沒鼓勵(lì)了個(gè)體驗(yàn)證者正確行事。然而,從這些設(shè)計(jì)選擇中出現(xiàn)了一個(gè)系統(tǒng),它強(qiáng)烈地激勵(lì)了驗(yàn)證者在多個(gè)客戶端之間的平等分配,并強(qiáng)烈地抑制這種由單個(gè)客戶端占主導(dǎo)地位的情況。
這是因?yàn)?,「絕對(duì)多數(shù)制」對(duì)于信標(biāo)鏈來說非常重要,單獨(dú)一個(gè)惡意驗(yàn)證者對(duì)網(wǎng)絡(luò)而言是相當(dāng)無害的,但大量惡意驗(yàn)證者將可能造成嚴(yán)重破壞。讓我們來看看一些潛在的場景......
風(fēng)險(xiǎn)場景
這種資產(chǎn)激勵(lì)共識(shí)客戶端多樣性是有風(fēng)險(xiǎn)的。通過在多個(gè)客戶端之間均勻分布驗(yàn)證者,可以大大減少針對(duì)特定客戶端的攻擊或漏洞帶來的影響,而單一客戶端占主導(dǎo)地位則會(huì)增加這種風(fēng)險(xiǎn)。這種風(fēng)險(xiǎn)倍增效應(yīng)會(huì)隨著單個(gè)主導(dǎo)性客戶端占據(jù)的網(wǎng)絡(luò)份額多少而變化。
我們可以通過一些假設(shè)的 (但可能實(shí)際會(huì)發(fā)生的) 場景來獲得更多的直覺感知。讓我們假設(shè)一個(gè) bug 意外地被引入到一個(gè)共識(shí)客戶端中,這個(gè) bug 可以直接導(dǎo)致該客戶端進(jìn)行不正確的證明,或者暴露一個(gè)漏洞,使得惡意攻擊者能夠迫使客戶端進(jìn)行不正確地證明。那么,客戶端多樣性會(huì)如何影響這種 bug 帶來的后果呢?
場景 1:受影響的客戶端控制了少于 1/3 的 ETH 質(zhì)押金
這種情況為信標(biāo)鏈提供了最大的彈性,因?yàn)槿杂?2/3 被質(zhì)押的 ETH 仍在進(jìn)行正確地證明,允許信標(biāo)鏈正常地進(jìn)行敲定。因此,從網(wǎng)絡(luò)的角度來看,這種場景的后果是可以忽略的。受影響的驗(yàn)證者將受到怠惰懲罰,因?yàn)樗麄兲峤涣瞬徽_的證明。這些損失相對(duì)較小,受影響的驗(yàn)證者可以等待客戶端被修復(fù)或者切換到另一個(gè)客戶端。無論哪種方式,驗(yàn)證者都可以以最小的經(jīng)濟(jì)后果和不會(huì)破壞信標(biāo)鏈的方式繼續(xù)進(jìn)行正確的證明。
場景 2:受影響的客戶端控制了超過 1/3 的 ETH 質(zhì)押金
這種情況的問題要大得多,因?yàn)橹皇2坏?2/3 的 ETH 質(zhì)押金在正確地進(jìn)行證明,即沒有絕對(duì)多數(shù)的驗(yàn)證者來正確地達(dá)成共識(shí)。這意味著信標(biāo)鏈無法實(shí)現(xiàn)敲定,且 Inactivity Leak 機(jī)制將被激活。此時(shí),這個(gè) bug 對(duì)整個(gè)網(wǎng)絡(luò)造成了影響。
對(duì)于搭建在以太坊之上的交易所和 Dapps (去中心化應(yīng)用) 而言,區(qū)塊鏈被敲定 (finality) 是至關(guān)重要的,如果區(qū)塊鏈無法被敲定,那么就不能保證交易是永久性和不可篡改的。
對(duì)于使用了這個(gè)受影響的客戶端的個(gè)體驗(yàn)證者來說,相關(guān)的懲罰要嚴(yán)重得多,因?yàn)?Inactivity Leak 機(jī)制的激活意味著個(gè)體驗(yàn)證者質(zhì)押的 ETH 將逐步被銷毀,直到這個(gè)受 bug 影響的客戶端控制了少于 1/3 的 ETH 總質(zhì)押金,且只有到那個(gè)時(shí)候信標(biāo)鏈才會(huì)恢復(fù)敲定。
這種 ETH 的銷毀可能實(shí)際上會(huì)在信標(biāo)鏈恢復(fù)之后持續(xù)一段時(shí)間,從而為驗(yàn)證者數(shù)量的較小變化提供緩沖。只有當(dāng)一個(gè)受影響的客戶端控制了超過 1/3 的 ETH 總質(zhì)押金時(shí),信標(biāo)鏈的敲定才會(huì)處于危險(xiǎn)之中。
在這種場景中,正常運(yùn)行其他替代性客戶端的驗(yàn)證者在 Inactivity Leak 機(jī)制被激活期間不會(huì)收到任何獎(jiǎng)勵(lì)。這是一種安全機(jī)制,用于防止攻擊者蓄意啟動(dòng) Inactivity Leak 機(jī)制,從而提高該攻擊者控制的其他以正確方式運(yùn)行的驗(yàn)證者獲得的總獎(jiǎng)勵(lì)。
這些都是很小的懲罰,但關(guān)鍵是,沒有人能從一個(gè)控制著超過 1/3 的 ETH 總質(zhì)押金的客戶端的共識(shí) bug 的負(fù)面后果中逃脫。
場景 3:受影響的客戶端控制著 1/2 的 ETH 質(zhì)押金
這種情況可能導(dǎo)致信標(biāo)鏈中出現(xiàn)不可恢復(fù)的分叉。如果有共識(shí) bug 的客戶端分叉到它自己的鏈上,那么原始的鏈和新的分叉鏈都無法實(shí)現(xiàn)敲定,因?yàn)樾屡f兩條鏈都缺失了大約一半的驗(yàn)證者,并且都將激活 Inactivity Leak 機(jī)制。
此時(shí),這兩條鏈上缺失的驗(yàn)證者的 ETH 質(zhì)押金將會(huì)逐漸被銷毀,直到他們控制的質(zhì)押金少于 1/3 的網(wǎng)絡(luò) ETH 總質(zhì)押金,此時(shí)每條鏈上的驗(yàn)證者才可以再次開始進(jìn)行敲定。這個(gè)過程在兩條鏈上花費(fèi)的時(shí)間相同,因?yàn)榛謴?fù)敲定需要銷毀的 ETH 數(shù)量是相等的。
這兩條鏈將使用不同的檢查點(diǎn)來獨(dú)立完成敲定。這兩條鏈可能永遠(yuǎn)不會(huì)合并成為一條單獨(dú)的「權(quán)威鏈」。解決方法將需要以太坊社區(qū)對(duì)哪條鏈?zhǔn)恰笝?quán)威鏈」達(dá)成共識(shí)。
這個(gè)過程肯定會(huì)在政治上很難處理和引發(fā)分歧,導(dǎo)致一半的社區(qū)由于切換區(qū)塊鏈而產(chǎn)生的經(jīng)濟(jì)損失 (這還不包括 ETH 可能貶值)。也許更糟糕的是,社區(qū)可能只是繼續(xù)分裂下去 (類似于 The DAO 事件導(dǎo)致以太坊經(jīng)典的產(chǎn)生)。
為了避免信標(biāo)鏈的永久分裂,使用受影響的客戶端的驗(yàn)證者將必須與 Inactivity Leak 賽跑進(jìn)行客戶端切換,或者在區(qū)塊鏈開始敲定之前修復(fù)他們的客戶端??赡苡?3-4 周時(shí)間,在此期間開發(fā)者將爭相拯救以太坊。在這個(gè)場景中,對(duì)于大量的驗(yàn)證者來說,無法逃避重大的經(jīng)濟(jì)損失。
場景 4:受影響的客戶端控制著超過 2/3 的 ETH 質(zhì)押金
對(duì)于信標(biāo)鏈來說,這是噩夢(mèng)般的情況,因?yàn)槭苡绊懙目蛻舳丝刂浦粋€(gè)超級(jí)多數(shù)的驗(yàn)證者,并且能夠敲定自己的鏈。這樣,不正確的信息就很有可能永遠(yuǎn)被固定在以太坊的歷史記錄中。在區(qū)塊鏈開始敲定非法區(qū)塊之前,客戶端團(tuán)隊(duì)將有大約 13 分鐘的時(shí)間來確定該共識(shí) bug、修復(fù)它,并將客戶端更新信息廣播給受影響的驗(yàn)證者。
對(duì)于這種情況,唯一可行的緩解方法是讓受影響的驗(yàn)證者取出他們質(zhì)押的 ETH 并從區(qū)塊鏈中退出。如果在 bug 修復(fù)之后,這些受影響的驗(yàn)證者試圖重新加入那條正確的區(qū)塊鏈中,他們將由于「串謀懲罰」而被罰沒,因?yàn)樗麄兇藭r(shí)證明的檢查點(diǎn)是與他們之前證明的檢查點(diǎn)相矛盾,而且是集體進(jìn)行這樣的操作。
Inactivity Leak 機(jī)制將由于大量驗(yàn)證者離去而被激活,這意味著這些受影響的驗(yàn)證者將在他們等待取款 (退出) 時(shí)不斷損失他們的 ETH 質(zhì)押金。由于有大量驗(yàn)證者要退出,因此等待的隊(duì)伍將很長、緩慢和昂貴。
唯一的其他選擇是,剩下的未受影響的客戶端接受該 bug,加入新的鏈,并同意該 bug 從此成為以太坊共識(shí)層的預(yù)期行為。這將與 staking (質(zhì)押) 社區(qū)的核心原則背道而馳,而且會(huì)造成極大的分裂。這些少數(shù)客戶端將在新鏈上受到怠惰懲罰,即使他們的行為得當(dāng)。
兩種選擇都不是好的選擇。前一個(gè)選擇對(duì)于受影響的驗(yàn)證者來說非常昂貴,并且在邏輯上難以糾正。后一種選擇將嚴(yán)重破壞對(duì)以太坊的信任,并導(dǎo)致我們接受一個(gè)永久被玷污的鏈。
其他風(fēng)險(xiǎn)
逆轉(zhuǎn)最終性
如果單個(gè)客戶端控制著超過 2/3 的 ETH 總質(zhì)押金,那么該客戶端的開發(fā)者就有能力選擇哪個(gè)版本的區(qū)塊鏈歷史是正確的。比如,如果該客戶端的開發(fā)者變得惡意,他們可以花費(fèi)一些 ETH (比如通過某個(gè)交易所套現(xiàn),或者橋接到另一個(gè)區(qū)塊鏈網(wǎng)絡(luò)),然后這些開發(fā)者集體投票,使用另一個(gè)不包含這筆花費(fèi)交易的鏈版本來代替當(dāng)前這個(gè)已經(jīng)被敲定的鏈。
這是一種「雙花」,因?yàn)樵摽蛻舳丝刂浦^大多數(shù)驗(yàn)證者使其能夠逆轉(zhuǎn)最終性和重寫歷史。與此同時(shí),誠實(shí)的少數(shù)驗(yàn)證者會(huì)因?yàn)樗麄儾灰恢碌淖C明而受到懲罰。
一個(gè)惡意的控制了絕對(duì)多數(shù) ETH 總質(zhì)押金的攻擊者也可以威脅做出這樣的行為,并控制網(wǎng)絡(luò)索要贖金。即便是一個(gè)控制著 1/3 的 ETH 總質(zhì)押金的惡意團(tuán)隊(duì)也可以威脅停止鏈的敲定并激活 Inactivity Leak 機(jī)制。
共同的責(zé)任
前一點(diǎn)對(duì)客戶端開發(fā)團(tuán)隊(duì)的看法有些悲觀,不是因?yàn)檫@是合理的,而是因?yàn)閻阂庑袨槭强赡艿?,因此需要防范。然而,這些開發(fā)人員最有可能永遠(yuǎn)是好人,他們自己需要抵制單個(gè)客戶端占主導(dǎo)性地位,不僅僅是因?yàn)樗麄兒芸赡苁且蕴挥脩?(以及 ETH 持有者或質(zhì)押者),還因?yàn)榫W(wǎng)絡(luò)安全的責(zé)任不應(yīng)該集中在一個(gè)小團(tuán)隊(duì)的肩上。
開發(fā)者的行為對(duì)整個(gè)以太坊的健康造成了巨大的影響,他們的壓力和心理健康是真正的代價(jià)??蛻舳硕鄻有酝ㄟ^在多個(gè)獨(dú)立團(tuán)隊(duì)之間分擔(dān)責(zé)任來避免這種情況。
中心化
即使客戶端開發(fā)團(tuán)隊(duì)由完全出于善意的開發(fā)者組成,當(dāng)他們控制了大部分的 ETH 質(zhì)押金時(shí),他們?nèi)匀槐A袅艘蕴贿\(yùn)作方面的過度權(quán)力。去中心化是以太坊的一個(gè)核心原則,這必須包括開發(fā)者、用戶和托管商的去中心化。
跨多個(gè)客戶端的開發(fā)團(tuán)隊(duì)的去中心化,通過均勻分配 ETH 質(zhì)押金,從而限制了單個(gè)客戶端團(tuán)隊(duì)對(duì)諸如分叉內(nèi)容和時(shí)間等做出關(guān)鍵決策,從而限制了他們對(duì)以太坊哲學(xué)方向的影響??蛻舳硕鄻有源_保了在開發(fā)者層面做出去中心化的決策。
政治
對(duì)一條誠實(shí)鏈的社交恢復(fù) (social recovery) 是一個(gè)充滿政治的問題。以太坊的共識(shí)機(jī)制應(yīng)該基于編碼到其客戶端的規(guī)則來確定——這是它的主要目標(biāo)。干預(yù)這一過程可能會(huì)導(dǎo)致以太坊社區(qū)的分裂,導(dǎo)致不同的用戶在哲學(xué)上、倫理上和技術(shù)上對(duì)于緩解某個(gè)主要客戶端的共識(shí) bug/攻擊有各種各樣的觀點(diǎn)。治理決策將是笨拙的、破壞性的,而且可能過于緩慢而無法達(dá)到最大的有效性。
真實(shí)例子
上述場景發(fā)生的概率相對(duì)較低。開發(fā)者在研究和測試他們軟件的每一個(gè)更新時(shí)都是一絲不茍的,沒有理由懷疑任何客戶端團(tuán)隊(duì)的職業(yè)操守。
然而,這些場景也不是純粹的假設(shè)。已經(jīng)有真實(shí)例子表明,客戶端多樣性拯救了以太坊主網(wǎng),使其免于永久損壞,且一些共識(shí) bug 也破壞了以太坊測試網(wǎng)。下面將介紹其中的一些例子。
上海攻擊
2016 年 9 月,在上海 DevCon 會(huì)議期間,黑客攻擊了以太坊,利用客戶端軟件中的幾個(gè)漏洞,導(dǎo)致網(wǎng)絡(luò)速度顯著放緩。攻擊者堅(jiān)持不懈,迅速部署新的類似攻擊,而客戶端開發(fā)人員則競相對(duì)這些攻擊進(jìn)行逆向工程和修補(bǔ)。
最終,攻擊者在 Geth 客戶端中發(fā)現(xiàn)了一個(gè)無法修補(bǔ)的漏洞,使得硬分叉成為必然。即使在硬分叉升級(jí)之后,攻擊者仍然發(fā)現(xiàn)了一個(gè)拒絕服務(wù)漏洞,該漏洞利用之前攻擊所導(dǎo)致的膨脹狀態(tài),迫使客戶端在每個(gè)區(qū)塊中進(jìn)行數(shù)萬次緩慢的磁盤 I/O 操作。
客戶端多樣性贏得了勝利,因?yàn)楫?dāng)開發(fā)人員努力修復(fù) Geth 中的漏洞時(shí),以太坊能夠繼續(xù)使用替代性的 Parity 客戶端,該客戶端沒有遭受同樣的漏洞。
由于有多個(gè)客戶端,上海攻擊是可以恢復(fù)的,但如果一個(gè)類似的 bug 影響了多數(shù)共識(shí)客戶端,情況可能會(huì)截然不同。
如果一個(gè)「共識(shí)客戶端」與當(dāng)時(shí) Geth 被攻擊時(shí)有著相同的主導(dǎo)性地位,那么以太坊量將無法實(shí)現(xiàn)敲定,因?yàn)榇藭r(shí)大多數(shù)驗(yàn)證者將無法對(duì)區(qū)塊進(jìn)行證明。Inactivity Leak 將被激活,因?yàn)橹挥猩儆?1/3 的 ETH 質(zhì)押金可用于進(jìn)行證明。
Insecura 鏈
「遠(yuǎn)程攻擊」的可行性最近在 Pyrmont 測試網(wǎng)得到了證明。其想法是建立一組驗(yàn)證者來證明一個(gè)備用的區(qū)塊鏈歷史。然后,這些驗(yàn)證者被用來誘騙新的驗(yàn)證者加入這條不誠實(shí)的「Insecura」鏈,從而逐漸增加被影響的驗(yàn)證者的數(shù)量,最終達(dá)到中斷區(qū)塊鏈敲定、激活 Inactivity Leak 并耗盡誠實(shí)多數(shù)驗(yàn)證者的 ETH 質(zhì)押金的程度。
最終,這可能導(dǎo)致受影響的客戶端最終敲定自己版本的區(qū)塊鏈。雖然所需要的時(shí)間和金錢的投入使這種行為不太可能成為攻擊向量,但類似的動(dòng)態(tài)可能導(dǎo)致一個(gè)占主導(dǎo)地位的共識(shí)客戶端中的一個(gè) bug 感染網(wǎng)絡(luò)的大部分。
Medalla 測試網(wǎng)
此前由于 Prysm 客戶端的時(shí)鐘問題,Medalla 測試網(wǎng)的活躍驗(yàn)證者數(shù)量突然下降。這條鏈無法進(jìn)行敲定,因?yàn)樘嗟尿?yàn)證者退出了網(wǎng)絡(luò),以至于 2/3 絕大多數(shù)被質(zhì)押的 ETH 已經(jīng)不再可用于進(jìn)行證明。
其恢復(fù)是漸進(jìn)的,因?yàn)檫@依賴于驗(yàn)證者將客戶端從 Prysm 切換到其他少數(shù)客戶端上。然后,真實(shí)的時(shí)間與 Prysm 客戶端錯(cuò)誤的時(shí)鐘時(shí)間趕在一起,之前無效的證明突然間變得有效了。
這導(dǎo)致 Prysm 客戶端陷入停滯,同時(shí) Teku 和 Lighthouse 客戶端也因突然處理大量的證明而遭遇了巨大的狀態(tài)膨脹。如果 Prysm 是 Medalla 測試網(wǎng)的唯一客戶端,那么整個(gè)網(wǎng)絡(luò)都已經(jīng)停滯了;如果 Prysm 客戶端控制了少于 1/3 的 ETH 總質(zhì)押金,那么許多混亂就可以避免了。
Prysm 的存款根 bug
2021 年初,Prysm 客戶端遇到了一個(gè)與 Eth1 存款根驗(yàn)證相關(guān)的 bug。當(dāng)時(shí),Prysm 客戶端能夠生成無效的存款根 (deposit root),并將其傳遞給其他 Prysm 節(jié)點(diǎn)。因?yàn)?Prysm 擁有如此大的驗(yàn)證者份額,這種無效的存款根很快在網(wǎng)絡(luò)中傳播,且由于 Prysm 遵循絕大多數(shù)投票機(jī)制而非在每個(gè)區(qū)塊中顯性地驗(yàn)證存款根,因此加速了其傳播。
雖然該 bug 帶來的影響很小,沒有中斷信標(biāo)鏈的敲定,也沒有對(duì)驗(yàn)證者帶來重大的經(jīng)濟(jì)懲罰,但這個(gè)事件從兩個(gè)方面證明了客戶端多樣性的重要性:首先,如果 Prysm 客戶端有著較小的驗(yàn)證者份額,那么就會(huì)限制該 bug 在整個(gè)網(wǎng)絡(luò)的傳播,減少其影響。
其次,該事件發(fā)生后的分析文章描述了如何使用替代性客戶端實(shí)現(xiàn)作為基準(zhǔn),幫助開發(fā)人員快速識(shí)別和修復(fù)該 bug。顯然,如果沒有多個(gè)積極維護(hù)的客戶端,這是不可能實(shí)現(xiàn)的。
當(dāng)前的客戶端多樣性
顯示了以太坊執(zhí)行層和共識(shí)層的當(dāng)前客戶多樣性的快照 (截至 2022 年 1 月撰寫本文時(shí)):執(zhí)行層由 Geth 客戶端主導(dǎo),OpenEthereum 客戶端遠(yuǎn)遠(yuǎn)排在第二,Erigon 客戶端排第三,Nethermind 排第四,其他客戶端只占不到網(wǎng)絡(luò)的 1%。
共識(shí)層上最常用的客戶端 Prysm 雖然不像執(zhí)行層的 Geth 客戶端那樣占主導(dǎo)地位,但仍然擁有了超過 60% 的網(wǎng)絡(luò),Lighthouse 和 Teku 分別占 20% 和 14%,其他客戶端則很少使用。
執(zhí)行層數(shù)據(jù)于 2022 年 1 月 23 日通過 Ethernodes 網(wǎng)站獲取;共識(shí)客戶端的數(shù)據(jù)來自 Michael Sproul 。共識(shí)客戶端數(shù)據(jù)要更難獲取,因?yàn)樾艠?biāo)鏈客戶端并不總是具有可以用來識(shí)別它們的明確蹤跡。
這些數(shù)據(jù)是使用一種分類算法生成的,這種算法有時(shí)會(huì)弄錯(cuò)一些少數(shù)客戶端。然而,很明顯,共識(shí)層的大部分網(wǎng)絡(luò)節(jié)點(diǎn)都在運(yùn)行 Prysm。Prysm 的優(yōu)勢有時(shí)更高,超過 68%。盡管只是快照,但圖中的占比情況提供了客戶端多樣性的當(dāng)前狀態(tài)的良好總體認(rèn)識(shí)。
執(zhí)行層的客戶端多樣性包含在上圖中,因?yàn)橛绊憟?zhí)行客戶端的 bug 可能也會(huì)傳播到共識(shí)層,這是由于合并之后,共識(shí)層和執(zhí)行層將耦合在一起,且執(zhí)行客戶端生成的執(zhí)行負(fù)載 (execution payload) 將是信標(biāo)區(qū)塊的核心組件。
個(gè)人質(zhì)押者 & 質(zhì)押池
解決客戶端分配不平衡的問題,需要主要交易所和押注池 (stking pools) 采取行動(dòng)。然而,個(gè)人質(zhì)押者也可以通過選擇運(yùn)行非 Geth/Prysm 客戶端組合來發(fā)揮作用。
對(duì)于持有量少于 32 ETH 或者不想要承擔(dān)運(yùn)行驗(yàn)證者的責(zé)任的質(zhì)押者來說,有一些質(zhì)押服務(wù)提供商可以使用。一些主要的中心化交易所提供 ETH 質(zhì)押服務(wù),但他們的質(zhì)押池中的客戶端分布情況通常是隱秘的,而且這些交易所提供的 ETH 質(zhì)押 Token 的可交易性是有限的。出于這些和其他的原因,不建議使用這些中心化的服務(wù)商。
一個(gè)更好的選擇是使用更去中心化的流動(dòng)性押注服務(wù)提供商,如 Lido 或 Rocketpool。這些服務(wù)商提供 ETH 質(zhì)押服務(wù),同時(shí)還提供了一種流動(dòng)性 Token (比如用戶通過 Lido 協(xié)議質(zhì)押 ETH 將獲得具有流動(dòng)性的 stETH Token ),這些流動(dòng)性 Token 的價(jià)值將隨著驗(yàn)證者累積的獎(jiǎng)勵(lì)而增加。
這些 Token 可以進(jìn)行交易,或者用于賺取 DeFi 收益。這些流動(dòng)性質(zhì)押平臺(tái)的客戶端分布情況也要更加透明,比如 Lido 會(huì)發(fā)布季度更新,而 Rocketpool 現(xiàn)在也發(fā)布了他們的季度更新。對(duì)于不能或不愿意運(yùn)行自己的驗(yàn)證器者的用戶,這些服務(wù)是實(shí)現(xiàn)更好的客戶端多樣性的途徑。
總結(jié)
信標(biāo)鏈的獎(jiǎng)罰協(xié)議直接激勵(lì)了客戶端多樣性。單個(gè)客戶端占主導(dǎo)地位將是對(duì)以太坊的潛在威脅,當(dāng)單個(gè)主導(dǎo)性客戶端表現(xiàn)良好時(shí),這種威脅是無形的,但當(dāng)該客戶端出現(xiàn)共識(shí) bug 時(shí),這種威脅可能是災(zāi)難性的。擁有多個(gè)客戶端是以太坊的獨(dú)特優(yōu)勢,也是開發(fā)者社區(qū)勤奮努力的證明。
然而,當(dāng)一個(gè)客戶端控制了大部分 ETH 質(zhì)押金時(shí),這種 (以太坊開發(fā)者社區(qū)的) 努力就會(huì)被削弱。理想的情況是在至少 4 個(gè)客戶端上平均分配 ETH 質(zhì)押金,給每個(gè)客戶端最多 1/4 的 ETH 質(zhì)押金。通過使用現(xiàn)在可用的生產(chǎn)就緒的客戶端,這是很容易實(shí)現(xiàn)的。