什么是Eth2質(zhì)押程序
Eth2將使用Proof of Stake(權(quán)益證明)來維護(hù)網(wǎng)絡(luò)安全,但實(shí)行PoS需要每個(gè)活躍的參與者(“驗(yàn)證者”)擁有一定資產(chǎn)來進(jìn)行質(zhì)押。如果持有資產(chǎn)的是eth1賬戶,那么這些資產(chǎn)需要轉(zhuǎn)移到eth2的驗(yàn)證者處才能進(jìn)行質(zhì)押。
驗(yàn)證者的職責(zé)主要是提議區(qū)塊并證明(attest)其他區(qū)塊,而質(zhì)押者(staker)則提供資金進(jìn)行質(zhì)押。驗(yàn)證者和質(zhì)押者的角色可以是相同或不同的實(shí)體,最佳實(shí)踐建議將這兩者區(qū)分開以最大程度保證資金的安全性。
將資金從eth1轉(zhuǎn)移到eth2以及定義質(zhì)押者和驗(yàn)證者的過程稱為Staking,第一步是在eth1上發(fā)送質(zhì)押存款交易(staking deposit transaction)。質(zhì)押存款交易包含的細(xì)節(jié)信息有質(zhì)押者身份、驗(yàn)證者身份等等,并被統(tǒng)稱為存款協(xié)議(deposit agreement)。本文將詳細(xì)探析抵押存款,并闡釋在eth1上提交ETH給eth2驗(yàn)證者的過程。
1. 創(chuàng)建存款協(xié)議
存款協(xié)議將對(duì)質(zhì)押者和驗(yàn)證者進(jìn)行定義,并構(gòu)成存款程序所需交易的基礎(chǔ)。
2. 驗(yàn)證者身份證明
要確保將存款交給了正確的驗(yàn)證者,就需要驗(yàn)證者身份證明。驗(yàn)證者通過將其公鑰添加到協(xié)議中來證明自己的身份:
注意,由于是在eth2中對(duì)驗(yàn)證者進(jìn)行身份證明,因此使用的是eth2公鑰而非eth1公鑰。
3. 質(zhì)押金額
其次,存款協(xié)議中需要包含質(zhì)押金額,以確保雙方(以及雙方網(wǎng)絡(luò))就質(zhì)押金額達(dá)成一致。質(zhì)押者可以將其期望質(zhì)押的金額添加到協(xié)議中:
4. 提款身份證明
提款身份證明用于提供驗(yàn)證者提出存款的賬戶。質(zhì)押者可以通過向協(xié)議中添加可操縱的公鑰來識(shí)別提款賬戶身份:
1. 公鑰經(jīng)由哈希以壓縮其大??;
2. 哈希字符串的首字節(jié)由類型標(biāo)識(shí)符代替(目前標(biāo)識(shí)符為“0”)
注意,提款身份證明使用的也是eth2的公鑰。因此,其必須直接由質(zhì)押者提供,而無法像eth1智能合約通常那樣從交易簽名中恢復(fù)。
還要注意的是,如果驗(yàn)證者和質(zhì)押者是同一實(shí)體,則應(yīng)使用不同的密鑰進(jìn)行驗(yàn)證者身份識(shí)別和提款身份識(shí)別。如此以來提款密鑰可以安全地離線保存,直到質(zhì)押者做好提款準(zhǔn)備。
5. 驗(yàn)證者授權(quán)
要表明驗(yàn)證者同意遵守協(xié)議條款進(jìn)行驗(yàn)證,則需要驗(yàn)證者授權(quán)。驗(yàn)證者要使用與驗(yàn)證者身份證明相同的密鑰對(duì)協(xié)議條款進(jìn)行簽名來進(jìn)行授權(quán),并將該簽名添加到協(xié)議中:
6. 提交存款協(xié)議
此時(shí),存款協(xié)議中包含四條信息:驗(yàn)證者身份證明、質(zhì)押金額、提款身份證明和驗(yàn)證者授權(quán)。如果質(zhì)押者想繼續(xù)完成存款,還需要將包含該協(xié)議和資金的交易發(fā)送給eth1存款合約(deposit contract):
此處有兩點(diǎn)需要注意:
1. 質(zhì)押者沒有在存款協(xié)議中明確授權(quán),而是在交易廣播之前將其簽名添加到交易中提供所需授權(quán);
2. 交易必須附帶存款協(xié)議中所涉及的ETH確切金額,任何其他金額都將導(dǎo)致交易被存款合約拒絕。
接著由以太坊存款合約(deposit contract)接收并處理交易,如果一切正常進(jìn)行,則存款合約將創(chuàng)建一個(gè)存款收據(jù)事件,收據(jù)包含存款協(xié)議中的所有數(shù)據(jù),并且表示存款合約已經(jīng)接收存款協(xié)議和所質(zhì)押的ETH。
7. 激活存款協(xié)議
與前序步驟不同,激活合約主要進(jìn)行在eth2中。
Eth2會(huì)跟蹤eth1的更新以獲取存款收據(jù)。每個(gè)eth2節(jié)點(diǎn)在其提議的區(qū)塊中都包含有最新的存款收據(jù)。隨著這些區(qū)塊的最終確認(rèn),存款就會(huì)成為eth2整體狀態(tài)的一部分。存款收據(jù)將作為驗(yàn)證者狀態(tài)存儲(chǔ)在eth2中。
同樣,驗(yàn)證者也會(huì)跟蹤eth2中的更新以獲知驗(yàn)證者狀態(tài)的變化。當(dāng)觀察到帶有公鑰的驗(yàn)證者狀態(tài)條目時(shí),說明該存款已在eth1上完成,且已經(jīng)得到了eth2的識(shí)別,剩下的就是證明工作了。
全程
結(jié)束提交和激活步驟之后,就完成了在eth2中質(zhì)押eth1資產(chǎn)的全部過程:
注:盡管在理論過程中沒有說明,但隨著安全性的提升,Staking的過程會(huì)存在許多延遲。譬如在eth2中,在獲取到存款收據(jù)事件和將該信息添加到驗(yàn)證者狀態(tài)之間會(huì)存在一定的延遲,這樣做是為了確保eth1網(wǎng)絡(luò)中不會(huì)發(fā)生區(qū)塊鏈重組而導(dǎo)致存款無效。