跳至內容
0%

什麼是 shadow fork?

Alchemy team headshot

作者 Alchemy

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

什麼是 shadow fork?

Shadow fork 與 devnet 類似,但不是擁有自己的狀態,而是複製另一個網路(devnet 或 mainnet)的狀態。

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

這個分支可以切換到 Proof-of-Stake,但仍會保留 mainnet 的交易及其他狀態/歷史資料。

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

shadow fork 與一般的 fork 有何不同?

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

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

Bitcoin 和 Ethereum 都是基於區塊鏈技術,並在開源軟體上執行。它們之所以稱為「區塊鏈」,是因為它們由一連串的資料區塊組成,且可以追溯回網路上的第一筆交易。

由於它們是開源的,其社群負責維護和改進原始碼。因此,fork 可能是為了讓區塊鏈更安全、新增功能,或是減輕駭客攻擊造成的影響——例如 2016 年 The DAO 遭駭之後的情況。

2016 年,Ethereum 區塊鏈分裂成 Ethereum Classic,它保留了反映被竊取的 360 萬 ETH 的準確帳本;而 Ethereum 則透過 fork 逆轉了這次駭客攻擊。

soft fork 與 hard fork 有何差異?

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

Soft fork

soft fork 可以視為對執行區塊鏈的軟體所做的更新。只要所有人都使用它,它就會成為該網路的新規則。

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

Hard fork

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

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

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

為什麼 shadow fork 很重要?

shadow fork 是 web3 開發者的重要工具,因為它讓開發者能夠針對 mainnet 生產環境的最新狀況,測試他們對於網路即將進行的升級所做的假設是否成立。

Kiln 測試網路是開發者為準備 The Merge 而測試的最後一個 testnet,The Merge 將把 Ethereum 的執行層從 Proof-of-Work 改為 Proof-of-Stake。

shadow fork 的重要性在於證明 Merge 能夠順利實現,不會對在網路上執行的既有 應用程式 造成不良影響。

擁有這些 shadow fork 的 testnet 將作為測試場地,確保合併過渡順利進行,並有助於建立節點營運商和開發者的信任。

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 區塊顯示的是原本(即原始)區塊鏈上的節點,它並不知道 shadow fork 的存在。

中間一列的 Goerli 區塊代表的是 shadow-fork 鏈上的節點,其設定不同,會在達到終端總難度(terminal total difficulty,TTD,即用來觸發客戶端停止挖礦並轉換為 PoS 的總挖礦難度)時進行分裂。 最下面一列則是專為 shadow fork 建立的 Beacon Chain 示意圖。當達到 TTD 時,原本鏈上的節點會繼續照常產生區塊,彷彿什麼事都沒發生;而那些設定已變更的節點則會分裂出去,經歷 Merge。

接著,下一位驗證者會產生 Merge 之後 Beacon Chain 的第一個區塊。

Shadow forking 是達成此目的的最佳方式,因為它讓開發者能夠測試 fork 和 merge 流程的運作情況,而不會影響公開的 testnet 或 mainnet。

透過反覆執行這個 shadow fork 操作,開發者可以在不同情境下測試合併的過渡過程。

有哪些知名的 shadow fork?

有兩個 testnet 因擁有一些最知名的 shadow fork 而特別突出:Goerli 已經歷過三次 shadow fork,而 mainnet 則已歷經六次。 兩次 mainnet shadow fork 之間的主要差異在於,所有客戶端組合都成功通過了一次 shadow fork 轉移,並保持同步。

此次 shadow fork 也對每個客戶端使用了 develop/unstable 分支。這代表開發者不再需要合併分支。在 mainnet 上,存款合約再次被使用,但採用了不同的 fork ID。

這意味著在 shadow fork 上,每一筆 mainnet 的存款都必須被處理並標記為無效。這項運算相當耗費資源,導致少數客戶端出現一些邊緣狀況,但整體網路仍運作正常。

如何對 Ethereum 進行 shadow fork

如果你有興趣 fork Ethereum,可以參考 Alchemy 的逐步指南,了解如何 fork Ethereum mainnet,你需要一個免費的 Alchemy 帳號、HardHat,以及命令列介面(CLI)。

shadow fork 是關鍵的 Ethereum 開發者工具

shadow fork 在 Ethereum 區塊鏈的持續開發與擴展改進中扮演重要角色。透過 shadow fork,Ethereum 核心開發者、節點提供商和獨立質押者可以為即將到來的全網變更做好準備,使 Ethereum 應用程式生態系統不會因此中斷。

Background gradient

打造區塊鏈魔法

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