一文帶你瞭解以太坊質押提款的工作原理

原文標題:《Understanding Withdrawals》by Jim McDonald

原文翻譯:John, ECN   

提款 (withdrawals)是驗證者生命週期(validator lifecycle)中缺失的一部分,從 2020 年 12 月以太坊共識鏈一開始啟動以來就在開發當中,現在將隨上海升級而來。由於上海升級將在今年上半年啟動,所以值得注意和理解什麼是提款,其工作機制,以及這個新特性的使用方法。

歷史

當共識鏈第一次在 2020 年 12 月啟動時,你無法從共識鏈上傳送任何資訊到執行鏈上去。也就是說,儘管餘額能在共識鏈上累積,你也無法透過執行鏈去提現,因為技術上在當時提款是不可能的。經年累月過後以太坊的結構已經被改變得可以容納新的研究成果,轉變為當前以 layer 2 為中心的擴容模型,並且很大程度上保持了執行鏈的原貌。在 2022 年的 9 月,執行鏈與共識鏈合併了,執行區塊變成了共識區塊裡資料的一個子集。這時資訊從共識鏈上轉移到執行鏈上就是可行的了,其中一個例子就是驗證者獎勵。

你可以在”理解合併後的獎勵“(”Understanding post-merge rewards”)一文中找到共識鏈和執行鏈互動以及合併的區塊如何構建的詳細細節。關鍵點在於只有在合併之後提款才變成可能。

驗證者在做些什麼?

自從 2020 年 12 月的共識鏈創世以來,驗證者一直在產生區塊並維護鏈的安全。具體來說,他們一直在提議新的區塊,並參與對它們自己和其他驗證者提議的區塊的投票(註解 2 )。當被正確執行時,這些行為會為驗證者帶來獎勵。共識鏈啟動時只有 2 萬多名驗證者,但在筆者撰文時已經約有 52 萬名活躍的驗證者在確保其安全性。從 2020 年 12 月 到 2022 年 9 月,共識鏈只維護了其自身的安全,但是這為合併的到來鋪平了道路(註解 3 ),從 2022 年 9 月之後執行鏈就已經僅由驗證者們保證其安全性。

為了回報他們維護區塊鏈安全性的行動,這些驗證者被許諾以根據以太坊協議直接產生的獎勵,這些獎勵被記錄在共識鏈上。

在所有驗證者中,共識鏈已經產生了超過 1 百萬的 ETH 作為累計的獎勵。 就個人的驗證者而言,他們的獎勵取決於一系列的因素,但最明顯的莫過於他們作為活躍驗證者的時間。有很多驗證者已經積累了一筆數量巨大的獎勵:

大多數驗證者獲得了只有少於 2 個 ETH 的獎勵, 有些高達 5 個 ETH,儘管這些獎勵被登記在在共識鏈上,但是它們無法在執行鏈上被例項化,直到提款的功能就位。

注意,自從合併之後,除了上述的獎勵,提議區塊的驗證者會獲得一部分交易費。這些費用會直接在執行鏈上被支付,因此下文不會再論述它們。

圖表 3 :一筆提款

一筆提款的單個組成部分分別為:

提款索引(Withdrawal index) 提款的唯一識別符號,便於引用。

驗證者索引(Validator index) 共識鏈上一筆提款來源的驗證者的索引

地址(Address) 提款將會被彙集到的地址

數目(Amount) 將會被新增到賬戶的 ETH 數目,單位是 Gwei(註解 6 )

當區塊被匯入到執行鏈中時,提款將會根據給定的數量進行處理,相應地址的餘額會增加。注意提款不是交易,它們不消耗 gas,它們也不會在提現地址觸發任何智慧合約的操作。一旦區塊被處理完畢,相應的餘額將會增加,但不會再有其他的事情發生。

<h2 “=””>提款時鐘

在內部,共識層的軟體持有一個存有驗證者資訊的簡單列表:

每一個驗證者實體的獨立組成部分分別為:

索引(Index) 對應這個驗證者及其列表內位置的唯一索引

狀態(State) 目前這個驗證者的狀態,比如“活躍中”或“退出中”(註解 7 )

餘額(Balance) 目前該名驗證者的餘額,單位為 Gwei

提款憑證(Withdrawal credentials) 該名驗證者的提款憑證

上述這些概念大多數都是不言自明的,然而提款憑證卻需要一些解釋。每一個驗證者都有一組提款憑證。這些憑證控制了共識層資金的流向,包括初始的存款和接下來的獎勵。

目前有兩種提款憑證:

  • 從 BLS 公鑰產生的,被稱為“type 0 ”提款憑證
  • 從執行地址產生的,被稱為“type 1 ”提款憑證。

我們待會再來詳細地探索這些概念,但是,目前的重大區別在於,type 1 的提款憑證允許共識資金被提款到執行鏈上去,而 type 0 提款憑證不行。

共識鏈按順序處理提款,從索引 0 開始一直處理到某一集合中最後那個索引,然後再從頭開始。你可以用一個單指標的模擬時鐘作為模擬提款程序的一種思考方式。 每一個鐘上的刻度代表一個驗證者,從驗證者索引 0 開始到最後那個(目前大概是 52 萬個)。

圖表 4 提款時鐘

一旦上海升級上線,區塊就會包含提款資訊。為了選擇哪些驗證人可以提款,時鐘指標圍繞驗證人轉動,每當它指向一個有資格提款的驗證者時,該名驗證者的部分或全部餘額將根據以下規則被提出:

  • 如果驗證者擁有 type 1 憑證,並處於 ”活躍“ 狀態(註解 8 ),並有超過 32 個 ETH 的餘額,那麼超過 32 個 ETH 的部分會被提出。
  • 如果驗證者擁有 type 1 憑證,並處於 “可提款” 狀態,餘額不為 0 ,那麼剩餘的所有餘額都會被提出。

如果上述其中一條規則適用,就會有一筆提款產生並被新增到區塊裡;如果上述兩條都不適用,那麼驗證者就會被認為不符合條件,指標會繼續往下走。指標會繼續跳動直到它找夠 16 個符合條件的驗證者(註解 9 ),這時單個區塊所需的提款筆數足夠了,提款資訊就會被包含進區塊中。

時鐘指標走完一輪的時間取決於符合資格的驗證者數量。

在筆者撰文時有大約 520, 000 名驗證者處於活躍狀態。若每個區塊有 16 筆提款,每天 7, 200 個區塊,則每處理一輪符合資格的驗證者集將需要大概 4.5 天。但正如上圖所示,這個時間將隨著符合資格的驗證者數量改變而改變。

圖表 6 :修改提款憑證的操作

操作的組成部分分別為:

  • 驗證者索引(Validator index) 該操作所適用的驗證者的索引
  • 提款的 BLS 公鑰(Withdrawal BLS public key) 目前 BLS 提款憑證的 BLS 公鑰
  • 執行地址(Execution address) 用於新提款憑證的執行地址
  • 簽名(Signature) 由當前 BLS 提款憑證的私鑰在操作的其他欄位上所作的簽名。

信標鏈上的操作過程如下:

“就每一個被驗證者索引所定義的驗證者而言,檢查給定的 BLS 公鑰是否可以轉換為匹配當前驗證者的 type 0 提款憑證。若可以,則把給定執行地址轉換成 type 1 的提款憑證併為驗證者更新。”

因此,修改憑證的操作只能發生一次。 一旦修改憑證的操作被處理完畢,鏈上驗證者的定義就會包含 type 1 提款憑證,所以就據上文所述就沒有 type 0 提款憑證可供匹配了。也就是說,type 1 憑證一旦被設定就將在其生命週期內保持不變。(註解 11 )

選擇執行地址

修改提款憑證的第一步就是選擇用來接收提款的以太坊執行地址。正如上文所描述的,你只能作一次改變,所以你必須保證你在做設定之前已經確保了地址私鑰的控制權。若你有多個驗證者身份那麼你需要考慮是否要為每一個驗證者身份提供一個不同的提款地址,或者為所有的驗證者身份使用相同的地址:

設定相同的地址方便了你,獎勵會更快地累積到這個地址去,因此消耗的 gas 會更少。

設定不同的地址,保持它們互不關聯則增加了你的驗證者身份的安全性,若這些驗證者身份本身就是互不關聯的(不同的儲蓄地址,不同的或者本來就沒有的區塊提議塗鴉等)

建立操作

一旦執行地址被選定,則需要為每一個驗證者建立並簽署一個操作。由於暴露與提款憑證相關的私人資訊的敏感性(可能是私鑰或者助記詞),我們推薦離線建立。操作方法超出了這篇文章論述的範圍,但你可以參考使用 ethdo 工具這麼做的詳細指南,或者使用未來其他可用的工具和嚮導。

廣播操作

在建立操作之後,你需要把它們廣播在共識鏈上。若操作是在上海升級之後才被提供給共識節點的,那麼它會在下一次機會被廣播到網路中以打包進區塊。若操作是在上海升級之前被提供給共識節點的,那麼它會被儲存起來並在升級完成後被廣播到網路。注意這需要你連線到一個可以識別上海升級的共識節點上;就目前來看這些共識節點預計將在 2 月的某個時候可用,為主網升級提供了良好的時機。

圖表 7 :線上和離線的配置中建立和廣播修改提款憑證操作

有不少的工具都遵循這個過程,比如 ethdo 就有他們自己的文件交代如何進行這個過程,下文是每一步的概覽,講述其作用和意義。

1.獲取鏈上資訊

要建立有效的已簽名的憑證修改操作,你需要從鏈上獲取不同的資訊,這些資訊應該從鏈本身獲取以保證是正確的資訊。我們同樣推薦獲取一份包含目前所有驗證者資訊的列表。因為這樣可以更容易地建立操作,同時驗證建立的操作是否適合驗證者。

這些資訊來自一個活躍中的共識節點,因此需要從一臺聯網的電腦上獲取這些資料。大多數執行驗證者程序的實體應該都有訪問共識節點的許可權,但是如果它們將質押過程委託給一個服務商,那它們應該設法從服務商獲取必要資訊。

這將產生一份包含鏈上資訊的文件。文件本身不會帶有私鑰或其他敏感資訊。

2.轉移鏈上資訊

一旦鏈的資訊被收集完成,那就需要把它從一臺線上的電腦轉移到一臺離線的電腦。目前的普遍做法是透過 USB 儲存,USB 儲存允許兩臺電腦不需要直連就能完成資訊的轉移。這意味著離線的電腦可以完全與網際網路斷開連線,極大地增加了私鑰或者助記詞的安全性。

3.建立憑證修改操作(Credentials Operations)

一旦離線的電腦上有了鏈的資訊,那就可以進行憑證修改操作的建立了。這要求對建立了目前提款憑證的助記詞和私鑰的訪問權,所以在離線的電腦上執行這個程序更加安全。

私鑰和助記詞有可能建立了多個驗證者的憑證,因此建立程序可能會產生多個修改操作。

這會產生一個包含了修改憑證操作的文件,文件自身不會包含私鑰或者其他敏感資訊。

4.轉移憑證修改操作

一旦憑證修改操作的文件被建立完成,就需要把它從離線的電腦上轉移到線上的電腦上。再說一次,USB 儲存或類似的方式是普遍的最優做法。

5.廣播憑證修改操作

一旦線上的電腦上有了憑證修改操作的文件,就可以透過將這些操作傳送到某個共識節點來向以太坊網路廣播。最有可能是傳送到下載鏈資訊回來的那個節點上。

一旦操作被提交到共識節點上,節點就會把它們在全網範圍內廣播,一旦共識區塊打包了這些操作那麼修改就會隨之生效。每一個區塊都有容納 16 個修改操作的空間, 所以有可能需要 4 天才能讓一個操作被新增到一個區塊裡去,但是更有可能的是 1 到 2 個小時就可以新增。

總結

提款功能將隨著上海升級推出,自從共識鏈啟動以來第一次使使用者的共識獎勵變得可用。一旦設定好之後,它們就會自動地為任何驗證者所用,而升級也帶來了一個機制來配置那些尚未準備好提款的驗證者。

驗證者生命週期完成之後,共識鏈就履行了對質押者們從 2020 年 12 月以來許下的承諾,並准許驗證者離開這個他們此前覺得可能離開不了的系統。額外的驗證者將為以太坊帶來更強的安全性以及一條更強大的鏈。

1.以太坊有多條鏈,通常被稱為共識鏈(或稱信標鏈)和執行鏈,欲瞭解更多資訊請參考文章”理解合併後的獎勵“。

2.他們同樣參與到同步委員會中,但這些都是見證的另一種形式。

3.就是用俗話解釋以太坊從工作量證明共識機制到權益證明共識機制的遷移。

4.與共識鏈上的 Capella 升級同時進行。

5.嚴格意義上最高可以達到 16 筆提款,除極端情況外,所有 slot 都應該是滿的。

6.共識鏈上的所有數值都是以 Gwei 為單位的,因此從共識鏈到執行鏈的任何代幣轉移都是一個以 Gwei 為單位的整數。

7.狀態實際上來自驗證者資訊中的其他欄位,所以它不會呈現在驗證者的定義裡,但是由於它在文章其他地方被引用了,所以把它展示在這。

8.“活躍中”和”可提款“的狀態定義可參考文章“理解驗證者生命週期”

9.在 16384 名驗證者之後提款時鐘的指標就會停止跳動,即使找不夠 16 名符合資格的驗證者,儘管這種情況不太可能在測試網以外發生。

10.筆者撰文時這個數字實際上大約是 7160 ,因為一些區塊沒被提議或者在提議後變成了孤塊。

11.這可能隨著新的操作的引入而在未來改變,但在筆者撰文時尚無這樣的計劃。

12.預計在升級後的頭幾天會有一波驗證者修改他們憑證的初始高峰期,在這之後排隊的人將會很少,因為大多數符合資格修改憑證的驗證者都已經修改完。

點選“閱讀原文”獲取文章內部連結!

原文連結:https://www.attestant.io/posts/understanding-withdrawals/

發佈留言

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