楠木軒

一文讀懂Eth2.0驗證者

由 秋長紅 發佈於 經典

1. 到底什麼是 “驗證者(validator)”?

驗證者是參與 ETH 2.0 協議共識機制的實體。

用大白話來説,就是持續運行特定的一段計算機程序的人。這個程序會提議並證明新的區塊,使之能添加到區塊鏈上。

換言之,你可以將驗證者看作新區塊的投票者。一個區塊獲得的票數越多,被添加到區塊鏈上的可能性就越大。

重要的是,驗證者的投票權重由其權益數量(the amount it has at stake)決定。

2. 保證金合約(deposit contract)是什麼?

你可以將保證金合約理解為以太坊賬户和 ETH 2.0 驗證者之間的資金轉移通道。

保證金合約的狀態指明瞭誰存儲了保證金、由誰來參與驗證、保證金數量有多少,以及誰能取出這些資金。

3. 為什麼驗證者需要先存入保證金?

系統需要扣押驗證者的資金,以便在某個驗證者被證明行為不軌之時對其進行懲罰。

換句話來説,為保證這些驗證者都遵守協議,要讓這些驗證者的行為都會產生經濟後果。

4. 驗證者需要質押多少 ETH ?

在驗證者可以開始保護網絡之前,ta 需要質押 32 ETH。這 32 ETH 就是驗證者的初始餘額。

5. 質押量超過 32 ETH 有什麼好處嗎?

沒有。單個驗證者存入超過 32 ETH 不會獲得任何優勢。

將有效質押量設定在 32 ETH 有助於推動權力的去中心化,因為這樣可以防止某個驗證者的投票權重過大。

請記住,驗證者的投票權重取決於其權益數量。

(譯者注:實際上,驗證者的投票權重取決於其 “有效餘額(effect balance)”。有效餘額並不是賬户的表面餘額,有效餘額有個上限是 “32”,假設一個驗證者一直勤勤懇懇地賺錢,其有效餘額也不會超過 “32”,同理,其被罰沒時,也不會一次性被罰沒超過 32 ETH。原文此處用語是 “the amount it has at stake”,雖然也嫌太模糊,但顯然不能直譯成 “驗證者已存入的數額”。漢語中缺乏與 “at stake” 對應又不顯累贅的説法,故此處譯為 “權益數量”,實屬無可奈何)

驗證者職責

1. 經濟激勵機制是如何幫助用户保持活躍和誠實的?

除了會因為離線而遭受懲罰之外,驗證者還會因為作惡而遭受懲罰 —— 例如,投票給無效或有衝突的區塊。

另一方面,如果驗證者 所提議/所見證 的區塊被添加到了區塊鏈上,驗證者就會獲得獎勵。

基本概念是:

  • 幫助網絡達成共識的行為會獲得獎勵

  • 妨礙共識的無意行為(或不作為)會招致輕微懲罰

  • 惡意行為會招致嚴重懲罰(或稱罰沒

換言之,驗證者在努力獲得獎勵的同時也在為整個網絡做貢獻。

2. 獎勵/懲罰 是如何發放的?

請記住,每個驗證者都有自己的餘額 —— 初始餘額則可在保證金合約中看到。

以太坊網絡規則會基於驗證者的履職情況定期更新其餘額。

換言之,驗證者所獲得的獎懲都會在餘額中反映出來。

3. 獎勵/懲罰 多久發放?

大約每 6.5 分鐘(即,一個 epoch )發放一次。每個 epoch 期間,網絡都會評估每個驗證者的表現,並相應給予獎勵或懲罰。

4. 獎勵/懲罰 金額有多大?

這個問題很難回答,因為在計算時需要考慮很多因素。

驗證交易所獲得的獎勵主要受網絡總權益量(即,驗證者總數)的影響。根據總權益量,驗證者的最高年化收益率可能在 2% 至 20% 之間。

在驗證者總數固定的情況下,獎勵/懲罰主要取決於驗證者的餘額規模 —— 如果提供證明的驗證者的餘額越高,ta 所受到的獎勵/懲罰就越高;餘額越低,獎勵/懲罰就越低。

請注意,這種動態機制是以不那麼明顯的方式運作的。要想了解其具體原理,你先要理解有效餘額(effective balance)這個概念。如果你對這個概念還不熟悉,我們建議你閲讀這篇文章(編者注:見文末超鏈接)。

5. 為什麼獎勵取決於網絡中的驗證者總數?

區塊獎勵是根據網絡中的 ETH 總權益量按比例計算的。

簡單來説,如果 ETH 總權益量很少,獎勵(利率)就很高,但是隨着權益量增加,每個驗證者所獲得的獎勵(利率)就會降低。

為什麼會有這種動態調整?雖然本文不會揭開其中的真相,但是直覺告訴我們,為了確保網絡良好運轉,驗證者總數不能低於某個下限(ETH 總質押量也是)。因此,為了激勵更多驗證者參與進來,利率需要維持在較高水平,直到驗證者總數達到下限為止。

6. 如果離線,驗證者會遭到什麼懲罰?

視情況而定。除了實際餘額的影響之外,還需要注意兩個重要情況:

  • 如果絕大多數(2/3)驗證者都在線,那麼離線所造成的懲罰較低,因為有足夠多的驗證者在線,可以實現區塊的終局性。這是預料之中的情況。

  • 如果有超過 1/3 的驗證者同時離線,離線懲罰就會較高,因為網絡無法繼續實現區塊的確定性。這種屬於不太可能發生的極端情況。

  • 請注意,如果是第二種情況,離線驗證者會在 21 天內逐漸損失高達 50%(16 ETH)的權益量。21 天之後,這批驗證者就會被逐出驗證者池。這樣一來,網絡就可以恢復正常,開始達成區塊的終局性。

    7. 正常運行時間佔到多大比例,誠實的驗證者才能實現盈利?

    總的來説,只要驗證者的正常運行時間超過 50% ,就能實現盈利。

    這就意味着,驗證者不需要備份客户端或冗餘的網絡連接,因為離線的後果並沒有那麼嚴重。

    8. 作惡的驗證者會遭受什麼懲罰?

    同樣視情況而定。惡意行為(例如,投票給無效或有衝突的區塊)會讓驗證者遭到罰沒。

    最低罰沒金額是 1 ETH ,但是如果其他驗證者在同一時間遭到罰沒,這一金額還會增加。

    其目的是儘可能減少驗證者因無心之失而蒙受的損失,同時抑制協同攻擊。

    9. 罰沒是什麼?

    罰沒有兩個目的:(1)大幅提高攻擊 ETH 2.0 的成本,使攻擊無利可圖;(2)通過檢查驗證者是否履行其職責來防止他們偷懶。所謂的罰沒,指的就是如果有驗證者被證明作惡,ta 的權益(中的一部分)就會被銷燬。

    遭到罰沒的驗證者無法繼續參與網絡的共識機制,會被強制退出。

    (譯者注:在這幾個問題的答案中沒有顯明的信息是:對一名驗證者來説,每一個 epoch (6.4 分鐘)就要發出一條見證消息(attestation,包含投票內容),而且需要發出消息的時間在一個 epoch 中的位置不是固定的。顯然,上述驗證者職責的履行不可能由人手動操作程序來執行,必定是自動化的。因此,驗證者會不會被罰沒,高度依賴於所用的客户端軟件。因此,有意自己運行驗證者的用户,首先要關心自己所用的客户端性能好不好,保護措施到不到位。)

    密鑰

    1. 如果簽名密鑰(signing key)丟了會怎麼樣?

    如果簽名密鑰丟失,驗證者就無法繼續提議及見證區塊。

    隨着時間的流逝,驗證者的餘額就會逐漸減少,因為 ta 會因為無法參與共識流程而遭到懲罰。一旦驗證者的餘額只剩下 16 ETH ,系統就會自動將 ta 逐出驗證者池。

    不過,這件事並非完全沒有轉機。如果驗證者的簽名密鑰是使用 EIP2334(根據默認引導流程)生成的,就可以隨時根據取款密鑰重新計算簽名密鑰

    在取回保證金時,用户也需要用到取款密鑰,而且取款時要等待大概一天才能到帳。

    請注意,如果同一時間段內退出或被踢出驗證者池的人很多,延遲期可能會延長。

    (譯者注:在 Phase 0 階段,不會開啓驗證者取回保證金的功能。)

    2. 如果取款密鑰(withdrawel key)丟了會怎麼樣?

    如果弄丟了取款密鑰,驗證者就再也拿不回屬於自己的資金了。

    因此,你最好使用助記詞(mnemonics)來創建取款密鑰以便備份。如果驗證者是通過 Medalla 測試網的引導流程加入的,則取款密鑰是默認通過助記詞創建的。

    3. 如果取款密鑰被偷了會怎麼樣?

    如果取款密鑰被盜,盜竊者可以轉走驗證者的餘額,但是必須在驗證者退出之後。

    如果盜竊者沒有該驗證者的簽名密鑰,就無法讓驗證者退出。

    驗證者可以先使用簽名密鑰退出驗證者池,然後在盜竊者之前使用取款密鑰將資金轉走。

    (譯者注:我認為這個回答沒有提示大家真實的風險。根據問題一的回答,如果用户的簽名密鑰是用取款密鑰生成出來的,則偷盜了一把取款密鑰的人,是有可能計算出驗證者所用的取款密鑰的,因此驗證者的取款密鑰也將變得不再安全,儘管取款密鑰生成簽名密鑰的方法可以提高取款密鑰的安全性,但這個風險並不是不存在。應該提醒大家的是,取款密鑰始終是重中之重,一定要保護好這把密鑰。回答裏面提供的逃離方法僅在取款功能正常時才能使用,但 Phase 0 階段不會開啓取款功能,偷盜了取款密鑰的人有充分長的時間可以埋伏。)

    4. 為什麼不能將這兩個密鑰合二為一?

    一言以蔽之,為了安全。簽名密鑰必需保證隨時可用。因此,簽名密鑰需要保持在線。由於保持聯網的東西很容易遭到攻擊,讓簽名密鑰兼具取款功能是不明智的。