CESS 研發總監:我們為何為 Substrate 開發存儲 Pallet

CESS
2024-08-16 16:15:24
收藏
CESS 已完成為 Substrate 開發的存儲 pallet ,及開發者使用指南

CESS 為 Substrate 開發的存儲 pallet 已開發完成,使用 Substrate 開發項目的團隊均可以在 CESS 主網上線後使用該 pallet 實現直接調用 CESS 的存儲服務。讓我們來共同回顧一下 CESS 研發總監 Swowk 當初對為何要開發存儲 pallet 的思考。

1. 背景

作為一個多功能的區塊鏈框架,Substrate 有多個模塊(又名 pallet)供開發人員使用。從賬戶和資產等資源管理到隨機數生成器和調度器等實用工具,這些現有的托盤可以滿足大多數開發者應用場景的需求。但是,仍有改進的餘地。

近期我們有一個在 Substrate 上實現一個數據存儲服務的需求,但在檢查了所有現有的 pallet 後,我們並未找到一個滿足我們需求的 pallet。所以我們想開發一個定制 pallet 來解決這個問題。

我們不在這裡討論利基主義的東西,現實中應用程序在運行過程中會不斷消耗和生成各種數據,無論是系統、用戶還是臨時數據,這是一個常見的場景。許多 DApp 有大量需要鏈下數據存儲服務的場景,例如 NFT。選擇的存儲服務質量將直接影響整個應用程序的性能和可靠性。

因此,我們希望為 Substrate/Polkadot 社區提供專用於與當前 Substrate API 兼容的存儲服務的 pallet,開發人員只需添加少量代碼更改即可利用 CESS 穩定和安全的數據存儲。我們相信這將進一步提升使用 Substrate 時的開發體驗並豐富 Polkadot 生態系統。

2. 當前方案的缺陷

現有的 Substrate FRAME 中只有一個與數據存儲相關的 pallet,即 Transaction Storage Pallet。它支持與 Substrate 並行運行 IPFS 節點,並允許 IPFS 在將數據放入 Substrate 存儲後對其進行檢索。但是,由於其固有的特性和以下幾個方面的缺陷,其應用範圍受到很大限制:

  • 數據需要上傳到區塊鏈網絡。雖然這些數據實際上並沒有存儲在鏈上,但它們仍然會產生額外的 Gas 成本和擁塞,不適合大文件存儲;
  • 所有驗證者節點都需要為自己建立 IPFS 服務,受到很多限制;
  • 開發難度大,基於 Substrate 的代碼需要大量修改;
  • 該 pallet 只支持 Substrate 端的文件上傳,查看者需要通過 IPFS 客戶端檢索它。

3. CESS 的新方案

我們設計並實現了基於 Substrate 的數據存儲服務。一方面,驗證者節點不需要啟動額外的服務,也不需要對基於基板的代碼進行重大修改。因此,無論是新建鏈還是現有鏈,開發者都可以輕鬆集成我們的存儲服務。

另一方面,通過自定義存儲 REST 組件,用戶可以方便地上傳和下載數據,而無需安裝額外的客戶端程序。

4. 設計架構

我們的提案架構如下圖所示,由 Data Storage Pallet 和定制的 Storage Sidecar 組成,該框架是受到了 Substrate API Sidecar(https://github.com/paritytech/substrate-api-sidecar)的啟發。

數據存儲 pallet:實現存儲數據的記錄和管理。該 pallet 實現與元數據相關的功能,例如根數據管理、數據所有者管理和關於存儲數據的數據分類。

定制存儲 Sidecar:提供 RESTful 服務與 Data Storage Pallet 交互。與 Substrate API Sidecar 不同的是,Storage Sidecar 除了與基於 Substrate 的區塊鏈交互的基本功能外,還封裝了與存儲相關的 API,包括數據存儲和數據檢索。用戶傳輸的數據最終會通過該接口存儲在 CESS 存儲系統中。

5. 核心功能

數據存儲

  • 用戶調用定制存儲 Sidecar 的數據存儲 API 上傳數據文件;
  • 調用封裝好的 CESS API,將數據轉發給 CESS;
  • 一旦確認數據已經寫入,定制存儲 Sidecar 將調用 Extrinsic 記錄鏈上數據文件的相關信息;
  • CESS 存儲系統在其整個生命周期內維護數據的完整性和隱私性。

數據檢索

  • 用戶調用定制存儲 Sidecar 的存儲 API 獲取目標數據;
  • 利用定制 Storage Sidecar,查詢鏈上數據路由信息;
  • 使用路由信息調用 CESS 數據檢索 API;
  • 從 CESS 存儲系統中檢索並返回目標數據;
  • 將目標數據返回到定制的 Storage Sidecar;
  • 定制的 Storage Sidecar 必要時更新鏈上信息;
  • 將目標數據返回給用戶。

6. 使用方法

事實上,開發者只需兩步就可以體驗 CESS 存儲服務。

  • Step 1將 Data Store Pallet 集成至 FRAME

在文本編輯器中從您的代碼中打開 runtime/Cargo.toml 配置文件;

通過將 crate 添加到依賴項列表中,導入 pallet-data-store crate 以使其可用於運行時;

pallet-data-store = { default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "main" }

將以下代碼添加進 features 模塊,可以通過將 pallet-data-store crate 加入 features 列表從而使其包含進 std feature; >

[features]
default = ['std']
std = [
    ...
    'pallet-aura/std',
    'pallet-balances/std',
    # Add this line
    "pallet-data-store/std",
    ...
]

在文本編輯器中打開 runtime/src/lib.rs 文件;

在 Balances 代碼的最後一行之後,為 Data Store pallet 添加以下代碼:

parameter_types! {
    pub const StringLimit: u32 = 1024;
}
/// Configure the pallet-data-store.
impl pallet_data_store::Config for Runtime { 
    type Event = Event;
    type StringLimit = StringLimit;
    type WeightInfo =      pallet_data_store::weights::DataStoreWeight<Runtime>;
}

將 Data Store 添加到 construct_runtime! 宏

// Create the runtime by composing the FRAME pallets that were previously configured.

通過運行以下命令以發布模式編譯節點

cargo build --release
  • Step 2使用定制 Storage Sidecar 存儲數據

當 Runtime FRAME 集成完成後,您現在可以通過我們的 Data Store Sidecar(https://github.com/CESSProject/data-store-sidecar)與您的區塊鏈網絡進行交互並同時使用 CESS 存儲服務。以下是在 Sidecar 中使用 CESS 存儲功能的教程:

首先,請根據此鏈接(https://github.com/CESSProject/data-store-sidecar#source-code-installation-and-usage)的內容完成安裝和啟動。

當然,我們也支持使用 Docker 進行快速部署(https://github.com/CESSProject/data-store-sidecar#docker)。

服務啟動成功後,就可以直接調用了。有關用戶指南,請參閱 API 文檔(https://example-datastore.cess.cloud/docs/)。

鏈捕手ChainCatcher提醒,請廣大讀者理性看待區塊鏈,切實提高風險意識,警惕各類虛擬代幣發行與炒作,站內所有內容僅係市場信息或相關方觀點,不構成任何形式投資建議。如發現站內內容含敏感信息,可點擊“舉報”,我們會及時處理。
ChainCatcher 與創新者共建Web3世界