QuarkChain中的分片——深入狀態劃分

買賣虛擬貨幣
QuarkChai分片設計概述在現有區塊鏈模型的基礎上,QuarkChain對現有模型進行了如下改進:· (狀態劃分): QuarkChain劃分智慧合約,即如果發生重組事件,則將智慧合約放入不同的分片中。智慧合約包含程式碼和儲存,並且資料大小可能比使用者帳戶大得多(考慮一個具有大量地址到平衡對映的ERc20)。· (狀態劃分):我們不對使用者帳戶進行分割槽,使用者可以透過跨分片交易輕鬆地將其帳戶狀態(主要是餘額)移動到另一個分片中。這允許擁有私鑰的使用者訪問所有分片中的所有資源。· (原子性):每個智慧合約都有一個分片鍵(在我們的程式碼庫中是full分片Id),所有具有相同分片鍵的智慧合約上的任何批操作都是原子性的。此外,一個智慧合約試圖訪問另一個具有不同分片金鑰的智慧合約是被禁止的。· (均衡的負載/大小):透過假設智慧合約的分片鍵是均勻分佈的,可以期望智慧合約在不同的分片中是均勻分佈的。
· (重新組合分片):為了以低遷移成本新增更多的分片,我們根據智慧合約中的分片鍵將一個分片拆分為兩個分片。這消除了來自其他預重新組合分片的資料遷移,從而簡化了重新組合的分片。· (重新組合分片):智慧合約的行為在重新組合分片之前和之後是相同的,即,讀取智慧合約的結果是相同的值,而寫入智慧合約的結果會在相同的系統狀態進行重新分片之前和之後發生變化。系統狀態和QuarkChain的狀態劃分為了支援QuarkChain中一批CRUD操作的原子性,QuarkChain透過在每個地址新增32位分片金鑰,重新定義了使用者賬號地址和智慧合約:地址:= RIPEMD160(公鑰)+ 分片金鑰,QuarkChai的地址是192位的資料,我們將地址的前160位作為QuarkChai地址的接收方。
在一個QuarkChai網路中,分片的數量(分片大小)是2的乘方,而一個回收操作將使網路中的分片數量加倍。給定分片大小,分片將透過以下方式進行索引:分片Id:=分片鍵%分片大小。分片中的狀態是鍵-值對映,其中鍵是地址和值包含的接收者· 平衡;· 現時標誌;· 程式碼;
· 儲存;· 分片金鑰。其中分片鍵是在建立鍵值對時設定的,之後是不可變的。使用地址中的附加分片金鑰,使用者(或收件人)可以使用單個私鑰管理所有分片中的所有地址。QuarkChain交易資產轉讓交易
餘額轉移交易取決於源地址和目標地址:· (分片交易):如果兩個地址具有相同的分片id(甚至分片鍵也不同),則傳輸是一個分片交易,並且該交易將僅更新同一分片中的收件人的餘額。 ·  (跨分片交易):如果兩個地址具有不同的切分id,則傳輸是一個跨分片交易,並且交易的原子性需要進一步協調。幸運的是,這樣的交易比傳統的跨鏈交易簡單得多,因為兩個分片都執行相同的加密貨幣(QKC)。跨分片交易的細節將在另一篇文章中討論。智慧合約交易智慧合約交易必須在相同的分片中發出,即,源使用者帳戶的分片id必須與目標智慧合約相同。一個智慧合約可以呼叫另一個智慧合約(透過提供另一個智慧合約的接收者,即,地址在EVM中,並且在程式碼中保持EVM向後相容)具有相同的分片鍵。但是,如果智慧合約具有不同的分片金鑰,則該合約呼叫將失敗,此時該呼叫相當於呼叫一個具有以下彙編程式碼的智慧合約:PUSH 0x0
DUP1REVERT由於具有相同分片鍵的智慧合約總是被分割槽到相同的分片,因此無論如何分割槽系統狀態,智慧合約(讀/寫)的行為都是相同的(參見QuarkChain中的Reshard部分了解更多細節)。在QuarkChain中重新組合分片一個重新組合分片操作將把每個分片分割成兩個獨立的分片,分片的大小將因此增加一倍。在將分片大小加倍之後,使用者帳戶/智慧合約的目的地將由新分片id中的額外有效位標識。透過假設使用者帳戶/智慧合約的分片金鑰是均勻分佈的,一半的使用者帳戶/智慧合約應該被劃分到一個新的分片,其餘的應該被劃分到另一個分片。
此外,透過將程式碼替換為還原始碼並使其儲存為空,分割後的分片仍然可以包含另一個分割後的分片的智慧合約。這些虛擬的智慧合約確保了新分片中的智慧合約仍然無法呼叫位於相同分片但具有不同  分片鍵的智慧合約。如果當前處理分片的節點容量不足,可以透過遷移分片的狀態在網路中新增一個新節點來處理新的分片,從而可以隨著分片/節點數量的增加而增加系統容量。這是透過叢集實現的,這將在以後的文章中討論。QuarkChain中的分片鍵QuarkChain中負載平衡的關鍵是確保所有智慧合約分佈在所有分片上。由於分片金鑰在建立智慧合約之後是不可變的,所以在建立期間選擇金鑰非常重要。首先,如果要建立的智慧合約依賴於其他智慧合約,那麼分片金鑰必須與依賴的智慧合約相同。其次,如果智慧合約不依賴於任何其他智慧合約,使用者(或錢包)可以自由選擇任何分片金鑰,否則系統可能會實施一些規則:
· 隨機生成分片的關鍵· 源地址“收件人”中的任何32位· 錢包的IP地址。前兩個選擇可能導致共識性分佈的分片鍵。但是,假設有成百上千個分片呢?想要訪問網路中的任何智慧合約的使用者可能需要頻繁的跨分片交易或維護多個餘額,這會降低分片的效率或惡化使用者體驗。使用IP地址可以透過將智慧合約與地理資訊分組來緩解這個問題。如果使用者與智慧合約的互動與地理位置相關(例如,與本地商品/服務互動),那麼使用者只需在與使用者居住或前往的位置相關的分片中維持其餘部分,就可能節省大量不必要的跨片交易並簡化使用者賬戶管理。QuarkChain和谷歌的BigTable比較

QuarkChain中的許多分片設計都受到了谷歌BigTable的啟發,它們有很多相似之處,因為它們本質上都是鍵值儲存。下表對它們進行了比較。

除了相似之處,QuarkChain與BigTable還有幾個主要的不同之處:

· QuarkChain本身支援跨分片交易,它將餘額從一個分片中的一個帳戶轉移到另一個切分中的另一個帳戶,而BigTable不支援跨多個鍵的任何交易。

· BigTable允許合併兩個相鄰的片(分片)到一個片(比如兩個表因為刪除而變得很小)。相反,刪除操作(例如自銷燬)在區塊鏈中很少使用,因此合併操作不是必需的。這大大簡化了QuarkChain的系統模型和威脅模型(如重放攻擊)。

總結

在現有可伸縮系統的啟發下,我們提出了一個新的區塊鏈系統模型,並描述了我們的分片方案。此外,我們還將我們提出的模型與谷歌的BigTable進行了比較。在下一篇文章中,我們將討論如何建立共識來支援分片和相應的QuarkChain威脅模型。請等待以後的更新。

免責聲明:

  1. 本文版權歸原作者所有,僅代表作者本人觀點,不代表鏈報觀點或立場。
  2. 如發現文章、圖片等侵權行爲,侵權責任將由作者本人承擔。
  3. 鏈報僅提供相關項目信息,不構成任何投資建議

推荐阅读

;