跳至內容
0%

什麼是 shadow fork?

Alchemy team headshot

作者 Alchemy

發布於 2022年6月24日閱讀時間 2 分鐘

什麼是 shadow fork?

Shadow fork 與 devnet 類似,差別在於它不是擁有自己的 state,而是複製另一個網路(devnet 或 mainnet)的 state。

舉例來說,Ethereum 主網的 shadow fork 仍會接受所有送往 mainnet 的交易。

這個分支可以切換到 Proof-of-Stake,但仍會保留 mainnet 的交易與其他 state/history 資料。

在 shadow fork 上完成 merge 之後,它會轉移到 Proof-of-Stake 鏈,並忽略之後在 mainnet 上新增的任何 Proof-of-Work 區塊。

shadow fork 與一般的 fork 有什麼不同?

shadow fork 是刻意建立來用原始鏈的既有 state 資料測試網路升級的,一般的 fork 則是在開發社群修改協定或受到駭客攻擊影響時發生。fork 發生時,區塊鏈會分裂,產生第二條(新的)區塊鏈,這條鏈與原本的鏈擁有相同的歷史紀錄,但走向不同的路徑。

核心開發者對區塊鏈的升級導致 fork 的一個例子,是 London Hard Fork,它導入了 EIP-1559 以優化 Ethereum 的交易手續費結構。

Bitcoin 與 Ethereum 都是基於區塊鏈技術、運行在開源軟體上。它們被稱為「blockchain」,是因為它們由一連串可以回溯到網路上第一筆交易的資料區塊組成。

由於它們是開源的,其社群需負責維護與強化原始碼。因此,fork 可能是為了讓區塊鏈更安全、新增功能,或是為了減輕駭客攻擊的影響而發生,例如 2016 年 The DAO 遭駭事件之後的情況。

2016 年,Ethereum 區塊鏈分裂為 Ethereum Classic 與 Ethereum:前者維持了如實反映 360 萬顆被竊 ETH 的帳本,後者則透過 fork 撤銷了這次駭客攻擊。

soft fork 與 hard fork 有什麼差異?

soft fork 與 hard fork 的差異在於,soft fork 會修改現有區塊鏈的程式碼,而 hard fork 則會將區塊鏈分裂成兩條不同的區塊鏈。

Soft fork

可以把 soft fork 想成是運行該區塊鏈的軟體更新。只要所有人都採用它,它就會成為該網路新的規則集。

soft fork 曾被用來為 Ethereum 新增功能,通常是透過修改程式碼庫與客戶端軟體來實現。由於最終結果仍是單一區塊鏈,這些變更能與 fork 之前產生的區塊相容。

Hard fork

當程式碼變動到新版本無法與舊區塊相容時,這就稱為「hard fork」。在這種情況下,區塊鏈會分裂成兩部分:

  1. 遵循舊規則的舊區塊鏈
  2. 遵循新規則的新區塊鏈

這會產生一種全新的加密貨幣,許多知名的加密貨幣就是這樣誕生的。Bitcoin Cash 就是透過 hard fork 從原本的 Bitcoin 區塊鏈分裂出來,而 Ethereum Classic(ETC)則是從 Ethereum(ETH)分裂出來的。

為什麼 shadow fork 很重要?

Shadow fork 是 web3 開發者的重要工具,因為它讓開發者能夠依照 mainnet 生產環境最新的實際狀況,來驗證自己對於網路即將進行的升級所做的假設。

Shadow fork 曾與公開 testnet 一起被用於準備 The Merge,也就是將 Ethereum 的 Execution Layer 從 Proof-of-Work 改為 Proof-of-Stake 的升級。

Shadow fork 的重要性在於能證明 Merge 可以順利實現,而不會對運行於該網路上的既有 app 造成不良影響。

擁有這些 shadow fork 的 testnet 會作為測試場地,確保 merge 轉換能順利進行,並有助於建立 node operator 與建構者的信任。

shadow fork 是如何運作的?

顯示如何從現有的 Goerli 鏈建立 shadow fork 的圖片
An image showing how a shadow fork is created out of an existing Goerli chain. Source: AllCoreDevs Update #011 https://tim.mirror.xyz/PWFVaHY3Mrx7srarMmuBWya0J5kioR1l2xaH3p5APDk

在上圖中,最上排的 Goerli 區塊顯示的是原始(即 canonical)區塊鏈上的一個 node,它並不知道 shadow fork 的存在。

中間那排 Goerli 區塊代表的是 shadow-forked 鏈上的一個 node,它有不同的設定,指示它在達到 terminal total difficulty(TTD,也就是用來觸發客戶端停止挖礦並轉換到 PoS 的總挖礦難度)時進行分裂。 最下排則是專為這個 shadow fork 建立的 Beacon Chain。當達到 TTD 時,canonical 鏈上的 node 會像什麼都沒發生一樣繼續產生區塊,而設定已變更的 node 則會分裂並完成 Merge。

接著,下一個 validator 會產生 Merge 之後 Beacon Chain 的第一個區塊。

Shadow fork 是做這件事最好的方法,因為它讓開發者能夠測試 fork 與 merge 流程的運作情況,而不會影響公開 testnet 或 mainnet。

透過反覆進行這種 shadow fork 操作,開發者可以在不同情境下測試 merge 轉換流程。

有哪些知名的 shadow fork?

在兩個 testnet 中,有一些最知名的 shadow fork:Goerli 經歷了三次 shadow fork,而 mainnet 則經歷了六次。 這兩次 mainnet shadow fork 的主要差異在於,所有客戶端組合都成功通過了 shadow fork 轉移並維持同步。

這次 shadow fork 也為每個客戶端使用了 develop/unstable 分支,意味著開發者不再需要合併分支。在 mainnet 上,deposit contract 再次被使用,但採用了不同的 fork ID。

這代表在 shadow fork 上,每一筆 mainnet 的 deposit 都必須被處理並標記為無效。這項需要大量運算資源的計算,使少數客戶端出現了一些邊界情況,但網路整體仍運作正常。

如何 shadow fork Ethereum

如果你有興趣 fork Ethereum,可以參考 Alchemy 提供的逐步指南,了解如何使用 free Alchemy account、HardHat 以及命令列介面(CLI)來fork Ethereum mainnet。

shadow fork 是 Ethereum 開發者不可或缺的工具

Shadow fork 在 Ethereum 區塊鏈持續的開發與擴展改進 中扮演重要角色。透過 shadow fork,Ethereum 核心開發者、node provider 與獨立的 staker 可以為即將到來的網路全面性變更做好準備,讓 Ethereum 應用生態系統不受影響。

Background gradient

打造區塊鏈魔法

Alchemy 結合最強大的 Web3 開發者產品與工具,並提供資源、社群與卓越的支援。