什么是信標鏈區(qū)塊
信標鏈檢查點
檢查點就是位于一個時段的第一個時隙內(nèi)產(chǎn)生的區(qū)塊。如果某個時段的第一個時隙內(nèi)沒有產(chǎn)生區(qū)塊,則將最近的一個符合要求的區(qū)塊認定為檢查點區(qū)塊。每個時段都會有一個檢查點區(qū)塊;一個區(qū)塊有可能同時是多個時段的檢查點。
注意,從時隙 65 到時隙 128 之間都是空塊。時段 2 的檢查點本來應(yīng)該是時隙 128 處產(chǎn)生的區(qū)塊,但因為該時隙被跳過了,所以時段 2 的檢查點仍然是時隙 64 處產(chǎn)生的區(qū)塊。時段 3 也類似,時隙 192 被跳過了,因此將時隙 180 處產(chǎn)生的區(qū)塊認作時段 3 的檢查點。
時段邊界區(qū)塊(epoch boundary block)是一些文獻(比如 Gasper 論文,也是上面這張示意圖的來源)中用到的一個術(shù)語,可以認為是檢查點的同義詞。
在發(fā)起一次 LMD GHOST 投票時,驗證者也要為最近時段的檢查點投票,投票者希望確立的新檢查點叫做 “目標檢查點”(target)。這種投票叫做 Casper FFG 投票,而且投票中也會包含投票者認定的上一個檢查點,叫做 “來源檢查點”(source)。在上圖中,時段 1 中的一個驗證者的投票將創(chuàng)世塊作為來源檢查點,然后推舉時隙 64 處產(chǎn)生的區(qū)塊為目標檢查點。在時段 2,同一個驗證者又為相同的檢查點投票了。
只有被分配到某個時隙的驗證者才需要為該時隙的區(qū)塊投票,但是,所有驗證者都要為每一個時段的檢查點發(fā)起 FFG 投票。
大多數(shù)
由所有活躍驗證者總余額的 2/3 所支持的投票內(nèi)容就是多數(shù)票。
我們舉簡單一點的例子來說明一下,假設(shè)有 3 個活躍驗證者,兩個的余額是 8 ETH,另一個的驗證者余額為 32 ETH。那么,只有包含了那個最大驗證者的投票才可能是多數(shù)票;雖然另外兩個驗證者可能都投了另一個檢查點,但是他們的余額總和只占 50%,形成不了多數(shù)。
確定性
一個時段結(jié)束的時候,如果其檢查點得到了 2/3 的總余額支持(形成了多數(shù)票),那么該檢查點就被合理化(justified)了。
如果一個檢查點 B 已經(jīng)得到合理化,其下一個時段的檢查點也被合理化了,那么 B 就被敲定(finalized)了。一般來說,一個檢查點會在兩個時段內(nèi)得到敲定,大概就是12.8 分鐘。
從平均的角度來看,用戶的交易總是打包在一個時段的中間部分(的區(qū)塊中);那么距下一個檢查點就還有半個時段的時間,因此,一筆交易經(jīng)過 2.5 個時段(16 分鐘)就可以得到確定性(finality)。理想化情況下,超過 2/3 的見證消息會在一個時段的前 22 個時隙內(nèi)完成打包。因此,交易敲定的平均時長是 14 分鐘(16 + 32 + 22 個時隙)。區(qū)塊確認則從區(qū)塊見證消息,一步步升級到合理化,再到確定性。用戶自己可以覺得他們要不要等到交易確定,還是更低一點的安全性就足夠了。
為簡化敘述難度,下文假設(shè)所有驗證者的余額都相同。
信標鏈的頂端
(上圖中)時隙 96 處產(chǎn)生了一個時段邊界區(qū)塊,而且包含了對時段 2 檢查點的見證消息(投票)。見證消息的數(shù)量達到了 2/3 的多數(shù)要求。然后時段 2 的檢查點就得到了合理化,同時,上一個合理化的檢查點,也就是時段 1 的檢查點,就被敲定了。時隙 32 處的區(qū)塊得到確定性,會使得之前所有區(qū)塊都得到確定性。在敲定檢查點的時候,并沒有對同時得到敲定的區(qū)塊在數(shù)量上的限制。所以,雖然確定性僅在時段邊界的時候產(chǎn)生,見證消息是逐個逐個區(qū)塊累加的,下文的 “從創(chuàng)世塊到區(qū)塊鏈頂端的歷程” 部分提供了另一種描述。
從時隙 1 到時隙 32 的信標鏈區(qū)塊所包含的所有交聯(lián),也會使分片鏈產(chǎn)生確定性。換句話來說,當一個信標鏈區(qū)塊得到確定性時,該塊所包含的交聯(lián)所對應(yīng)的分片鏈區(qū)塊也得到敲定。交聯(lián)本身不足以使一個分片區(qū)塊得到敲定,只是對分片鏈的分叉選擇有所幫助。
從創(chuàng)世塊到信標鏈頂端的歷程
用同樣的辦法,可以觀察到從創(chuàng)世塊開始的一條故事線。所有的提議者,從時隙 1 到時隙 36,一一提議了一個區(qū)塊,而且這些區(qū)塊都顯現(xiàn)在鏈上。對于時段 1的所有區(qū)塊來說,其檢查點(時隙 32 處的區(qū)塊)累積獲得了 55% 的驗證者的見證。在驗證者提議時隙 64 處的區(qū)塊時,它也納入了對時段 1 檢查點的見證消息?,F(xiàn)在,有 70% 的驗證者都見證了時段 1 的檢查點,因此時段 1 檢查點得到了合理化。完成時段 2 時,時段 2 的檢查點(時隙 64 處的區(qū)塊)累積的見證消息還達不到 2/3 的多數(shù)要求。時隙 96 處的區(qū)塊在提議時,也納入了對區(qū)塊 2 檢查點的見證消息,所以,這時候,時段 2 的檢查點也達到 2/3 的多數(shù)要求,被合理化了。合理化時段 2 的檢查點同時也會敲定時段 1 的檢查點及所有此前的區(qū)塊。
有時,合理化一個區(qū)塊會敲定兩個甚至多個時段以前的區(qū)塊。Gasper 論文討論了這種情況,預(yù)計只有網(wǎng)絡(luò)高延遲、網(wǎng)絡(luò)隔離、遭遇強大攻擊者的極端情況下,才會出現(xiàn)這種事。
確定性對于分片及以太坊區(qū)塊的用戶來說是重中之重,因為確定性使他們能夠確定,交易已經(jīng)永遠寫在鏈上,不可更改了。確定性也降低了跨分片通信的復(fù)雜性。沒有確定性,分片內(nèi)部和分片之間交易的回滾會具有破壞性,甚至讓分片的好處蕩然無存。
深入理解見證消息
一條見證消息里面包括了一個 LMD GHOST 投票和一個 FFG 投票。理想情況下,所有的驗證者每個時段都會發(fā)出一條見證消息。一筆見證消息有 32 個時隙的機會被打包到鏈上。這就意味著,一個驗證者可能在單個時段內(nèi)有兩筆見證消息被打包上鏈。見證消息打包上鏈的時間也決定了驗證者可得的獎勵幅度:在自己所在的時隙就打包上鏈可以得到最多的獎勵;要是等到后續(xù)時隙才打包上鏈,驗證者得到的獎勵就會下降。為了給驗證者足夠的時間來準備見證消息,他們會在一個時段以前就預(yù)先知道自己所在的委員會。區(qū)塊提議者則僅在時段開始之時分配一次。此外,隱蔽領(lǐng)袖選舉研究還致力于減輕對區(qū)塊提議者的攻擊和賄賂。
委員會機制使得匯總所有的見證人簽名、變成單個聚合簽名在技術(shù)上的優(yōu)化成為可能。如果同一委員會中的所有驗證者都作了同樣的 LMD GHOST 和 FFG 投票,則他們的簽名可以聚合起來(成為單個簽名)。
信標鏈驗證者獎懲措施
為避免過度深入,我們僅討論驗證者激勵相關(guān)的 6 種措施:
見證人獎勵
見證人懲罰
對質(zhì)押者來說典型的貶值風(fēng)險
罰沒(slashing)及舉報人獎勵
區(qū)塊提議者獎勵
怠惰懲罰(inactivity penalty)
當期見證消息(包含 LMD GHOST 投票和 FFG 投票)與其它多數(shù)驗證者一致時,驗證者可以得到獎勵。在 Eth2 Phase 1 階段,驗證者發(fā)送交聯(lián)也可以得到獎勵。當區(qū)塊得到敲定時,驗證者獎勵也就確定下來了。
另一方面,如果驗證者沒有提交見證消息,或者投票支持了一個最終不能得到敲定的區(qū)塊,他們也會受到懲罰。
在列舉不太常見的懲罰和獎勵之前,你可能還想知道,成為質(zhì)押者會面臨怎樣的貶值風(fēng)險。答案是,你可能失去的 ETH,恰好跟你能賺取的 ETH 數(shù)量對稱。如果一個驗證者一年的獎勵回報率是 10%,則作惡驗證者在最壞情況下可能會失去 10%。舉個例子,如果一個驗證者總是離線,或者總是給那些不能得到敲定的區(qū)塊投票,則其損失的 ETH 數(shù)量,恰與一位總是及時提交見證消息,且所支持的區(qū)塊總是得到敲定的驗證者所得的獎勵,在數(shù)額上相等。
罰沒(Slashing)的力度下至 0.5 ETH,上至一位驗證者的全部權(quán)益。如果一位驗證者所提交的見證消息觸犯了協(xié)議所定義的罰沒條件,則 TA 會損失自身權(quán)益的至少 1/32,并被驅(qū)逐出驗證者隊伍。懲罰的力度就像該驗證者離線了 8192 個時段一樣。協(xié)議還會根據(jù)相近時間內(nèi)被罰沒的驗證者數(shù)量施加一個額外的懲罰。此種額外懲罰的計算公式是:驗證者余額 × 3 × 被罰沒的驗證者占比。那么,如果占全體驗證者 1/3 數(shù)量的驗證者都觸犯了罰沒條件,則他們會失去全部余額。相應(yīng)地,檢舉這些不軌行為的驗證者將會得到檢舉人獎勵。
區(qū)塊提議者在所提議區(qū)塊得到敲定之后,也會得到一個成比例獎勵??偸窃诰€,并且提議工作做得很好的驗證者,其總獎勵可增加約 1/8。出現(xiàn)罰沒事件的時候,提議者也會因為打包罰沒證據(jù)而得到一小筆獎勵。在 Eth2 Phase 0 中,所有的檢舉人獎勵都會給予區(qū)塊提議者。
以太坊 2.0 系統(tǒng)中機制眾多,對這些機制的評價應(yīng)從所有機制的整體效果出發(fā)。最末一種獎懲措施是所謂的 “怠惰懲罰”?;旧?,如果距上一次敲定區(qū)塊已過去了 4 個時段(還沒有新檢查點得到敲定),所有驗證者都會遭受怠惰懲罰,而且懲罰力度會呈平方級上升,直至新的檢查點得到敲定。怠惰懲罰保證了:即使 50% 的驗證者都離線了,系統(tǒng)也會在 21 天后重新開始敲定區(qū)塊。
罰沒條件
罰沒條件主要有三個,分別是:雙重提議、FFG 雙重投票,F(xiàn)FG 環(huán)繞投票。LMD GHOST 投票是不會招致罰沒的。
雙重提議是指區(qū)塊提議者于所在時隙提議了多于一個區(qū)塊。
雙重投票是指驗證者在提交 FFG 投票時,多個投票指向同一個目標檢查點,但引用的來源檢查點卻各不相同。
環(huán)繞投票指的是驗證者在提交 FFG 投票時,多個投票所指向的檢查點 恰成環(huán)繞形狀。舉個例子,假定一位驗證者在時段 5 投票時,以時隙 32 的區(qū)塊為來源檢查點,以時隙 128 的區(qū)塊為目標檢查點:
· 如果該驗證者在時段 6 的投票以時隙 64 的區(qū)塊為來源檢查點,以時隙 96 的區(qū)塊為目標檢查點,那么該票就被 TA 自己在時段 5 的投票給包圍(環(huán)繞)起來了。
· 如果該驗證者在時段 6 的投票以時隙 0 的區(qū)塊為來源檢查點,以時隙 160 的區(qū)塊為目標檢查點,則該投票把 TA 自己在時段 5 的投票給包圍起來了。
如果這位驗證者在時段 6 又給時隙 128 的區(qū)塊投票,除非其來源檢查點仍是時隙 32 的區(qū)塊,否則就成了雙重投票,也會被罰沒。相同的 FFG 投票倒是不會被罰沒的。
擁有相同來源檢查點的 FFG 投票也不會招致罰沒。這是維持網(wǎng)絡(luò)活性的重要條件。舉個例子,如果兩條分叉鏈各自都有 50% 的驗證者余額支持,協(xié)議應(yīng)該鼓勵驗證者通過投票給相同來源檢查點、不同目標檢查點,在分叉間切換(而不是懲罰他們切換分叉,這樣會導(dǎo)致網(wǎng)絡(luò)繼續(xù)分裂)。能夠安全地在分叉間切換,驗證者們就能打破僵局,嘗試形成 2/3 的多數(shù)。
檢舉他人的驗證者需要在見證消息中納入相互沖突的投票,以證明另一個驗證者應(yīng)該受到懲罰。要高效地從一長段歷史中找出相互沖突的投票,在算法和數(shù)據(jù)結(jié)構(gòu)上也是一種挑戰(zhàn)。因此,開放工程挑戰(zhàn)·罰沒探測器也在尋找貢獻者。
得到良好控制的驗證者一般是可以避免被罰沒的:只需記得自己曾經(jīng)簽名過哪些見證消息就好。誠實的驗證者也不會因為其它驗證者的行為而受到波及。只要驗證者不簽名相互沖突的見證消息,不作出雙重提議,就不會被罰沒。
為得到更好的運行體驗、更值得信任的信息來源,乃至更好的 DoS 保護,驗證者客戶端可能會同時使用多個信標鏈節(jié)點。在這種模式中,包括使用備份的驗證者客戶端的時候,需要小心不要讓驗證者簽署相互沖突的消息。
信標鏈驗證者激活及生命周期
每一個想成為驗證者的用戶都要先有 32 ETH 才能獲得驗證者資格。用戶質(zhì)押 32 ETH 到以太坊主網(wǎng)上的保證金合約中,就能獲得一個驗證者資格。
另一方面,信標鏈也會勸退(反激活)所有余額降低到 16ETH 的驗證者;質(zhì)押用戶可以取出剩余的驗證者余額,不過在 Eth2 Phase 0 還做不到。
驗證者在服務(wù) 2048 個時段(約 9 天)之后也可以主動退出。退出時要先走完 4 個時段,質(zhì)押用戶才能取出自己的權(quán)益。在這 4 個時段內(nèi),該驗證者的余額仍然是可以被罰沒的。因此,誠實驗證者的余額可以在約 27 小時之后取出。但是,如果驗證者在此時被罰沒,就只有再等 8192 個時段(約 36 天)之后才能取出剩余款項。
更多技術(shù)細節(jié)可看《以太坊 2.0 Phase 0 驗證者生命周期》。下圖亦來自這份資料:
為避免驗證者集合在短時間內(nèi)出現(xiàn)大規(guī)模的變動,單個時段內(nèi)能激活和退出的驗證者數(shù)量是有一個機制限制的。這樣可以讓激活許多驗證者、快速攻擊系統(tǒng)的攻擊更難發(fā)動。
信標鏈還使用了一個叫做 “有效余額” 的概念,這個有效余額回避驗證者余額的變化更小,使得技術(shù)上的最優(yōu)化成為可能。
總結(jié)
在每一個時段,驗證者都被均勻分配到不同時隙中,并進一步劃分成相同規(guī)模的委員會。驗證者只有 1 個應(yīng)召的時隙,也只會存在于 1 個委員會中。因此:
一個時段中的所有驗證者,通過集體決策嘗試敲定某個檢查點;方法是 FFG 投票;
各時隙中的所有驗證者,通過集體決策嘗試選出信標鏈的頂端區(qū)塊:方法是 LMD GHOST 投票;
一個委員會中的所有驗證者,通過集體投票嘗試將某個分片交聯(lián)到信標鏈上。
最符合協(xié)議的行為可以得到最多的獎勵。
信標鏈的啟動(創(chuàng)世塊)需要至少 16484 名驗證者。驗證者的數(shù)量會因為罰沒及資源退出而減少,也會因為質(zhì)押用戶的投入增加而增加。而且,隨著 Eth2 Pahse 1 及后續(xù)階段的升級,預(yù)計會有更多驗證者參與進來。信標鏈需要至少 262144 名驗證者(質(zhì)押的 ETH 數(shù)量超過 800 萬)才能使得單個信標鏈區(qū)塊能包含 64 個交聯(lián)。
我們還從未擁有過一個 去中心化 系統(tǒng)和應(yīng)用的可擴展平臺。如果你想更深入地研究以太坊 2.0,權(quán)威的參考來源是 Ethereum 2.0 SpecificaTIons。該技術(shù)規(guī)范包含了信標鏈技術(shù)規(guī)范,還提供了其它關(guān)鍵信息源,而且提交 issue 可以獲得獎金。當前,最緊迫的 工程需要是點對點網(wǎng)絡(luò)的組網(wǎng)功能。
自己動手,或者推薦朋友參加挑戰(zhàn)、參與 ethresear.ch 論壇或者 Ethereum Magician 論壇,創(chuàng)造歷史吧!