在每個 epoch 中,驗證者被平均分配到 slot 中,然後細分為適當規模的委員會。驗證者只能在一個 slot 和一個委員會中。
原文:The Beacon Chain Ethereum 2.0 explainer you need to read first(ethos.dev)
作者:JosephC
編譯: Xiang,W3.Hitchhiker
封面: Photo by Shubham's Web3 on Unsplash
再次感謝 ECN 社區對以太坊的貢獻,文章基於 ECN 中文(2020-4-21)版本更新,翻譯的(2022-10-01)版本。新版本中刪除了分片、交聯和 ETH2 等舊術語相關文檔,並更新改進部分文檔。有關之前版本,請參考上述中文鏈接。
引擎在飛行過程中被改變了!2022 年 9 月 15 日—— 以太坊切換到 POS 機制的那一天。
那個新引擎就是信標鏈。
是時候來了解一下它是如何工作的了嗎?
以太坊的信標鏈將通過適當水平的示例進行說明,從而讓你熟悉信標鏈並節省時間。
Slot 和 Epoch
信標鍊為以太坊的共識提供心跳。每個 Slot 為 12 秒,一個 Epoch 為 32 個 Slot:6.4 分鐘。
Slot 是將一個區塊添加到信標鏈。當系統處於最佳運行狀態時,每 12 秒添加一個區塊。驗證者需要同步時間。
Slot 可以是空區塊,信標鏈創世區塊位於 Slot 0。
驗證者(Validators)和證明(Attestations)
工作量證明與礦工有關,但以太坊的驗證者是權益證明的 “虛擬礦工”。驗證者運行以太坊的共識。他們的激勵措施將在後面的驗證者獎懲機制中討論。
區塊提議者(proposer)是被偽隨機選擇來構建區塊的驗證者。
大多數時候,驗證者是對區塊進行投票的證明者(attesters)。並且投票本身也會被記錄在信標鏈中。
在每一個 epoch 中,一個驗證者被(偽)隨機分配到一個 slot。
一份證明(attestation)則是驗證者的一記投票,投票通過驗證者的餘額進行加權。除區塊之外,證明也會由驗證者在系統中進行廣播。
驗證者之間也會互相監督,通過舉報其他驗證者自相矛盾的投票或提議多個區塊的行為,從而獲得獎勵。
信標鏈裡主要記錄了驗證者的地址、每個驗證者的狀態、證明。驗證者需經由信標鏈激活。
質押驗證者:含義(semantics)
驗證者是虛擬 的,由質押者激活。在 PoW 中,用戶購買硬件成為礦工。在以太坊中,用戶質押 ETH 來激活和管理驗證者。
為了更清楚地理解質押驗證者的含義,我們可以將質押者(stakers)和質押金(stake),驗證者(validators)和餘額(balance)聯繫起來。每個驗證者擁有的餘額最多為 32 個 ETH,不過,質押者可以質押他們所有的 ETH。每質押 32 個 ETH,一個驗證者就會被激活。
驗證者由使用信標(鏈)節點的驗證者客戶端(validator clients)執行。信標鏈節點(beacon node)具有跟踪和讀取信標鏈的功能。驗證者客戶端可以實現信標節點功能或調用信標鏈節點。一個驗證者客戶端可以執行多個驗證者。
委員會(committees)
一個委員會由一組驗證者組成。為加強安全保障,每個 slot 的委員會至少由 128 位驗證者組成。一個攻擊者能夠控制 2/3 委員會成員的可能性低於萬億分之一。
以太坊信標鏈這一名詞,來源於隨機信標(randomness beacon, 向公眾提供隨機數字)這一概念。信標鏈在一個偽隨機的過程(RANDAO)中達成共識。
RANDAO 根據驗證者余額的權重,選擇出區塊提議者。在同一個 slot 中,一個驗證者可以同時是區塊提議者和委員會成員,但這並不是常態。出現這種情況的概率為 1/32,因此我們大概會在每個 epoch 碰到一次。上圖情景中的驗證者不到 8192 個,不然每個 slot 就得至少包含兩個委員會。
上圖綜合描述了三個 Slot 中發生的情況。在 Slot 1 中,有驗證者提議出一個區塊,該區塊得到兩個驗證者的證明;而委員會 A 裡的一個驗證者離線了。Slot 1 中的證明和區塊被廣播到網絡上,許多驗證者也收到了該信息。在 Slot 2 中,又一個區塊被提議出來,而委員會 B 的一個驗證者錯過了該信息,於是該驗證者認為信標鏈頭是 Slot 1 中的區塊。請注意,這個驗證者跟 Slot 1 的離線驗證者有所不同。投票證明信標鏈頭的這個過程被稱為 “LMD GHOST 投票”。在 Slot 3 中,委員會 C 上所有的驗證者都遵循 LMD GHOST 分叉選擇規則,並獨立地投票選出同一個信標頭。
一名驗證者在每個 epoch 中只參與一個委員會。一般來說,系統中的驗證者會超過 8192 個,所以每個 slot 中會有一個以上委員會。所有委員會的規模都一樣大,至少由 128 個驗證者組成。當系統中的驗證者少於 4096 個時,安全性就會打折扣,因為這意味著單個委員會的驗證者將少於 128 個。
在每個 epoch 中,驗證者們被均勻地分配到各個 slot 中,然後進一步分配到規模相當的各委員會中。所有驗證者都要在自己所在的 slot 中投票選出信標鏈頭。混洗(shuffling)算法會適時調整每個 slot 中委員會的數量,以保證每個委員會都至少有 128 名驗證者。
信標鏈檢查點(Beacon Chain Checkpoints)
檢查點(checkpoints)就是位於 epoch 第一個 slot 裡的區塊,如果這個 slot 內沒有產生區塊,則最近的前一個區塊即為檢查點。每個 epoch 都會有一個檢查點區塊;一個區塊可能同時是多個 epoch 的檢查點。
值得注意的是,從 slot 65 到 slot 128 之間是沒有區塊的。Epoch 2 的檢查點本來應該是位於 slot 128 處產生的區塊,但因為該 slot 丟失了,所以 epoch 2 的檢查點還是 slot 64 處產生的區塊。Epoch 3 同理,slot 192 處是空塊,因此 epoch 3 的檢查點為 slot 180 處產生的區塊。
時段邊界區塊(epoch boundary block,EBB)是一些文獻 (比如 Gasper 論文,也是上圖的來源) 中用到的術語,可以理解為 “檢查點”(checkpoint)的同義詞。
在發起一次 LMD GHOST 投票時,驗證者也要為最近一個 epoch 的檢查點投票,該檢查點叫做 “目標檢查點”(target)。該投票叫做 Casper FFG 投票,而且還包括對前一個檢查點的投票,叫做 “來源檢查點”(source)。
上圖中,epoch 1 中的一個驗證者進行投票,將創世區塊選為來源檢查點,然後推舉 slot 64 處產生的區塊為目標檢查點。在 epoch 2 中,同一個驗證者又為相同的檢查點投票了。驗證者只需為自己所分配到的 slot 發起 LMD GHOST 投票,但是每一個 epoch 上的所有驗證者都要為 epoch 的檢查點發起 FFG 投票。
絕對多數(supermajority)
絕對多數是指某個投票獲得了所有活躍驗證者總餘額 2/3 的支持。簡單來說,假設有 3 個活躍驗證者,其中兩個的餘額是 8 ETH,另一個驗證者的餘額為 32 ETH。那麼,那個擁有最多餘額的驗證者所進行的投票才是絕對多數;儘管另外兩個驗證者的投票可能不一樣,但是他們的餘額不足以形成絕對多數。
最終確定性(Finality)
當一個 epoch 結束之後,如果其檢查點得到了 2/3 餘額票數,也就是形成了絕對多數,那麼該檢查點就被證明(justified)了。
如果檢查點 B 已經被證明,且其下一個 epoch 的檢查點也被證明了,那麼 B 就被最終確定了(finalized)。一般來說,一個檢查點會在兩個 epoch 內得以最終確定,即 12.8 分鐘。
通常來說,用戶交易發生在一個 epoch 的中間部分;那麼距下一個檢查點就還有半個 epoch 的時間,也就是說,一筆交易經過 2.5 個 epoch(16 分鐘)便可得以最終確定(finality)。在理想情況下,超過 2/3 的證明(attestations)將會被打包進某個 epoch 的第 22 個 slot 中。因此,交易得以最終確定的平均時長為 14 分鐘(16+32+22 個 slot)。區塊確認過程則經由區塊證明(attestations),到被證明(justification),再到最終確定(finality)。用戶可以自己決定是否等到交易最終確定,還是說稍低一點的安全性也足夠了。
為簡要敘述,下文將假設所有驗證者的餘額相同。
信標鏈頭髮生了什麼
在 slot 96 處,一個時段邊界區塊(EBB)被提議,且該區塊還包含了對 Epoch 2 中檢查點的證明。Epoch 2 檢查點的證明投票現達到了 2/3 的絕對多數,意味著 Epoch 2 的檢查點被證明了。因此,上一個被證明的檢查點,即 Epoch 1 檢查點,也獲得了最終確定性。Slot 32 處的區塊一旦被最終確定,此前所有區塊都會被最終確定。
在對檢查點進行最終確定時,對同時可以得到最終確定的區塊在數量上並沒有限制。所以,雖然最終確定性僅在 epoch 邊界的時候產生,但證明(attestations)是逐塊累加的,下文的 “從創世區塊到區塊鏈頭會發生什麼” 提供了另一種解釋。
從創世區塊到區塊鏈頭會發生什麼
採取同樣的辦法,我們可以觀察到從創世區塊開始的一條故事線:
從 slot 1 到 slot 63,所有的提議者都提議了一個區塊,且所有區塊都被添加到鏈上。對於 epoch 1 的所有區塊來說,其檢查點(slot 32 處的區塊)累積了 55% 的驗證者證明。驗證者在 slot 64 處提議區塊時,同時也對 epoch 1 處的檢查點發起投票。現在,有 70% 的驗證者都證明了 epoch 1 的檢查點,因此 epoch 1 檢查點被證明(justified)。Epoch 2 結束後,epoch 2 的檢查點(slot 64 處的區塊)累積了投票證明但還達不到 2/3 的多數要求。驗證者在 Slot 96 處提議區塊時,同時也對 epoch 2 處的檢查點發起投票,所以這時候,epoch 2 檢查點的投票達到了 2/3 的多數要求,也就是被證明了(justification)。Epoch 2 的檢查點被證明的同時,epoch 1 的檢查點以及所有此前的區塊被最終確定了。
還有一種可能性,我們只考慮到 epoch1。Epoch 2 的檢查點被提議出來之前,epoch 1 的檢查點可能已經獲得了絕對多數投票。
譬如說,當 slot 32 和 slot 54 的區塊被提議出來時,slot 32 的檢查點的證明投票可能已經達到多數要求了。因而在這種情況下,檢查點可能在 epoch 2 之前就已經被證明了。最後一點,檢查點可以在離其最近的 epoch 中被證明,但是至少隔一個 epoch 才能被最終確認。
有時,一個區塊被證明意味著兩個甚至多個 epoch 以前的區塊被最終確定。Gasper 論文裡討論了這種情況,只有在網絡高延遲、網絡隔離或遭遇強大攻擊等個別情況下,才會出現這種狀況。
更加深入地了解證明(attestations)
一則證明包含一個 LMD GHOST 投票和一個 FFG 投票。理想情況下,每個 epoch 中所有驗證者提交一份證明。每一個證明有 32 個 slot 的機會被打包進鏈,這意味著在單個 epoch,一名驗證者可能有兩份證明被打包上鍊。
如果驗證者在其所分配的 slot 裡發送證明,且該證明被打包上鍊,那麼驗證者獲得的獎勵為最大值;隨後打包上鍊所獲得的獎勵就會不斷減少。為了留給驗證者準備的時間,他們被提前一個 epoch 分配到委員會中。只有在 epoch 開始後,才會將提議者分配給 slot 中。儘管如此,秘密領導人選舉旨在降低攻擊和賄賂提議者的風險。
委員會使得聯合簽名的技術達到最優化狀態,將每個證明者的簽名聚合成一個簽名。當驗證者在同一個委員會中,並做出了同樣的 LMD GHOST 和 FFG 投票時,他們的簽名就可以被聚合。
驗證者獎懲機制
- 證明者獎勵(attester rewards)
- 證明者懲罰(attester penalties)
- 質押者特有風險(typical downside risk for stakers)
- 罰沒和吹哨者獎勵(slashings and whistleblower rewards)
- 提議者獎勵(proposer rewards)
- “不作為” 懲罰(inactivity penalty)
- 當驗證者所給出的證明(LMD GHOST 或 FFG 投票)為其他大部分驗證者所同意時,會獲得獎勵。當區塊被最終確定,獎勵也隨之確定。
- 相反,如果驗證者沒有提交證明,或者其投票選出的區塊最終沒有被確定,那麼驗證者就會受到懲罰。
- 在描述相對來說不那麼常見的獎懲制度之前,你可能想知道成為一名質押者所面臨的風險。作為一名質押者,損失 ETH 的風險與回報並存。如果一名驗證者在一年中能賺取 10% 的報酬,那麼一名工作表現差強人意的(誠實)驗證者則面臨 7.5% 的損失。比如說,一名驗證者總是不在線,或者其投票的區塊總是無法被最終確定,他將會受到懲罰,而罰款數額等於一名驗證者投出有效區塊所獲得的獎勵 3/4 數額。以 365 天為例,離線幾天或幾週的懲罰要小很多:離線 36 天會損失大約 0.75%(除非還發生了下面 #6 中描述的懲罰)。
- 罰沒(slashing)的數額將超過 0.5 個 ETH,最多則是一名驗證者的所有質押金額。一名驗證者如果受到了罰沒懲罰,其將至少損失餘額的 1/32,且會被停止繼續參與工作("強制退出")。該名驗證者所受懲罰的程度,與連續 8192 個 epoch 都離線的驗證者所受的懲罰相當。基於同時受到罰沒懲罰的驗證者的數量,協議還會對驗證者做出額外的懲罰。施以額外懲罰的基本公式是:validator_balance 3 fraction_of_validators_slashed。也就是說,如果 1/3 的驗證者同時受到了罰沒,他們會損失所有餘額。而對罰沒行為舉報成功的驗證者,則可以獲取吹哨者獎勵。
- 區塊一旦得以最終確定,區塊提議者便可以獲得相當可觀的獎勵。一直在線且妥善完成工作的驗證者,他們提議區塊所能獲得的獎勵將提高約 1/8。如果發生罰沒行為,提議者還可以將罰沒證據打包進區塊,從而獲得少量報酬。目前,所有吹哨者的獎勵實際上都歸於提議者。
- 以太坊這個系統裡有許多機制,通過了解其作用,便可以更好地了解這些機制。這套獎懲制度裡,最後一項便是 “不作為洩露(inactivity leak penalty) ” 懲罰。與 #3 中的典型風險不同,這是嚴重且罕見的。簡單來說,如果有超過 4 個 epoch 沒有獲得最終確定性那麼所有驗證者都要受到以二次方增加的 “不作為” 懲罰,直到下一個檢查點被最終確定。“不作為” 懲罰(或 “二次洩漏” quadratic leak)的作用在於:如果 50% 的驗證者掉線了,在 18 天后會再次重新對區塊進行最終確定。二次洩漏將有問題的驗證者強制退出,這樣其他驗證者將成為可以恢復最終確定性 2/3 中的多數。不作為洩漏不會耗盡以最佳方式運行的驗證者。在不活動洩漏期間,證明者獎勵為零;驗證者像往常一樣獲得提議者和吹哨者獎勵。
可罰沒的罪行(Slashable Offences)
如果出現以下這三種情況,要對驗證者進行罰沒懲罰:雙重提議、FFG 雙重投票和 FFG 環繞投票。LMD GHOST 投票不會受到罰沒懲罰。
雙重提議(double proposal)指一名區塊提議者在他所分配到的 slot 裡提議一個以上的區塊。
環繞投票(surround vote)指一名驗證者發起的 FFG 投票環繞之前的 FFG 投票,以下是兩個示例,基於驗證者在 Epoch 5 中以 Slot 32 為來源檢查點,Slot 128 為目標檢查點的場景進行 FFG 投票:
- 在 Epoch 6 中以 Slot 64 為來源檢查點和 Slot 96 為目標檢查點的 FFG 投票將被他們在 Epoch 5 的投票環繞。
- 在 Epoch 6 中以 Slot 0 為來源檢查點和 Slot 160 為目標目標檢查點的 FFG 投票將環繞他們在 Epoch 5 的投票。
雙重投票(double vote)指一名驗證者針對同一個目標檢查點(target),不同的來源檢查點(source)發起的兩次 FFG 投票。這個可能發生在分叉期間。
藍色箭頭是兩個 FFG 投票,一個投票給左分叉上 Slot 128 的目標區塊,另一個投票給右分叉上 Slot 128 的目標區塊。一個驗證者同時投兩票,就會犯下被稱為雙重投票的可罰沒罪行。以上是來源檢查點不同的雙重投票示例。
接下來是雙重投票具有相同來源(Epoch 0 檢查點)且目標不同的場景。
上分叉具有 “block 64” 的 Epoch 1 檢查點。下分叉具有 “block 63” 的 Epoch 1 檢查點。(因為在下分叉的 Slot 64 沒有提出區塊;回想一下信標鏈檢查點部分。)投票給 “block 64” 的 Epoch 1 目標檢查點和投票給 “block 63” 的 Epoch 1 目標檢查點,是雙重的投票。雙重投票是指驗證者在同一時期對兩個目標進行 FFG 投票。
削減雙重投票背後的原因是讓驗證者投票給一個鏈,而不是兩個或多個分叉。
一名吹哨驗證者提出舉報時,需要打包衝突投票的相關信息來證明該驗證者應受到罰沒。要在一個龐大的記錄系統裡,有效地找出衝突投票,是對算法和數據結構的一項巨大挑戰。參考鏈接:“罰沒檢測工程挑戰”。
驗證者完全有能力使自己避免被罰沒:只需要記住其已經簽名的內容。一名誠實的驗證者不會因為其他驗證者的行為而受到罰沒。只要驗證者不簽名有衝突的證明或提議,就不會受到罰沒。
一個驗證者客戶端可以運行多個信標節點,從而延長系統的正常運行時間、增強信任和 DoS 攻擊抵禦。在運行節點或是運行備份驗證者客戶端時,用戶需要注意,驗證者有無對沖突的信息進行簽名。
信標鏈驗證者激活和生命週期
每一位驗證者需要 32 個 ETH 才能激活。一個用戶在以太坊主網的存款合約(deposit contract(裡質押 32 個 ETH,就會激活一位驗證者。
當驗證者的餘額低於 16 個 ETH 時,信標鏈就會停止這些驗證者的工作。質押者能夠在 2023 年將剩餘的驗證者余額提出來。
驗證者也可以在服務 2048 個 epoch,將近 9 天時間的工作之後,驗證者還可以自願選擇退出。
在任何自願或強制退出中,質押者需要等待 4 個 epoch 才能撤出其質押金。在這 4 個 epoch 之內,驗證者仍然有可能面臨舉報和罰沒。一名誠實驗證者大概 27 小時(2^8 個 epoch)左右便可以提出其餘額。然而,如果一名驗證者受到了罰沒懲罰,則必須等 8192 個 epoch(大約 36 天)之後才能夠提出餘額。
“以太坊 2.0 階段 0 驗證者生命週期”中有更詳細的技術說明,內含以下示意圖:
為了避免短時間內對驗證者造成巨大的變動,存在一些機制對單位 epoch 上驗證者激活和退出的數量進行限制。其作用之一在於使得很難在短時間內激活大量驗證者對系統進行攻擊。
信標鏈深度應用了有效餘額(effective balances)的概念,這就使得驗證者的餘額變動範圍更加小,以達到技術的最優化。
總結
在每個 epoch 中,驗證者被平均分配到 slot 中,然後細分為適當規模的委員會。驗證者只能在一個 slot 和一個委員會中。總體:
- 一個 epoch 中的所有驗證者都嘗試確定同一個檢查點:FFG 投票
- 分配給一個 slot 的所有驗證者都嘗試對同一個信標鏈頭進行投票:LMD GHOST 投票
最佳行為對驗證者的回報最大。
信標鏈起源於 2020 年 12 月 1 日,有 21,063 個驗證者。驗證者的數量可以通過罰沒或自願退出來減少,或者通過質押可以激活更多驗證者。信標鏈運行近 2 年,目前有超過 400,000 個驗證者。
世界上從未有過用於去中心化系統和應用程序的可擴展平台。如果你受到啟發想深入研究,可以參考資料 “以太坊 POS 共識規範”。它包括了信標鏈規範、其他關鍵資源的鏈接以及賞金問題。為挑戰、ethresear.ch 或以太坊魔術師論壇貢獻或推薦他人參與,並成為創造歷史的一部分!
免責聲明:作為區塊鏈信息平台,本站所發布文章僅代表作者及嘉賓個人觀點,與 Web3Caff 立場無關。文章內的信息僅供參考,均不構成任何投資建議及要約,並請您遵守所在國家或地區的相關法律法規。