解讀以太坊 2.0 Slash 機制:如何避免重度懲罰?

原文標題:《以太坊 2.0 slash 機制詳解》

撰文:InfStones

slash 意為大幅削減,是 PoS 共識公鏈常用的對作惡驗證人的懲罰機制,以太坊 2.0 的 slash 規則可能是目前所有 PoS 公鏈中最復雜的一個。通過研讀以太坊 2.0 設計規范與源代碼,對其 slash 規則做如下解讀,

slash 的種類

slash 一般指對嚴重作惡行為的懲罰,而非對普通離線節點的懲罰,后者一般被稱為 inactivity penalties,在一般的 PoS 公有鏈中,一般只有「雙簽」類行為會觸發 slash,而在以太坊 2.0 中則特定為下列行為:

  • 在同一個 slot 中提議兩個沖突的區塊;
  • 在同一個 slot 中投給兩個沖突的區塊;
  • 投票與歷史投票沖突,

行為 a, b 會造成區塊鏈上不必要的分叉,行為 c 則是企圖篡改歷史。

slash 后驗證者狀態

slash 后,驗證者將被強制進入驗證者退出隊列,然后退出。

驗證者將立刻被扣除 有效余額 /128 作為罰金。如果有效余額是 32ETH,則為 0.25ETH,(需要注意,原設定懲罰量為 有效余額 /32 也即 1ETH,只是在信標鏈階段暫時下調至原值的四分之一)

8192 個 epoch (約 36 天)后,驗證者賬戶允許提款(在以太坊 2.0 支持交易功能后),

允許提款前,被 slash 的節點將在每個 epoch 開始收到 3 倍于在線獎勵的懲罰。

被 slash 的驗證者不被允許再次回到驗證者隊列,只能重建新的驗證者并重新質押。

多節點同時 slash 的情形

有效余額 /128 的懲罰和每個 epoch 的不在線懲罰之外,還會在被 slash 的 epoch 和允許取款的 epoch 中間一半的位置,也就是被 slash 后 4096 個 epoch 時再受到一次額外懲罰,

該懲罰比例與這期間所有被 slash 的驗證人總余額與全網活躍驗證人總余額的比例成正比,

原設定正比系數為 3,當前信標鏈階段暫時下調至原值的三分之一也即系數為 1,也就是說之后多節點 slash 的額外懲罰會變為當前的 3 倍,

因此,一個驗證人節點 slash 后會受到三次懲罰:

  • 立刻被扣除有效余額 /128 (之后會調為有效余額 /32)
  • 每個 epoch 的開始受到懲罰(當前數據每天約 0.009ETH)
  • 多節點同時 slash 的額外懲罰

舉報獎勵

slash 機制不光對觸發 slash 的節點有懲罰,對舉報 slash 的「舉報人」也會有獎勵,正常來講會獎勵分為兩部分,一是獎勵提交 slash 的「舉報人」,金額較大(目前約 0.1ETH),一是獎勵打包 slash 區塊的出塊者,金額較小(目前約 0.025ETH),目前來看大多數情況下兩部分獎勵都是直接轉移給出塊者,

觸發 slash 的原因

除非有意為之,大部分過失 slash 發生的情形都是因為在兩臺服務器上運行了相同的驗證人密鑰,也即兩臺服務器運行同一個節點。「一用一備」是傳統服務器冗余防宕機的通用做法,很可惜在有 slash 機制的 PoS 公鏈節點運行問題上,不能如此簡單地處理。

InfStones CEO Jonathan Shi 曾在公開演講中提到:在區塊鏈領域里安全性不等于可靠性。在傳統互聯網中,安全性和可靠性并不矛盾,可以通過增加系統冗余的方式提高安全性和可靠性,但在區塊鏈中,如果對出塊節點做冗余性設計,則很有可能造成多個節點同時出塊,導致雙重簽名;但若不對節點做冗余性設計,就會出現單點故障,如果這個節點掉線,則會導致整個系統服務宕機,影響系統的可靠性。

此外,客戶端一般默認有 slash 保護歷史記錄,該記錄通過記錄所有歷史的 attestation 和 proposal 記錄來預防 slash。如果在運行過程中不慎刪除該記錄,也有可能導致 slash 問題。

質押并建立一個驗證人節點,只是第一步也是最簡單的一步。

0 条回复 A文章作者 M管理員
    暫無討論,說說你的看法吧