以太坊基金會:合並將如何影響以太坊的應用層?
以太坊向 PoS 的過渡——合並——即將到來:devnets (开發網絡) 正在被建立起來,規範正在被敲定,向社區拓展也已經正式开始。合並被設計為對以太坊終端用戶、智能合約和 dapps 的影響最小化。盡管如此,還是有一些細微的變化值得強調。在我們深入研究這些變化之前,這裏有一些鏈接提供關於整體合並架構的概述:
-
以太坊路线圖的演變:
https://tim.mirror.xyz/CHQtTJb1NDxCK41JpULL-zAJe7YOtw-m4UDw6KDju6c
-
合並之後的客戶端架構:
https://tim.mirror.xyz/CHQtTJb1NDxCK41JpULL-zAJe7YOtw-m4UDw6KDju6c
本文的其余部分將假設讀者熟悉上述內容。如果你想要更深入地了解合並的完整規範,可參閱:
-
執行層:
https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/merge.md
-
共識層:
https://github.com/ethereum/consensus-specs/tree/dev/specs/merge
-
引擎 API:
https://github.com/ethereum/execution-apis/tree/main/src/engine
區塊結構
在合並之後,PoW 區塊將不再存在於以太坊網絡上。相反,此前的 PoW 內容將成為信標鏈上創建的區塊的一部分。屆時你可以將信標鏈視為以太坊新的 PoS 共識層,取代之前的 PoW 共識層。信標鏈區塊將包含ExecutionPayloads
, 這是當前 PoW 鏈的區塊在合並之後的等價物。下圖展示了這種關系:
對於終端用戶和應用开發者而言,這些ExecutionPayloads
是與以太坊發生交互的地方。在這一層上面的交易將依舊被執行層客戶端 (Besu、Erigon、Geth、Nethermind 等) 處理。幸運的是,由於執行層的穩定性,合並只會引入最小的破壞性更改。
挖礦 & Ommer 區塊字段
合並後,之前包含在 PoW 區塊頭中的幾個字段將不再使用,因為它們與 PoS 無關。為了盡量減少對工具和基礎設施的破壞,這些字段被設置為 0,或者它們的數據結構的等效值,而不是從數據結構中完全刪除。區塊字段的全部變化可以在 EIP-3675 中找到:
https://eips.ethereum.org/EIPS/eip-3675#block-structure
由於 PoS 不像 PoW 那樣自然產生 ommers (又稱叔塊),因此每個區塊中的這些列表 (ommers) 將是空的,而該列表的哈希 (ommerHash) 將成為一個空列表的 RLP 編碼哈希。類似地,由於difficulty
和nonce
是 PoW 具有的特徵,它們將被設置為 0,同時賦予它們字節大小值。
另一個與挖礦相關的字段mixHash
將不會被設置為 0,而是將包含信標鏈的 RANDAO 值。下文將更加詳細地對此進行闡述。
BLOCKHASH
& DIFFICULTY
操作碼變更
合並之後,BLOCKHASH
操作碼將仍然可以使用,但鑑於它將不再通過 PoW 哈希過程締造,因此此操作碼提供的僞隨機性將會弱得多。
與此相關,DIFFICULTY
操作碼(0x44) 將被更新並重命名為 RANDOM
。合並後,此操作碼將返回信標鏈提供的隨機信標的輸出 (output)。因此,與 BLOCKHASH
相比,這個操作碼將成為應用程序开發者們使用的一個更強大的 (盡管仍然存在偏差的) 隨機性來源。
RANDOM
公开的值將存儲在 ExecutionPayload
中,其中存儲了與 PoW 計算相關的 mixHash
值值。該 payload 的mixHash
字段也將被重命名為random
。
下方是 DIFFICULTY
& RANDOM
操作碼在合並前和合並後如何運作的圖解:
在合並之前,我們看到 0x44
操作碼會返回區塊頭的 difficulty
字段。合並之後,此操作碼重命名為 RANDOM
,並指向先前包含 mixHash
的區塊頭字段,現在存儲來自信標鏈狀態的 random
值。
此變更在 EIP-4399中正式提出,也為鏈上應用提供了一個評估合並是否發生的方式。EIP-4399:
https://eips.ethereum.org/EIPS/eip-4399
下方摘取自 EIP-4399:
此外,此 EIP 提議的更改將允許智能合約確定是否已經升級到 PoS。這可以通過分析DIFFICULTY 操作碼的返回值來確定。如果該返回值大於
2**64
,則表示交易正在 PoS 區塊中被執行。
出塊時間
合並將影響以太坊上的平均出塊時間。目前,在 PoW 機制中,出塊時間平均每~13秒,實際出塊時間可能有相當大的變化。在 PoS 機制中,出塊時間被精確到 12 秒,除非由於某個驗證者離线或者因為沒有及時提交區塊而導致某個 slot 沒有出塊。但在實踐中,這種情況只發生在不到 1% 的 slots 中。
這意味着 PoS 網絡上的平均出塊時間減少了約 1 秒。對於在計算中假定了某個特定的出塊時間的智能合約,將需要考慮到這一點。
安全頭部區塊 & 被敲定區塊
在 PoW 機制中,總是存在區塊重組的可能性。應用程序通常會等待在新的頭部區塊 (head block) 之上挖出幾個區塊之後,才會將該這個區塊視為不太可能從權威鏈中被移除,也即視該區塊“被確認”(confirmed)。而在合並之後,我們有了“被敲定”(finalized) 和“安全的頭部區塊”(safe head block) 的概念。與 PoW 機制中“被確認”的區塊相比,PoS 中的這些區塊要更加可靠,但需要理解上的轉變才能正確地使用。
“被敲定”的區塊是指該區塊被超過 2/3 的 PoS 驗證者接受為規範 (權威) 的區塊。如果攻擊者想要創建一個與之相衝突的區塊,那么攻擊者將必須銷毀 ETH 總質押量的 1/3。截至撰文時,這意味着超過價值 100 億美元 (或超過 250 萬枚) 的ETH。
安全頭部區塊 (safe head block) 是指在正常的網絡條件下,我們期望被納入權威鏈中的區塊。假設網絡延遲小於 4 秒,且大多數驗證者都是誠實的,同時沒有對分叉選擇規則的攻擊,那么安全頭部區塊就永遠不會成為孤塊。下方鏈接是一個詳細介紹在各種情況下如何計算安全頭部區塊,此外我們將在之後發表的文章中對安全頭部區塊的假設和保證進行正式定義和分析:
https://docs.google.com/presentation/d/1MUVaFyd9ce3hPQ5L-UhqVSfxf1ajMYFbkActkp5xNKI/edit#slide=id.gf1d0105ca5_0_147
合並之後,執行層 API (例如 JSON RPC) 將在被要求提供 latest
(最新) 區塊時默認返回安全頭部區塊。在正常的網絡條件下,安全頭部區塊和區塊鏈的頂端將是等同的 (安全頭部區塊會落後幾秒鐘)。與當前 PoW 的 latest
(最新) 區塊相比, PoS 中的安全頭部區塊將更不可能被重組。為了顯露出 PoS 鏈的實際頂端,將向 JSON RPC 添加一個 unsafe
標志。
被敲定的區塊也將通過 JASON RPC 的一個全新的 finalized
(被敲定) 標志來顯露出來。這些可以作為 PoW 確認的一個強大的替代方式。下表對此進行了總結:
後續行動
我們希望這篇文章能幫助應用程序开發者為期待已久的 PoS 過渡做好准備。在接下來的幾周內,一個長期存在的合並測試網將被更廣泛的社區用於測試。還有一場即將到來的有關合並的社區電話會議,讓基礎設施、工具和應用程序的开發者們拋出問題,並聽取關於合並的最新技術更新。我們不見不散??:
感謝 Mikhail Kalinin 提供了本文“安全頭部區塊”部分的核心內容,感謝 Danny Ryan 和 Matt Garnett 審閱了本文的草稿。
撰文:Tim Beiko
編輯:南風
鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播信息之目的,不構成任何投資建議,如有侵權行為,請第一時間聯絡我們修改或刪除,多謝。
7月23:Mt. Gox 比特幣錢包在市場緊縮的情況下轉移了價值 28.2 億美元的 BTC
7月23:Mt. Gox 比特幣錢包在市場緊縮的情況下轉移了價值 28.2 億美元的 BTC一個引...
悅盈:比特幣68000的空完美落地反彈繼續看跌 以太坊破前高看回撤
一個人的自律中,藏着無限的可能性,你自律的程度,決定着你人生的高度。 人生沒有近路可走,但你走的每...