時(shí)間:2021-12-21|瀏覽:465
以太坊網(wǎng)絡(luò)向權(quán)益證明的過渡(The Merge)即將到來:目前開發(fā)網(wǎng)絡(luò)正在建立,規(guī)范也進(jìn)入最終確定,社區(qū)外展準(zhǔn)備工作已經(jīng)認(rèn)真開始。The Merge旨在過渡過程中對最終用戶、智能合約和 dapps 的運(yùn)作方式產(chǎn)生最小的影響。也就是說,在這個(gè)過程中,有一些小的變化值得強(qiáng)調(diào)。在我們深入研究這些變化之前,下面有一些鏈接可以提供有關(guān)The Merge 整體架構(gòu)的一些了解:
路線圖演變?
合并后客戶端架構(gòu)?
本文的其余部分將假設(shè)讀者熟悉上述內(nèi)容。對于那些想要更深入挖掘的人,下面可獲得 The Merge 的完整規(guī)范:
執(zhí)行層?
共識層?
引擎API?
區(qū)塊結(jié)構(gòu)
以太坊合并之后,網(wǎng)絡(luò)上將不再存在工作量證明(PoW)。相反,以前的PoW部分將成為信標(biāo)鏈(Beacon Chain)上創(chuàng)建的區(qū)塊的組成部分。然后,您可以將信標(biāo)鏈視為以太坊新的PoS共識層,取代之前的PoW共識層。信標(biāo)鏈區(qū)塊將包含 ExecutionPayloads,這是當(dāng)前PoW鏈上區(qū)塊的合并后等價(jià)物。下圖顯示了這種關(guān)系:
對于最終用戶和應(yīng)用開發(fā)人員來說,這些 ExecutionPayloads 是與以太坊進(jìn)行交互的地方。該層上的交易仍將由執(zhí)行層客戶端(Besu、Erigon、Geth、Nethermind 等)處理。幸運(yùn)的是,由于執(zhí)行層的穩(wěn)定性,The Merge 只引入了最少的破壞性更改。
挖礦和Ommer區(qū)塊字段
合并后,之前包含在PoW區(qū)塊頭中的幾個(gè)字段不再使用,因?yàn)樗鼈兣cPoS無關(guān)。為了最大限度地減少對工具和基礎(chǔ)設(shè)施的破壞,這些字段被設(shè)置為 0,或者它們的數(shù)據(jù)結(jié)構(gòu)的等效項(xiàng),而不是從數(shù)據(jù)結(jié)構(gòu)中完全刪除。你可以在 EIP-3675 中找到對區(qū)塊字段的完整更改內(nèi)容。
因?yàn)镻oS不會(huì)像PoW那樣自然產(chǎn)生 ommers(又名叔塊),所以每個(gè)叔塊(ommers)中的這些列表將為空,這個(gè)列表的哈希(ommersHash)將成為 RLP 編碼哈希的一個(gè)空列表。同樣,因?yàn)镻oW還包含了難度和隨機(jī)數(shù),所以此后它們將被設(shè)置為 0,同時(shí)賦予它們字節(jié)大小值。
另一個(gè)與挖礦相關(guān)的字段 mixHash 不會(huì)設(shè)置為 0,而是包含信標(biāo)鏈的 RANDAO 值。下文將會(huì)對此進(jìn)行更多介紹。
BLOCKHASH & DIFFICULTY 操作碼更改
合并后,BLOCKHASH 操作碼仍可使用,但考慮到它不再通過PoW哈希程序偽造,此操作碼提供的偽隨機(jī)性將弱得多。
相關(guān)地,DIFFICULTY 操作碼 (0x44) 將被更新并重命名為 RANDOM。合并后,它將返回信標(biāo)鏈提供的隨機(jī)信標(biāo)的輸出。因此,與 BLOCKHASH 相比,盡管仍然存在偏差,此操作碼將成為應(yīng)用程序開發(fā)人員使用的更強(qiáng)大的隨機(jī)源。
RANDOM 公開的值將存儲(chǔ)在 ExecutionPayload 中,其中存儲(chǔ)了與PoW計(jì)算相關(guān)的值 mixHash。Payload 的 mixHash 字段也將被重命名為 random。
這是 DIFFICULTY & RANDOM 操作碼在合并前和合并后如何工作的說明:
合并前,我們看到 0x44 操作碼返回區(qū)塊頭中的難度字段。合并后,重命名為 RANDOM 的操作碼指向先前包含 mixHash 的區(qū)塊頭字段,現(xiàn)在存儲(chǔ)來自信標(biāo)鏈狀態(tài)的隨機(jī)值。
這一變化在 EIP-4399 中得到正式化,也為鏈上應(yīng)用程序提供了一種評估合并是否發(fā)生的方法。根據(jù)這個(gè)EIP的介紹:
此外,此 EIP 提出的更改允許智能合約確定是否已升級到 PoS。這可以通過分析 DIFFICULTY 操作碼的返回值來完成。如果值大于 2**64 ,則表示交易正在 PoS 區(qū)塊中執(zhí)行。
出塊時(shí)間
合并將影響以太坊的平均區(qū)塊時(shí)間。目前在PoW下,平均每約 13 秒產(chǎn)出一個(gè)區(qū)塊,實(shí)際區(qū)塊間隔時(shí)間有相當(dāng)大的差異。在權(quán)益證下,區(qū)塊間隔將恰好為12 秒,除非由于驗(yàn)證者離線或因?yàn)樗麄儧]有及時(shí)提交區(qū)塊而錯(cuò)過了某個(gè)時(shí)隙。在實(shí)踐中,發(fā)生這種情況的插槽<1%。
這意味著網(wǎng)絡(luò)上的平均出塊時(shí)間減少了約 1 秒。在計(jì)算中假設(shè)特定平均區(qū)塊時(shí)間的智能合約需要考慮到這一點(diǎn)。
安全頭區(qū)塊(safe head)和最終區(qū)塊
在PoW下,區(qū)塊重組在一直都可能出現(xiàn)。應(yīng)用通常會(huì)等待在新頭區(qū)塊(safe head)上挖出幾個(gè)區(qū)塊,然后再將其視為該區(qū)塊已不太可能從規(guī)范鏈中被刪除,或已經(jīng)得到“確認(rèn)”。在合并之后,我們有了最終和安全的頭部區(qū)塊的概念。這些區(qū)塊可以比“已確認(rèn)”的PoW區(qū)塊更可靠地使用,但需要改變理解才能正確使用。
最終確定的區(qū)塊是指被超過 2/3 的驗(yàn)證者接受為規(guī)范的區(qū)塊。要?jiǎng)?chuàng)建一個(gè)沖突區(qū)塊,攻擊者必須至少銷毀ETH總質(zhì)押數(shù)量的 1/3,在撰寫本文時(shí),這意味著超過 100 億美元(或 >250 萬枚)的ETH。
安全頭區(qū)塊(safe head)是指在正常網(wǎng)絡(luò)條件下,我們希望包含在規(guī)范鏈中的區(qū)塊。假設(shè)網(wǎng)絡(luò)延遲小于 4 秒,大多數(shù)驗(yàn)證者都是誠實(shí)的,并且沒有對分叉選擇規(guī)則的攻擊,那么safe head將永遠(yuǎn)不會(huì)成為孤兒塊。此處提供了詳細(xì)介紹如何在各種情況下計(jì)算safe head的演示文稿。此外,safe head的假設(shè)和保證將在即將發(fā)表的論文中得到正式定義和分析。
合并后,執(zhí)行層 API(例如 JSON RPC)在要求提供最新區(qū)塊時(shí)將默認(rèn)返回安全頭(safe head)。在正常的網(wǎng)絡(luò)條件下,safe head和鏈的實(shí)際頂端將是等效的(安全頭尾僅幾秒鐘)。與當(dāng)前的PoW最新區(qū)塊相比,safe head不太可能被重組。為了公開PoW鏈的實(shí)際提示,將向 JSON RPC 添加一個(gè)unsafe標(biāo)志。
最終區(qū)塊也將通過 JSON RPC 公開,通過一個(gè)新的finalized標(biāo)志。然后,這些可以作為PoW證明的更強(qiáng)大的替代品。下表總結(jié)了這一點(diǎn):
區(qū)塊類型共識機(jī)制JSON RPC發(fā)生重組的條件headPoWlatest可以預(yù)料到,必須小心使用headPoSunsafe可以預(yù)料到,必須小心使用safe headPoSlatest可能發(fā)生,但需要大的網(wǎng)絡(luò)延遲或?qū)W(wǎng)絡(luò)的攻擊才能實(shí)現(xiàn)。confirmedPoWN/A不太可能發(fā)生,因?yàn)樾枰蟛糠炙懔硗谝粋€(gè)深度 > # 確認(rèn)的競爭鏈。finalizedPoSfinalized極不可能發(fā)生,因?yàn)樾枰^ 2/3 的驗(yàn)證者來完成一個(gè)競爭鏈,需要至少 1/3 被削減。