作者:Vitalik Buterin,Unitimes團隊翻譯

問題描述請參閱:“ 關於分片之間 ETH 轉賬的問題描述 “。

我們可以創建一個執行環境 (executive environment),稱其爲“ 費用環境 ”,其主要作用是 存儲其他執行環境持有的 ETH 餘額 。該執行環境包含一個 最小的餘額記錄和跨分片 收據 系統從而允許 ETH 在分片之間快速轉賬

前提

我們假設一個區塊包含了(i)數據和(ii)訪問該數據的執行環境列表。列表中的執行環境被依次調用,並且所有執行環境都可以訪問整個數據(之後每個執行環境將只能訪問部分數據,但允許每個執行環境訪問整個區塊數據並不需要付出額外的代價)。 執行環境還可以訪問已處理完畢的 “auxiliary outputs” (輔助輸出)。

我們假設區塊生產者都“瞭解”該費用環境,從某種意義上說,就是他們知道何時在該費用環境中接受資金

預期的區塊結構

每個區塊將包含一個或多個分段 (segments),每個分段專屬於某個執行環境,其中包含了在該執行環境中進行的交易。執行環境本身會生成一個輔助輸出,表示這些執行環境想要進行的跨分片轉賬的概要。 去往同一目的地(分片 / 執行環境)的交易進入批量處理

在區塊的末尾,有一個費用環境的 專用分段 ,其中存儲了在該區塊中存在分段的所有執行環境的 Merkle 多證明(請注意,那些先前的執行環境會檢查這個部分並驗證其餘額的正確性和充分性[充分性檢查將要求執行環境也檢查之前執行環境的輔助輸出])。

該費用環境將發佈一個 狀態根  (state root),該狀態根包含了此分片內具有更新餘額的  Merkle 樹 ,以及一個包含了所有跨分片轉賬的 收據根 (receipt root)。收據根的設計要求路徑基於分片和執行環境的組合進行編碼,而葉子節點的編碼還包含轉賬的金額。

例如,如果分片A上的一個區塊包含單個交易[Alice --- {50 ETH} ---> Bob],而接收方 Bob 在另一個分片B上,如此則會產生兩個收據:(i) 特定於執行環境的允許 Bob 提取 ETH 的 收據 ,以及 (ii) 該執行環境將生成一個 輔助輸出  {B, EE_id, 50},然後費用環境將 {A,EE_id}的餘額減少50, 發佈更新的狀態根 ,並使用單個元素{key = (B,EE_id), value = 50}創建一個 收據樹 。如果同一執行環境中有N個交易,則只會產生N + 1個分支;開銷是恆定的。

接收收據

現在,讓我們擴展上述方案以允許接收收據。現在,費用環境的狀態包含第三個 ,一個爲字段的 Merkle 根,爲每個分片和每個 slot 標記該 slot 的收據是否已經處理。爲了提高效率,我們希望對應於同一 slot 的比特位並排存放,因此在“理想情況”下,我們只需要一個 Merkle 分支即可立即處理收據。

區塊中用於費用環境的部分還將聲明位字段對應的分支。對於每個分支,比特位默認爲0,預平衡的Merkle證明也需要顯示相應的執行環境餘額,費用環境還需要提供相應收據的Merkle證明。更新後的預平衡根將根據收據增加執行環境餘額,同時將比特位設置爲1。

同時,執行環境本身將執行一個規則,即只有當表示執行環境級別的ETH轉賬已完成的相應Merkle分支位於費用環境的分段中時,才認爲Alice到Bob的收據有效。這樣可以防止Bob在沒有執行環境的情況下接收ETH。請注意,有時在同一時隙中創建的具有相同起始和目標分片的收據將在不同的時隙中接收。在這種情況下,必須再次包含對費用執行環境位域的證明,表明收據包含在時隙n中,並且在所有包含項中,該位域已被設置爲1,因此執行環境級別的餘額增加不會發生多次。

費用和兌現

執行環境還可以在其輔助輸出中指定他們爲交易費支付的ETH數量。驗證者還可以在收費環境中擁有帳戶可以接收此ETH。收費環境還允許驗證者提取ETH。

開銷分析

假設區塊鏈相對完整且活躍,每個塊運行約3個執行環境,並且每個分片向其他分片發送事務,則可以計算開銷如下:

·平衡證明:3個分支,假設2^16個執行環境佔用約15 * 3 = 45個hash即1440字節

·位域:假設平均而言,所有收據均在5個時隙內聲明。這要求最後5個時隙包含所有分片的證明;這些位是連續的,因此對於位域分段來說,佔用320個字節+一個1024字節的分支= 1356字節。 N個時隙後的單個收據將增加log(N)* 32個字節。

·轉移價值證明:假設有216個執行環境和64個分片,則一個長度爲22的Merkle分支代表一個(分片,執行環境)密鑰。總共有64個,因此我們得到22 * 64個hash即22528字節。請注意,我們可以使用更聰明的辦法,將常用的執行環境放在樹上更末端的位置,將減少一半以上的存儲空間。

因此,總的來說,每個分片塊使用約10-25 kB的空間存儲與費用環境相關的證明。

更新

如何用nonce替換位域請參考 評論內容

相關文章