一文了解以太坊2.0可執行信標鏈提案 - 冷萃財經

一文了解以太坊2.0可執行信標鏈提案

一文了解以太坊2.0可執行信標鏈提案
文章摘要:11月27日,以太坊開發者Mikhail Kalinin提出了一種名為「可執行信標鏈」的Eth1-Eth2過渡提案,據悉,該提案的最初想法來自以太坊聯合創始人Vitalik Buterin,其旨在將eth1數據(交易、狀態根等)嵌入到信標區塊中,並強制信標鏈提議者生成可執行的eth1數據來消除複雜性。

11月27日,以太坊開發者Mikhail Kalinin提出了一種名為「可執行信標鏈」的Eth1-Eth2過渡提案,據悉,該提案的最初想法來自以太坊聯合創始人Vitalik Buterin,其旨在將eth1數據(交易、狀態根等)嵌入到信標區塊中,並強制信標鏈提議者生成可執行的eth1數據來消除複雜性。

一文了解以太坊2.0可執行信標鏈提案

以下是該提案的具體內容:

特別感謝Vitalik Buterin的創意,@djrtwo、 @zilm以及其他人的評論和有用的貢獻。

最近提出的以rollup為中心的路線圖,提出數據分片作為以太坊2.0中執行的主要擴容因子,允許在單個執行分片上進行擴展,並簡化了總體設計。

Eth1 分片設計假設通過信標鏈與數據分片進行通信。如果具有多個執行分片的第二階段(Phase 2)在以後推出,那麼這種方法將是有意義的。由於當前主要集中在以rollup為中心的路線圖上,將以太坊1.0放在一個專用的分片上(也就是說,獨立於信標鏈)給共識層帶來了不必要的複雜性,並增加了在分片上發布數據以及在Eth1 中訪問它們之間的延遲。

我們建議通過將eth1數據(交易、狀態根等)嵌入到信標區塊中,並強制信標鏈提議者生成可執行的eth1數據來消除這種複雜性。這會把eth1執行和有效性作為共識的一等公民。

 

提案概述

 

  1. Eth1引擎由系統中的每個驗證者負責維護。
  2. 當驗證者打算提出一個信標區塊時,它會要求eth1引擎創建eth1數據。然後,Eth1數據會被嵌入正在生成的信標區塊體當中。
  3. 如果eth1數據無效,它也會使得承載它的信標區塊失效。

 

Eth1引擎修改

 根據之前的方案,Eth1分片中樞、Eth1引擎以及eth2客戶端是鬆散結合併通過RPC協議進行通信的(請檢查Eth1+eth2客戶端關係以了解更多詳細信息)。Eth1引擎繼續維護交易池和需要自己網路堆棧的狀態下載器,它還應該保存eth1區塊的存儲。

當前的提案刪除了eht1區塊的概念,eth1引擎有兩種潛在的方法來處理這種變化:

  1. 由信標區塊攜帶的eth1數據合成生成eth1區塊;
  2. 修改引擎,使交易處理不需要eth1區塊,而是使用eth1數據;

前者看起來比後者要更容易實現,它允許更快地將eth1客戶端轉換為eth1引擎,並且已經被eth1分片poc證明。我們使用術語「可執行數據」來表示包括eth1狀態根、交易列表(包括收據根和bloom過濾器)、coinbase、時間戳、區塊哈希以及eth1狀態轉換功能所需的所有其他數據位的數據。在eth2規範中,它可能如下所示:

class ExecutableData(Container): coinbase: bytes20 # Eth1 address that collects txs fees state_root: bytes32 gas_limit: uint64 gas_used: uint64 transactions: [Transaction, MAX_TRANSACTIONS] receipts_root: bytes32 logs_bloom: ByteList[LOGS_BLOOM_SIZE] eth1引擎的職責列表與我們以前對eth1分片的職責類似。主要的觀察項有:

  1. 交易執行,eth2客戶端向eth1引擎發送可執行數據。eth1引擎通過處理數據更新其內部內部狀態,如果共識檢查通過,則返回true,否則返回false。高級用例,比如即時存款處理,也可能需要結果中的完整交易憑證。
  2. 交易池維護,Eth1引擎使用ETH網路協議來廣播和跟蹤網路中的交易。等待中的交易保存在mempool中,用於創建新的可執行數據。
  3. 可執行數據創建,Eth2客戶端發送先前的區塊哈希以及eth1狀態根、coinbase、時間戳以及創建可執行數據所需的所有其他信息(交易列表除外)。Eth1引擎返回ExcecutableData的實例。
  4. 狀態管理,Eth1引擎維護狀態存儲以能夠運行Eth1狀態執行函數。4、1 它涉及到最終觸發的狀態trie修剪機制,需要基於信標區塊鏈的狀態trie版本控制;注意:長時間沒有最終結果,會導致存儲中出現大量垃圾,因此會消耗額外的磁碟空間。 4、2 當無狀態執行和「區塊創建」就緒時,eth1引擎可選擇作為純狀態轉換功能運行,它可以禁用狀態存儲,從而減少對磁碟空間的需求。
  5. JSON-RPC支持,為了便於使用及採用,保留對以太坊JSON-RPC的支持非常重要。這一責任將由eth2客戶端和eth1引擎分擔,因為eth1引擎可能會失去獨立處理JSON-RPC端點子集的能力,例如基於區塊號和哈希的調用。這種分離將在以後解決。

 

信標區塊處理

 ExecutableData結構替換信標區塊體中的Eth1Data,此外,信標鏈和eth1的同步處理可實現即時存入,因此,可以從信標區塊主體移除deposit。

更新的信標區塊體(block body):

class ExecutableBeaconBlockBody(Container): randao_reveal: BLSSignature executable_data: ExecutableData # Eth1 executable data graffiti: Bytes32 # Arbitrary data # Operations proposer_slashings: List[ProposerSlashing, MAX_PROPOSER_SLASHINGS] attester_slashings: List[AttesterSlashing, MAX_ATTESTER_SLASHINGS] attestations: List[Attestation, MAX_ATTESTATIONS] voluntary_exits: List[SignedVoluntaryExit, MAX_VOLUNTARY_EXITS] 我們按照以下方式修改process_block函數: def process_block(state: BeaconState, block: BeaconBlock) -> None: process_block_header(state, block) process_randao(state, block.body) # process_eth1_data(state, block.body) used to be here process_operations(state, block.body) process_executable_data(state, block.body) process_operations完成後處理可執行數據是合理的,因為在許多地方,操作處理可能會使整個區塊失效。不過,這種方法可能是次優的,這為客戶端優化留下了空間。 

在EVM中訪問信標狀態

 我們更改用於返回eth1區塊哈希的BLOCKHASH操作碼的語義。現在,它返回的是信標區塊根,這允許檢查從256個slot開始直到前一個slot的信標狀態或區塊中包含的那些數據的證明。

非同步狀態讀取有一個主要缺點。 客戶端必須要等待一個區塊,才能創建帶有鏈接到該區塊的證明或它產生的狀態根的交易。 簡而言之,非同步狀態訪問至少要延遲一個slot的時間。

 

直接狀態訪問

 假設eth1引擎可以訪問表示整個信標狀態的merkle樹。然後,可以使用操作碼READBEACONSTATEDATA(gindex) 來提供EVM功能,以提供對任何信標狀態的直接訪問。此操作碼具有幾個不錯的屬性。首先,這種讀取的複雜性取決於gindex值,並且易於計算,因此可以輕鬆推斷出gas價格。其次,返回數據的大小為32位元組,這完全適合EVM。

有了這個操作碼,人們可以創建一個更高級別的信標狀態訪問器庫,從而為智能合約提供便捷的API。例如:

v = create_validator_accessor(index) # creates an accessor v.get_balance() # returns balance of the validator v.is_slashed() # returns the value of slashed flag 該模型消除了狀態訪問延遲。因此,通過對信標鏈操作和eth1執行適當的排序,可以在slot N中訪問到slot N-1 分片數據的交聯(crosslink),從而允許rollup以最快的方式證明數據包含在內。而且,這種方法還降低了信標狀態讀取的數據及計算複雜性。

注意:可能值得一開始就使READBEACONSTATEDATA操作碼的語義獨立於特定的承諾方案(即merkle樹),以便於輕鬆升級。

直接訪問的成本增加了eth1引擎的複雜性。讀取信標狀態的能力可以通過不同的方式實現:

  1. 傳遞狀態以及可執行數據。這種方法的主要問題在於處理大的狀態副本,如果將直接訪問限制為狀態數據的一個子集,而該狀態數據的子集需要將一小部分狀態傳遞給執行,那麼它可能會起作用。
  2. 雙工通信信道,有了一個雙工通道,eth1引擎將能夠向信標節點請求EVM同步請求的狀態片段。將能夠同步向信標節點詢問EVM請求的狀態。 根據通道的設置方式,延遲可能會成為執行具有信標狀態讀取的交易的瓶頸。
  3. 嵌入式eth1引擎,如果eth1引擎被嵌入到信標節點中(例如,作為一個共享庫),它可以通過該節點提供的主機功能從同一內存空間讀取狀態。

 

分析

 1、網路帶寬目前的提案通過可執行數據的大小來擴大信標區塊。不過,由於該提案允許使用高級存入方案,因此有可能刪除Deposit操作。根據區塊利用率,以及平均eth1區塊大小,預期的增長在10%到20%之間,這對網路介面要求的影響很小。

值得注意的是,如果rollup使用CALLDATA,那麼eth1區塊的大小在最壞的情況下可能會增長到200kb(gas限制為1200萬),從而使可執行信標區塊大小在300kb左右,增加了60%。

2、區塊處理時間平均處理時間如下:

  1. 信標區塊 12 ms
  2. Epoch 64 ms
  3. 以太坊主網區塊 200 ms

很難推斷出信標鏈的處理時間,尤其是在驗證器集和交聯(crosslink )處理相對較大的情況下(因為分片已推出)。也許在某個時候,epoch處理將與eth1執行幾乎同時進行。減少epoch邊界處處理時間的潛在方法,是在epoch的最後一個區塊及時到達的情況下,不必等待下一個slot的開始而提前處理epoch。非同步狀態訪問模型允許進行另一種優化。在這種情況下,process_executable_data可以與主process_block甚至process_epoch有效負載並行運行。

 

改善這項設計

 有人可能會說,當前的提案會把執行模型設置為一成不變的,並降低了在需要時引入更多可執行分片的能力。

另一方面,一些可執行分片引入了諸如跨分片通信、共享帳戶空間等問題,而這些問題與執行模型的預期轉變同樣重要且難以解決。

 

對於該提案,Vitalik Buterin評論稱:

「幹得好!我確實擔心eth1執行和信標鏈之間的同步交互。原因是使用同步交互雖然更簡單,但會永久性地規定了驗證eth2區塊需要運行相應的eth1執行的要求。例如,它排除了允許eth2節點成為eth1無狀態客戶端等替代方法,並且僅驗證eth1方是否是指定委員會的一部分。 因此,即使可執行數據直接在信標區塊中,我也會傾向於保持可執行數據與信標鏈邏輯之間的通信完全非同步。」

冷萃財經原創,作者:Awing,轉載請註明出處:https://www.lccjd.top/2020/11/28/%e4%b8%80%e6%96%87%e4%ba%86%e8%a7%a3%e4%bb%a5%e5%a4%aa%e5%9d%8a2-0%e5%8f%af%e6%89%a7%e8%a1%8c%e4%bf%a1%e6%a0%87%e9%93%be%e6%8f%90%e6%a1%88/?variant=zh-tw

0

掃一掃,分享到微信

猜你喜歡

文章評論

電子郵件地址不會被公開。 必填項已用*標註

後發表評論

    上一篇

    Compound上9000萬美元被清算,又是預言機惹禍?

    下一篇

    以太坊進入2.0時代,能否帶來新的財富效應?

    微信公眾號

    微信公眾號