基于一個(gè)確定性小工具的計(jì)劃將加強(qiáng)以太坊1.0鏈的安全性
編者注:本文原題為 The Finality Gadget,直譯即為 “確定性小工具”,這個(gè)名字來源于一種 Casper 算法的代號(hào) Friendly Finality Gadget(即 Casper FFG)。在一開始的時(shí)候,Casper FFG 意在成為一種可以提供最終確定性的組件,可以部署在任何 PoW 鏈上(所以叫 “Friendly”)。
這篇文章的主要內(nèi)容是介紹一種讓以太坊 1.0 和 2.0 鏈雙向耦合的方案,讓信標(biāo)鏈為 1.0 鏈提供最終確定性。熟悉 FFG 的讀者可以從中看出 FFG 的深深的影子。
隨著以太坊 2.0 的上線時(shí)間越來越近,你可能會(huì)對(duì)現(xiàn)行以太坊區(qū)塊鏈的命運(yùn)感到好奇。在 “以太坊 1.x” 這個(gè)大概念下,人們已經(jīng)提出了大量方案,旨在在短期內(nèi)實(shí)現(xiàn)對(duì)現(xiàn)有網(wǎng)絡(luò)的擴(kuò)容。這些努力是為了確?,F(xiàn)行區(qū)塊鏈的持續(xù)平穩(wěn)運(yùn)行,從而促進(jìn)當(dāng)前生態(tài)系統(tǒng)發(fā)展的可持續(xù)性。
本文介紹了一種名為 “確定性小工具(finality gadget)” 的計(jì)劃。它利用以太坊 2.0 在 Phase 0 (階段 0)的共識(shí)來加強(qiáng)現(xiàn)有的以太坊 1.0 鏈的安全性。通過這個(gè)計(jì)劃,以太坊 2.0 從它部署的第一天起就可以給以太坊社區(qū)帶來一定的好處。我們先詳細(xì)介紹一下“確定性小工具”這個(gè)概念,然后討論它是如何運(yùn)作的、會(huì)為社區(qū)帶來什么好處以及具體的部署流程是什么樣的。最后,我們會(huì)對(duì)一些突出風(fēng)險(xiǎn)和開放式問題進(jìn)行思考。
介紹
“確定性小工具” 背后的想法利用了即將部署在以太坊 2.0 上的權(quán)益證明共識(shí)協(xié)議 Casper 的屬性,即 最終確定性 。以太坊 2.0 的階段 0 計(jì)劃就是部署信標(biāo)鏈,即分片后的以太坊系統(tǒng)的核心主鏈。參與信標(biāo)鏈共識(shí)的驗(yàn)證者在滿足 Casper 算法的某些條件之后就能為生成的數(shù)據(jù)提供最終確定性。之所以稱之為最終確定性,是因?yàn)橐坏┠硞€(gè)區(qū)塊被確定下來,將會(huì)一直存在于合法的那條鏈上;經(jīng)證明,要想更改鏈上的數(shù)據(jù),必須燃燒 ETH 總質(zhì)押量的 1/3 以上。假設(shè)系統(tǒng)中質(zhì)押了一千萬個(gè) ETH ,一次成功的攻擊會(huì)導(dǎo)致大約 330 萬個(gè) ETH 被罰沒,在寫本文時(shí),其成本已經(jīng)超過了 6 億美元。如果你想要了解更多細(xì)節(jié),可以看看我寫的另一篇有關(guān)最終確定性的文章,鏈接如下:https://medium.com/@ralexstokes/how-secure-is-ethereum-2-0-consensus-41523a59f270
確定性小工具旨在利用信標(biāo)鏈中的這一流程來敲定(finalize)以太坊 1.0 的區(qū)塊。如果我們可以將以太坊 1.0 的區(qū)塊數(shù)據(jù)提供給 Casper 的 “確定性引擎” ,那么我們就可以利用權(quán)益證明協(xié)議來增強(qiáng)現(xiàn)行工作量證明網(wǎng)絡(luò)的安全性。安全性增強(qiáng)之后就可以實(shí)行一些改進(jìn)方案,例如減少挖礦補(bǔ)貼(從而減少發(fā)行量),以及將最終確定的區(qū)塊數(shù)據(jù)提供給以太坊虛擬機(jī)(EVM),從而創(chuàng)建穩(wěn)健度更強(qiáng)的用戶級(jí)應(yīng)用。利用階段 0 的確定性小工具意味著以太坊 2.0 一旦上線,我們就能從中獲得切實(shí)的利益,盡管以太坊 2.0 各個(gè)階段的部署預(yù)計(jì)還需要更多時(shí)間才能全部完成。
利用 PoS 共識(shí)來最終確認(rèn)基于 PoW 的區(qū)塊鏈的這一構(gòu)想已經(jīng)在生態(tài)系統(tǒng)中醞釀了一段時(shí)間了( 例如,請(qǐng)參考 EIP-1101 https://eips.ethereum.org/EIPS/eip-1011 或者 Casper FFG 的文檔 https://arxiv.org/abs/1710.09437 ),另外 Alexey Akhunov 有一個(gè)很好的演示文檔( 就在這個(gè)幻燈片的開頭:https://drive.google.com/file/d/16KLZKAutK79NxMh8L7B6hpNKuoOaAPZT/view ),講的是在以太坊 2.0 背景下確定性小工具的一些發(fā)展情況。
確定性小工具如何運(yùn)作?
現(xiàn)在讓我們了解一下,在以太坊 2.0 的當(dāng)前狀態(tài)下,第一版確定性小工具(finality gadget)是如何運(yùn)作的。注意,盡管我們信標(biāo)鏈的最終規(guī)范即將完成,但是一些細(xì)節(jié)(特別是系統(tǒng)所用參數(shù))仍在討論之中,而且可能會(huì)有所變化。
構(gòu)建確定性小工具需要兩個(gè)東西:(i) 一個(gè)確定性引擎和 (ii) 一個(gè)給該引擎提供以太坊 1.0 區(qū)塊數(shù)據(jù)的方案。事實(shí)證明,信標(biāo)鏈在正常運(yùn)行過程中是可以達(dá)成這兩個(gè)需求的。信標(biāo)鏈通過 Casper 協(xié)議達(dá)成共識(shí),因此任何鏈上數(shù)據(jù)都能通過正常的操作得到最終確認(rèn)。要實(shí)現(xiàn)第二個(gè)需求有點(diǎn)困難,因?yàn)檫@就意味著信標(biāo)鏈需要成為以太坊 1.0 的一個(gè)輕客戶端。幸運(yùn)的是,以太坊 2.0 將從以太坊主網(wǎng)開始引導(dǎo)啟動(dòng),而且在這個(gè)引導(dǎo)過程中,以太坊 1.0 的區(qū)塊哈希最終會(huì)納入以太坊 2.0 的信標(biāo)鏈上。
追蹤質(zhì)押保證金的輕客戶端
要成為新的以太坊 2.0 系統(tǒng)的一名驗(yàn)證者,你需要將自己的質(zhì)押保證金和注冊(cè)數(shù)據(jù)發(fā)送到現(xiàn)行主網(wǎng)上的智能合約中,之后會(huì)在主網(wǎng)上生成一個(gè)日志。這是一種單向質(zhì)押行為,只有將注冊(cè)證明提交到信標(biāo)鏈上才能取回質(zhì)押保證金。一旦這個(gè)質(zhì)押事件得到處理,你就可以進(jìn)入激活隊(duì)列,最終成為以太坊 2.0 網(wǎng)絡(luò)中一名活躍的驗(yàn)證者。
為了驗(yàn)證這些質(zhì)押證明的有效性,信標(biāo)鏈必須記錄以太坊 1.0 上處理質(zhì)押事件的智能合約的當(dāng)前狀態(tài)。在撰寫本文時(shí),需要記錄的狀態(tài)有 (i) 迄今為止所有質(zhì)押保證金的默克爾樹的根哈希 (ii) 迄今為止質(zhì)押保證金的總量(參見當(dāng)前規(guī)范中的 Eth1Data 結(jié)構(gòu) https://github.com/ethereum/eth2.0-specs/blob/dev/specs/core/0_beacon-chain.md )。質(zhì)押證明通常情況下是在這個(gè)默克爾樹根哈希的基礎(chǔ)上生成的,對(duì)質(zhì)押保證金總量的記數(shù)則用來確保這個(gè)默克爾樹根哈希中的所有質(zhì)押保證金都得到了處理(如果一個(gè)區(qū)塊內(nèi)未注明最大質(zhì)押量,那么這個(gè)區(qū)塊就是無效的)。重要的是,對(duì)確定性小工具來說,還需要包括與該合約狀態(tài)相對(duì)應(yīng)的以太坊 1.0 區(qū)塊的哈希。
信標(biāo)鏈上每生成一個(gè)區(qū)塊,驗(yàn)證者都必須提交他們對(duì)于質(zhì)押合約的狀態(tài)記錄。如果在指定時(shí)間段內(nèi)被提交的記錄大多數(shù)都吻合的話,那么以太坊 2.0 協(xié)議即可視為對(duì)以太坊 1.0 的數(shù)據(jù)達(dá)成了共識(shí),并將它記錄在信標(biāo)鏈的狀態(tài)中。隨著信標(biāo)鏈上的區(qū)塊最終確定下來,則每個(gè)區(qū)塊相對(duì)應(yīng)的狀態(tài)也隨之確定;一旦以太坊 1.0 上的某區(qū)塊數(shù)據(jù)被包含在最終狀態(tài)里,我們就可以說相應(yīng)的以太坊 1.0 區(qū)塊被最終確定了。這就是確定性小工具的基本構(gòu)造。
確定性小工具的參數(shù)
在將以太坊 1.0 上的數(shù)據(jù)更新至信標(biāo)鏈的過程中,時(shí)序(timing)和頻率是兩大重要參數(shù)。它們是用于保證確定性小工具質(zhì)量的不可或缺的一部分。
第一個(gè)參數(shù)就是 SLOTS_PER_ETH1_VOTING_PERIOD(每段以太坊 1.0 投票周期內(nèi)的時(shí)隙)數(shù)量,也就是將針對(duì)以太坊 1.0 數(shù)據(jù)更新的未決投票留存在狀態(tài)中的時(shí)隙(slot)數(shù)量(一個(gè)時(shí)隙就是一個(gè)時(shí)間段,比如 6 秒)。在這段時(shí)間內(nèi),每個(gè)驗(yàn)證者需對(duì)以太坊 1.0 數(shù)據(jù)進(jìn)行投票,而他們的投票都會(huì)保存在狀態(tài)中。每經(jīng)過一個(gè) SLOTS_PER_ETH1_VOTING_PERIOD 整數(shù)倍大的時(shí)間周期(即 slot),未決投票的滾動(dòng)集合就清理一次。只有大多數(shù)驗(yàn)證者在這段時(shí)間里達(dá)成共識(shí)的情況下,用作質(zhì)押證明的以太坊 1.0 數(shù)據(jù)才能進(jìn)行更新。反之則會(huì)清理未決投票,并重新進(jìn)行投票,不會(huì)改變現(xiàn)有的 1.0 數(shù)據(jù)。
第二個(gè)重要的參數(shù)為 ETH1_FOLLOW_DISTANCE(跟隨以太坊 1.0 鏈的距離)。這個(gè)數(shù)字限定了驗(yàn)證者可用于更新信標(biāo)鏈狀態(tài)的 1.0 區(qū)塊范圍:只有與 1.0 鏈末端距離大于該值的區(qū)塊才能成為驗(yàn)證者的候選區(qū)塊。驗(yàn)證者需要監(jiān)聽新的以太坊 1.0 鏈的候選數(shù)據(jù),并選出其中得票數(shù)最多的候選數(shù)據(jù)。如果沒有這樣的候選數(shù)據(jù)(比如我們剛剛才經(jīng)歷過一個(gè)取得一致意見的 slot),那么驗(yàn)證者就應(yīng)該跳回 1.0 鏈末端并找到與之相距 ETH1_FOLLOW_DISTANCE 的那個(gè)區(qū)塊。例如,如果這個(gè)距離為 1024 ,且這條鏈的末端為區(qū)塊 # 8,000,000,那我們就應(yīng)該找到質(zhì)押合約在區(qū)塊 # 7,998,976 的狀態(tài),并將這個(gè)狀態(tài)以及這個(gè)區(qū)塊的哈希都整合進(jìn)我們的信標(biāo)鏈區(qū)塊中。
該參數(shù)不包含在信標(biāo)鏈的共識(shí)中,卻是誠(chéng)實(shí)的驗(yàn)證者所要遵循的守則。這個(gè)常數(shù)有助于驗(yàn)證者圍繞不斷生長(zhǎng)的以太坊 1.0 區(qū)塊形成協(xié)調(diào)(不斷更新質(zhì)押機(jī)制),同時(shí)存在的一個(gè)副作用是,會(huì)(在某一給定時(shí)間點(diǎn))對(duì)以太坊 1.0 鏈可以最終確認(rèn)的區(qū)塊設(shè)定一個(gè)最大高度。
這么做不是會(huì)跳過很多區(qū)塊嗎?
要注意的是,鑒于以太坊 1.0 區(qū)塊鏈的本質(zhì),只要我們能夠最終確認(rèn)位于高度 N 處的區(qū)塊,就可以認(rèn)為從創(chuàng)始?jí)K到位于高度 N 的區(qū)塊之間的所有區(qū)塊都得到了最終確認(rèn)。這就意味著,以太坊 1.0 鏈上得到最終確認(rèn)的區(qū)塊集會(huì)根據(jù)前兩個(gè)參數(shù)確定的周期性循環(huán)以及信標(biāo)鏈上的最終確認(rèn)時(shí)間突然跳過一定數(shù)量的區(qū)塊。根據(jù)信標(biāo)鏈目前設(shè)定的常數(shù)來看,這個(gè)時(shí)間段最好控制在 2 小時(shí)左右。根據(jù)下文的解釋可知,在不利條件下,這一進(jìn)展可能會(huì)放緩甚至停止。
周而復(fù)始
正如之前說的,現(xiàn)行的以太坊 1.0 鏈不需要了解新系統(tǒng)的任何信息。為了完全實(shí)現(xiàn)確定性小工具的所有功能,我們還得更進(jìn)一步。最后這一步是修改以太坊 1.0 的分叉選擇規(guī)則,使其滿足最終確定性。具體地說,以太坊 1.0 仍然會(huì)使用 GHOST 協(xié)議來找到合法鏈,但是它會(huì)從最新確認(rèn)的區(qū)塊(由信標(biāo)鏈驗(yàn)證者確認(rèn)),而非像如今一樣從創(chuàng)世塊開始搜索。使確定性小工具可用的這一步更新,是對(duì)以太坊 1.0 影響最大的,因?yàn)橐蕴?1.0 的客戶端現(xiàn)在必須接收 2.0 的共識(shí)。但是,修改分叉選擇規(guī)則可以將最終確定性帶來的安全性延伸到 PoW 鏈上,從而實(shí)現(xiàn)這種額外的安全性帶來的所有優(yōu)點(diǎn)。
通過防回滾機(jī)制來改進(jìn)確定性小工具
如果確定性小工具能按上述細(xì)則成功部署,客戶端就可以借由它來大幅提高質(zhì)量。這種質(zhì)量上的提升是因?yàn)楸M可能縮小了 2.0 鏈與 1.0 鏈的更新距離。最終確定性越接近以太坊 1.0 鏈的末端,帶來的安全性就會(huì)越強(qiáng),給用戶提供的具有最終確定性的數(shù)據(jù)質(zhì)量就越高。
考慮到區(qū)塊廣播總會(huì)有一定延遲,理想情況是使 “跟隨距離” 只有幾個(gè)區(qū)塊。以太坊 2.0 一開始的跟隨距離要大得多(目前是 1024 個(gè)區(qū)塊),一部分原因是確定性小工具還不存在(已經(jīng)在引入?。?。另一個(gè)原因是質(zhì)押機(jī)制。質(zhì)押需要按照順序依次處理,一旦被鏈知道了,就要提交至下一個(gè)可用的區(qū)塊內(nèi)。如果 PoW 鏈的重組發(fā)生在被信標(biāo)鏈認(rèn)為合法的區(qū)塊上,那么以太坊 1.0 鏈該區(qū)塊之后的質(zhì)押將會(huì)視為無效(也就使 2.0 的驗(yàn)證者集無效),并且可能(會(huì)打破確保質(zhì)押按序處理的機(jī)制,進(jìn)而)破壞未來質(zhì)押行為,甚至可能使 2.0 鏈停止運(yùn)行(因?yàn)闆]有驗(yàn)證者可以提交有效的區(qū)塊)。如果跟隨距離較大(以目前的 1024 個(gè)區(qū)塊來說),則不太可能出現(xiàn)這種情況,因?yàn)?1.0 鏈上達(dá)到最終確認(rèn)性的區(qū)塊之上還有 1024 個(gè)由 PoW 確定了的區(qū)塊。如果 2.0 的客戶端可以信賴 1.0 的客戶端來保障最終確認(rèn)性(避免超過某個(gè)深度的鏈重組),就可以縮短跟隨距離。從抽象角度來看,我們可以想象,隨著 “跟隨距離” 的縮短,候選區(qū)塊的 “最大高度” 可以按照 “可進(jìn)不可退(ratchet)” 的方式不斷逼近 1.0 鏈的末端,直到達(dá)到一個(gè)最小的安全距離。跟隨距離能縮短到多少也是未來需要研究/討論的主題。
為何我們想要 FG?
減少發(fā)行量
將 1.0 鏈最終確定下來有很多優(yōu)點(diǎn)。其中一個(gè)較大的優(yōu)點(diǎn)是,假設(shè)確定性小工具能夠良好運(yùn)行的話,是可以減少挖礦補(bǔ)貼的。通過將信標(biāo)鏈的安全性與 PoW 鏈共享,PoW 鏈可以在降低對(duì)于礦工算力的依賴性的同時(shí)達(dá)到同等程度的安全性。由于我們不需要這么多哈希算力來保證鏈的安全性,完全可以降低挖礦補(bǔ)貼(這會(huì)降低對(duì)礦工的激勵(lì),并減少挖礦活動(dòng)的總量)。最直接的一個(gè)副作用就是會(huì)降低 ETH 的發(fā)行率和相應(yīng)的總供應(yīng)量,這一目標(biāo)似乎得到了社區(qū)的廣泛支持。在主網(wǎng)上成功部署確定性小工具,并修改分叉選擇規(guī)則后,可以通過另一個(gè)分叉逐步降低出塊獎(jiǎng)勵(lì)來實(shí)現(xiàn)這個(gè)好處,就像在 EIP-1011 中描述的一樣:http://eips.ethereum.org/EIPS/eip-1011#block-reward。
雖然確切的計(jì)劃還有待商榷,但是通過確定性小工具減少發(fā)行量是將以太坊 1.0 鏈遷移到 2.0 系統(tǒng)的第一步。我們會(huì)平穩(wěn)地轉(zhuǎn)移,這個(gè)過程將從逐漸減少發(fā)行量開始。作為社區(qū)的一員,我們目前可以從支持這個(gè)舉措開始,推進(jìn)后續(xù)的遷移工作。
應(yīng)用程序的最終確定性
一旦 1.0 的客戶端接收到了最終確定下來的數(shù)據(jù),這些數(shù)據(jù)就可以通過以太坊虛擬機(jī)暴露給智能合約和相關(guān)的應(yīng)用程序。最終確定性是一個(gè)非常有用的屬性,因?yàn)楝F(xiàn)階段所能達(dá)到的最高水平的確定性需要等待 “足夠多” 的 “確認(rèn)” 數(shù),并且 PoW 鏈只是 “不太可能”(但還是有可能)發(fā)生重組。想象一下,有這樣一個(gè)交易所,用戶進(jìn)行提款操作后需要等待很多次確定才能收到取款。如果這個(gè)交易所只需等到最終確定,就可以大幅縮短提款時(shí)間,給用戶更好的體驗(yàn)。
智能合約也可以利用最終確定性。預(yù)測(cè)市場(chǎng)就是一個(gè)例子,在確認(rèn)一個(gè)事件的結(jié)果之前,等待某個(gè)高度實(shí)現(xiàn)最終確定性是有用的。實(shí)現(xiàn)這類好處似乎也要通過一個(gè)分叉(可能跟減少發(fā)行量的分叉同時(shí)進(jìn)行)來部署,也就是增加一組操作碼,以便以太坊虛擬機(jī)確定某個(gè)區(qū)塊哈?;蚰硞€(gè)高度的區(qū)塊是否已經(jīng)得到最終確認(rèn)。一個(gè)與此類似(添加新的操作碼)的 EIP 案例是 EIP-145 (按位移動(dòng)指令)(https://eips.ethereum.org/EIPS/eip-145)。
以太坊 2.0 的運(yùn)作
確定性小工具意味著以太坊 2.0 的階段 0 一啟動(dòng)時(shí)就能帶來一定的好處。以太坊 2.0 目前正在分階段進(jìn)行部署:階段 0 、階段 1 和階段 2 。每個(gè)階段都為分片系統(tǒng)引入新的復(fù)雜性,而 2.0 團(tuán)隊(duì)目前正致力于在 2019 年底上線階段 0 ,其余階段預(yù)計(jì)需要更多的時(shí)間。由于類似于以太坊 1.0 中的用戶層賬戶系統(tǒng)也要等到階段 2 才可能實(shí)現(xiàn),有必要讓大家理解到,以太坊 2.0 的每個(gè)階段都可以為我們帶來一些好處。
隨著階段 0 的上線,我們可以將確定性小工具引入 1.0 鏈,獲得本文提到的所有好處。在階段 1 ,以太坊 2.0 就可以實(shí)現(xiàn)能夠保存任意數(shù)據(jù)的分片鏈。確定性小工具的實(shí)現(xiàn)意味著以太坊 1.0 的客戶端成了以太坊 2.0 的輕客戶端。借助輕客戶端的功能,可以通過以太坊 1.0 的智能合約為分片鏈中的數(shù)據(jù)生成證明。這個(gè)功能為 layer 2 擴(kuò)容技術(shù)解鎖了許多有趣的用例,比如高性能的 Plasma 鏈和能夠提供隱私性的 zk-SNARKs 應(yīng)用程序。我向你推薦 Vitalik 最近一篇關(guān)于 “作為數(shù)據(jù)層的可擴(kuò)展區(qū)塊鏈” 的演講,詳情:https://www.youtube.com/watch?v=mOm47gBMfg8。
如何部署?
確定性小工具的部署涉及到許多正在開發(fā)的部件,可能需要多次升級(jí)才能增強(qiáng)其效果;簡(jiǎn)而言之,這是一個(gè)復(fù)雜的方案,需要投入大量工作 :)
第一步就是以概念證明原型和模擬的形式提煉出確定性小工具的思路,以便更好地理解通過這種方式實(shí)現(xiàn)兩個(gè)系統(tǒng)耦合所產(chǎn)生的影響。比較理想的情況是在一個(gè)比較流行的主網(wǎng)客戶端上部署確定性小工具。通過這種方式,我們可以收集到確定性小工具在運(yùn)行過程中的實(shí)時(shí)數(shù)據(jù),讓我們知道確定性小工具會(huì)追隨現(xiàn)有客戶端達(dá)成的共識(shí)。
與確定性小工具同步進(jìn)行的還有開發(fā)和上線信標(biāo)鏈;我們?cè)诓渴鸫_定性小工具之前先要通過信標(biāo)鏈來對(duì)區(qū)塊進(jìn)行最終確定,這點(diǎn)無需多做解釋。
一旦我們明白了我們需要部署什么,我們就可以撰寫一個(gè) EIP 來闡明部署流程,并一步一步將其納入接下來的分叉計(jì)劃中。我認(rèn)為比較明智的選擇是先部署確定性小工具,然后再討論減少挖礦補(bǔ)貼或者引入新的 EVM 操作碼的問題。這個(gè)提議秉承著 “一次只做一項(xiàng)更改” 的思想,并且表明了在每個(gè)階段確定性小工具的哪些部分會(huì)產(chǎn)生哪些影響。我們不希望在減少區(qū)塊獎(jiǎng)勵(lì)之后發(fā)現(xiàn)確定性小工具沒有如預(yù)想般有效,這樣會(huì)導(dǎo)致主網(wǎng)安全性的降低。
確定性小工具的風(fēng)險(xiǎn)
從廣義上來說,確定性小工具代表了 1.0 鏈和 2.0 信標(biāo)鏈的雙向耦合。兩個(gè)系統(tǒng)的耦合度越高,受攻擊面就越廣,從而引起更大的擔(dān)憂。在針對(duì)確定性小工具提出一些具體的設(shè)計(jì)建議之前,我們會(huì)對(duì)耦合進(jìn)行全方位的分析。
確定性小工具的主要功能就是將新的 1.0 鏈數(shù)據(jù)導(dǎo)入到信標(biāo)鏈中。信標(biāo)鏈上的驗(yàn)證者必須是以太坊 1.0 的輕客戶端;若某個(gè) 1.0 區(qū)塊哈希不在特定 1.0 鏈驗(yàn)證者視圖中,那么由該哈希形成的信標(biāo)鏈區(qū)塊共識(shí)會(huì)被視為無效。這一有效性條件確保了只要大多數(shù) 2.0 驗(yàn)證者是誠(chéng)實(shí)的,1.0 鏈上就不會(huì)有任何無效的數(shù)據(jù)得到最終確定。如果超過 2/3 的驗(yàn)證者是惡意的,他們就有可能會(huì)串通起來確定一個(gè)可能并沒有遵循底層 PoW 共識(shí)的 1.0 區(qū)塊。通過設(shè)置一個(gè)較大的初始驗(yàn)證者集并采取保守的確定性小工具部署方案,我們就可以降低對(duì)這種情況的擔(dān)憂。如果信標(biāo)鏈啟動(dòng),且我們知曉驗(yàn)證者集中作惡者占大多數(shù)的話,那我們還有機(jī)會(huì)重新考慮我們的方案。以太坊 2.0 和確定性小工具的設(shè)計(jì)方案需要確保即使這種情況發(fā)生,也不會(huì)對(duì)以太坊 1.0 區(qū)塊鏈帶來任何改變或影響。
另一個(gè)擔(dān)憂是,鑒于驗(yàn)證者要在一個(gè)投票周期內(nèi)協(xié)同提議下一個(gè)區(qū)塊,這雖然不會(huì)影響確定性小工具的正確性,但會(huì)影響其性能。當(dāng)前規(guī)范建議驗(yàn)證者選擇先前區(qū)塊發(fā)起人提議的多數(shù)區(qū)塊,同時(shí)要保證該區(qū)塊是在自己的視圖中。實(shí)際上,這就意味著誠(chéng)實(shí)的驗(yàn)證者只需要在每輪投票中選擇第一個(gè)被提議的有效區(qū)塊,并且最終達(dá)成共識(shí)。下一個(gè)得到最終確定的區(qū)塊將從所有被提議的區(qū)塊中選出。因此,如果不能(在劃分好的 SLOTS_PER_ETH1_VOTING_PERIOD 時(shí)間段中)選出下一個(gè)區(qū)塊,即表明確定性小工具沒辦法將 1.0 的區(qū)塊盡快確定下來。通過進(jìn)一步研究更好的投票策略來促進(jìn)對(duì) 1.0 鏈的最終確定,我們就可以減少這樣的擔(dān)憂。
最后一類風(fēng)險(xiǎn)是在跟隨距離非常短,且 1.0 鏈在受到攻擊時(shí),在可能產(chǎn)生很多短分叉情況下的 1.0 鏈的分叉選擇。這是最終確定性的質(zhì)量(由得到最終確定的頭和鏈的 GHOST 頭部之間的距離決定)和 PoW 鏈上不穩(wěn)定分叉選擇所產(chǎn)生的風(fēng)險(xiǎn)之間存在權(quán)衡關(guān)系。在今后的研究中,我們會(huì)通過模擬的方式更好地理解二者之間的權(quán)衡關(guān)系,并給出確定性小工具的最終提議。
這類攻擊會(huì)造成 1.0 鏈的最終確定機(jī)制延緩甚至癱瘓,導(dǎo)致確定性小工具的性能降級(jí),在我們依賴最終確定性來保障 1.0 鏈的安全性的情況下,就會(huì)產(chǎn)生很大的風(fēng)險(xiǎn)。
未解決的問題
· 假設(shè)確定性小工具投入運(yùn)行,我們?nèi)绾握{(diào)整挖礦補(bǔ)貼(亦或完全不調(diào)整)?應(yīng)該通過硬分叉來削減挖礦補(bǔ)貼嗎?發(fā)行量是否應(yīng)該是跟隨距離的一個(gè)函數(shù)?我們是否可以將最終確定性所帶來的經(jīng)濟(jì)安全性(用 ETH 來計(jì)價(jià))當(dāng)前主網(wǎng)算力所實(shí)現(xiàn)的安全性上作同質(zhì)比較?
· 跟隨距離可以減少到什么程度?又該如何調(diào)整?是隨著時(shí)間的推移慢慢縮短,還是在部署完確定性小工具后就縮短至最小值?
· 在信標(biāo)鏈上進(jìn)行的以太坊 1.0 數(shù)據(jù)塊投票過程是否足以支持確定性小工具的高性能運(yùn)作?
結(jié)論
希望你能更好地理解什么是確定性小工具,為什么我們需要它以及我們應(yīng)該如何規(guī)劃后續(xù)進(jìn)展。我們還有一些問題尚需解決,我們也很期待你能夠提供任何有用的幫助。
如果你想要為我們提供幫助的話, Alexey 和我正在組建一個(gè)工作群,致力于實(shí)現(xiàn)確定性小工具。你可以點(diǎn)擊這里進(jìn)行參與:以太坊 1.x 確定性小工具工作小組
我要感謝 Danny Ryan 與我進(jìn)行了很多有用的討論,以便更好地理解信標(biāo)鏈以及如何通過它來為以太坊 1.0 帶來最終確定性,還要感謝 Alexey Akhunov 在工作組中的貢獻(xiàn)。感謝 Terence Tsao 對(duì)本文的反饋。