Cover photo

以太坊 PoS 與上海硬分叉總整理!

作者:Irara @ imToken Labs 校稿:NicCyanChangWuDavid @ imToken Labs;FengYi @ imToken Wallet

大家好!今天我們要來探討 Ethereum 以太坊的 PoS(權益證明)演進史。以太坊為了提高區塊鏈的效能以及更加地環保,不斷推陳出新,讓整個區塊鏈世界產生了巨大的變革。隨著技術的不斷進步,以太坊也將開始向新的高度挑戰。讓我們一起來探討這個讓人感到振奮的演進過程!

因本文章有較深入的 PoS 介紹,建議已具備基礎 PoW 知識的讀者閱讀

(1)2020 年 12 月 PoS 信標鏈上線

為了將耗能的 PoW 升級至節能的 PoS,以太坊在 2020 年 12 月 1 日時,上線了以 PoS 共識機制為主的以太坊信標鏈(Beacon Chain)!

PoS 名詞解釋

在 PoS 中,有些名詞會和 PoW 稍微不同!

  • Block(區塊)的概念改為 Slot(插槽)與 Epoch(紀元),但 2 者均可共存不影響

    • 平均來說,每 12 秒會出一個 Slot,而每 32 個 Slot(= 12 秒 x 32 Slot = 6.4 分鐘)稱為一個 Epoch

  • Difficulty(挖礦難度)改為 Slot PrevRandao(或稱 Block Randomness 隨機數)

  • Miner(礦工)改為 Validator(驗證者)與負責出塊的 Slot Proposer(提議者)

    • 目前,若要成為 Validator,需使用 Validator 私鑰及 Withdrawal 私鑰來建置不停機的驗證節點,接著將帶有以下指定 Data + 32 ETH 的交易打到 Deposit 合約中:

      • pubkey(48 Bytes):Validator 公鑰,鏈上唯一識別用

      • withdrawal_credentials(32 Bytes):將 Withdrawal 公鑰作 SHA256 後,將最左側 2 位元由 0x00(BLS WITHDRAWAL 前綴)替換而得

      • signature(96 Bytes):由 Validator 私鑰向 (pubkey, withdrawal_credentials, deposit_amount) 資料進行簽名

      • deposit_data_root(32 Bytes):由上述 pubkey、withdrawal_credentials、signature 建立 Hash Tree,並取得其 Hash Tree Root 而得

Slot 與 Epoch、Validator 與 Proposer
Slot 與 Epoch、Validator 與 Proposer

成為 Slot Proposer 要做的事

在下一個 Epoch 到來前,每個 Slot 會透過 Randao 隨機數指定 1 位 Validator 成為此 Slot 的 Proposer,而他要完成 2 件事!

  • 第 1 件事:建立區塊,並讓其他 Validator 進行驗證及投票

    • 理想上,Slot Proposer 會在最新的區塊後面,直接建置下一個區塊,如同 PoW 時期以維持最長鏈原則

    • 但實際上,可能會因 P2P 網路延遲、惡意節點嘗試攻擊等,導致 Slot Proposer 未必能在最新的區塊後面建置下一個區塊,造成區塊鏈分岔。這時,需請其他的 Validator 進行區塊投票,得票高者即可成為下一個區塊

    • 若惡意節點故意在同一個 Slot 時段內建立 2 個區塊,則會被施以嚴重的大幅削減(Slash)處罰(從質押的 ETH 中一次性罰款)並退出網路

  • 第 2 件事:提出一個隨機數種子 S,並公開 Hash(S) 結果

    • 因為少了過去 PoW 的算力競爭,但直接指定 Proposer 有違去中心化,所以需要一個由眾多 Slot Proposer 一同決定的 Randao 隨機數,用來選定下一個 Epoch 的 Slot Proposer 們

第 1 件與第 2 件事不斷重複,使得區塊鏈不斷地產生新區塊

Slot 的 Validator 數量推算

在說明每個區塊及 Epoch 需要多少票數前,先進行目前 Slot 的 Validator 數量推算!

  • 回顧一下:每 12 秒為一個 Slot,而每 32 個 Slot 為 1 個 Epoch

  • Beaconscan 網站可得知,目前撰文時全球總共約有 512,000 名以太坊 Validator

    • 所以,每 1 個 Epoch 約會有 512,000 名 Validator 進行投票

    • 平均下來,每 1 個 Slot 約會有 512,000 / 32 = 16,000 名 Validator 進行投票

每個 Validator 要做的事

扣除負責出塊的 Slot Proposer,剩下 N - 1(N 是 16,000)的 Validator 需在每個 Slot 中完成 Attestation 工作,即向支持的區塊及 Epoch 來進行投票!

  • 投票 1:向支持的 Epoch(對應的 Checkpoint Slot)投票(或稱之為 Casper FFG 共識)

    • 支持的 Epoch 包含需同時選定 Target Epoch 及 Source Epoch(可參考下圖)

      • Target 為 Validator 認同當下所在的 Epoch

      • Source 為 Validator 認同最近的 Epoch(通常為上一個 Epoch)

    • 若某個 Target Epoch 結束,並得到超過 2 / 3 Validator(即 512,000 x 2 / 3 = 341,333)的票數,則此 Epoch 標示為 Justified

      • 故最快要等上 1 Epoch = 6.4 分鐘的時間

    • 承上,若此 Target 緊連的 Source Epoch 也得到 2 / 3 票數(通常 2 者為連續的 Epoch),則此 Source Epoch 標示為 Finalized

      • 所以,最快要等上 2 Epoch = 12.8 分鐘的時間

      • Epoch Finalized 之前的區塊規定不可再被更改

Justified 與 Finalized 的 Epoch 判斷方式
Justified 與 Finalized 的 Epoch 判斷方式
  • 投票 2:向支持的區塊投票(或稱之為 LMD-GHOST Fork Choice Rule 共識)

    • 可對過去 1 Epoch 內的 Slot 區塊進行投票

    • 如果 Validator 有以下行為會無法拿到獎勵

      • 投給舊的、錯誤的區塊(可能投票期間未同步至最新區塊所致)

      • 投票經常延遲或設備離線

        • 但如果網路出現 4 個 Epoch 都沒被 Finalized 的情況(進入 Inactivity Leak 期),則會有罰款

    • 如果 Validator 有以下行為會進行嚴重(Slash)處罰

      • 同個私鑰同時存在兩臺不同機器上導致同一 Epoch 時間內有 2 次對區塊的投票行為

      • 將機器遷移時,沒有將資料庫也遷移,導致遷移的機器向同一區塊重覆投票的行為

    • 最後,如果被 Slash 處罰一次或因罰款導致餘額低於 16 ETH,則會被強制踢出網路

      • beaconcha 統計數據可得知,自信標鏈上線以來被 Slash 總共有 229 名 Validator,大多為非惡意的機器設置錯誤導致,約佔整體 Validator 的 0.045%

本節重點整理

  • PoS 是由鏈上所質押的 ETH 作擔保,來維持分散式共識(若伺服器停機、提交延遲、或提交錯誤共識內容則會有罰款),好處是:環保,且質押的 ETH 平均有 4% 年化報酬

  • 但此時要自建 24 小時不停機節點 + 質押至少 32 ETH,門檻過高

  • 對於僅有少量 ETH 卻又想參與 PoS 網路的散戶該怎辦?

    • 所以,像是 Lido 等服務商,就有提供收取質押獎勵的 10% 作為手續費,讓散戶進行小額質押

      • 而且,更特別的是 Lido 還提供質押 ETH 兌換 stETH 代幣,讓散戶可在二級市場進行 stETH 交易

  • Dune 統計數據可得知,目前所有質押的 ETH 約佔總供應量約 14.66%

(2)2022 年 9 月 PoS 信標鏈與 PoW 以太坊完成合併

眾所期待的 PoS 以太坊終於在 2022 年 9 月 15 日完成合併(The Merge)!此時,只能使用 Validator 進行質押挖礦,而使用顯卡挖礦的礦工時代也真正地成為了過去!

雖然,一般使用者仍可按照過去 PoW 使用方式進行 ETH 轉帳或合約交易;但實際上經過 The Merge 升級後,以太坊節點已拆分成 Execution Layer(EL)執行層及 Consensus Layer(CL)共識層了

以太坊節點區分 CL 及 EL 層
以太坊節點區分 CL 及 EL 層

在 The Merge 後採用了 PoS 共識,雖然 PoW 機制被移除,但是 PoW 的 Excution Layer 卻合併到 Beacon Chain 中

  • Execution Layer(EL)執行層仍與 PoW 時一樣進行:

    • 執行 EVM 虛擬機

    • 但是,當區塊分岔時,取代 PoW 機制,會由 CL 層告知哪一個區塊是 Head Block

  • Consensus Layer(CL)共識層就負責:

    • 進行 Proof of Stake 共識

    • 當區塊分岔時,採 LMD-GHOST Fork Choice Rule 共識來決定

The Merge 升級前,Execution Layer 的內容
The Merge 升級前,Execution Layer 的內容
完成 The Merge 升級後,Execution Layer 的內容與過去 PoW 時期相同
完成 The Merge 升級後,Execution Layer 的內容與過去 PoW 時期相同

然而, 對於執行以太坊節點的營運者,可以決定將 CL 節點(如:Lighthouse)、EL 節點(如:Geth)拆分建立,並使用元件所提供的 Engine API 來進行溝通。甚至可執行其中一個元件,另一個元件則與其他節點共用

本節重點整理

  • The Merge 合併之後,將以 PoS 的取代 PoW 以太坊,無法使用顯示卡挖礦

  • 但此時 Validator 們仍無法贖回已質押的以太幣,所以才會有下一個重大的升級:上海硬分岔

(3)2023 年第 2 季以太坊信標鏈進行上海硬分岔升級

以太坊 PoS 信標鏈於 The Merge 後另一項重大的升級:上海硬分岔,終於讓為數眾多的的 Validator 開放讓為數眾多質押 ETH 的贖回申請,但考量到系統的穩定性(如:避免 Validator 數量驟減,影響共識安全及穩定等),每個 Epoch 可退出的 Validator 或 ETH 數量是有限制的!

質押退出機制

關於欲將已質押的 ETH 贖回,除了您需等待 2023 年第 2 季上海硬分岔升級完成外,Validator 還需將 EL/CL 節點升級、在 CL 節點上修改收益地址等前置作業,即可進行 ETH 贖回請求啦!分為 2 種形式:

關於前置作業細節可參考 imToken 先前發佈的「上海升級,和你有關嗎?」文章!

  • 部份贖回(Partial Withdrawals):將超過 32 ETH 的其他 ETH(不論是質押 or 獎勵)給贖回

    • 因目前一個 12 秒的 Slot 最多只能有 16 次的部份贖回額度,以全網有 512,000 Validator 來計算,平均每個 Validiator 要等 4.44 天才能收到 ETH

  • 全部贖回(Full Withdrawals)並退出 Validator 角色

    • 因目前一個 6.4 分鐘的 Epoch 只能退出 6 名 Validator,所以會依照申請的順序來進行全部贖回

      • 註:實際上,為避免一次大量 Validator 退出網路而導致安全性問題,所以每個 Epoch 可退出 Validator 數量會依照全網 Validator 總數來進行限制(可參考下方表格)

而以上無論是部份贖回,還是全部贖回,因為都在 CL 節點上廣播請求,所以也均無需 Gas 費用

每個 Epoch 可退出 Validator 數量會依照全網 Validator 總數來進行限制
每個 Epoch 可退出 Validator 數量會依照全網 Validator 總數來進行限制

上線前需充份測試

另外,此次升級還需在各個測試網上進行充份測試,才會正式上線!

  • 2023/02/07 可提款的 Zhejiang 測試網上線

  • 2023/02/28 進行 Sepolia 測試網的上海硬分岔升級

  • 2023/03 進行 Goerli 測試網的上海硬分岔升級

還有其他的提案

而且,這次升級除了 EIP-4895(允許驗證者提取質押的代幣)是主要提案外,還會一同實現以下 EIP 提案:

  • EIP-3651 預熱 COINBASE:啟動「COINBASE」地址的預熱功能,降低交易手續費消耗

  • EIP-3855 增加 PUSH0 指令:將常用的「常數 0 推送」操作變成一個指令,將可減少合約程式碼大小

  • EIP-3860 限制和計價 initcode:增加合約部署規範,避免部署程式碼過大佔用空間

  • EIP-6049 新增 SELFDESTRUCT 停用警告:更新 SELFDESTRUCT 指令的文件說明,警告使用者該指令未來將被停用

未來,本專刊將會為重要的 EIP 提案來撰寫文章進行說明

本節重點整理

  • 開放質押的 ETH 贖回,但基於安全理由,每個 Epoc(約 6.4 分鐘)只能退出 6 個驗證者(因此每天約有 1,350 個驗證者 or 43,200 ETH 可退出。

  • 若您剛好是以太坊信標鏈的 Validator,強烈建議在上海升級前閱讀「上海升級,和你有關嗎?」文章,來了解這次上海升級時您一定要做的幾件事情!

(4)結論

綜觀整個 PoS 演進史,以太坊始終保持著為用戶提供最優秀的使用體驗和開發環境的初衷。PoW 到 PoS,不斷的改變也帶給了我們更加高效和環保的區塊鏈世界。上海硬分岔升級將為以太坊帶來更多的可能性;在未來,隨著這一系列 EIP 提案的引入,Ethereum 將越來越容易地融入日常生活中,並且讓人們都可享受到區塊鏈帶來的安全性與方便性。讓我們一起期待以太坊的更美好未來!

(5)參考資料