Staking:瞭解以太坊2.0質押程序

語言: CN / TW / HK

來源 | Attestant

作者 | Jim McDonald

Eth2將使用 Proof of Stake(權益證明) 來維護網絡安全, 實行PoS需要每個活躍的參與者(“驗證者”)擁有一定資產來進行質押。 如果持有資產的是eth1賬户,那麼這些資產需要轉移到eth2的驗證者處才能進行質押。

驗證者的職責主要是提議區塊並證明(attest)其他區塊,而質押者(staker)則提供資金進行質押。驗證者和質押者的角色可以是相同或不同的實體,最佳實踐建議將這兩者區分開以最大程度保證資金的安全性。

將資金從eth1轉移到eth2以及定義質押者和驗證者的過程稱為Staking, 第一步是在eth1上發送質押存款交易(staking deposit transaction)。質押存款交易包含的細節信息有質押者身份、驗證者身份等等,並被統稱為存款協議(deposit agreement)。本文將詳細探析抵押存款,並闡釋在eth1上提交ETH給eth2驗證者的過程。

創建存款協議

存款協議將對質押者和驗證者進行定義,並構成存款程序所需交易的基礎。

圖1:存款協議與其參與者

2 驗證者身份證明

要確保將存款交給了正確的驗證者,就需要驗證者身份證明。驗證者通過將其公鑰添加到協議中來證明自己的身份:

圖2:驗證者身份證明

注意,由於是在eth2中對驗證者進行身份證明,因此使用的是eth2公鑰而非eth1公鑰。            

質押金額

其次,存款協議中需要包含質押金額,以確保雙方(以及雙方網絡)就質押金額達成一致。質押者可以將其期望質押的金額添加到協議中:

圖3:質押金額

提款身份證明

提款身份證明用於提供驗證者提出存款的賬户。質押者可以通過向協議中添加可操縱的公鑰來識別提款賬户身份:

1. 公鑰經由哈希以壓縮其大小;

2. 哈希字符串的首字節由類型標識符代替(目前標識符為“0”)

圖4:提款身份證明

注意,提款身份證明使用的也是eth2的公鑰。因此,其必須直接由質押者提供,而無法像eth1智能合約通常那樣從交易簽名中恢復。

還要注意的是,如果驗證者和質押者是同一實體,則應使用不同的密鑰進行驗證者身份識別和提款身份識別。 如此以來提款密鑰可以安全地離線保存,直到質押者做好提款準備。

驗證者授權

要表明驗證者同意遵守協議條款進行驗證,則需要驗證者授權。 驗證者要使用與驗證者身份證明相同的密鑰對協議條款進行簽名來進行授權,並將該簽名添加到協議中

圖5:驗證者授權

提交存款協議

此時,存款協議中包含四條信息:驗證者身份證明、質押金額、提款身份證明和驗證者授權。如果質押者想繼續完成存款,還需要將包含該協議和資金的交易發送給eth1存款合約(deposit contract):

圖6:提交存款協議

此處有兩點需要注意:

1. 質押者沒有在存款協議中明確授權,而是在交易廣播之前將其簽名添加到交易中提供所需授權;

2. 交易必須附帶存款協議中所涉及的ETH確切金額,任何其他金額都將導致交易被存款合約拒絕。

接着由以太坊存款合約(deposit contract)接收並處理交易,如果一切正常進行,則存款合約將創建一個存款收據事件,收據包含存款協議中的所有數據,並且表示存款合約已經接收存款協議和所質押的ETH。

激活存款協議

與前序步驟不同, 激活合約主要進行在eth2中

Eth2會跟蹤eth1的更新以獲取存款收據。每個eth2節點在其提議的區塊中都包含有最新的存款收據。隨着這些區塊的最終確認,存款就會成為eth2整體狀態的一部分。存款收據將作為驗證者狀態存儲在eth2中。

同樣,驗證者也會跟蹤eth2中的更新以獲知驗證者狀態的變化。 當觀察到帶有公鑰的驗證者狀態條目時,説明該存款已在eth1上完成,且已經得到了eth2的識別,剩下的就是證明工作了。

圖7:激活存款協議

全程

結束提交和激活步驟之後,就完成了在eth2中質押eth1資產的全部過程:

圖8:質押存款過程

注:儘管在理論過程中沒有説明,但隨着安全性的提升,Staking的過程會存在許多延遲。譬如在eth2中,在獲取到存款收據事件和將該信息添加到驗證者狀態之間會存在一定的延遲,這樣做是為了確保eth1網絡中不會發生區塊鏈重組而導致存款無效。

原文鏈接:https://www.attestant.io/posts/understanding-ethereum-staking-deposits/

轉載請註明:ECN以太坊中國

分享到: