Eth2 驗證者的生命流程

買賣虛擬貨幣
以太坊 2.0 使用權益證明機制來保護網路,也就是由許多叫做 “驗證者” 的計算機執行緒來投票決定哪一個區塊能夠上鍊(即所謂的 “attesting”,作見證),當然也會自己提出備選區塊。不過,驗證者不是僅僅只有 “開” 和 “關” 兩種狀態:從成為驗證者到退出驗證者的整個生命週期中,其狀態會經過多次轉換。本文會深入研究驗證者的生命週期,展示各階段和轉換過程的實質、如何觸發轉換,以及每種轉換的歷時 。先說明一下時間單位:以太坊 2.0 中的時間通常是用 “epoch(時段)” 這種單位來度量的,1 個時段是 384 秒,也就是六分半鐘。為便於理解,基於這一度量的時間我都轉化成了以分鐘、小時、天為單位,並在附錄的腳註中提供詳細資訊。驗證者生命週期概述

在深入細節以前,我們先來看看驗證者生命週期的概況、瞭解一下用於表述不同狀態的術語。

各標籤所示的階段如下:

· 已存入保證金(Deposited):保證金要約已被以太坊 1.0 區塊鏈打包
· 等待啟用(Pending):保證金要約被以太坊 2.0 網路接受
· 活躍(Active):驗證者要見證區塊及提議區塊
· 即將退出(Exiting):驗證者即將停止見證及提議區塊
· 被罰沒(Slashing):因為作弊被抓,驗證者停止見證和提議區塊
· 完全退出(Exited):驗證者完全退出,不再參與任一流程

也可由此定義出一種基本狀態:“正在見證(attesting)”,啟用、主動退出及完全退出都在該狀態中,處於該狀態的驗證者被指望去見證及提議區塊。這個狀態是最重要的,在此狀態下,驗證者需要連線以太坊 2.0 網路、同步資料,以履行責任,避免被懲罰。

定義完了這些階段之後,我們就來詳細考察它們之間的轉換過程。

保證金存入階段

保證金要約被接受是驗證者生涯的開始;這個接受過程是在以太坊 1.0 鏈上發生的,因為驗證者資金原本就放在以太坊 1.0 鏈上。但 1.0 連結受之時,2.0 鏈還不能感知到這筆存款。
驗證者的保證金存入階段大概要歷時 7.5 個小時 ,以保證鏈重組影響到 Eth2 交易的順序乃至保證金要約無效化的概率足夠小。這個階段完成後,驗證者就進入等待啟用階段 。

等待啟用階段

保證金在 Eth2 鏈上存入足夠久之後,它就會被 Eth2 連結受。這標誌著驗證者正式開始接受 Eth2 的組織。假設一位驗證者存入了至少 32 ETH 4,那麼 TA 就可以開始作見證了。

等待啟用的驗證者會組成一個佇列:在一個時間點,Eth2 鏈上能啟用和能退出的驗證者數量都是一個比較小的數量(所以要排隊)5,以保證驗證者集合的穩定性。如果佇列是空的,那麼等待啟用的驗證者會在大約 25 分鐘以後啟用 6;如果佇列很長,那可能要幾天甚至幾周才能啟用。不過,排完隊之後,驗證者就可以直接啟用、參與見證。

活躍階段

一般來說,一名驗證者的絕大部分時間都處於這個階段。活躍驗證者大約每 6 分鐘要發出一條見證訊息,偶爾要自己提議區塊 7。驗證者會一直保持在活躍狀態,除非出現下列三種情況:

· 該驗證者因沒有及時發出見證訊息而遭受懲罰,最終其餘額低於 16 ETH
· 該驗證者主動要求退出,方法是傳送相應的一筆交易(在剛啟用的 9 天內不能發出此種交易)
· 該驗證者被證明作惡

在前面兩種情況中,驗證者都會被加入退出佇列(一段時間內能離開活躍狀態的驗證者數量也是有限的,就跟能進入的驗證者數量受限一樣,大概是每幾分鐘可以離開 1 個)。

在第三種情況下,驗證會被加入作惡者佇列,接受懲罰。

值得注意的是,如果有需要,驗證者總是能夠傳送額外的保證金要約(包含相同的驗證者資訊)來 “充值” 餘額(但是有效餘額的上限是 32)。這樣就能避免驗證者餘額低於 16 然後被放到退出佇列裡去。

即將退出階段

雖然主動退出的驗證者表達了停止驗證的意願(不論是自願還是被迫的),但是,他們是不能立即退出的。相反,雖然處於即將退出狀態,他們還是要照常承擔職責,跟活躍狀態時候一樣要見證和提議區塊。這樣保證了網路的穩定性,避免了驗證者立即退出會造成的衝擊。

就像驗證者想啟用的時候有個等待啟用狀態和佇列,想要退出的驗證者也有一個佇列,一段時間裡僅允許少量驗證者退出。同樣地,主動退出階段要花費的時間取決於排在前面的驗證者有多少。

被罰沒狀態

驗證者違反協議後被抓,就要立即被罰沒 1 ETH(從其餘額中扣除),然後進入被罰沒狀態,這跟即將退出狀態類似,但是還要遭受懲罰。這一點我們在下文的 “完全退出” 部分討論。

處於即將離開狀態乃至已經完全退出的驗證者,都有可能被罰沒(驗證者完全退出到可以取出資金以前有一段間隔,在此期間是可以被罰沒的)。這樣能防止作惡的驗證者利用正常的退出機制、在作惡被發現以前逃之夭夭。結果就是狀態模型變得更加複雜:

完全退出

轉到完全退出狀態之時,驗證者就正式結束了自己的工作,不再需要見證和提議區塊,也不再需要緊跟 Eth2 區塊鏈的實時動態了。

轉成完成退出狀態之後,大概還有一天的延遲 8,之後才能取出驗證者餘額。不過,如果一個驗證者是從被罰沒狀態中完全退出的,那還要接受兩項額外的懲罰。

第一項,從完全退出到能夠取款的間隔會長得多,要 36 天 9。第二項,在這 36 天期間,系統還會根據該驗證者作惡被抓的時間點前後 18 天內被罰沒的驗證者數量對該驗證者施加進一步的懲罰。那麼該驗證者的有效餘額損失比例 10 將如下圖所示:

36 天的週期走完,被罰沒驗證者剩下的餘額就能拿走了。

從這個生命流程圖中可以看出,沒有額外的機制讓一個完全退出的驗證者重新啟用。因此,一旦某個驗證者退出,其資金就會一直休眠,等待驗證者前來取走。不過,Eth2 Phase 0 時候,資金是不能轉賬的 —— 因此所有完全退出的驗證者的資金都仍儲存在質押系統中,直至開啟轉賬功能。沒有轉賬功能,是因為使用者帳戶模式還未引入。

補充後的驗證者生命流程

把上面所有詳細資訊補充到流程圖中,可以得到一個完整的圖:

請細看其中補充的條件、各階段的歷時、轉換過程,這些細節對成功執行 Eth2 驗證設施非常關鍵。從初始化保證金到取出保證金,這個生命流程圖點出了各階段可能發生的情況,也為驗證者在全時段中的表現提供了清晰的解釋。

注 1:要注意的的是,以太坊 2.0 的規範沒有一個顯式的狀態機,因此,各階段的名稱都是作者為便於描述而給出的。
注 2:1024 個以太坊 1.0 區塊的時間加上 32 個以太坊 2.0 的時段。
注 3:這裡假設驗證者存夠了 32 ETH。如果沒有存夠,則該驗證者會一直停留在保證金存入階段,直到該驗證者另外發起保證金要約,使其餘額超過 32 ETH。
注 4:如果不到 32 ETH,那還可以另外再存入,提高該驗證者的餘額。
注 5:每個時段有 (啟用驗證者數量 + 主動退出驗證者數量 + 被罰沒驗證者數量)/63356 個名額,下限是 4 個。
注 6:即 4 個時段的長度。
注 7:每一個驗證者都需要在一個時段中的某個時隙(slot)發出見證訊息,而每一個時隙都會有一名驗證者被隨機選中作為區塊提議者。
注 8:256 個時段。
注 9:8192 個時段。
注 10:注意,罰沒力度最高是 100% 的有效餘額,但有效餘額的上限是 32 ETH,無論該驗證者的實際餘額是多少。

免責聲明:

  1. 本文版權歸原作者所有,僅代表作者本人觀點,不代表鏈報觀點或立場。
  2. 如發現文章、圖片等侵權行爲,侵權責任將由作者本人承擔。
  3. 鏈報僅提供相關項目信息,不構成任何投資建議

推荐阅读

;