原文:《Understanding The Validator Lifecycle》by Jim McDonald
編譯:John
理解驗證者(Validator) 的生命週期
以太坊2.0 使用權益證明來確保其網絡安全性, 被稱為「驗證者」的計算機進程將對即將被打包的下一個區塊進行投票(下文稱「見證」),同時他們也會提議讓自己的區塊被打包進去。但是,驗證者不是僅處於「開」與「關」的狀態:他們會在他們的生命週期裡歷遍一系列的交易。這篇文章將深度剖析驗證者的生命週期,展示每個狀態和狀態轉換之際發生的事情,什麼觸發了狀態轉換,以及每次狀態轉換所需要的時間(註解1)。
時間上的一個符號
在以太坊2.0 裡,時間通常是以epoch 為單位,一個epoch 包括了384 秒即大概是6 分半。為了方便理解,以這種方式計量的時間被粗略地翻譯成分鐘,小時和天,並伴有可用的準確信息在相對應的腳註裡。
生命週期概覽
在深入分析細節之前,先來看看驗證者的生命週期概覽,以及用來描述其不同狀態的術語。
圖表1:驗證者生命週期概覽
以下是狀態標籤:
- 已存款- 存款協議已被以太坊(Ethereum)1.0 網絡接受
- 待處理- 存款協議已被以太坊(Ethereum)2.0 網絡接受
- 活躍中- 驗證者正在見證和提議區塊
- 退出中- 驗證者正處在中止見證和提議區塊的進程
- 罰沒中- 驗證者被發現作弊,正處在中止見證和提議區塊的進程中
- 已退出- 驗證者不再參與見證
一個元狀態同樣被定義了: 見證, 即所有驗證者要參與進來見證和提議區塊的狀態(活躍中,退出中的,罰沒中)。這個狀態是重要的,因為當驗證者處於這些狀態時需要去訪問以太坊(Ethereum)2.0 網絡來與其職責保持同步以免被懲罰。
圖表2:見證的元狀態
定義了這些狀態之後就是詳細分析每一個狀態以及它們之間的交易的時候了。
已存款的狀態
接受存款協議就是驗證者生命週期的開始。接受發生在以太坊1.0 鏈上, 因為那就是驗證者資金的來源。在這時以太坊2.0 的鏈還不知曉這筆存款。
驗證者會保持大概7 個半小時在這個存款狀態裡(註解2 ),以確保不會有一個鏈的重組影響到以太坊1.0 交易並有可能使存款協議無效。這之後驗證者就會去到待處理狀態(註解3 )。
圖表3 :從已存款狀態轉換到準備狀態
待處理狀態
一旦這筆存款在以太坊1.0 的鏈上存在了足夠長的時間後,它就會被添加到以太坊2.0 的鏈上去。這標誌著這個驗證者已經正式被以太坊(Ethereum) 2.0 所認可。假如最少32 個ETH 已經被存進去的話(註解4),驗證者現在就會準備開始見證。
準備中的驗證者會被放在一個隊列裡:以太坊(Ethereum) 2.0 一次只允許一小部分驗證者開始或停止驗證(註解5),以保證驗證者的集穩定。如果隊列是空的則準備中的驗證者會在大約25 分鐘後變成活躍狀態(註解6):如果這是一個非常繁忙的時段則有可能經過數天甚至數星期之後驗證者才會被激活。但是一旦驗證者從等候隊列中出來,它就會變成活躍狀態。
圖表4 :從準備狀態到活躍狀態的過渡
活躍中狀態
驗證者理應在活躍狀態下度過它們主要的生命週期。活躍的驗證者會以6 分鐘一次的頻率參與當時的見證,偶爾還會有提議區塊鏈的工作(註解7)。驗證者會保持活躍狀態直到以下其中一種事情發生:
- 驗證者由於在需要其參與見證時沒有履行職責被懲罰,導致資金下降到16 個ETH 以下。
- 用戶通過發送一筆合適的交易來要求停止驗證(在這個驗證者變成活躍狀態的頭9 天裡無法發起這種交易)。
- 驗證者被證明作弊。
在前兩種情況裡,驗證者被添加到希望停止驗證的驗證者隊列裡(將要離開活躍狀態的驗證者和將要進入活躍狀態的驗證者一樣,數量是被限制的,大概幾分鐘才有1 個)
圖表5:從活躍狀態到正在退出狀態的過渡
在第三種情況裡,驗證者被加入到一個被發現在作弊的驗證者的隊列里以接受懲罰。
圖表6:從活躍狀態到罰沒中狀態的過渡
請注意,通過發送包括了相同驗證者信息的額外存款協定來向一個活躍驗證者充值額外的ETH 是有可能會發生的情況(永遠要記住有效的餘額不能超過32 個ETH)。這有助於避免驗證者的資金降到16 個ETH 以下並且被添加到退出隊列的情況。
退出中的狀態
當網絡現有的驗證者表明了自己想要停止驗證的意圖之後,無論他是自願的還是非自願的,他都不會馬上這樣做而是會進入退出中的狀態,和以往的活躍狀態一樣繼續同樣多地參與見證和提議。這保證了網絡的穩定性,避免了一個驗證者決定離開時就馬上停止履行職責的情況。
與一個驗證者想要從準備狀態變成活躍狀態時類似,要離開的驗證者要進入一個一次只能允許少數通過的一個隊列。又和加入時類似,在退出中狀態里花費的時間取決於驗證者在隊列裡的排隊數量。
圖表7:從退出中到已退出狀態的過渡
罰沒中(Slashing)狀態
一個被發現作弊的驗證者會馬上受到1 個ETH 的懲罰,從餘額裡扣除。然後他會進入到一個罰沒中的隊列裡去,這個罰沒中隊列類似於一個退出中隊列,但是它會被標記為需要額外的懲罰,我們會在接下來的「已退出」狀態裡討論這個問題。
圖表8:從罰沒中狀態過渡到已退出狀態
一個驗證者在退出中的時候以及甚至在退出之後都有可能被罰沒(但在他能取回自己的資金之前)。這避免了這種情況的發生:驗證者作弊之後,通過常規的退出機制,在自己的作弊行為被發現之前就退出,從而逃脫了懲罰。這帶來了一個略微複雜的狀態模型。
圖表9:擴展罰沒條件
已退出狀態
當一個驗證者去到已退出狀態,他就已經正式完成了自己的使命。他不用再參與見證或提議區塊,並且不再需要擁有關於以太坊2.0 鏈的狀態信息。
在退出之後,在資金能被轉離驗證者之前有一個大約1 天(註解8)的最後延遲。但是,如果這個驗證者被標記為經過了罰沒中狀態,那麼他會承受兩個額外的懲罰。
第一,在已退出狀態裡能轉移資金之前花費的時間會更長,是36 天(註解9)。第二,在這個36 天週期的中途,他會承受進一步的扣款,扣款金額取決於這個驗證者被發現作弊之前18 天被罰沒的驗證者數量以及這個驗證者被發現作弊之後的18 天被罰沒的驗證者數量。下圖展示了一個驗證者的有效餘額損失(註解10)的總百分比
圖表10:在大致相同的時間裡,被罰沒的有效餘額與網絡被罰沒驗證者數量的百分比對比
一旦36 天到期,被罰沒的驗證者們的剩餘資金就可以被轉移了。
正如生命週期圖表裡所能看到的一樣,一個已退出的驗證者無法再通過任何機制重新進入活躍狀態。就是說,一旦一個驗證者退出了,他的資金會在被轉移之前保持休眠狀態。注意,你無法在以太坊2.0 的0 階段轉移資金- 所有已退出的驗證者的資金會一直保留在驗證者中,直至資金轉移操作被引入。缺少轉移操作的原因是缺乏可以轉移ETH 的用戶賬戶。
擴展的驗證者生命週期
結合以上所有信息考慮將帶來一副更加全面的驗證者生命週期圖景
圖表11:擴展的驗證者生命週期
了解不同狀態之間的轉換所要求的條件以及消耗的時間,對於確保以太坊2.0 質押基礎設施的成功運行至關重要。從一開始的存款到資金的提出,生命週期展現了每個狀態裡可能發生的事情並對驗證者在任何時候的行為進行了明確的解釋。
腳註
腳註1:值得注意的是,以太坊2.0 並沒有設置一個明確的狀態機制;也就是說,狀態的名字是筆者提出來方便理解的。
腳註2:1,024 個以太坊1.0 的區塊加32 個以太坊2.0 的epoch。
腳註3:這假設了存款協議需要完整的32 個ETH。要是存款協議少於這個閾值,驗證者將停留在已存款狀態中,直到有更多的存款協議把驗證者的餘額提高到至少32 個ETH。
腳註4:若不,則另一筆存款可以被添加以增加這個驗證者的餘額到這個數量。
腳註5:每epoch 為( 活躍中+ 退出中+ 罰沒中的驗證者)/65536,最小值為4。
腳註6:4 個epoch。
腳註7:每一個epoch 內一個驗證者只能見證一次,每一個slot 內只有一個指定的驗證者履行提議者的職責。
腳註8:256 個epoch
腳註9:8192 個epoch
腳註10:注意因為懲罰最高可達到有效餘額的百分之百,一個驗證者的最大懲罰永遠不會超過32 個ETH,無論該名驗證者的真實餘額如何。