一文深度剖析以太坊驗證者的生命週期

原文標題:《Understanding The Validator Lifecycle》

原文作者: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,無論該名驗證者的真實餘額如何。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *